Modbus协议介绍与仿真器Modbus Poll、Modbus Slave使用指南

1、概论

Modbus是一种串行通信协议,由于其协议简单易用,且没有版权要求,目前已经成为工业领域通信协议的实时标准。ModBus协议是又施耐德电气的前身Modicon公司在1979年提出的。Modbus目前有两个主要版本 ModBus串口,MODBUS TCP/IPModBus 串口又有两个变种:Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。还有一种扩展协议MODBUS PLUS(Modbus+或者MB+),不过此协议是Modicon专有的一种高速令牌传递网络,和Modbus不同,它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。下图说明ModBus协议规范和现有协议的关系从图可以看出,Modbus是基于现有OSI 网络模型上的应用协议。

Modbus 协议和 ISO/OSI 模型 具体情况

2、ModBus的应用场景

ModBus协议可以解决工厂不同种类设备的数据采集问题,使得我们可以通过采集的数据随时监控工厂的运行情况。MODBUS 协议允许在各种网络体系结构内进行简单通信,它的常见体系结构图如下。

 HMI代表人机界面,PLC是工厂常用的采集设备,工厂中的各类PLC,I/O数据接口,驱动器设备可以通过各类Modbus协议采集它的数据,并且不同Modbus协议网络之间还可以通过网关进行数据交换。

3、Modbus协议内容介绍

3.1 Modbus 网络形式和协议

在介绍Modbus网络之前首先介绍一下Modbus网络上传输的是什么?和其他协议类似,Modbus协议最基本的通信单位是帧,整个Modbus帧又被称之为应用数据单元(ADU),ADU中又包含了协议数据单元(PDU)用于传真正需要传输的数据。

Modbus协议是一个主/从架构的协议。在同一个Modbus网络中同一时刻只有一个节点是主(master)节点,其他使用Modbus协议参与通信的节点是从(slave)节点,从(slave)节点的最大编号为247。每一个从(slave)节点设备都有一个唯一的地址。在串行和MB+网络中,通讯总是由主(master)节点发起(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主(master)节点设备启动指令),子节点在没有收到主(master)节点请求时不会发送数据。各个子节点之间不会直接相互通信。

在同一个时刻,主(master)节点只会发起一个Modbus事务处理。什么是事务处理呢?其实就是一次网络上完整的应答通讯。主要包含两种形式,1 单播模式 , 2 广播模式

所谓单播模式就是主(master)节点给某个指定的节点发送消息(通过ADU中的地址域指定),从(slave)节点收到并处理完请求后,从(slave)节点向主(master)节点返回一个应答报文,在这种模式下,一个Modbus事务包含两个报文,一个来自主(master)节点的请求,一个来自子节点的应答

所谓广播模式,是主(master)节点向所有的子节点发送请求,当主(master)节点发送的请求报文的地址域值为0时,代表广播请求,所有的从(slave)节点都需要接受处理,但不需要向主(master)节点返回报文。

其实在物理层所有设备都会收到所有的请求,但地址域不为0时,从机判断当前为单播模式,只有地址域和自身地址号相同的从机才会响应请求,当地址域为0时,从机判断为广播消息,所有的从机都会执行指令,所有收到指令的设备都会运行,只不过不回应指令。

客户机(主机)和服务器(从机)通信时会出现两种情况,一种是正常,一种是异常。

其中事务处理正常时示意图如下,客户机(主机)向服务器(从机)发送请求,在功能码中填充功能码代号,说明服务器需要执行的动作,在数据码区填充具体的要求,比如读寄存器的地址和数量,通信正常时服务器会在返回的通信帧的功能码区中填充一个操作码,该操作码和功能码的值一样,在通讯帧的数据区填充返回的采样数据。

当出现事务处理异常时,示意图如下,服务器会在返回的通讯帧的功能码中填充一个差错码,该差错码 = 功能码 + 0x80,即将功能码的最高位置1代表出现错误。并在后面的数据段中填充错误码,用来指示本次通信的错误具体内容。

错误检测域是针对通讯链路是否可靠的检测域,通过CRC(循环冗余校验码)等错误校验方式校验通信过程中是否发生了差错。

4、帧详解

Modbus协议的三种形式通讯的帧略有不同,具体如下

 MBAP是一个通用的报文头,依赖于可靠的网络层。

 各域的典型长度如下(以MODBUS-RTU为例)

各功能域介绍:

4.1、地址域

第一部分是8位是地址域,用于给从机编号,而主机是没有地址的,从机的地址必须是唯一的。Modbus 地址域使用1个字节,寻址空间有 256 个不同地址,但合法的地址是0 – 247。

 主(master)节点通过将子节点的地址放到报文的地址域对子节点寻址。当子节点返回应答时, 它将自己的地址放到应答报文的地址域以让主(master)节点知道哪个子节点在回答

4.2、功能码

第二部分8位是功能码,功能码指明服务器要执行的动作。主机通过在PDU中指定不同的功能码,通知从机(服务器)执行不同的动作, 功能码分为三类:

A、公共功能码:这是Modbus协议组织定义的功能码,被大家一致认可,普通情况下不会改变。

B、用户定义功能码: 有两个用户定义功能码的定义范围,十进制 65 至 72 和十进制 100 至 110,可以用户自行定义使用。

C、保留功能码:这是一些公司对一些历史产品使用的功能码,对公共来说是无效的。

 公共功能码的定义如下:

访问形式有单比特访问和16比特访问还有文件记录访问,这里的线圈可以理解为开关量0,1

4.3、数据区

介绍数据区之前,先介绍一下Mobbus协议的数据模型,Modbus可访问的数据存储在四个区块或地址范围的其中一个: 线圈状态、离散量输入、保持寄存器和输入寄存器。这里的区块是概念性的定义,在物理层面它们可能作为独立的内存地址存在于给定的系统中,但也可能重叠,这个完全由设备自己管理。

每个区块定义可以包含65,536个元素的地址空间。在PDU的定义中,Modbus定义了每个数据元素的地址,范围从0到65,535。但是我们的物理设备如寄存器、线圈通常从1开始编号从1到n,其中n的最大值为65,536。也就是说,线圈11位于地址10的线圈状态区块中,而保持寄存器34位于从机被定义为保持寄存器的内存部分中的地址33。 实际使用时设备不会直接描述数据在某某号寄存器中,如电压量在第13号保存寄存器中,而是会描述为电压量在地址40001(或者4001,400001等),其中4XXX、4XXXX和4XXXXX的区别取决于设备使用的地址空间。 如果所有65,536个寄存器都在使用中,应该使用4XXXXX符号,因为其允许范围为400,001~465,536。4开头是因为实际使用时地址编码的前缀通常反映数据的类型,一般如下定义数据类型和前缀关系。

4.4、错误检验域

该域是串行链路对报文内容执行 "冗余校验" 的计算结果。根据不同的传输模式 (RTU or ASCII)使用两种不同的计算方法。

4.5、报文示例

请求读离散量输出 20-38 的实例

将输出 27-20 的状态表示为十六进制字节值 CD,或二进制 1100 1101。输出 27 是这个字节的MSB,输出 20 是 LSB。按照惯例,将一个字节内的比特表示为 MSB 位于左侧,LSB 位于右侧。第一字节的输出从左至右为 27 至 20。下一个字节的输出从左到右为 35 至 28。当串行发射比特时,从 LSB 向 MSB 传输: 20 . . .27、28 . . . 35 等等。在最后的数据字节中,将输出状态 38-36 表示为十六进制字节值 05,或二进制 0000 0101。输出38 是左侧第六个比特位置,输出 36 是这个字节的 LSB。用零填充五个剩余高位比特。如果返回的输出数量不是八的倍数,将用零填充最后数据字节中的剩余比特。设备内部流程如下

4.6 异常代码

5、关于传输

串行传输模式有两种:RTU模式和ASCII模式

Modbus 串行链路 上所有设备的传输模式和串口参数必须相同。所有设备必须实现RTU模式,ASCII模式是选择项,只有配置成相同模式的设备才可以相互正常通信。在其他网络上(如MAP,Modbus Plus)Modbus消息被转换为与串行传输无关的帧。Modbus 使用“大端模式”(big-Endian) 表示地址和数据项。当发送多个字节时,首先发送最高有效位。这是字节层面的,在串口线路中传送每个字节时bit传送模式为,LSB先发送,MSB后发送。

RTU 传输模式

当控制器以RTU模式通信时,消息中每个8bit字节包含两个4bit十六进制字符。这种方式的有点是:在相同波特率下,可以比ASCII方式传送更多数据

相应的串口设置要求

1 起始位

8 数据位, 首先发送最低有效位

1 位作为奇偶校验

1 停止位

每个字符或字节均由此顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB)

ASCII 传输模式

当 Modbus 串行链路的设备被配置为使用 ASCII (American Standard Code for Information

Interchange) 模式通信时, 报文中的每个 8 位子节以两个 ASCII 字符发送。当通信链路或者设备

无法符合 RTU 模式的定时管理时使用该模式。

注 :由于一个子节需要两个字符,此模式比 RTU 效率低。

例 :子节 0X5B 会被编码为两个字符 : 0x35 和 0x42 ( ASCII 编码 0x35 ="5", 0x42 ="B" )。

相应的串口设置

1 起始位

7 数据位, 首先发送最低有效位

1 位作为奇偶校验

1 停止位

和RTU模式一样每个字符或字节均由此顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB)

(ASCII 十六进制 3A )起始,以‘回车-换换行’ (CR LF) 对(ASCII 十六进制 0D 和 0A)结束。

6、Modbus仿真器Modbus Poll和Modbus Slave介绍

 先介绍模拟从(slave)节点(从机)的Modbus Slave软件,再介绍模拟主(master)节点(主机)的Modbus poll软件。因为从(slave)节点(从机)可以在没有主(master)节点(主机)的情况下运行,主(master)节点(主机)则不能没有从(slave)节点(从机)。

Modbus Slave介绍

Mobus Slave能够模拟从(slave)节点(从机),用来辅助主(master)节点(主机)开发调试。打开Modbus Slave可以看到主界面

图中ID为站号,F为响应主机的功能码

在和主(master)节点(主机)进行连接之前先对连接进行设置点击Connection->Connection Setup,这里我选择了TCP/IP协议

1 串行: 通过串行线路。RS232或RS485。可以使用USB串行转换器。

2 TCP/IP:如果要与TCP/IP网络通信,选择TCP/IP。在这种情况下,从站ID与TCP/IP中使用的单元ID相同。 端口号默认为502。如果连接失败,则尝试是否可以在命令提示符下ping设备。如果ping命令失败,轮询也将失败。

3 UDP/IP: 如果要与UDP/IP网络通信,请选择UDP/IP。这与TCP/IP相同,但改用连接较少的UDP协议。

通过TCP/IP的RTU/ASCII: 这是通过TCP/IP网络而不是串行线路发送的RTU或ASCII消息。 通过UDP/IP的RTU/ASCII: 这是通过UDP/IP网络而不是串行线路发送的RTU或ASCII消息。 连接类型3-5不是http://www.modbus.org指定的标准,是为了一些特殊情况下的应用。

对从(slave)节点(从机)进行配置点击 Slave Definition...,设置好了点击OK

然后对仿真界面进行一些设置,可以在Alias列填写容易识别的名字,双击右侧单元格会弹出寄存器编辑窗口,可以填写你需要的值,勾选Auto increment可以另每个单元自动增长

配置好了Slave仿真器后,可以点击connection,然后利用主机连接(了解后续modbus poll内容并配置好modbus poll后再利用主机仿真器modbus poll连接),开始仿真调试

Modbus Poll介绍

Modbus Poll 是Witte Software公司开发的的Modbus主(master)节点(主机)仿真器,用于测试和调试Modbus从(slave)节点(从机)。软件支持ModbusRTU、ASCII、TCP/IP协议。支持多设备监控,可以同时监视多个从设备/数据域。支持图形化监控报文信息,循环报文发送,寄存器数值独立增长。可以图形化设定从设备ID,功能,地址,大小和轮询间隔。提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换) ,并支持Excel导出。

打开软件之后主界面如下,出现红色No connection说明此时没有连接任何从设备。上面一行字代表当前通讯状态统计,Tx 代表发送帧数,Err代表错误帧,ID表示从站的ID号,F代表功能码,SR代表轮询周期,右下角显示IP地址和端口号。

 点击Connection->Connect… 弹出注册码输入框,可以输入注册码,没有的话点击Regster later可以试用30天

 输入完注册码后,弹出Connection配置(modbus slave内容要一致,否则连接不上)

       

           TCP/IP连接协议配置: modbus  poll                 modbus  slave

modbus  poll的Connection配置右侧可以设置响应超时时间,和轮训间隔。对于轮训间隔,一般设置为20ms,如果将此值设置为小于20毫秒,则不能保证响应和新请求之间的3.5个字符的时间间隔。这是因为Windows进程调度为每10到20毫秒切换一次任务。 如果在串行RS485网络中轮询多个从站,则不应将该值设置为低于20ms。这是为了确保3.5个字符的时间间隔。 在TCP/IP网络中,小于20毫秒是可以的。

服务器(从机)IP配置,端口号,网络连接超时设置,还可以切换IPv4和IPv6网络协议。

点击高级Advanced...可以看到高级设置,这里一般不用去管这里稍微介绍一下

RTS切换 :RTS切换指定如果字节可用于传输,则RTS线将为高。发送所有缓冲的字节后,RTS线将变为低电平。 如果你的232/485转换器带自动方向切换功能,则可以使用它来切换方向。 尽量,应避免使用RTS控制的RS232/RS485转换器。在非实时操作系统(例如Windows和Linux)下,很难确定关闭变送器的确切时间。如果关闭它,字符可能仍位于FIFO或UART的发送寄存器中,尚未发送出去,这会导致数据丢失,但如果关闭时间太晚,则从站的消息将被破坏,主站将无法识别该消息。

DSR :DSR指定是否监视DSR(数据集就绪)信号以进行输出流控制。如果此成员为TRUE并且DSR关闭,则输出将被挂起,直到再次发送DSR。

CTS :CTS指定是否监视CTS(清除发送)信号以进行输出流控制。如果启用此复选框且CTS已关闭,则输出将暂停,直到再次发送CTS。

DTR:DTR指定在打开端口时是启用还是禁用DTR。

删除回显 如果你用的设备或RS232/RS485转换器会回显刚刚发送的字符,则启用该功能自动删除回显。

连接成功connection时界面如下(需要使用从站仿真器或者真实设备

参数设置

点击Setup->Read/Write Definiton...可以对监视窗口监视的内容进行设置

          

点击之后可以设置从站地址,选择功能码,如03是读保持寄存器值,Address处填写寄存器地址,这里要注意右侧有地址寻址方法 40011->10,Quantity填写要读的寄存器数目

View 部分用于设置显示的行数,Cell中的地址显示等信息。Modbus的功能码定义如下

常见的功能码和地址对应表

设置别名,你可以直接双击alias列对应的单元格填写一些方便记忆的名字

选择Setup->Excel Log ...可以设置Excel log,以方便数据处理

选择Setup->Log … 可以设置Log的存储细节,存储速率,分割符,错误记录形式等。

测试功能

Modbus poll 提供方便的测试辅助功能在Function菜单下,可以直接选择相应的功能发送命令给从(slave)节点(从机)

Modbus Poll还提供了文本发送调试工能,点击Functions->Test Center...进入测试中心,编辑完了命令之后可以直接点击Send发送。

显示设置

默认情况下Modbus Poll以Signed形式显示数据,这可以根据需要需要 点击Display菜单可以根据需要修改每个单元格的显示格式

选择Communication...可以看到通信帧信息

Modbus poll还提供了一个实时绘图页面来帮助用户观察数据接收情况,一般情况下不需要,调试时直接观察通信帧一般就够了。

 7.modbus poll+slave软件包(破解版)

参考下述链接

Modbus协议介绍与仿真器ModbusPoll、ModbusSlave使用指南-C文档类资源-CSDN下载

  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值