前面我们介绍了。今天我们接着来介绍ModBusRtu协议。和ModBusTcp不同的是ModBusRtu基于串口通信,ModBusTcp是基于Tcp以太网通信。
所以我们在讲解ModBusRtu协议之前会先介绍下串口通信。
串口出现在1980年前后,当初主要目的是用来做电脑外设设备的连接,如鼠标、键盘等。现在最新的电脑慢慢的取消了原始的串口接口,不过依然广泛用于工控和测量等设备。
串口通信指的是串口按位(bit)发送和接收字节,串口通信参数主要有波特率、数据位、停止位、校验位。
波特率表达的是串口通信的速率,一秒钟内传送的信号单元(码元)个数。信号单元一般包含10位(7个数据位、1个校验位、1到2个停止位)。注意:波特率和距离成反比
通信中实际的数据,有效值为6、7和8。
用来表示单个包的最后一位,有效值为1、1.5和2。停止位可用来表示传输的结束和校正时钟同步。注意:停止位的位数越多,时钟同步的容忍程度越大,但是数据传输率会越慢。
奇偶校验作为通信中的检错方式,如果发现错误则重新发送。
从上可以看出奇偶校验就是在数据最后加一位,使数据中的1的数量保持偶数或奇数。
比特率是我们常用来表达宽带速率的一种方法。看上去和波特率很像,如果波特率的信号码元只传1比特(bit),那么它们之间是相等的。如果波特率的信号码元传10比特,那么波特率是比特率的10倍。所以,波特率和比特率表达的意义是不一样的,不要搞混了。
CRC,Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。而ModBusRtu用到的是其中的CRC16校验。
其计算原理,可参考 、、
以下是CRC16反向算法,经测试可用于ModBusRtu的CRC计算。
有了报文的分析,具体的协议实现也就不难了。完整实现可参考
//1、实例化客户端 - [COM端口名称,波特率,数据位,停止位,奇偶校验]
//2、写操作 - 参数依次是:地址 、值 、站号 、功能码
//3、读操作 - 参数依次是:地址 、站号 、功能码
//4、如果没有主动Open,则会每次读写操作的时候自动打开自动和关闭连接,这样会使读写效率大大减低。所以建议手动Open和Close。
//5、读写操作都会返回操作结果对象Result
//5.2 读取失败的异常信息
//5.3 读取操作实际发送的请求报文
//5.4 读取操作服务端响应的报文
1、什么是微处理器、微型计算机、微型计算机系统?它们之间有什么区别和联系?
2、画出微型计算机组成框图,并简述各部分的主要功能。
3、微机外部结构特点表现在哪些方面?
4、什么是总线?微机中的总线结构有哪几种?主要功能是什么?
5、什么是计算机中的位?通常一个字节由几位组成?微机中的字长等于一个字节,这种说法对吗?为什么?
6、8位微型机所能表示的最大数是多少?16微型机所能表示的最大数是多少?
7、将下列二进制数转换成十进制数:
8、将下列十进制数转换成二进制数:
9、将下列十进制数转换成十六进制数:
10、将下列十六进制数转换成十进制数:
11、将下列二进制数转换成十六进制数:
12、将下列十六进制数转换成二进制数:
13、将下列十进制数转换成8421BCD码:
14、将下列8421BCD码转换成十进制数:
15、将下列二进制数转换成8421BCD码:
16、将下列8421BCD码转换成二进制数:
17、将下列带符号的十进制数转换成补码:
18、将下列各组数用八位的补码形式相加:
1、在计算机中为什么都采用二进制数而不采用十进制数?二进制数有哪两种缩写形式?
计算机的逻辑器件均采用高低电平来表示。二进制数的0和1正好和逻辑电平的高低相吻合,且二进制数使用和方便。二进制数的两种缩写形式是八进制(用三位二进制数来表示)和十六进制(用四位二进制数表示)。
2、将下列十进制数转化为二进制数:
整数按除2取余,小数按乘2取整转换。
24.31≈01(小数点后只能取近似值);
3、将下列十进制数转换成八进制数和十六进制数:
此题整数可按除8(16)取余或先转换成二进制数,然后再转换为八进制及十六进制,小数可按乘8(16)取整或先转换为二进制后再转换为八进制和十六进制。
4、将下列二进制数转换成十进制数:
二进制到十进制的转换按权位相加法。
(1)B转换为十六进制数;
(2)34.97H转换成八进制数和十进制数;
(3)0BA.7FH转换成二进制数和八进制数;
(4)43.27Q转换为二进制数和十六进制书。
6、设机器字长为8位,写出下列用真值表示的二进制数的原码、补码和反码:
7、设机器字长是8位,最高位是符号位,用二进制补码运算法则对下列各式进行运算:
8、已知下列各数均为二进制补码:
9、设机器字长为8位,最高位为符号位,用双高位法判别下述各二进制运算是否产生溢出,并说明是正溢出还是负溢出。
10、a,b均为用十六进制形式表示的8位带符号数补码,按下列给定的a,b之值进行a+b和a-b的运算,并用双高位法判断是否产生溢出:
11、将下列十进制数变为8421BCD码:
12、将下列8421BCD码表示成十进制数和二进制数:
13、将下列数值或字符串表示成相应的ASCII代码:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。