程式中的區域性變數儲存在 PLC程式結構

2021-10-18 01:52:03 字數 2516 閱讀 1091

下面介紹幾種常見的plc的程式結構及其特點:

1.某些國外的小型plc的程式結構 這些plc的使用者程式由主程式、子程式和中斷程式組成。在每乙個掃瞄迴圈週期,cpu都要呼叫一次主程式。主程式可以呼叫子程式,小型 控制系統 可以只有主程式。中斷程式用於快速響應

下面介紹幾種常見的plc的程式結構及其特點:

1.某些國外的小型plc的程式結構

這些plc的使用者程式由主程式、子程式和中斷程式組成。在每乙個掃瞄迴圈週期,cpu都要呼叫一次主程式。主程式可以呼叫子程式,小型控制系統可以只有主程式。中斷程式用於快速響應中斷事件。在中斷事件

發生時,cpu將停止執行當時正在處理的程式或任務,去執行使用者編寫的中斷程式。執行完中斷程式後,繼續執行被暫停執行的程式或任務。它們的子程式和中斷程式沒有區域性變數,子程式沒有輸入、輸出引數。

2.西門子的s7-200的程式結構

過程映像輸入/輸出(i/q)、變數儲存器v、內部儲存器位m、定時器t、計數器c等屬於全域性變數。s7-200的程式組織單元(programorganizationalunit,簡稱為pou)包括主程式、子程式和中斷程式。每個pou均有

自己的64位元組區域性變數,區域性變數只能在它所在的pou中使用。與此相反,全域性變數可以在各pou中使用。

下面是子程式可以使用的區域性變數:

1)temp(臨時變數)是暫時儲存在區域性資料區中的變數。只有在執行該pou時,定義的臨時變數才被使用,pou執行完後,不再儲存臨時變數的數值。

2)in是由呼叫它的pou提供的輸入引數。

3)out是返回給呼叫它的pou的輸出引數(子程式的執行結果)。

4)in_out是輸入_輸出引數,其初始值由呼叫它的pou傳送給子程式,並用同一變數將子程式的執行結果返回給呼叫它的pou。

主程式和中斷程式的區域性變數中只有臨時變數temp。

具有輸入、輸出引數和區域性變數的子程式易於實現結構化程式設計,對於長期生產同類裝置或生產線的廠家尤為有用。這些廠家的程式設計人員為裝置的各元件或工藝功能編寫了大量的通用的子程式。即使不知道子程式

的內部**,只要知道子程式的功能和輸入、輸出引數的意義,就可以通過程式之間的呼叫快速「組裝」出滿足不同使用者要求的控制程式。就好像用數字積體電路晶元組成複雜的數位電路一樣。

子程式如果沒有輸入、輸出引數,它和呼叫它的程式之間沒有清晰的介面,很難實現結構化程式設計。

子程式如果沒有區域性變數,它和呼叫它的程式之間只能通過全域性變數來交換資料,子程式內部也只能使用全域性變數。將子程式和中斷程式移植到別的專案時,需要重新統一安排它們使用的全域性變數,以保證不會出現位址衝突。當程式很複雜,子程式和中斷程式很多時,這種重新分配位址的工作量非常大。

如果子程式和中斷程式有區域性變數,並且它們內部只使用區域性變數,不使用全域性變數,因為與其他pou沒有位址衝突,不需作任何改動,就可以將子程式移植到別的專案中去。

3.西門子的s7-300/400的程式結構

s7-300/400將子程式分為功能(function,或稱為函式)和功能塊(functionblock)。

s7-300/400的功能與s7-200的子程式基本上相同。它們均有輸入、輸出引數和臨時變數,功能的區域性資料中的返回值實際上屬於輸出引數。它們沒有專用的儲存區,功能執行結束後,不再儲存臨時變數中的資料可以用全域性變數來儲存那些在功能執行結束後需要儲存的資料,但是會影響到功能的可移植性。 功能塊是使用者編寫的有自己專用的儲存區(即背景資料塊)的程式塊,功能塊的輸入、輸出引數和靜態變數存放在指定的背景資料

可以用全域性變數來儲存那些在功能執行結束後需要儲存的資料,但是會影響到功能的可移植性。

功能塊是使用者編寫的有自己專用的儲存區(即背景資料塊)的程式塊,功能塊的輸入、輸出引數和靜態變數存放在指定的背景資料塊中,臨時變數儲存在區域性資料堆疊中。每次呼叫功能塊時,都要指定乙個背景資料塊。功能塊執行完後,背景資料塊中的資料不會丟失,但是不會儲存區域性資料堆疊中的資料。

功能塊採用了類似於c++的封裝的概念,將程式和資料封裝在一起,具有很好的可移植性。

s7-300/400的共享資料塊可供所有的邏輯塊使用。

4.iec61131-3的程式結構

iec61131-3是plc的程式語言標準。iec61131-3是世界上第乙個,也是至今為止唯一的工業控制領域的程式語言標準。iec61131-3有三種pou:程式、功能塊和功能。

功能是有多個輸入引數和乙個輸出引數(返回值)的pou,返回值的名稱與功能的名稱相同,需要定義返回值的資料型別。呼叫具有相同輸入值的功能總是返回相同的結果。功能可以呼叫其他功能,但是不能呼叫功能塊或程式。功能可定義的區域性變數有var和var_input。

功能塊是有多個輸入/輸出引數和內部儲存單元的pou,功能塊的輸出引數值與其內部儲存單元的值有關。功能塊可以呼叫其他功能 塊或功能,但是不能呼叫程式。 在呼叫功能塊之前,必須在要呼叫功能塊的pou中為每次呼叫宣告功能塊的例項,作業系統將為每次呼叫分配功能塊專用的儲存區

(類似於s7-300/400的背景資料塊)。

C語言區域性變數的儲存類別

自動變數 auto int b,c 3 auto可以省略,不寫與 int b,c 3 等價 下面展示例子static。include int main int f int a 結果為 78 9c是靜態區域性變數,函式呼叫結束後,他並不釋放,保留其當前值。在第二次呼叫時即為4。b在一次函式呼叫後即釋放...

C 中的區域性變數衝突

乙個變數在同乙個作用域中不能夠宣告兩次,如下 錯誤。using system usingsystem.collections.generic usingsystem.linq usingsystem.text usingsystem.threading.tasks 編譯錯誤如下 嚴重性 說明專案檔案...

python中函式的區域性變數

1 def discount price,rate 定義函式名discount,兩個形式引數price和rate sell price price rate return sell price 函式返回售價 price float input please input the price 此處接受輸...