徐春鵬,王 海(通訊作者),邸寒旭
(沈陽理工大學 遼寧 沈陽 110159)
S7-1200在以太網及PROFINET方面和編程的靈活性等方面的優(yōu)點,正在取代S7-200。學校的教材及實驗內容及時調整,引進了S7-1200。在用S7-1200的程序替代原S7-200中的程序,看似簡單的移植工作,出現(xiàn)問題,程序出現(xiàn)了異常,這無法解釋。程序涉及的指令并不多,主要是定時器,問題應該出現(xiàn)在對定時器特性的認識。為使問題簡化,將程序提煉如圖1所示,自復位定時器產生脈沖程序[1]。
圖1 S7-200中的原程序
M10.0為啟動信號,閉合后定時器開始計時,當計時到設定值5s后執(zhí)行記數(shù)器加1,在下一個掃描周期T37線圈斷電,重新計時。即5s發(fā)1個脈沖給計數(shù)器。移植后的程序如圖2所示,定時器時間到后,觀察較長時間并不計數(shù)。
S7 PLC的定時器在什么時刻更新是問題所在。首先,明確S7-200的更新過程,S7-200中10 ms分辨率的定時器按以下規(guī)律刷新:定時器位和當前值在每個程序掃描周期的開始刷新。定時器位和當前值在整個掃描周期過程中為常數(shù)。在每個掃描周期的開始會將一個掃描累計的時間間隔加到定時器的當前值上[2]。
根據(jù)實際情況分析,對定時器的更新沒有發(fā)生在由程序1到程序2的中間階段。不妨將兩句程序互換位置,如圖2所示,長時間反復觀察,計數(shù)器計數(shù)正常無誤。為說明清楚問題,如圖3所示,將PLC的掃描過程分為如下四個階段:A是在程序段1之前和程序段2之后的時間片,這里包括了可能的I/O刷新和通訊處理等;B階段為處理程序段1的時間;C為程序段1和程序段2之間的時間片,由于之間沒有內容,這里暫時無;D處理程序段2的時間。一個掃描周期由A、B、C、D四段組成。
此例說明定時器的狀態(tài)是在AUB階段,而不是CUD階段(當前程序行處理時)更新的。否則先復位定時器,不能計數(shù)。
為觀測清楚更新是否相對于掃描階段是隨機的,加大兩句程序的執(zhí)行間隔,即在C階段插入盡量大的運算時間[3],定義為FC,如果定時器是隨機更新,一定會有正在執(zhí)行兩句程序之間(C階段)觸發(fā)定時器的時候,即計數(shù)值會缺少。
圖2 S7-1200中的實驗程序
圖3 程序執(zhí)行的階段
將上述的FC塊,插入在兩句程序之間,目的是增加圖中C階段的時間片比例。經過長時間觀察,發(fā)現(xiàn)計數(shù)器的值有明顯的丟失,說明有在C階段更新的可能。
問題很清楚,定時器是獨立于用戶程序,獨自更新的。T.Q被隨時改寫。重復出現(xiàn)T.Q則引起程序的不確定性。為了安全必須使用統(tǒng)一規(guī)范,提出處理方法T.Q接到輸出上,如圖4所示。獨立于用戶程序的異步功能,以線圈的輸出為標志,將其關聯(lián)到掃描周期,再使用其觸點觸發(fā)計數(shù)器。
圖4 改進的處理
S7-1200定時器的使用存在陷阱,當兩次訪問觸點時,會出現(xiàn)不確定性,必須接輸出,才可達到與S7-200相同的效果和可靠執(zhí)行。在此例中,PLCSIM與連接實際PLC的結果不符合,由其忽略了自診斷通信等時間(階段A)造成的,提醒讀者注意。相信該工作為工程技術人員在實際工作中遇到的奇怪異常情況提供解釋,避免錯誤的發(fā)生。