Modbus是一种开放协议,这意味着制造商无需支付版税就可以免费使用它。它已成为工业中的标准通信协议,并且现在是连接工业电子设备的最常用方法。它被许多行业的许多制造商广泛使用.Modbus通常用于将来自仪表和控制设备的信号传输回主控制器或数据采集系统,例如测量温度和湿度并将结果传送到计算机的系统。Modbus通常用于将监控计算机与远程终端单元(RTU)连接在监控和数据采集(SCADA)系统中。
Modbus通过设备之间的串行线路传输。最简单的设置是连接两个设备(主设备和从设备)上的串行端口的单根串行电缆。
数据以一系列1和0的形式发送,称为位。每个位都作为电压发送。零作为正电压发送,而一个作为负电压发送。这些位很快发送。典型的传输速度为9600波特(每秒位数)。
什么是十六进制?
在解决问题时,查看传输的实际原始数据会很有帮助。长串的1和0很难读取,因此这些位组合在一起并以十六进制显示。每个4比特的块由从0 到F 的16个字符之一表示。
每个8位块(称为字节)由00 到FF 的256个字符对中的一个表示。
数据如何存储在标准Modbus中?
信息存储在四个不同的表中的从设备中。两个表存储/关闭离散值(线圈)和两个存储数值(寄存器)。每个线圈和寄存器都有一个只读表和读写表。每个表有9999个值。每个线圈或触点为1位,并分配一个介于0000 和270E 之间的数据地址。每个寄存器为1字= 16位= 2字节,并且数据地址在0000 和270E 之间。
线圈/寄存器编号可以被认为是位置名称,因为它们不会出现在实际消息中。数据地址用于消息中。例如,第一个保持寄存器,编号40001,具有数据地址0000 。这两个值之间的差异是偏移量。每个表都有不同的偏移量。1,10001,30001和40001。
什么是奴隶身份证?
网络中的每个从站都分配有1到247的唯一单元地址。当主站请求数据时,它发送的第一个字节是从站地址。这样,每个从设备在第一个字节之后知道是否忽略该消息。
什么是功能代码?
主机发送的第二个字节是功能代码。此数字告诉从站要访问哪个表以及是从表中读取还是写入表。
什么是CRC?
CRC代表循环冗余校验。它是在每个modbus消息的末尾添加两个字节以进行错误检测。消息中的每个字节用于计算CRC。接收设备还计算CRC并将其与来自发送设备的CRC进行比较。如果错误地接收到消息中的一位,则CRC将不同并且将导致错误。。
什么是数据类型?
对于示例FC03 表明,寄存器40108包含AE41 ,其转换为16位1010 1110 0100 0001 大!但是这是什么意思?嗯,这可能意味着一些事情。寄存器40108可以定义为这些16位数据类型中的任何一种:
甲16位无符号整数(0到65535之间的整数)寄存器40108包含AE41 = 44609(十六进制到十进制的转换)
甲16位带符号整数(-32768到32767之间的整数)AE41 = -20,927 (十六进制到一个包装,如果其超过32767然后减去65536十进制的转换)
甲两种字符的ASCII字符串(2键入的字母)AE41 =®甲
甲开/关值的离散(在此工作方式相同的16位整数0或1的值的十六进制数据将是0000 或0001 )注册40108也可与结合
40109形成任何这些32位数据的类型:
甲32位无符号整数(0和4294967295之间的数字)40108,40109 = AE41 5652 = 2923517522
一个32位有符号整数(-2,147,483,648和2,147,483,647之间的数字)AE41 5652 = -1,371,449,774
甲32位双精度IEEE浮点数。这是一个数学公式,允许任何实数(带小数点的数字)用32位表示,精度约为7位数。AE41 5652 = -4.395978 E-11 这是一个电子表格IEEE浮点计算器,用于输入4个字节或2个字。要下载副本,请右键单击并选择目标另存为…
甲四个字符的ASCII字符串(4键入的字母)AE41 5652 =®AVR 更多寄存器可以被组合以形成更长的ASCII字符串。每个寄存器用于存储两个ASCII字符(两个字节)。
什么是字节和字排序?
Modbus规范没有准确定义数据如何存储在寄存器中。因此,一些制造商在他们的设备中实现了modbus,首先存储和传输高字节,然后是低字节。(41 之前的AE )。或者,其他人首先存储和发送低位字节(AE 之前的41 )。类似地,当寄存器组合起来表示32位数据类型时,某些器件将高16位(高字)存储在第一个寄存器中,剩余的低字存储在第二个寄存器中(AE41 在5652 之前),而其他器件则相反(5652 之前)AE41 )只要接收设备知道期望它的方式,发送字节或字的顺序无关紧要。例如,如果要将数字29,235,175,522作为32位无符号整数发送,则可以按这四种方式中的任何一种进行排列。
AE41 5652 高字节第一高字首先
5652 AE41 高字节第一低字首先
首先是41AE 5256 低字节第一个高字
5256 41AE 低字节第一个低字首先
什么是Modbus地图?
modbus映射只是一个单独的从设备列表,它定义了- 数据是什么(例如压力或温度读数)
- 存储数据的位置(哪些表和数据地址)
- 数据的存储方式(数据类型,字节和字排序)
某些设备使用由制造商定义的固定映射构建。而其他设备允许操作员配置或编程自定义地图以满足他们的需要。
Modbus ASCII和Modbus RTU有什么区别?
Modbus RTU和Modbus ASCII使用相同的协议。唯一的区别是通过线路传输的字节用RTU表示为二进制,用Modbus RTU表示为可读ASCII。关于RTU的重要注意事项是RTU消息没有Start_of_text指示。通信中的接收方 使用“静默”时间以确定新消息的开始。ASCII确实有一个文本开头标记。二进制消息比ASCII短,因此理论上传输/接收速度更快。您可能很高兴在HMI / SCADA中看到大约100 ms的更新速率,并且可以选择任一通信。
总结:
- 使用RTU是可能的
- 如果RTU在WinNT上出现超时问题或者使用300 bps或拨号调制解调器等慢速通信媒体时使用ASCII,大多数用于Modbus的OPC服务器都支持ASCII和RTU通信。
什么是扩展寄存器地址?
由于模拟输出保持寄存器的范围是40001到49999,因此意味着寄存器不能超过9999个。虽然这对于大多数应用程序来说通常已经足够了,但有些情况下会有更多的寄存器。寄存器40001至49999对应于数据地址0000 至270E 。如果我们利用剩余的数据地址270F 到FFFF ,可以使用超过六倍的寄存器,总共65536个。这对应于40001到105536的寄存器编号。许多modbus软件驱动程序(用于主PC)都是用40001到49999编写的限制,不能访问从设备中的扩展寄存器。许多从设备不支持使用扩展寄存器的映射。但另一方面,一些从设备确实支持这些寄存器,一些Master软件可以访问它,特别是在编写自定义软件时。
字节从站寻址如何工作?
由于单个字节通常用于定义从站地址,并且网络上的每个从站都需要唯一的地址,因此网络上的从站数量限制为256. modbus规范中定义的限制甚至更低,为247 。超出此限制,可以对协议进行修改以使用两个字节作为地址。主人和奴隶都需要支持这种修改。双字节寻址将网络中从站数量的限制扩展到65535. 默认情况下,Simply Modbus软件使用1字节寻址。输入大于255 的地址时,软件会自动切换到2字节寻址并保持不变所有地址的此模式,直到手动关闭2字节寻址。