六、通讯规约
1、规约简述
Modbus通讯规约被广泛的作为系统集成的标准。当通讯命令发送至仪器时,符合相应地址码的设备接收通讯命令,读取信息,如果没有出错则执行相应的任务,然后把执行结果返送给发送者;如果出错则返送错误报告信息(CRC16校验码出错则不返送任何信息)或者不返送任何信息。其通讯数据帧格式如下: 地址码 | 功能码 | 数据区 | 羊角钩校验码 |
8位 | 8位 | N×8位 | 16位CRC |
| | | |
| | | |
地址码:
地址码是信息帧的第一个字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能相应回送。当从机回送信息时,相应的地址码表明该信息来自于相应地址的从机。
功能码:
主机发送的功能码告诉从机执行怎么样的任务,从机的功能码则表明从机响应主机相应任务进行了操作。Modbus通讯规约定义的功能码为01H到7FH,多功能电力仪表使用了其中一部分功能码。下表列出了所用到的功能码的具体含义及操作。
代码(Hex) | 含 义 | 操 作 |
01H | 读继电器输出状态 | 读取一路或多路继电器输出状态数据 |
03H | | 读取一个或多个寄存器的数据 |
05H | 写继电器输出状态 | 控制一路继电器“合/分”输出 |
06H | 写单个寄存器 | 把设置的单个数值写入指定的寄存器 |
10H | 写多个寄存器 | 把设置的数值写入指定的连续寄存器 |
| | |
| | |
注:如果从机发送的功能码的最高位是1(功能码>127),则表明从机没有响应操作或发送出错。
数据区:
数据区是根据不同的功能码而不同。数据区可以是实际数值,设置点,主机发送给从机或从机发送给主机的地址。数据区包含需要从机执行什么动作或由从机采集的返送信息,这些信息可以是数值、参考地址等等。例如,功能码告诉从机读取寄存器的值,则数据区必须包含要读取的寄存器的起始地址及读取长度。如果功能码告诉从机设置某些连续寄存器的值,则数据区还要包含这些数值。对于不同的从机,地址和数据信息可能都不相同。
校验码:
校验码可用于主机或从机判断接受信息是否出错。有时由于电子噪音或其它一些干扰,信息在传输过程中会发生细微的变化,这时自己根据信息计算所得的检验码与信息中包含的校验码就会不一致,从而判断接受信息出错。校验码保证了主机或从机对在传送中出错的信息不起作用,增加了系统的安全和效率。校验码采用CRC-16校验方法。
计算CRC码的步骤为:
(1).预置16位寄存器为FFFFH。称此寄存器为CRC寄存器;
(2).把第一个8位数据与CRC寄存器的低位相异或,把结果放于CRC寄存器;
(3).把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
(4).如果最低位为0:重复第3步(再次移位)如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
(5).重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6).重复步骤2到步骤5,进行下一个8位数据的处理;
(7).最后得到的CRC寄存器即为CRC码。(CRC码 = CRC_L + CRC_H)
出错返送:
从主机接收到的信息如有CRC错误,则将被忽略。
从机返送的错误码的格式如下:
地址码 : 1字节
功能码 : 1字节(最高位为1)
错误码 : 1字节
CRC码 : 2字节
响应回送如下出错命令。
02 – 非法的数据位置。 指定的数据位置超出YT194E-9SY表的范围。
03 – 非法的数据值。 接收到主机发送的数据值超出相应地址的数据范围。
2、通讯举例说明
假设从机地址为01 ,起始地址为0002的3个寄存器内数据如下
www.3x6c地址 | 数据 |
0001 0002 0003 | 000A 020B 125C |
| |
| |
功能码03H 读取寄存器
烘手机主机发送 | 字节数 | 举例 |
从机地址 功能码梁延淼 起始地址 读取点数 CRC码 | 1 1 2 2 2 | 01 发送至从机01 03 读取寄存器 00 01 起始地址为0001 00 03 读取3个寄存器 54 0B 由主机计算的CRC码 |
从机响应 | dddt字节数 | 举例 |
从机地址 功能码 读取字 寄存器地址1 寄存器地址2 sgt寄存器地址3 CRC码 | 1 1 1 2 2 2 2 | 01 发送至从机01 03 读取寄存器 06 3个寄存器共6字节 00 0A 地址0001中的数据 02 0B 地址0002中的数据 12 5C 地址0003中的数据 C5 97 从机计算的CRC码 |
| | | |
| | | |