zycyhwan
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個(gè)
工控威望: * 點(diǎn)
下載積分: * 分
在線時(shí)間: (小時(shí))
注冊時(shí)間: *
最后登錄: *
查看zycyhwan的 主題 / 回貼
樓主  發(fā)表于: 2010-07-02 21:22
圖片:
各位好,這個(gè)CRC CHECK是怎么算出來的??我一同學(xué)問我,我完全不懂啊謝謝。
cvlsam
富士低壓,POD(觸摸屏),PLC專賣
級別: VIP會員

精華主題: 3 篇
發(fā)帖數(shù)量: 6767 個(gè)
工控威望: 38368 點(diǎn)
下載積分: 2911 分
在線時(shí)間: 9504(小時(shí))
注冊時(shí)間: 2006-09-13
最后登錄: 2024-11-16
查看cvlsam的 主題 / 回貼
1樓  發(fā)表于: 2010-07-03 05:47
這個(gè)是Modbus RTU CRC16,套用的多項(xiàng)式為X16+X15+X2+1

算法為:將初始數(shù)據(jù)設(shè)置為FFFF,然后,將第一個(gè)數(shù)據(jù)H05與初始數(shù)據(jù)做異或,結(jié)果保存在CRC寄存器中。
               將CRC中的數(shù)據(jù)右移,直到Flag位為1,將結(jié)果與多項(xiàng)式進(jìn)行異或,保存在CRC寄存器,然后CRC寄存器中的數(shù)據(jù)繼續(xù)右移,直到Flag為1,然后繼續(xù)上面這一步,直到第一個(gè)數(shù)據(jù)處理完畢。此時(shí),裝入第二個(gè)數(shù)據(jù),繼續(xù)上述過程,直到所有的數(shù)據(jù)處理完畢。

你的這個(gè)如果使用手工計(jì)算的話,大約要計(jì)算61步,其中還要確保你不被轉(zhuǎn)暈掉。用Execl畫表格計(jì)算會更快一點(diǎn),當(dāng)然,你也可以去下載計(jì)算器來計(jì)算。

Regards
本帖最近評分記錄:
  • 下載積分:+2(zycyhwan) 感謝分享
  • 下載積分:+2(lcl1990) 謝謝您!
    zycyhwan
    級別: *
    精華主題: * 篇
    發(fā)帖數(shù)量: * 個(gè)
    工控威望: * 點(diǎn)
    下載積分: * 分
    在線時(shí)間: (小時(shí))
    注冊時(shí)間: *
    最后登錄: *
    查看zycyhwan的 主題 / 回貼
    2樓  發(fā)表于: 2010-07-03 17:09
    圖片:
    圖片:
    圖片:
    引用
    引用第1樓cvlsam于2010-07-03 05:47發(fā)表的  :
    這個(gè)是Modbus RTU CRC16,套用的多項(xiàng)式為X16+X15+X2+1

    算法為:將初始數(shù)據(jù)設(shè)置為FFFF,然后,將第一個(gè)數(shù)據(jù)H05與初始數(shù)據(jù)做異或,結(jié)果保存在CRC寄存器中。
                   將CRC中的數(shù)據(jù)右移,直到Flag位為1,將結(jié)果與多項(xiàng)式進(jìn)行異或,保存在CRC寄存器,然后CRC寄存器中的數(shù)據(jù)繼續(xù)右移,直到Flag為1,然后繼續(xù)上面這一步,直到第一個(gè)數(shù)據(jù)處理完畢。此時(shí),裝入第二個(gè)數(shù)據(jù),繼續(xù)上述過程,直到所有的數(shù)據(jù)處理完畢。

    .......

    這位大哥,你說的多項(xiàng)式為1 1000 0000 0000 0101嗎?你說的直到Flag位為1怎么說,我算來算去都不正確,如上圖。

    2. 我按臺達(dá)變頻器說明書的做法算了十幾頁也不正確,接近崩潰。

    3. 按你的提示,我下載了個(gè)CRC計(jì)算器,可那個(gè)“字符串”要填多少??問題多了點(diǎn),請見諒。
    cvlsam
    富士低壓,POD(觸摸屏),PLC專賣
    級別: VIP會員

    精華主題: 3 篇
    發(fā)帖數(shù)量: 6767 個(gè)
    工控威望: 38368 點(diǎn)
    下載積分: 2911 分
    在線時(shí)間: 9504(小時(shí))
    注冊時(shí)間: 2006-09-13
    最后登錄: 2024-11-16
    查看cvlsam的 主題 / 回貼
    3樓  發(fā)表于: 2010-07-03 17:57
    1、Flag是什么,右移標(biāo)志位,并不是每右移一步既要XOR異或的,只有標(biāo)志位為1時(shí)才進(jìn)行。
    如:1000 1111 1001 1000,那么需要右移4位后,才進(jìn)行XOR異或,右移一次0 1000 1111 1001 100 Flag中為0,不進(jìn)行XOR,右移第二次,00 1000 1111 1001 10 Flag中仍然為0,右移第三次,000 1000 1111 1001  1 Flag中仍然為0,右移第4次,0000 1000 1111 1001 此時(shí)Flag中為1,進(jìn)行異或。
    2、手工計(jì)算絕對會崩潰的,早上早點(diǎn)起床進(jìn)行計(jì)算,頭腦清晰。
    3、字符串請你填入你要計(jì)算的字符串啊,比如你現(xiàn)在的05 06 00 0D 17 70。具體你要看你的軟件說明,我自己寫的計(jì)算器是輸入0506000D1770進(jìn)行計(jì)算的,查表法要快于一般算法,但是要正確的建立表才是關(guān)鍵,查表法有出錯(cuò)的可能,但是可以忽略。

    如果你使用高級語言與之通訊,那么相關(guān)高級語言的CRC算法鋪天蓋地。

    Regards
    cvlsam
    富士低壓,POD(觸摸屏),PLC專賣
    級別: VIP會員

    精華主題: 3 篇
    發(fā)帖數(shù)量: 6767 個(gè)
    工控威望: 38368 點(diǎn)
    下載積分: 2911 分
    在線時(shí)間: 9504(小時(shí))
    注冊時(shí)間: 2006-09-13
    最后登錄: 2024-11-16
    查看cvlsam的 主題 / 回貼
    4樓  發(fā)表于: 2010-07-03 18:00
    另外,樓主找的CRC16工具中的多項(xiàng)式為H8408,多項(xiàng)式為X16+X10+X4并非臺達(dá)使用的,臺達(dá)使用的多項(xiàng)式為HA001.

    所以是不會得到與教程中相符的結(jié)果的。

    Regards
    本帖最近評分記錄:
  • 下載積分:+2(zycyhwan) 熱心助人
    zycyhwan
    級別: *
    精華主題: * 篇
    發(fā)帖數(shù)量: * 個(gè)
    工控威望: * 點(diǎn)
    下載積分: * 分
    在線時(shí)間: (小時(shí))
    注冊時(shí)間: *
    最后登錄: *
    查看zycyhwan的 主題 / 回貼
    5樓  發(fā)表于: 2010-07-03 21:19
    引用
    引用第4樓cvlsam于2010-07-03 18:00發(fā)表的  :
    另外,樓主找的CRC16工具中的多項(xiàng)式為H8408,多項(xiàng)式為X16+X10+X4并非臺達(dá)使用的,臺達(dá)使用的多項(xiàng)式為HA001.

    所以是不會得到與教程中相符的結(jié)果的。

    Regards

    謝謝樓上的大哥,我不敢再算這個(gè)了,還是讓軟件自己算了