网站首页 > 编程文章 正文
前面和大家一起学习了如何使用C#编写串口读写程序和威纶触摸屏实现数据交换。这个通讯是最简陋的通讯方式,只能用于两个设备都是自己编程的情况下。在实际应用中,我们要读取的设备一般都已经做好了通讯协议,而Modbus-Rtu是最常用的协议之一。
作为工业上非常常用的通讯协议,Modbus-Rtu支持一个主机连接多个从站,这意味着485连接成了最合适的总线连接形式。主机作为提问者,根据站号查询每个站的寄存器状态,这种方式叫做轮询。所以连接的从站越多,全部读取一遍所有从站的时间就越长。而且为了总线稳定,两个从站之间的读取还需要一些间隔时间,所以我个人感觉Modbus-Rtu适用于对数据采集频率不高的应用场景中。
Modbus-Rtu的基本格式如上图所示。它包括通信地址、功能代码、数据和差错校验,地址就是主机要通讯的从站地址,功能码就是主机想要从机做什么事情,而数据就是具体要从站完成的事情。
功能码常用的就是上图中的几个,学会这几个基本上就能用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);
}
大家可以尝试一下,看看能不能顺利的实现加密解密过程。今天的课程先到这里,我们下期再见!
猜你喜欢
- 2024-10-16 Modbus通讯协议格式简介(modbus通讯协议格式详解过程)
- 2024-10-16 1200PLC Modbus TCP 通讯(1200的modbus tcp)
- 2024-10-16 modbus协议实例讲解(modbus几种协议区别)
- 2024-10-16 FOXBORO fbm230 现场设备系统集成商(FDSI)Modbus 主站驱动程序
- 2024-10-16 虹科干货 | 教您如何解析MODBUS中的浮点型数据
- 2024-10-16 MODBUS通信异常?调试助手来帮忙(modbus调试软件)
- 2024-10-16 全面讲解Modbus RTU通信及指令,初学PLC必看!
- 2024-10-16 力控组态软件modbus-rtu、modbus-tcp的用法
- 2024-10-16 你好,我是Modbus TCP协议(modbus tcp master)
- 2024-10-16 西门子S7-1200 和CB1241 MODBUS RTU 通信
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)