通讯modbuslrc效验为什么要1取反是多少加1

三菱PLC中LRC校验码程序编写方法图解

Φ的LRC校验码程序的编写在PLC与设备进行通讯时采用MODBUS协议时,一般会有两种数据模式1是RTU模式,2是ASCII码模式RTU的数据传输采用CRC校验,而ASCII码则采鼡LRC校验值LRC值校验涵盖从从机地址到数据的信息部分,校验和等于所有参与校验数据的字符和的补码

我们先说下具体的校验码怎么计算,然后说

的LRC校验码程序的编写

采用ASCII码模式控制

指令:01 03 21 00 00 01,这条指令中01一般是站号03是读取命令,2100是参数地址(例如运行频率)00 01代表数据的个數。那么它的LRC校验码怎么计算:指令的数据是16进制的和为:0x01+0x03+0x21+0x01=0x26,对0x25取2的补码就是DA,具体计算就是1取反是多少加1如:0x26=B,1取反是多少后得到B,加1嘚到BxDA,那么LRC校验码就是DA

明白了它的计算过程接下来我们在PLC编写它的算法,我们知道在PLC的运算中都是十进制的为了方便转换和计算,可采取另外一种方法(原理一样)我们知道ASCII码是2位的16进制数,1取反是多少过程可看做0xFF减去检验总和如上述的0x26、0x43加1就变成0x100减去检验总和,转换成10進制的就是256(D)-和(D),再经过ASCI指令转换成ACIIS码就可以了以下面梯形图进行说明:


使用一个变址寄存器Z0对数据D201到D206进行累加求和D40,最后用K256减去41就是LRC校验碼215通过ASCI指令转换成ASCII码,通过查看扩展ASCII码表:

}

纵向冗余校验(Longitudinal Redundancy Check简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。在行列格式中(如磁带)LRC经常是与VRC一起使用,这样就会为每个字符校验码在工业领域Modbus协议Ascii模式采用该算法。
1、对需要校验的数据(2n个字符)两两组成一個16进制的数值求和
2、将求和结果与256求模。
3、用256减去所得模值得到校验结果(另一种方法:将模值按位1取反是多少然后加1)

}

CTRL+A :选中全部CTRL+C:复制,CTRL+V:粘贴【】【】【

输入连续或空格隔开的16进制ASCII码字符串后点击计算,可求其10进制累加值、16进制累加值、LRC校验(16进制,HEX)、LRC校验(ASCII码,HEX)、LRC校验(10进制,DEC)、LRC校验(2進制,BIN)、字节数(HEX)、字节数(DEC)等结果对于16进制方式,系统默认两个字符表示一个字节所以必须输入偶数个字符才能进行计算。

注:如果输入嘚是汉字本软件的计算结果为汉字Uincode编码的累加和(不是GB2312)。

本程序适用于串口调试助手调试过程中Modbus通讯ASCII模式的LRC(纵向冗余校验码)计算和数據包字节数统计

纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式也称LRC校验或纵向校验。它是一种从纵向通道上的特定比特串產生校验比特的错误检测方法在工业领域,Modbus协议Ascii模式采用该算法进行校验 

1、对需要校验的数据(2n个字符)两两组成一个16进制的数值求囷。 

3、用256减去所得模值得到校验结果(另一种方法:将模值按位1取反是多少然后加1) 

2)当选择ASCII码输入时:每1个字符即为一个字节,相当叺两个16进制字符如:ASCII码的‘1’,即代表0x31

1、对需要校验的数据(n个字符)的ASCII码原值求和。 

3、用256减去所得模值得到校验结果(另一种方法:将模值按位1取反是多少然后加1) 

}

我要回帖

更多关于 1取反是多少 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信