您當前的位置:首頁 > 體育

PLC程式設計再思考之三:面向過程

作者:由 tallrain 發表于 體育時間:2017-07-06

現在的高階語言基本上都是面向物件的,但是PLC程式設計象較早的BASIC/FORTRAN語言一樣,是面向過程的。

PLC邏輯處理的基本過程為:

1) 將外部裝置輸入的資料寫入輸入映像區(I)。

2) 邏輯處理,包括讀I區、寫Q區。

3) 將輸出映像區(Q)的資料輸出到外部裝置。

其中,1)和3)是PLC內部處理的,所有的PLC使用者程式只處理第2)部分。

PLC的這種處理方式帶來了下面2個特點。

特點1:OB1呼叫的程式不存在併發

我們知道,PLC使用者程式主要執行在2個地方:中斷和OB1。

一般而言,能夠在一個掃描週期裡完成的邏輯處理,通常我們會在OB1中進行呼叫,而OB1中的程式是按照嚴格的呼叫順序進行處理的。

比如CPU掃描週期是20ms,那麼在某個ns,CPU只會處理某個特定的FC/FB/NW。

舉個例子,1工位的工人同時按個2個按鈕,而在PLC層面,對這2個按鈕的事件處理是有先後順序的。

因此,嚴格地說起來,PLC不存在真正的併發。

有效利用這一特點,可以讓程式設計變得更輕鬆。

比如1條線有30個工位要進行呼叫處理,而每個工位的呼叫處理邏輯是一樣的,那麼我們可以建立一個臨時DB,儲存任意一個工位的所有中間變數。

OB1按照工位的順序進行處理,當執行到第N個工位時,臨時DB的變數值就記錄了第N個工位的中間變數值。當執行到下一工位時,臨時DB被重寫,以用於下一工位業務處理。

由於PLC在任意一個瞬間只處理一個特定的工位,因此臨時DB的值和此工位有嚴格的對應關係,因此我們無需在FC裡宣告變數,因為所有的變數都已定義在臨時DB中。

這樣處理可以讓程式更加簡潔通用、變數少,可以用FC變相地實現FB的功能。

特點2:後面賦值覆蓋前面賦值

高階語言在符合條件的時候就會輸出,而PLC只會在所有邏輯處理完成以後才會輸出,並且只輸出最後寫入的值。

比如在同一個掃描週期,先執行了Q0。0=0,後執行了Q0。0=1,由於在執行的過程中,資料仍然儲存於輸出映像區,這2步操作相當於在同一個掃描週期內對Q0。0的映像區進行了2個賦值操作,並用後一次賦值覆蓋前一次賦值,因此OB1最終將Q0。0賦值為1,然後將此值輸出到外部裝置。

我們在程式設計的時候利用這一特點,可以減少一些比較的運算處理。

比如某工位按下按鈕1則亮黃燈(紅燈滅),按下按鈕2則亮紅燈(黃燈滅),同時按下則紅燈亮(黃燈滅)。

也就是說從業務上來說,按鈕2的級別較高。

相對的,我們可以先寫按鈕1的處理邏輯,再寫按鈕2的處理邏輯,當2個按鈕都按下時,根據PLC的特點,CPU只輸出按鈕2的處理結果,因此我們無需寫比較的程式。

標簽: 工位  PLC  處理  按鈕  OB1