歐姆龍PLC_CP1H_CRC校驗


1.簡介

歐姆龍CP1H PLC的CRC校驗。CP1H沒有CRC校驗指令或者功能塊,在串口自由協議通信中,如果涉及到CRC校驗,需要手動計算CRC值,本程序是一個輸入數據,自動計算CRC校驗碼的程序。

Mov #xx D100   #號表示16進制數據

Mov &xx D100   &號表示10進制數據

2.關鍵指令

2.1 MOVD_數據傳送

以位(4 位)單位進行傳送,具體用法請查詢CP1H編程手冊,此處不做具體描述,僅舉例說明。

例: D200=#AABB(16進制)

   D201=#0000

   D202=#0000

   MOVD D200 #0010 D201

   MOVD D200 #0212 D202

執行后 D201=#00AA

       D202=#BB00

2.2ASR_右移

數據右移一位,相當於原數據除以2. 具體用法請查詢CP1H編程手冊,此處不做具體描述,僅舉例說明。

例:D200=#0003(二進制:0000 0000 0000 0011)

ASR D200

執行結果:D200=#0001(二進制:0000 0000 0000 0001)

2.3XORW_字異或運算

異或運算。字的異或運算。既位與位不同=1.

例:D200=#0001(二進制:0000 0000 0000 0001)

D201=#0003(二進制:0000 0000 0000 0011)

XORW D200 D201 D202

執行后D202=#0002(0000 0000 0000 0010)

2.4ANDW_字與運算

字內的位進行與運算,既兩個位都為1則結過=1.

例:D200=#0001(二進制:0000 0000 0000 0001)

D201=#0003(二進制:0000 0000 0000 0011)

ANDW D200 D201 D202

執行后:D202=#0001(二進制:0000 0000 0000 0001)

2.5指針

此處嚴格來說,不應該叫指針,但是功能與指針類似,姑且稱之為‘指針’。

此處指針僅針對D區域。

例如:MOV &1122 D100

      MOV &100 D200

此時,D200中數值為100.

 MOV @D200 D300

執行后,D300的值應為&1122而不是&100。因為@D200表示是將D200中的數據作為地址編號,把該地址里的內容傳送給D300。相當於間接尋址。

這樣的話有個優勢,我僅對D200進行運算,就可對相應的數據區進行間接操作,在對地址是連續的數據處理非常方便。

2.6FOR…NEXT_循環指令

循環處理指令。具體用法不做闡述,僅以示例說明。

例:

MOV #0 D100

FOR 6

++ D100

NEXT

執行后D100=6.

需要注意的是,在循環指令未執行完前,一般FOR循環體外面的指令將不會執行(此處不嚴謹,僅僅是個人測試出來的)。

2.7 全局子程序

CRC校驗程序放在全局子程序里,值得注意的是,全局子程序需要放在中斷任務0里。如圖2-1所示

 

 

 

圖2-1 中斷程序設置

3.程序簡解

 

 

圖3-1

GSBN 10:全局子程入口  編號10

W500.0:校驗開始

D7000:開始指針。如數據從D200開始,則:MOV &200 D7000

D7002:結束指針。如數據在D205結束,則:MOV &205 D7002

D7005:CRC寄存器。

 

 

 

使用示例:

 

 

圖3-2 字節校驗示例

下面用調試軟件驗證下,校驗是否正確

 

 

圖3-3 調試軟件校驗

從調試軟件看,似乎PLC程序計算出來的校驗碼5C86和調試軟件計算出來的校驗碼865C不一致,沒關系,如果需要CRC高低位互換,可以使用已經高低位互換過的值它保存在D7018中。

4.字校驗

  字校驗和字節校驗一樣,只不過把高8位和低位拆分出來分別計算而已。具體不做詳述,請參照示例程序。

 

示例程序鏈接:https://pan.baidu.com/s/1_k3Ar6SwFT4Lb78i6MxpIQ

能力有限,部分解釋的不是很清楚,還有可能有一些錯誤之處,歡迎大家指出。

有什么疑惑的地方,可留言交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM