请问各位大师:自由口通讯接收到的数据是:3E+,30,30,35,45,34,37,30,30,32,30,44,30,+42,39+,0D,第一个数据3E是开始符,最后的0D是结束符,中间的30.30......到44.30这12个数据是需要传输的内容,然后结束符0D前面的42 . 39两个数据应该是校验码,现在的问题是:
这个校验码是怎么算出来的,我按照BCC校验步骤,把中间的12个数据挨着异或,得出的数据是05,怎么也不等于42..39这两个数啊,变成ASCII码也是B9啊,也不等于05啊
,,求大师指点,感激不尽,到底问题出在哪里了??
问题补充:
WWCWWC:您好!感谢回答,是先变成ASCII码,再累加再取反加一吗?我之前试过,12个数据的ASCII码是005E470020D0,累加取反加一也不对啊/头疼,能不能演示一下计算过程,谢谢了!
最佳答案
关于基于200自由口通讯的ascll校验算法:
算法:将参与校验的数据求和,并将数据和的补码的低八位作为校验码。
补码:将原码(原值)取反加1
LRC校验编程思路:
1) 初始化参与校验的个数(校验数据清零)及参与校验的临时数据
2) 将参与校验的数据写指针(B_I指令)
3) 参与校验的数据进行累加,并记录校验次数
4) 编写循环体(实现参与校验的数据累加)
5) 将结果先取反(INV_W),然后加1
6) 取低八位数据
由于你的算法不是LRC校验的算法,结果会有偏差。
提问者对于答案的评价:
LRC算法是对的,谢谢回答。但是还是无法算出对的结果,不知问题在哪,那位大师有兴趣可以按我给的数据计算一下,看能否得出B9的校验码
最佳答案作者回复:
在不能够确定你的这些数据来源状态下,请移步到论坛关注对200smart关键字的讨论。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc163624.html