ModBus网络只是一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。表2是ModBus各功能码对应的数据类型。
表2 ModBus功能码与数据类型对应表
代码 | 功能 | 数据类型 |
01 | 读 | 位 |
02 | 读 | 位 |
03 | 读 | 整型、字符型、状态字、浮点型 |
04 | 读 | 整型、状态字、浮点型 |
05 | 写 | 位 |
06 | 写 | 整型、字符型、状态字、浮点型 |
08 | N/A | 重复“回路反馈”信息 |
15 | 写 | 位 |
16 | 写 | 整型、字符型、状态字、浮点型 |
17 | 读 | 字符型 |
(1)ModBus的传输方式
在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3
表3 ASCII和RTU传输模式的特性
特性 |
| ASCII(7位) | RTU(8位) |
编码系统 |
| 十六进制(使用ASCII可打印字符:0~9,A~F) | 二进制 |
每一个字符的位数 | 开始位 | 1位 | 1位 |
数据位(最低有效位第一位) | 7位 | 8位 | |
奇偶校验(任选) | 1位(此位用于奇偶校验,无校应则无该位) | 1位(此位用于奇偶校验,无校应则无该位) | |
停止位 | 1或2位 | 1或2位 | |
错误校验 | LRC(即纵向冗余校验) | CRC(即循环冗余校验) |
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符都是十六进制字符。ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
表4给出了以RTU方式读取整数据的例子