日志档案

发表于 2008-7-1 21:14:46

0

标签: 无标签

闲话MODBUS通讯(3)

关于MODBUS RTUcrc校验,在百度上居然发现某些网页给出的算法有误,真是晕,还好找到了两段程序,一个是lad写的(就是亿万论坛上有网友发的340slave的例程)另外一个是scl写的,模拟了下发现结果是相同的,再对照算法看完程序心中有数了。

crc16的算法(应该是正确的,呵呵):

①装入一个16位寄存器,所有数位均为1

②该16位寄存器与开始8位字节进行"异或"运算。运算结果放入这个16位寄存器。

③把这个16寄存器向右移一位。

④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行"异或"运算;若向右移出的数位是0,则返回③。

⑤重复③和④,直至移出8位。

⑥另外8位与该十六位寄存器进行"异或"运算。

⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行"异或"运算,并移位8次。

⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。

系统分类: PLC/PAC   |   用户分类: 杂谈   |   来源: 原创

    阅读(324)    回复(3)  

最新评论

  • LION

    2008-7-14 15:27:19

    你的算法没错,只是没有多少人按照这种算法能将程序编出来,应为中间有一步是错误的阐述!就是移为与检验那里!我在E10000上有

    200的代码,看看就明白啦!

  • yzdatou

    2008-7-15 19:16:00

     哦?

    我据此编了一个crc模块并且用标准modbus软件进行了验证,是对的。可能是你对字面的理解不同吧

  • runhaoc

    2008-7-17 10:08:28

    sem