基于S7-300PLC的電力系統(tǒng)CDT規(guī)約的解析
6 協(xié)議解析思路
三遙功能的實現(xiàn)。
遙測量的信息:主要在a、b、c幀中,遙信信息在d1幀,電能脈沖數(shù)據(jù)在d2幀,事件順序記錄在e幀。rtu會通過固定循環(huán)傳送向plc傳送(其中soe為幀插入方式傳送)。
遙控的過程則需要plc向rtu發(fā)送下行遙控命令;然后rtu會以信息字插入的方式向plc發(fā)送遙控返校信息;plc收到信息并確認后再向rtu發(fā)送遙控執(zhí)行命令,或者撤銷命令;最后rtu執(zhí)行plc下發(fā)的遙控命令,并將遙信變位信號以信息字插入方式返送到plc。整個遙控過程如圖5所示。
7 plc程序設(shè)計
7.1主程序
主程序放在一個功能fc內(nèi),由主程序塊ob1調(diào)用執(zhí)行。通信程序首先通過調(diào)用功能塊fb2對cdt數(shù)據(jù)的接收,并轉(zhuǎn)存入數(shù)據(jù)接收區(qū)db20中。之后調(diào)用數(shù)據(jù)整理塊,取出db20中的一個字(6個字節(jié)),并查找同步字(eb90
eb90
eb90)。找到同步字之后再取下面的6個字節(jié)(控制字),并進行處理。然后根據(jù)控制字中的提供的信息字個數(shù),分別對幀的信息字進行處理。在對控制字和信息字處理的時候首先進行crc的校驗,如果有錯誤,則拋棄此幀,進行下一幀同步字的查找[3]。程序主要部分如下:
call “rcv_data” //接收數(shù)據(jù)并存儲至db20
call “check_6byte” //處理數(shù)據(jù),判斷是否有6個字節(jié)
a “istransneed” //需要處理數(shù)據(jù)
jc _001
ju com
_001:call “check_eb90” //查找同步字
a “isframetrans” //需要幀處理
jc _002
ju com
_002:call “contrw_trans” // 控制字處理
a “isinfotrans” //需要信息字處理
jc _003
ju com
_003:call “infow_trans” //信息字解析
com: nop 0
7.2數(shù)據(jù)的接受和處理
由于300plc處理數(shù)據(jù)的時間遠比rtu傳送來數(shù)據(jù)的速率要快。因此不會存在rtu傳送的數(shù)據(jù)出現(xiàn)覆蓋情況。在db20中建120個字節(jié)作為cpu接收rtu數(shù)據(jù)的緩沖區(qū),因為cdt規(guī)約中無論是同步字、控制字還是信息字均為6個字節(jié)長,因此數(shù)據(jù)緩沖區(qū)可以存20個字。數(shù)據(jù)接收塊(rcv_data)對來自rtu數(shù)據(jù)的接收,并轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū)db20中。處理數(shù)據(jù)塊(check_6byte)是為了判斷db20中的數(shù)據(jù)是否有六個字節(jié),如果有6個字節(jié)則置位“需要處理位”(istransneeded),為下面查找同步字打開通路;如果沒有6個字節(jié)則結(jié)束子程序功能塊,等待plc下個掃描周期對數(shù)據(jù)的接收。
7.3同步字查找
當以上程序判斷出數(shù)據(jù)緩沖區(qū)中有大于6個字節(jié)的數(shù)據(jù),將會調(diào)用同步字查找塊(check_eb90)。對取回的數(shù)據(jù)進行處理首要問題就是要找到同步字,可依次取出六個字節(jié),并判斷它們是否為同步字(三組eb90h)。若不是,則丟掉第一個字節(jié),同時再取出隨后的那個字節(jié),再次進行判斷。每個plc的掃描周期都要重復(fù)這樣的過程,直到找到同步字為止。當找到兩個同步字,將同步字之間的數(shù)據(jù)轉(zhuǎn)存到控制、信息字db區(qū),并置位“需要幀處理”標志位(isframetrans)。










