MODBUS常见的14个问题
到底什么是MODBUS?
Modbus是Modicon系统开发的通信协议。简而言之,这是一种用于在电子设备之间通过串行线路传输信息的方法。请求信息的设备称为Modbus主站,提供信息的设备为Modbus从站。在标准的Modbus网络中,有一个主站和多达247个从站,每个从站都具有从1到247的唯一从站地址。主站也可以向从站写入信息。官方的Modbus规范可在http://www.modbus.org/上找到。
它是干什么用的?
Modbus是一个开放协议,这意味着制造商可以免费将其内置到设备中,而无需支付专利使用费。它已成为非常广泛的协议,已被许多行业的许多制造商广泛使用。Modbus通常用于将信号从仪表和控制设备传输回主控制器或数据收集系统。
它是如何工作的?
Modbus通过设备之间的串行线传输。最简单的设置是使用一根串行电缆连接两个设备(主设备和从设备)上的串行端口。

数据以称为比特的1和0的序列发送。每个位都作为电压发送。零被发送为正电压,一个被发送为负电压。比特发送非常快。典型的传输速度是9600波特(每秒比特)。
什么是十六进制?
在对问题进行故障排除时,查看实际传输的原始数据会很有帮助。长的一和零字符串很难读取,因此将这些位组合并以十六进制显示。4位的每个块由0到F的十六个字符之一表示。
每个8位块(称为字节)由从00到FF的256个字符对之一表示。
数据如何存储在标准MODBUS中?
信息存储在从设备的四个不同表中。两个表存储开/关离散值(线圈),两个表存储数值(寄存器)。线圈和寄存器分别具有只读表和读写表。
每个表都有9999个值。
每个线圈或触点均为1位,并分配了一个介于0000和270E之间的数据地址。
每个寄存器为1个字= 16位= 2个字节,并且还具有0000至270E之间的数据地址。
可以将线圈/寄存器号视为位置名称,因为它们没有出现在实际的消息中。消息中使用了数据地址。
例如,第一个保持寄存器编号40001的数据地址为0000。这两个值之间的差是offset。每个表都有不同的偏移量。1、10001、30001和40001。
什么是从站ID?
网络中的每个从站都被分配一个从1到247的唯一单元地址。当主站请求数据时,它发送的第一个字节是从站地址。这样,每个从站都会在第一个字节之后知道是否忽略该消息。
什么是功能码?
主机发送的第二个字节是功能代码。该数字告诉从站要访问哪个表以及是从表中读取还是向表中写入。
什么是CRC?
CRC代表循环冗余校验。它是在每个Modbus消息的末尾添加两个字节以进行错误检测。消息中的每个字节都用于计算CRC。接收设备还计算CRC,并将其与发送设备的CRC进行比较。如果错误地接收到消息中的甚至一位,则CRC也将不同并且将导致错误。
这是一个电子表格CRC计算器,用于最多16个字节的消息。http://www.simplymodbus.ca/crc.xls。要下载副本,请右键单击并选择目标另存为...。
MODBUS命令和响应的格式是什么?
单击此表中的链接,以查看请求和响应的示例。
什么是数据类型?
FC03的示例显示寄存器40108包含AE41,该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到4,294,967,295之间的数字)
40108,40109 = AE41 5652 = 2,923,517,522
一个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
这是一个用于输入4个字节或2个字的电子表格。http://www.simplymodbus.ca/ieeefloats.xls。要下载副本,请右键单击并选择目标另存为...。
一个四个字符的ASCII字符串(4名键入的字母)
AE41 5652 =®AVR
可以组合更多寄存器以形成更长的ASCII字符串。每个寄存器用于存储两个ASCII字符(两个字节)。
什么是字节和单词排序?
Modbus规范没有确切定义数据如何存储在寄存器中。因此,一些制造商在其设备中实施了Modbus,以便先存储和传输较高的字节,然后再存储较低的字节。(AE在41之前)。或者,其他人先存储并发送低位字节(AE之前为41)。
同样,当将寄存器组合起来以表示32位数据类型时,某些设备将高16位(高位字)存储在第一个寄存器中,将其余的低位字存储在第二个寄存器中(5652之前的AE41),而其他设备则相反(前5652) AE41)。
只要接收设备知道期望哪种方式,发送字节或字的顺序就无关紧要。例如,如果将数字29,235,175,522作为32位无符号整数发送,则可以采用以下四种方式中的任何一种进行排列。
AE41 5652高字节首位高位字首
5652
AE41 高字节首位低位字首41AE 5256低字节首位高位首字
5256 41AE低字节首位低位首
什么是MODBUS映射?
Modbus映射只是单个从设备的列表,它定义了:
数据是什么(例如压力或温度读数)
数据的存储位置(哪些表和数据地址)
数据的存储方式(数据类型,字节和单词顺序)
某些设备内置有制造商定义的固定映射。而其他设备则允许操作员配置或编程自定义地图以满足他们的需求。
什么是扩展寄存器地址?
由于模拟输出保持寄存器的范围是40001至49999,这意味着不能超过9999个寄存器。尽管这对于大多数应用程序通常已足够,但在某些情况下,更多寄存器将是有益的。
寄存器40001至49999对应于数据地址0000至270E。如果我们利用剩余的数据地址270F到FFFF,则可用寄存器的数量是可用寄存器的六倍,总计65536。这将对应于从40001到105536的寄存器号。
许多Modbus软件驱动程序(用于Master PC)的写入限制为40001至49999,并且无法访问从设备中的扩展寄存器。而且许多从设备不支持使用扩展寄存器的映射。但是另一方面,某些从设备确实支持这些寄存器,并且某些主软件可以访问它们,特别是如果编写了定制软件。
2字节从机寻址如何工作?
由于通常使用一个字节来定义从站地址,并且网络上的每个从站都需要一个唯一的地址,因此网络上的从站数量限制为256。modbus规范中定义的限制甚至更低,为247。
要超出此限制,可以对协议进行修改,以使用两个字节作为地址。主机和从机都需要支持此修改。两字节寻址将网络中从站数量的限制扩展到65535。
默认情况下,Simply Modbus软件使用1字节寻址。当输入的地址大于255时,软件将自动切换到2字节寻址,并针对所有地址保持此模式,直到手动关闭2字节寻址为止。
TAG MODBUS