liwen8966
工控世界让我们认识,更让我们相识!
级别: 探索解密
精华主题: 0
发帖数量: 31 个
工控威望: 192 点
下载积分: 601 分
在线时间: 33(小时)
注册时间: 2008-09-23
最后登录: 2024-01-09
查看liwen8966的 主题 / 回贴
楼主  发表于: 2012-05-25 10:48
求助,最近在做MODBUS协议通信,主要问题是校验问题CRC16不知道怎么去运算,不知道三菱有没有这样的功能自动计算,或者有运算公式也可以!谢谢大家
litung
臺灣-李同在
级别: VIP会员
精华主题: 2 篇
发帖数量: 577 个
工控威望: 3224 点
下载积分: 14494 分
在线时间: 405(小时)
注册时间: 2009-06-06
最后登录: 2024-12-27
查看litung的 主题 / 回贴
1楼  发表于: 2012-06-07 01:08
CRC-16碼由兩個字節構成,在開始時CRC暫存器的每一位都預置為1,然後把CRC暫存器與8-bit的資料進行異或,之後對CRC暫存器從高到低進 行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位後已經被移出CRC暫存器)如果為1,則把暫存器與預定義的多項式碼進行異或,否則如果 LSB為零,則無需進行異或。重複上述的由高至低的移位8次,第一個8-bit資料處理完畢,用此時CRC暫存器的值與下一個8-bit資料異或並進行如 前一個資料似的8次移位。所有的字元處理完成後CRC暫存器內的值即為最終的CRC值。

  下面為CRC的計算過程:
  1.設置CRC暫存器,並給其賦值FFFF(hex)。
  2.將資料的第一個8-bit字元與16位CRC暫存器的低8位進行異或,並把結果存入CRC暫存器。
  3.CRC暫存器向右移一位,MSB補零,移出並檢查LSB。
  4.如果LSB為0,重複第三步;若LSB為1,CRC暫存器與多項式碼(0xA001)相異或(XOR)。
  5.重複第3與第4步直到8次移位全部完成。此時一個8-bit資料處理完畢。
  6.重複第2至第5步直到所有資料全部處理完成。
  7.最終CRC暫存器的內容即為CRC值。
本帖最近评分记录:
  • 下载积分:+5(550374389) 优秀文章
  • 下载积分:+1(陈大围) 热心助人
  • 簡單的心,是真正有福
    單純的心,是真正的快樂    
    T480 i5-8250U,32GB,SSD:2TB+256G
    litung
    臺灣-李同在
    级别: VIP会员
    精华主题: 2 篇
    发帖数量: 577 个
    工控威望: 3224 点
    下载积分: 14494 分
    在线时间: 405(小时)
    注册时间: 2009-06-06
    最后登录: 2024-12-27
    查看litung的 主题 / 回贴
    2楼  发表于: 2012-06-11 00:01
    若你的PLC是FX3U的話
    不用去管公式
    只要一個指令,就會自動幫你把結果算出來了。

    若不是的話,程式就要自己寫了
    簡單的心,是真正有福
    單純的心,是真正的快樂    
    T480 i5-8250U,32GB,SSD:2TB+256G