1 / 38
文档名称:

modbus通讯协议.docx

格式:docx   大小:201KB   页数:38页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

modbus通讯协议.docx

上传人:大笑大甜 2022/6/21 文件大小:201 KB

下载得到文件列表

modbus通讯协议.docx

文档介绍

文档介绍:modbus通讯协议
modbus通讯协议
modbus通讯协议
Modbus 通信协议
图片:
图片
6 并经过 TCP/IP 网络协议发送
ASCII 和 RTU 协议。
modbus通讯协议
modbus通讯协议
modbus通讯协议
下表是 ASCII 协讲和 RTU 协议进行的比较:
经过比较能够看到, ASCII 协讲和 RTU 协议对比拥有开始和结束标志,所以在进
行程序办理时能更为方便, 并且因为传输的都是可见的 ASCII 字符,所以进行调试时就更为的直观,此外它的 LRC 校验也比较简单。可是因为它传输的都是可见的
modbus通讯协议
modbus通讯协议
modbus通讯协议
ASCII 字符,RTU 传输的数据每一个字节 ASCII 都要用两个字节来传输, 比方 RTU
传输一个十六进制数 0xF9,ASCII 就需要传输’ F’’9 ’的 ASCII 码 0x39 和 0x46 两个字节,这样它的传输的效率就比较低。所以一般来说,假如所需要传输的数据
量较小能够考虑使用 ASCII 协议,假如所需传输的数据量比较大, 最好能使用 RTU 协议。
下边对两种协议的校验进行一下介绍。
1、 LRC 校验

、 LRC 域是一个包含一个 8 位二进制值的字节。 LRC 值由传输设施来计算并放
到信息帧中,接收设施在接收信息的过程上当算 LRC,并将它和接收到信息中 LRC 域中的值比较,假如两值不等,说明有错误。

、 LRC 校验比较简单,它在 ASCII 协议中使用,检测了信息域中除开始的冒号及结束的回车换行号外的内容。 它不过是把每一个需要传输的数据按字节叠加后取反加 1 即可。下边是它的 VC 代码:

7 、 BYTE GetCheckCode(const char * pSendBuf, int nEnd)// 获取校验码

、 {

、 BYTE byLrc = 0;
modbus通讯协议
modbus通讯协议
modbus通讯协议

、 char pBuf[4];

、 int nData = 0;

、 for(i=1; i<end; i+=2) //i初始为 1 ,避开“开始标志”冒号

、 {

、 // 每两个需要发送的 ASCII 码转变为一个十六进制数

、 pBuf [0] = pSendBuf ;

、 pBuf [1] = pSendBuf [i+1];

、 pBuf [2] = '\0';

、 sscanf(pBuf,"%x",& nData);

、 byLrc += nData;

、 }
modbus通讯协议
modbus通讯协议
modbus通讯协议

、 byLrc = ~ byLrc;

、 byLrc ++;

、 return byLrc;

、 }

、 2 、CRC 校验

、 CRC 域是两个字节,包含一 16 位的二进制值。它由传输设施计算后加入到信息中。接收设施从头计算收到信息的 CRC ,并与接收到的 CRC 域中的值比较,假如两值不一样,则有误。

、 CRC 是先调入一值是全“ 1 ”的 16 位存放器,而后调用一过程将信息中连续
的 8 位字节各目前存放器中的值进行办理。 仅每个字符中的 8Bit 数据对 CRC
有效,开端位和停止位以及奇偶校验位均无效。

、 CRC 产生过程中,每个 8 位字符都独自和存放器内容相或( OR ),结果向最
modbus通讯协议
modbus通讯协议
modbus通讯协议
低有效位方向挪动,最高有效位以

0 填补。

LSB