調(diào)用塊前面加個條件行么?
劉玉蓉
發(fā)布于2014-11-03 17:17
100
0
標簽:
假如在OB1里調(diào)用一個功能FC1,功能塊FB1,我在用call的時候在前面加了一個常開觸點,也就是PLC的輸入I0.0,I0.1作為調(diào)用條件,這樣設計可以控制FC1、FB1的調(diào)用,請問這樣做有什么壞處?別人說這樣調(diào)用當條件滿足時會運行功能及功能塊里的內(nèi)容,如果不滿足了就會停止,當再次滿足這個條件時,程序會接著原來的狀態(tài)運行,比如上次定時器定時的值會記憶,然后再次滿足條件時這個定時器會接著上次的值繼續(xù)運行?這樣操作是不是很危險?
佳答案
首先說明一點:你這樣做是可行的,不過不建議這樣做。一般,我們把一個大的系統(tǒng),分成若干個耦合度小的功能模塊(例如,自動倉庫系統(tǒng),可以分為調(diào)度模塊,查詢模塊,入庫模塊,出庫模塊),每一個模塊是一個fb,由各個fb來根據(jù)條件調(diào)用哪個具體的功能模塊(比如定位動作功能、裝載卸載貨物功能、出入倉功能等等),功能模塊有具體的fc、fb組成。這樣可以分模塊,分功能的來設計、修改,互相之間依賴少,容易實現(xiàn),邏輯清楚,方便理解,今后系統(tǒng)的增加、變更也會容易的多。
其次:“比如上次定時器定時的值會記憶”這個說法是錯誤的。我認為定時器和字符串是2個難點,你對定時器的理解不完全。定時器,可以理解為一個單獨的設備。也許你會有疑問,你可以這樣測試一下,在模擬器中,給一個定時器賦值,你會發(fā)現(xiàn)定時器里面就開始運行。調(diào)用fc中,在fc中使用定時器定義一個比較大的s5t,斷開fc的運行條件,你會發(fā)現(xiàn)定時器還在運行。定時器與你調(diào)用他的條件無關,只要你啟動了,他就會“一如既往”的運行下去,就好比打印機,我們用word打印了,即使關掉word,打印機也會繼續(xù)打印,知道完成。所以,你在把定時器使用在fc中,一定要注意這個特性,另外還需要注意的一點是:用于啟動定時器的變量,一定要放在in_out中,因為定時器需要一個上升沿判斷。還有后一點,對于時間精度要求特別高的工藝要求,連續(xù)使用定時器要考慮誤差——定時器是由上升沿判斷,會有一個周期的誤差。