zycyhwan
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zycyhwan的 主题 / 回贴
楼主  发表于: 2010-07-02 21:22
图片:
各位好,这个CRC CHECK是怎么算出来的??我一同学问我,我完全不懂啊谢谢。
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6770 个
工控威望: 38371 点
下载积分: 3382 分
在线时间: 9517(小时)
注册时间: 2006-09-13
最后登录: 2024-11-29
查看cvlsam的 主题 / 回贴
1楼  发表于: 2010-07-03 05:47
这个是Modbus RTU CRC16,套用的多项式为X16+X15+X2+1

算法为:将初始数据设置为FFFF,然后,将第一个数据H05与初始数据做异或,结果保存在CRC寄存器中。
               将CRC中的数据右移,直到Flag位为1,将结果与多项式进行异或,保存在CRC寄存器,然后CRC寄存器中的数据继续右移,直到Flag为1,然后继续上面这一步,直到第一个数据处理完毕。此时,装入第二个数据,继续上述过程,直到所有的数据处理完毕。

你的这个如果使用手工计算的话,大约要计算61步,其中还要确保你不被转晕掉。用Execl画表格计算会更快一点,当然,你也可以去下载计算器来计算。

Regards
本帖最近评分记录:
  • 下载积分:+2(zycyhwan) 感谢分享
  • 下载积分:+2(lcl1990) 谢谢您!
    zycyhwan
    级别: *
    精华主题: * 篇
    发帖数量: * 个
    工控威望: * 点
    下载积分: * 分
    在线时间: (小时)
    注册时间: *
    最后登录: *
    查看zycyhwan的 主题 / 回贴
    2楼  发表于: 2010-07-03 17:09
    图片:
    图片:
    图片:
    引用
    引用第1楼cvlsam于2010-07-03 05:47发表的  :
    这个是Modbus RTU CRC16,套用的多项式为X16+X15+X2+1

    算法为:将初始数据设置为FFFF,然后,将第一个数据H05与初始数据做异或,结果保存在CRC寄存器中。
                   将CRC中的数据右移,直到Flag位为1,将结果与多项式进行异或,保存在CRC寄存器,然后CRC寄存器中的数据继续右移,直到Flag为1,然后继续上面这一步,直到第一个数据处理完毕。此时,装入第二个数据,继续上述过程,直到所有的数据处理完毕。

    .......

    这位大哥,你说的多项式为1 1000 0000 0000 0101吗?你说的直到Flag位为1怎么说,我算来算去都不正确,如上图。

    2. 我按台达变频器说明书的做法算了十几页也不正确,接近崩溃。

    3. 按你的提示,我下载了个CRC计算器,可那个“字符串”要填多少啊??问题多了点,请见谅。
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6770 个
    工控威望: 38371 点
    下载积分: 3382 分
    在线时间: 9517(小时)
    注册时间: 2006-09-13
    最后登录: 2024-11-29
    查看cvlsam的 主题 / 回贴
    3楼  发表于: 2010-07-03 17:57
    1、Flag是什么,右移标志位,并不是每右移一步既要XOR异或的,只有标志位为1时才进行。
    如:1000 1111 1001 1000,那么需要右移4位后,才进行XOR异或,右移一次0 1000 1111 1001 100 Flag中为0,不进行XOR,右移第二次,00 1000 1111 1001 10 Flag中仍然为0,右移第三次,000 1000 1111 1001  1 Flag中仍然为0,右移第4次,0000 1000 1111 1001 此时Flag中为1,进行异或。
    2、手工计算绝对会崩溃的,早上早点起床进行计算,头脑清晰。
    3、字符串请你填入你要计算的字符串啊,比如你现在的05 06 00 0D 17 70。具体你要看你的软件说明,我自己写的计算器是输入0506000D1770进行计算的,查表法要快于一般算法,但是要正确的建立表才是关键,查表法有出错的可能,但是可以忽略。

    如果你使用高级语言与之通讯,那么相关高级语言的CRC算法铺天盖地。

    Regards
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6770 个
    工控威望: 38371 点
    下载积分: 3382 分
    在线时间: 9517(小时)
    注册时间: 2006-09-13
    最后登录: 2024-11-29
    查看cvlsam的 主题 / 回贴
    4楼  发表于: 2010-07-03 18:00
    另外,楼主找的CRC16工具中的多项式为H8408,多项式为X16+X10+X4并非台达使用的,台达使用的多项式为HA001.

    所以是不会得到与教程中相符的结果的。

    Regards
    本帖最近评分记录:
  • 下载积分:+2(zycyhwan) 热心助人
    zycyhwan
    级别: *
    精华主题: * 篇
    发帖数量: * 个
    工控威望: * 点
    下载积分: * 分
    在线时间: (小时)
    注册时间: *
    最后登录: *
    查看zycyhwan的 主题 / 回贴
    5楼  发表于: 2010-07-03 21:19
    引用
    引用第4楼cvlsam于2010-07-03 18:00发表的  :
    另外,楼主找的CRC16工具中的多项式为H8408,多项式为X16+X10+X4并非台达使用的,台达使用的多项式为HA001.

    所以是不会得到与教程中相符的结果的。

    Regards

    谢谢楼上的大哥,我不敢再算这个了,还是让软件自己算了