0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

上位机实战应用之Modbus通信是什么

汽车电子技术 来源: dotNet工控上位机 作者:新阁教育付工 2023-02-22 15:34 次阅读

图片

**前言

**

图片

算了一下,今年是我跟Modbus相识的第10年,从最开始的简单应用到协议了解,从协议开发到协议应用,这个陪伴了10年的协议,它一直没变,变的只是我对它的理解和认识。

我一直认为Modbus协议的存在有它的历史意义,也就是说即使没有Modbus,也可能会出一个ABUS、DBUS之类的协议,因为控制器与控制器之间通信,一个标准协议,会大大提供开发效率。

因此,现在国产的各种品牌PLC,比如台达、汇川、信捷等,这些PLC都是支持Modbus协议,也就是说,学会了Modbus协议,我们可以很轻松与这些PLC实现数据通信。

文章有点长,感谢大家耐心阅读,文末有福利!

Modbus协议能够成为工业领域应用最广泛的协议,它必须具备以下几个特点:

1、免费:这个是最大的前提,任何产品都是一样,只有通过免费才能获取到前期最大的使用量。

2、简单:Modbus协议帧格式简单紧凑,用户容易理解,厂商容易集成。

3、接口:Modbus协议只是一种规约,属于应用层的协议,因此不仅可以应用在串口(485/232/422),也可以在以太网、光纤、蓝牙、无线上传输。

图片

**存储区分类

**

图片

我一般介绍Modbus协议的时候,喜欢站在Modbus规约制定者的角度,结合一些事物来对比说明,这样对很多人来说,可能会更加容易理解。

假设没有Modbus协议,我们想要制定一个协议,我们首先要明确,协议的目的是为了数据传输,因此,为了更好地存储不同的数据类型,我们会将布尔和非布尔的数据分开存储,因此,就有了线圈和寄存器的概念。

线圈和寄存器,这个经常被很多人诟病,认为不应该这么翻译,感觉不容易理解。从电气角度来看,在电气控制回路中,一般都是靠接触器或中间继电器来实现控制,接触器或中继最终靠的是线圈的得电和失电来控制触点闭合和断开,因此用线圈表示布尔量;而寄存器在计算机中,就是用来存储数据的,因此非布尔的数据放在寄存器里。

这个可以跟PLC的存储区来进行对比,西门子的I/Q/M都是线圈,V/T/C/DB都是寄存器,三菱的X/Y都是线圈,D/W/H都是寄存器,欧姆龙的CIO是线圈,D/W/H是寄存器。

以西门子为例,虽然I和Q都表示线圈,但是他们的分工是不同的,I表示输入,Q表示输出,输入意味着该存储区里的值必须由外部设备接入,是只读的,输出表示输出结果给外部设备,是可读可写的。

因此,Modbus的线圈和寄存器应该也按照只读、读写来进一步细分,因此这就形成了Modbus的存储区,如下表所示:

序号 读写 存储类型 存储区名称
1 只读 线圈 输入线圈
2 读写 线圈 输出线圈
3 只读 寄存器 输入寄存器
4 读写 寄存器 保持寄存器

图片

**存储区代号

**

图片

然而,上面表格里的存储区名称是一个全称,开发和使用中使用全称会比较麻烦,因此需要给他们取个别名,就像西门子的I/Q/M一样,这些都是西门子给存储区取的一个代号,所以Modbus也要给这些存储区取一个代号,干脆直接用数字吧,于是,就有了下面的规定:

存储区名称 存储区代号
输入线圈 1区
输出线圈 0区
输入寄存器 3区
保持寄存器 4区

这个其实就跟我们的姓名和小名一样,姓名是正式场合使用,日常场合,我们一般可以使用小名。

图片

**存储区范围

**

图片

无论是什么存储区,都会有一个范围的限制,就像西门子的M区可能最大到8192,三菱的X区最大到2048,Modbus的每个存储区也应该规定一个范围,不能无限制使用。

Modbus是这么规定的,每个存储区的最大范围是65536,这个范围是很大的。

我们再以三菱的X区为例,如果最大范围是2048,那么意味着我们只能访问X0-X2047这些地址,我们这里说的X0、X2047,就是我们常说的PLC地址,那么这个地址是怎么组成的呢?它是由存储区编号加上一个地址索引组成,我们把这样的PLC地址,理解为绝对地址,后面的地址索引,理解为相对地址。

所谓绝对地址,就是我们仅仅通过一个地址名称,就能知道是什么存储区的第几个数据,而这个第几个,就是我们说的相对地址,因此绝对地址是唯一的,相对地址,每个存储区都有。

那么对于Modbus来说,我们的绝对地址和相对地址是怎么样的呢?

我们仍然遵从公式:绝对地址=区号+相对地址。

但是也会有一些不一样的地方,以保持型寄存器为例,第一个绝对地址是400001,这个地方不是400000,这个是由Modbus规约决定的,其它存储区也是类似的。

因此,Modbus存储区范围如下图所示:

图片

正如上文所说,65536这个范围是很大的,但在实际使用中,我们一般用不了这么多地址,一般情况下,10000以内就已经足够我们使用了,因此,为了方便起见,我们有一种短的地址模型,如下图所示:

图片

图片

**功能码

**

图片

功能码这个概念,我们可以这么去理解,先回到我们的初衷,协议的目的是为了数据传输,也就是为了读取数据和写入数据,我们已经确定好4个存储区,存储不同的数据类型,那么接下来我们就要对这些存储区进行读写,那么可能会产生很多种不同的行为,比如读取输入线圈存储区、读取输出线圈存储区,这就是两种不同的行为,同样的,如果用读取输入线圈存储区、读取输出线圈存储区,会比较麻烦,那么我们干脆给每种形成指定一个代号,那么这种代号就是功能码。

我们再来探讨一下,究竟有多少种不同的行为呢?

读取和写入是2种行为,存储区有4个,但是我们知道输入线圈和输入寄存器是只读的,因此不能进行写入,除去这2种的话,应该会产生6种不同的行为,如下图所示:

行为序号 具体行为
1 读取输入线圈
2 读取输出线圈
3 读取输入寄存器
4 读取保持寄存器
5 写入输出线圈
6 写入保持寄存器

然而,Modbus规约将写入输出线圈和写入保持寄存器这2种行为,又进一步做了细分,包括写入单个和写入多个,因此原来的6种行为就变成了8种行为,同时给每种行为设置一个代号,就形成了下图所示的功能码列表:

功能码 功能说明
0x01 读取输出线圈
0x02 读取输入线圈
0x03 读取保持寄存器
0x04 读取输入寄存器
0x05 写入单个线圈
0x06 写入单个寄存器
0x0F 写入多个线圈
0x10 写入多个寄存器

Modbus规约中的功能码其实不止这8个,还有一些功能码是用于诊断或异常码,但是一般很少使用,这8种功能码是最主要的核心功能码。

图片

**协议分类

**

图片

Modbus严格来说,是一个标准化的规约,而不是一个具体协议。我们常说的设备A和设备B之间通过Modbus协议来通信,这句话其实是不严谨的。

Modbus规约上有三种不同的协议报文帧,分别是ModbusRtu、ModbusAscii、ModbusTcp。

一般来说,ModbusRtu和ModbusAscii是运行在串口上的协议,ModbusTcp是运行

在以太网上的协议,但是这并非绝对的,我们也可以将ModbusRtu、ModbusAscii运行在以太网或光纤上使用,同样的,在串口网络里,我们也可以使用ModbusTcp的协议,因为协议只是一种规范,并不限制通信介质。

图片

**报文格式

**

前面我们说了Modbus有三种不同的协议,分别是ModbusRtu、ModbusAscii、ModbusTcp,那么这三种协议的报文格式也是不同的,下面分别对这三种协议的报文格式进行说明:

  1. ModbusRtu的报文格式如下:

第一部分:从站地址,占1个字节

第二部分:功能码,占1个字节

第三部分:数据部分,占N个字节

第四部分:校验部分,CRC校验,占2个字节

  1. ModbusAscii的报文格式如下:

第一部分:开始字符(:)

第二部分:从站地址,占2个字节

第三部分:功能码,占2个字节

第四部分:数据部分,占N个字节

第五部分:校验部分,LRC校验,占2个字节

第六部分:结束字符(CR LF)

  1. ModbusTcp的报文格式如下:

第一部分:事务处理标识符,占2个字节

第二部分:协议标识符,占2个字节

第三部分:长度,占2个字节

第四部分:单元标识符,占1个字节

第五部分:功能码,占1个字节

第六部分:数据部分,占N个字节

图片

调试软件

Modbus学习成本很低,因为协议是公开免费的,我们可以直接获取到《Modbus中文协议文档》。

同时,也有很多调试软件可以进行仿真调试,因此我们可以在不购买任何硬件的情况下,就把Modbus协议学好。

Modbus调试软件可以通过本公众号后台回复201直接获取

Modbus 学习必须要配合相关的调试软件,可以达到事半功倍的效果,Modbus

学习必备的三大神器分别是 ModbusPoll、ModbusSlave 及 VSPD,ModbusPoll 软件主要用于仿真 Modbus主站或 Modbus 客户端,ModbusSlave 软件主要用于仿真 Modbus 从站或 Modbus 服务器,而 VSPD 全称 Configure Virtual Serial Port Driver,是用来给电脑创建虚拟串口使用的。

即使我们想要结合硬件,支持Modbus协议的设备也有很多,各种品牌PLC、各种品牌的仪表、各种温湿度传感器、流量计等都可以很好地支持Modbus协议。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16197

    浏览量

    177392
  • ModBus协议
    +关注

    关注

    3

    文章

    174

    浏览量

    33387
  • ABUS
    +关注

    关注

    0

    文章

    2

    浏览量

    14152
收藏 人收藏

    评论

    相关推荐

    上位通过Modbus转Profinet网关与变频器通讯应用在卷材机上案例

    通过Modbus转Profinet网关(XD-MDPN100)上位机能够直接与卷材机上的变频器进行通信,实时地获取卷材的运行状态、控制参数等信息。
    的头像 发表于 12-02 11:21 977次阅读
    <b class='flag-5'>上位</b><b class='flag-5'>机</b>通过<b class='flag-5'>Modbus</b>转Profinet网关与变频器通讯应用在卷材机上案例

    TCP通信协议-Labview上位

    现在用单片进行信息采集,通过GPRS模块上传到PC,用Labview做上位,TCP通信协议,想请教一下,TCP通信协议和
    发表于 12-10 08:58

    如何去实现ModBUs Poll上位和单片之间的通信

    如何去实现ModBUs Poll上位和单片之间的通信?实现ModBUs Poll
    发表于 09-18 06:01

    STM32F103与上位是如何实现MODBUS通信

    Modbus是什么?STM32F103与上位是如何实现MODBUS通信的?
    发表于 12-13 07:03

    基于Modbus TCP的MCGS上位软件教程

    配置设备参数图1.IP地址配置成上位同一个网段,例如安装上位软件的上位ip地址为192.
    发表于 08-09 14:24

    上位与PLC的通信与监控设计

    上位与PLC的通信与监控设计:本文简要的介绍了CPM2A的上位通信以及实现
    发表于 11-14 12:57 46次下载

    上位MODBUS RTU多从站通讯的VB程序

    上位MODBUS RTU多从站通讯的VB程序,实现上位与下位之间的数据传输。
    发表于 10-12 16:05 77次下载

    C#上位实战开发指南

    C#上位实战开发指南
    发表于 11-22 19:25 0次下载

    ModBus RTU上位与PLC通信

    一、预备知识 二、上位经RS485接口与PLC通信 1、概述 2、西门子触摸屏“站号”设置 3、温度读取与写入 1)PLC参数表的介绍 2)上位机电脑通过“调试助手”发送指
    发表于 04-17 11:40 8次下载
    <b class='flag-5'>ModBus</b> RTU<b class='flag-5'>上位</b><b class='flag-5'>机</b>与PLC<b class='flag-5'>通信</b>

    上位开发新手指南(二)上位通信

    上位开发中,串口通信和TCP通信是两种常见的通信方式。串口通信是指通过串口将数据发送和接收到
    发表于 05-08 11:37 5次下载
    <b class='flag-5'>上位</b><b class='flag-5'>机</b>开发新手指南(二)<b class='flag-5'>上位</b><b class='flag-5'>机</b><b class='flag-5'>通信</b>

    CAN与上位通信详细教程

    CAN与上位通信详细教程 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加本文使用32版HAL库与上位进行
    发表于 05-09 14:41 11次下载
    CAN与<b class='flag-5'>上位</b><b class='flag-5'>机</b><b class='flag-5'>通信</b>详细教程

    上位开发——Modbus到底有多快

    前面写了一篇关于基于Modbus读取运动控制卡的文章,发现很多小伙伴对Modbus的实时性比较感兴趣,想知道上位开发种 Modbus
    发表于 05-10 11:10 0次下载
    <b class='flag-5'>上位</b><b class='flag-5'>机</b>开发——<b class='flag-5'>Modbus</b>到底有多快

    PLC MODBUS通信协议的应用及编程

    现为大家讲解一下MODBUS的应用,现在工业控制上位和下位通信大部分采用通信协议为
    的头像 发表于 06-25 10:25 3053次阅读
    PLC <b class='flag-5'>MODBUS</b><b class='flag-5'>通信</b>协议的应用及编程

    上位通过Modbus转Profinet网关与CGV300变频器通讯配置案例

    上位通过Modbus转Profinet网关(XD-MDPN100)与CGV300变频器通讯的案例可以实现两个不同的通信协议之间的互联互通。在这个案例中,
    的头像 发表于 10-26 09:13 765次阅读
    <b class='flag-5'>上位</b><b class='flag-5'>机</b>通过<b class='flag-5'>Modbus</b>转Profinet网关与CGV300变频器通讯配置案例

    上位通过Modbus转Profinet网关与变频器Modbus通讯配置案例

    上位与变频器Modbus通讯是通过Modbus转Profinet网关来实现的。这个网关可以理解为一个通信翻译器,负责将
    的头像 发表于 10-25 20:55 894次阅读
    <b class='flag-5'>上位</b><b class='flag-5'>机</b>通过<b class='flag-5'>Modbus</b>转Profinet网关与变频器<b class='flag-5'>Modbus</b>通讯配置案例