liwen8966
工控世界讓我們認(rèn)識(shí),更讓我們相識(shí)!
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 31 個(gè)
工控威望: 192 點(diǎn)
下載積分: 601 分
在線時(shí)間: 33(小時(shí))
注冊(cè)時(shí)間: 2008-09-23
最后登錄: 2024-01-09
查看liwen8966的 主題 / 回貼
樓主  發(fā)表于: 2012-05-25 10:48
求助,最近在做MODBUS協(xié)議通信,主要問(wèn)題是校驗(yàn)問(wèn)題CRC16不知道怎么去運(yùn)算,不知道三菱有沒(méi)有這樣的功能自動(dòng)計(jì)算,或者有運(yùn)算公式也可以!謝謝大家
litung
臺(tái)灣-李同在
級(jí)別: VIP會(huì)員
精華主題: 2 篇
發(fā)帖數(shù)量: 578 個(gè)
工控威望: 3224 點(diǎn)
下載積分: 14494 分
在線時(shí)間: 405(小時(shí))
注冊(cè)時(shí)間: 2009-06-06
最后登錄: 2024-09-19
查看litung的 主題 / 回貼
1樓  發(fā)表于: 2012-06-07 01:08
CRC-16碼由兩個(gè)字節(jié)構(gòu)成,在開(kāi)始時(shí)CRC暫存器的每一位都預(yù)置為1,然後把CRC暫存器與8-bit的資料進(jìn)行異或,之後對(duì)CRC暫存器從高到低進(jìn) 行移位,在最高位(MSB)的位置補(bǔ)零,而最低位(LSB,移位後已經(jīng)被移出CRC暫存器)如果為1,則把暫存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,否則如果 LSB為零,則無(wú)需進(jìn)行異或。重複上述的由高至低的移位8次,第一個(gè)8-bit資料處理完畢,用此時(shí)CRC暫存器的值與下一個(gè)8-bit資料異或並進(jìn)行如 前一個(gè)資料似的8次移位。所有的字元處理完成後CRC暫存器內(nèi)的值即為最終的CRC值。

  下面為CRC的計(jì)算過(guò)程:
  1.設(shè)置CRC暫存器,並給其賦值FFFF(hex)。
  2.將資料的第一個(gè)8-bit字元與16位CRC暫存器的低8位進(jìn)行異或,並把結(jié)果存入CRC暫存器。
  3.CRC暫存器向右移一位,MSB補(bǔ)零,移出並檢查L(zhǎng)SB。
  4.如果LSB為0,重複第三步;若LSB為1,CRC暫存器與多項(xiàng)式碼(0xA001)相異或(XOR)。
  5.重複第3與第4步直到8次移位全部完成。此時(shí)一個(gè)8-bit資料處理完畢。
  6.重複第2至第5步直到所有資料全部處理完成。
  7.最終CRC暫存器的內(nèi)容即為CRC值。
本帖最近評(píng)分記錄:
  • 下載積分:+5(550374389) 優(yōu)秀文章
  • 下載積分:+1(陳大圍) 熱心助人
  • 簡(jiǎn)單的心,是真正有福
    單純的心,是真正的快樂(lè)    
    T480 i5-8250U,32GB,SSD:2TB+256G
    litung
    臺(tái)灣-李同在
    級(jí)別: VIP會(huì)員
    精華主題: 2 篇
    發(fā)帖數(shù)量: 578 個(gè)
    工控威望: 3224 點(diǎn)
    下載積分: 14494 分
    在線時(shí)間: 405(小時(shí))
    注冊(cè)時(shí)間: 2009-06-06
    最后登錄: 2024-09-19
    查看litung的 主題 / 回貼
    2樓  發(fā)表于: 2012-06-11 00:01
    若你的PLC是FX3U的話
    不用去管公式
    只要一個(gè)指令,就會(huì)自動(dòng)幫你把結(jié)果算出來(lái)了。

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