MODBUS的CRC校验和程序(3)

2019-03-10 12:35

起始位地址 0000 DO寄存器数据(16进制) 02 备 注 DO2输出状态为“1”,DO1输出状态为“0” 主机发送的报文格式: 主机发送 从机地址 功能码 起始BIT位 读数据长度 CRC码 从机(PDM)响应返回的报文格式: 从机响应 从机地址 功能码 数据长度 DO状态数据 CRC码 字节数 1 1 1 1 2 返回的信息 01 01 01 02 D049 备 注 来自从机01 读开关量输出状态 1个字节(8个BIT位) DO寄存器内容 由从机计算得到CRC码 字节数 1 1 2 2 2 发送的信息 01 01 0000 0002 BDCB 备 注 发送至地址为01的从机 读开关量输出状态 起始BIT位地址为0000 读取2路继电器输出状态位 由主机计算得到CRC码 2.3 功能码“03”:读多路寄存器输入 例如:主机要读取地址为01,起始地址为0116的3个从机寄存器数据。 从机(PDM)数据寄存器的地址和数据为: 寄存器地址 0116 0117 0118 主机发送的报文格式: 寄存器数据(16进制) 1784 1780 178A 对应PDM电量 UA UB UC 主机发送 从机地址 功能码 起始地址 数据长度 CRC码 从机(PDM)响应返回的报文格式: 从机响应 从机地址 功能码 读取字 寄存器数据1 寄存器数据2 寄存器数据3 CRC码 2.4 功能码“05”:写1路开关量输出(“遥控”) 例1:开关量输出点DO1,其当前状态为“分”,主机要控制该路继电器“合”。 控制命令为: “FF00”为控制继电器“合”; “0000”为控制继电器“分”; 主机发送的报文格式: 主机发送 字节数 发送的信息 备 注 字节数 1 1 1 2 2 2 2 返回的信息 01 03 06 1784 1780 178A 5847 备 注 来自从机01 读取寄存器 3个寄存器共6个字节 地址为0116内存的内容 地址为0117内存的内容 地址为0118内存的内容 由从机计算得到CRC码 字节数 1 1 2 3 2 发送的信息 01 03 0116 0003 E5F3 备 注 发送至地址为01的从机 读取寄存器 起始地址为0116 读取3个寄存器(共6个字节) 由主机计算得到CRC码 从机地址 功能码 输出BIT位 控制命令 CRC码 1 1 2 2 2 01 05 0000 FF00 8C3A 发送至地址为01的从机 写开关量输出状态 对应输出继电器BIT位(DO1) 控制该路继电器输出为“合”状态位 由主机计算得到CRC码 从机(PDM)响应返回的报文格式: 与主机发送的报文格式及数据内容完全相同。 例2:开关量输出点DO2,其当前状态为“合”,主机要控制该路继电器“分”。 主机发送的报文格式: 主机发送 从机地址 功能码 输出BIT位 控制命令 CRC码 从机(PDM)响应返回的报文格式: 与主机发送的报文格式及数据内容完全相同。 2.5 功能码“06”:写单路寄存器 例如:主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)。通讯数据保存结束后,地址为002C的PDM表原存储信息为: 地址 002C 原来存储数据(16进制) 04B0 字节数 1 1 2 2 2 发送的信息 01 05 0001 0000 9C0A 备 注 发送至地址为01的从机 写开关量输出状态 对应输出继电器BIT位(DO2) 控制该路继电器输出为“合”状态位 由主机计算得到CRC码 主机发送的报文格式: 主机发送 从机地址 功能码 起始地址 写入数据 CRC码 从机(PDM)响应返回的报文格式: 与主机发送的报文格式及数据内容完全相同。 2.6功能码“10”:写多路寄存器 主机利用这个功能码把多个数据保存到PDM表的数据存储器中去。Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。这样PDM的存储器都是二个字节。由于Modbus通讯规约允许每次最多保存60个寄存器,因此PDM一次也最多允许保存60个数据寄存器。 例如:主机要把0064,0010保存到地址为002C,002D的从机寄存器中去(从机地址码为01)。通讯数据保存结束后,地址为002C/002D的PDM表内存储信息为: 地址 002C 002D 主机发送的报文格式: 主机发送 从机地址 功能码 起始地址 保存数据字长度 字节数 1 1 2 2 发送信息 01 10 002C 0002 举例 发送至从机01 写多路寄存器 要写入的寄存器的起始地址 保存数据的字长度(共2字) 原来存储数据(16进制) 04B0 1388 字节数 1 1 2 2 2 发送的信息 01 06 002C 07D0 4BAF 举例 发送至地址为01的从机 写单路寄存器 要写入的寄存器地址 对应的新数据 由主机计算得到的CRC码 保存数据字节长 保存数据1 保存数据2 CRC码 1 2 2 2 04 04B0 1388 FC63 保存数据的字节长度(共4字节) 数据地址002C 数据地址002D 由主机计算得到的CRC码 从机(PDM)响应返回的报文格式: 从机响应 从机地址 功能码 起始地址 保存数据字长度 CRC码 三、错误校验码(CRC校验): 主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。 MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。 在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。 ● CRC码的计算方法是: 1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器; 2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低 8位相异或,把结果放于CRC寄存器; 3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位; 4.如果移出位为0:重复第3步(再次右移一位); 如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或; 字节数 1 1 2 2 2 字节数 01 10 002C 0002 8001 举例 来自从机01 写多路寄存器 起始地址为002C 保存2个字长度的数据 由从机计算得到的CRC码


MODBUS的CRC校验和程序(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中小学布置调整规划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: