C编写Modbus-Rtu通讯第一步,通讯协议简介

C编写Modbus-Rtu通讯第一步,通讯协议简介前面和大家一起学习了如何使用 C 编写串口读写程序和威纶触摸屏实现数据交换 这个通讯是最简陋的通讯方式 只能用于两个设备都是自己编程的情况下 在实际应用中 我们要读取的设备一般都已经做好了通讯协议 而 Modbus Rtu 是最常用的协议之一

大家好,欢迎来到IT知识分享网。

前面和大家一起学习了如何使用C#编写串口读写程序和威纶触摸屏实现数据交换。这个通讯是最简陋的通讯方式,只能用于两个设备都是自己编程的情况下。在实际应用中,我们要读取的设备一般都已经做好了通讯协议,而Modbus-Rtu是最常用的协议之一。

C编写Modbus-Rtu通讯第一步,通讯协议简介

作为工业上非常常用的通讯协议,Modbus-Rtu支持一个主机连接多个从站,这意味着485连接成了最合适的总线连接形式。主机作为提问者,根据站号查询每个站的寄存器状态,这种方式叫做轮询。所以连接的从站越多,全部读取一遍所有从站的时间就越长。而且为了总线稳定,两个从站之间的读取还需要一些间隔时间,所以我个人感觉Modbus-Rtu适用于对数据采集频率不高的应用场景中。

C编写Modbus-Rtu通讯第一步,通讯协议简介

Modbus-Rtu的基本格式如上图所示。它包括通信地址、功能代码、数据和差错校验,地址就是主机要通讯的从站地址,功能码就是主机想要从机做什么事情,而数据就是具体要从站完成的事情。

C编写Modbus-Rtu通讯第一步,通讯协议简介

功能码常用的就是上图中的几个,学会这几个基本上就能用Modbus-Rtu做项目了。

C编写Modbus-Rtu通讯第一步,通讯协议简介

这里最难理解的就是校验。很多没有接触过通讯协议的朋友可能有些一头雾水,所以感觉有必要解释一下。通俗地说,校验就是相当于密码本。发数据的一方在写信时,将信上所写的内容利用密码本上的规则计算一下,然后把结果填在信后面。收信的一方在收到信息后,会按照同样的密码本规则来核对一下,如果结果和人发信人发来的结果一致,就说明信的内容完全正确,没有人修改过。

C编写Modbus-Rtu通讯第一步,通讯协议简介

Modbus-Rtu的校验CRC-16 ,公式是 x16+x15+x2+1 计算方式参考上图来做,编辑完成的程序如下:

publicvoid CRC16Calc(byte[] dataBuff, int dataLen)

{

int CRCResult = 0xFFFF;

if (dataLen < 2)

{

return;

}

for (int i = 0; i < (dataLen – 2); i++)

{

CRCResult = CRCResult ^ dataBuff[i];

for (int j = 0; j < 8; j++)

{

if ((CRCResult & 1) == 1)

CR

CResult = (CRCResult >> 1) ^ 0xA001;

else CRCResult >>= 1;

}

}

dataBuff[dataLen – 1] =Convert.ToByte(CRCResult

>> 8);

dataBuff[dataLen – 2] =Convert.ToByte(CRCResult & 0xff);

}

大家可以尝试一下,看看能不能顺利的实现加密解密过程。今天的课程先到这里,我们下期再见!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/108763.html

(0)
上一篇 2024-11-12 17:00
下一篇 2024-11-17 18:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信