PLC編程再思考之4 - 面向對象

PLC編程有諸多限制,如:

  1. 傳統的西門子PLC單個DB的存儲容量為64KB。
  2. 每次DB結構變更時,都需要編譯並重新下載覆蓋原DB。
  3. 每次DB結構變更時,OPC變數需要重新映射地址。

但有時候我們希望把DB設計得靈活一些,當給PLC增加一些小的元素時,我們不希望覆蓋大量的DB。

有時我們希望PLC程序設計得模塊化、產品化、基於配置。

在這些應用場景中,我們可以參考面向對象的方法進行PLC編程。

本文以質量安燈實例說明了面向對象的PLC編程方法。

業務需求為:

  1. 每個工位配置1條拉繩。
  2. 當拉繩拉下時,燈亮,喇叭播放配置好的音樂。
  3. 當拉繩複位時,燈滅,喇叭靜音。
  4. 工位配置在線上。
  5. 線的總數為10。
  6. 工位/拉繩/燈/喇叭的總數為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面向對象編程的參考建議:

  1. 每個DB定義1個屬性。
  2. 使用數組存儲數據。
  3. 使用SCL循環語句遍曆數組。
  4. 為每個方法編寫通用FC函數。

TIA V13源代碼:

pan.baidu.com/s/1c28HOO


推薦閱讀:

西門子PLC與labview之間如何通過OPC進行通信?
接觸器一個常開觸頭可能控制電機的起保停嗎?
PLC在控制系統中扮演了什麼角色?
怎麼用plc控制兩個電機畫圓,別用圓弧模塊,就是單純的程序模擬?
工業機器人及自動化與plc編程有什麼關係?

TAG:MES | 可编程逻辑控制器PLC |