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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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