PLC編程再思考之4 - 面向對象
PLC編程有諸多限制,如:
- 傳統的西門子PLC單個DB的存儲容量為64KB。
- 每次DB結構變更時,都需要編譯並重新下載覆蓋原DB。
- 每次DB結構變更時,OPC變數需要重新映射地址。
但有時候我們希望把DB設計得靈活一些,當給PLC增加一些小的元素時,我們不希望覆蓋大量的DB。
有時我們希望PLC程序設計得模塊化、產品化、基於配置。
在這些應用場景中,我們可以參考面向對象的方法進行PLC編程。
本文以質量安燈實例說明了面向對象的PLC編程方法。
業務需求為:
- 每個工位配置1條拉繩。
- 當拉繩拉下時,燈亮,喇叭播放配置好的音樂。
- 當拉繩複位時,燈滅,喇叭靜音。
- 工位配置在線上。
- 線的總數為10。
- 工位/拉繩/燈/喇叭的總數為200。
下表列出了所有對象,及對應的屬性/事件/方法:
為了讓對象更加靈活,我們為每個屬性分配1個DB,除了ID,這是因為我們使用數組ARRAY存儲數量,每個對象的所有屬性DB使用了同樣長度的數組,而數組的序號就是對象的ID:
因此當我們需要給拉繩增加一個新的屬性時,我們只要建立一個新的DB,基本結構為長度為200的數組,並以數組序號的形式建立了與其它拉繩DB的聯繫。
PLC程序調用結構非常簡潔:
由於使用了數組,我們可以很方便地利用SCL的循環語句進行遍歷調用:
尋找外部引用ID也很簡單,因為我們可以直接使用數組序號進行符號定址:
對於I/Q設備的位&位元組地址,我們可以用STRUCT進行定義:
這樣,就可以很方便地利用SCL的PEEK_BOOL/POKE_BOOL函數進行動態調用:
FC_PEEK_BOOL針對SCL的PEEK_BOOL進行封裝:
Set事件:
Reset事件:
下面列出幾條PLC面向對象編程的參考建議:
- 每個DB定義1個屬性。
- 使用數組存儲數據。
- 使用SCL循環語句遍曆數組。
- 為每個方法編寫通用FC函數。
TIA V13源代碼:
http://pan.baidu.com/s/1c28HOOg
推薦閱讀:
※西門子PLC與labview之間如何通過OPC進行通信?
※接觸器一個常開觸頭可能控制電機的起保停嗎?
※PLC在控制系統中扮演了什麼角色?
※怎麼用plc控制兩個電機畫圓,別用圓弧模塊,就是單純的程序模擬?
※工業機器人及自動化與plc編程有什麼關係?
TAG:MES | 可编程逻辑控制器PLC |