网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
关于Modbus通讯协议的编程举例
作者: 来源:中国机电工程网    发布于:2019-06-07 20:08:33    文字:【】【】【

控制器能设置两种模式,分别是:ASCII和RTU
根据控制器选择的模式,主设备就选用相应的模式进行传输。
另外:在一个Modbus网络上所有的设备都必须选择相同的传输模式和串口参数。
ASCII模式:
地址码  功能码   数据量   数据1  …… 数据n   LRC高  LRC低   回车  换行


RTU模式:  
地址码  功能码   数据量   数据1  …… 数据n  CRC高  CRC低


CRC16循环冗余校验:
Unsigned short CRC16(puchMsg, usDataLen)
Unsigned char *puchMsg
Unsigned short usDataLen;
{
       Unsigned char uchCRCHi=0xFF
       Unsigned char uchCRCLo=0xFF
       Unsigned nIndex
       While(usDataLen--)
              {
                     uIndex=uchCRCHi ^ *puchMsg++;
                     uchCRCHi=uchCRCLo ^ auchCRCHi(uIndex);
                     uchCRCLo=uchCRCLo[uIndex];
}
       Return(uchCRCHi<<8 | uchCRCLo)
}
计算CRC码的步骤为:
预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;
把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 
重复步骤2到步骤5,进行下一个8位数据的处理;
最后得到的CRC寄存器即为CRC码。
Private Function CRC16(data() As Byte) As String
浏览 (36) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人: 来源:中国机电工程网
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们