关于MODBUS RTU的crc校验,在百度上居然发现某些网页给出的算法有误,真是晕,还好找到了两段程序,一个是lad写的(就是亿万论坛上有网友发的340做slave的例程)另外一个是scl写的,模拟了下发现结果是相同的,再对照算法看完程序心中有数了。
WWW_PL※CJS_COM-PLC-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
plcjs.技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
plcjs.技.术_网
附crc-16的算法(应该是正确的,呵呵):WWW_PL※CJS_COM-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
①装入一个16位寄存器,所有数位均为1。WW.W_PLCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
②该16位寄存器与开始8位字节进行"异或"运算。运算结果放入这个16位寄存器。P.L.C.技.术.网——可编程控制器技术门户
WWW_PLCJS_COM-PLC-技.术_网
③把这个16寄存器向右移一位。WW.W_PLCJS_COM-PLC-技.术_网
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行"异或"运算;若向右移出的数位是0,则返回③。WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
⑤重复③和④,直至移出8位。WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
⑥另外8位与该十六位寄存器进行"异或"运算。WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
P.L.C.技.术.网——可编程控制器技术门户
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行"异或"运算,并移位8次。W1WW_P4LCJS_COM-PLC-技.术_网
⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。 WW.W_PLCJS_COM-PLC-技.术_网