邏輯運算指令在PLC校驗程序中的應(yīng)用
發(fā)布時間:2024-04-03 14:51 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 快樂小女

PLC控制項目中,經(jīng)常會用到PLC和其他設(shè)備通訊發(fā)送接收數(shù)據(jù)信息等,通訊必然會用到校驗,比如求和校驗、LRC校驗、CRC校驗等,一般來說MODBUS ASCII通訊方式會采用LRC校驗,MODBUS RTU通訊方式會采用CRC校驗,其實這些校驗程序中會利用到一些邏輯運算指令,那么這些校驗程序應(yīng)該怎么編寫呢,下面小編就給大家介紹一下邏輯運算指令在PLC校驗程序中的應(yīng)用吧。

案例1、邏輯運算指令在求和校驗中的應(yīng)用。

求和校驗算法:將參與校驗的數(shù)據(jù)求和,取其低8位為校驗碼。

校驗數(shù)據(jù)為D0~D7共8個,先用CCD D0 D100 K8進行求和運算(指令中的K8就代表D0開始的8個寄存器,即D0~D7),求和結(jié)果存在D100中,再用WAND H0FF D100 D100進行邏輯與運算,根據(jù)邏輯與運算指令有0出0的特點,取出D100的低8位數(shù)據(jù),再存放回D100中,所得出來的即為求和校驗碼。

案例2、邏輯運算指令在LRC校驗中的應(yīng)用。

LRC校驗算法:將參與校驗的數(shù)據(jù)求和,并將和的補碼(低8位)作為校驗碼。

校驗數(shù)據(jù)為D10~D19共10個,先用CCD D10 D110 K10進行求和運算,求和結(jié)果存在D110中,根據(jù)算法還要求出其補碼,用NEG指令即可求出補碼,最后再用WAND H0FF D110 D110進行邏輯與運算,根據(jù)邏輯與運算指令有0出0的特點,取出D110的低8位數(shù)據(jù),再存放回D110中,所得出來的即為求和校驗碼。

除了用NEG指令求補碼,還可以采用求反再加1的方法,程序如下圖,CCD求和之后,用SUB H0FFFF D120 D120進行減法運算,即為求反功能,再用INC D120加1,同樣可以求出其補碼出來。

案例3、邏輯運算指令在CRC校驗中的應(yīng)用。CRC校驗算法:

1、設(shè)置CRC存儲器為HFFFF;

2、把第一個參與校驗的8位二進制數(shù)與CRC低8位進行異或運算,結(jié)果仍存于CRC存儲器。

3、把CRC存儲器右移一位,最高位補0,檢查最低位b0位;

4、若b0=0,CRC存儲器不變,若b0=1,CRC存儲器與HA001(1010 0000 0000 0001)進行異或運算,結(jié)果仍存于CRC存儲器;

5、重復(fù)3~4兩步,直到右移8次,這樣第一個8位數(shù)據(jù)全部進行了處理,結(jié)果仍存于CRC。

6、重復(fù)2~5步,處理第二個8位二進制數(shù)。

7、如此處理,直到所有參與校驗的8位二進制數(shù)全部處理完畢,結(jié)果CRC寄存器所存的就是CRC校驗碼。

如果是將CRC校驗程序做成子程序,需要先在主程序中用CALL P0指令進行調(diào)用,子程序的結(jié)尾需用SRET作為子程序的結(jié)束。


首先做之后需要用到的變址寄存器Z10進行清零,同時用WXOR H0FFFF K0 D10指令,將HFFFF存到D10中,設(shè)置CRC存儲器為HFFFF。根據(jù)算法第2步到第5步之間是需要循環(huán)的,同時用FOR D0設(shè)置循環(huán)次數(shù),循環(huán)多少次是取決于校驗數(shù)據(jù)個數(shù)D0的。

然后把第一個參與校驗的8位二進制數(shù)與CRC低8位進行異或運算,結(jié)果仍存于CRC存儲器。WAND H0FF D100Z10 D11取出第一個校驗數(shù)據(jù)的低8位,并用WXOR D10 D11 D10CRC低8位進行異或運算,結(jié)果存回D10中,同時對Z10進行加1,這是為了讓下次運算時是把下一個參與校驗的數(shù)據(jù)D101進行處理。因為后面的第3步到第4步之間是需要循環(huán)8次的,也要用FOR K8、NEXT指令進行循環(huán),后面將第3步和第4步的程序編寫在FOR NEXT指令之間。

根據(jù)算法的第3、4步,CRC存儲器右移一位,最高位補0,檢查最低位b0位,用RCR D10 K1循環(huán)右移指令即可完成,b0=0,CRC存儲器不變,若b0=1,即進位標志SM8022為ON,CRC存儲器D10HA001(1010 0000 0000 0001)進行異或運算,結(jié)果仍存于CRC存儲器D10中,直到右移8次,這樣第一個8位數(shù)據(jù)全部進行了處理


直到所有參與校驗的8位二進制數(shù)全部處理完畢,CRC寄存器所存的就是CRC校驗碼,最后再用WAND指令取出CRC校驗值的低8位和高8位,再用SWAP指令進行高低字節(jié)交換即可。

以上就是PLC通訊程序中常用的求和、LRC和CRC校驗程序,你看明白了嗎?記得收藏起來備用哦~

S7-1200SCL入門基礎(chǔ)教程
我要自學(xué)網(wǎng)商城 ¥40 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔因您的行為而導(dǎo)致的法律責任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
分類選擇:
電腦辦公 平面設(shè)計 室內(nèi)設(shè)計 室外設(shè)計 機械設(shè)計 工業(yè)自動化 影視動畫 程序開發(fā) 網(wǎng)頁設(shè)計 會計課程 興趣成長 AIGC