【分享】通訊與設(shè)備交互,CRC效驗(yàn)程序如何編寫
吳翠萍
發(fā)布于2021-03-01 15:08
14
2
標(biāo)簽:西門子PLC,S7-200SMART,PLC案例
【點(diǎn)擊領(lǐng)取】三菱案例 | 西門子案例 | 電工手冊(cè) | 工具箱 軟件
【點(diǎn)擊獲取】三菱PLC例程117個(gè)|西門子PLC例程777個(gè)
【點(diǎn)擊下載】2020最新電工仿真軟件
導(dǎo)讀:在工作現(xiàn)場(chǎng),經(jīng)常會(huì)用到通訊與其它設(shè)備交互信息,而通訊必然會(huì)需要效驗(yàn)。而初學(xué)者學(xué)習(xí)MODBUS RTU的時(shí)候往往會(huì)糾結(jié)這個(gè)CRC效驗(yàn)程序如何編寫?
CRC效驗(yàn)程序相對(duì)來(lái)說(shuō)比較繁瑣,但是大家可以收藏好這個(gè)程序(使用200SMART PLC),加以理解,需要的時(shí)候調(diào)用此程序即可。
那首先我們來(lái)看CRC效驗(yàn)的步驟,嚴(yán)格按照步驟來(lái)寫程序即可:
1、 設(shè)置CRC存儲(chǔ)器為16#FFFF。
2、 把第一個(gè)參與校驗(yàn)的8位數(shù)與CRC的低八位進(jìn)行異或運(yùn)算結(jié)果仍存與CRC。
3、 把CRC右移一位,最高位補(bǔ)0,檢查最低位b0位。
4、 若b0=0,CRC不變,若b0=1, CRC與16#A001進(jìn)行異或運(yùn)算,結(jié)果仍存與CRC。
5、 重復(fù)3、4兩步,直到右移8次,這樣第一個(gè)八位數(shù)就進(jìn)行處理了結(jié)果仍然存于CRC。
6、 重復(fù)2-5步,處理第二個(gè)八位數(shù)。
【程序結(jié)構(gòu)描述】
1、西門子S7-200SMART系列PLC的程序結(jié)構(gòu)分為主程序、子程序、中斷程序。此程序用“MAIN”程序調(diào)用“CRC效驗(yàn)程序”子程序
定義子程序變量表:如圖1-0
子程序變量表定義圖1-0
案例源程序下載,請(qǐng)看文末
(1)“CRC效驗(yàn)程序”子程序,初始化存儲(chǔ)器,并把16#FFFF裝載到CRC寄存器中(定義AC0為CRC寄存器)。并利用FOR語(yǔ)句循環(huán),循環(huán)的次數(shù)由LW4決定。程序如圖1-1所示
圖1-1初始化存儲(chǔ)器
(2)取第一個(gè)地址與CRC寄存器做異或運(yùn)算。并利用FOR語(yǔ)句循環(huán),循環(huán)的次數(shù)為8,因?yàn)橐粋€(gè)字節(jié)的數(shù)據(jù)是8個(gè)位。程序如圖1-2所示
圖1-2異或運(yùn)算
案例源程序下載,請(qǐng)看文末
(3)執(zhí)行移位操作,并判斷移出為的狀態(tài),若移出位為1,則在與16#A001做異或運(yùn)算。程序如圖1-3所示
圖1-3執(zhí)行移位操作
(4)利用指針,指針加1,指向下一個(gè)地址,取出下一個(gè)地址之后再進(jìn)行重復(fù)以上步驟效驗(yàn),直到數(shù)據(jù)都效驗(yàn)完,程序退出FOR循環(huán)。程序如圖1-4所示
圖1-4指針加1
(5)對(duì)計(jì)算結(jié)果進(jìn)行高低字節(jié)交換,把結(jié)果輸出。程序如圖1-5所示
圖1-5高低字節(jié)交換
(6)在“MAIN”程序中通過(guò)按鈕的觸發(fā)調(diào)用“CRC效驗(yàn)程序”子程序。
案例源程序下載,請(qǐng)看文末
驗(yàn)證一:寫入數(shù)據(jù)到VB0至VB5中,CRC效驗(yàn)值存儲(chǔ)在VW100中
CRC效驗(yàn)計(jì)算小助手(與程序中計(jì)算相符):
驗(yàn)證二:寫入數(shù)據(jù)到VB0至VB5中,CRC效驗(yàn)值存儲(chǔ)在VW100中
CRC效驗(yàn)計(jì)算小助手計(jì)算(與程序中計(jì)算相符):
(技成培訓(xùn)網(wǎng)原創(chuàng),作者:郭彪,未經(jīng)授權(quán)不得轉(zhuǎn)載,違者必究)
【源程序下載】
