- 開放式IEC 61131控制系統設計
- 任向陽
- 1996字
- 2019-01-03 22:37:03
1.4.2 功能塊
對于PLC編程語言,功能塊作為程序組織單元的一種,執行后能夠生成一個或多個輸出值(相比較功能只有一個輸出值)。功能塊能夠生成多個自身的拷貝,稱為實例。每個實例擁有一個相關的標示符(實例名)、一個包含輸出和內部變量的數據結構、輸入變量的值或者引用(與實現相關)。數據結構中的所有輸出變量和某些內部變量的值可能是保持的,這意味著在上一次功能塊的執行過程之后的這些變量的值在下一次執行中也是有效的。因此,調用相同輸入參數的功能塊并不保證輸出也是相同的(這一點也和功能不同)。
對于功能塊而言,只有它的輸入和輸出變量是可訪問的,換句話說,其內部變量對于用戶而言是不透明的。一個已經定義過的功能塊可以在另一個功能塊或者功能的聲明中使用。
一個功能塊實例的有效范圍應當局限于實現該實例的程序組織單元,除非該實例通過VAR_GLOBAL塊被聲明為全局的。
假如一個功能塊實例通過VAR_INPUT被聲明為輸入變量,其名字(實例名)可以被用作一個功能或者功能塊的輸入;或者作為一個功能塊的輸入/輸出變量,如該實例被聲明為VAR_IN_OUT。
1.功能塊聲明
功能塊和功能一樣可以以文本的方式來聲明。
FUNCTION_BLOCK DEBOUNCE (*** External Interface ***) VAR_INPUT IN : BOOL ; (* Default = 0 *) DB_TIME : TIME := t#10ms ; (* Default = t#10ms *) END_VAR VAR_OUTPUT OUT : BOOL ; (* Default = 0 *) ET_OFF : TIME ; (* Default = t#0s *) END_VAR VAR DB_ON : TON ; (** Internal Variables **) DB_OFF : TON ; (** and FB Instances **) DB_FF : SR ; END_VAR (** Function Block Body **) DB_ON(IN := IN, PT := DB_TIME) ; DB_OFF(IN := NOT IN, PT:=DB_TIME) ; DB_FF(S1 :=DB_ON.Q, R := DB_OFF.Q) ; OUT := DB_FF.Q ; ET_OFF := DB_OFF.ET ; END_FUNCTION_BLOCK
或者以圖形方式聲明,如圖1-10所示。

圖1-10 功能以圖形方式聲明
功能塊與功能主要的不同在于:
● 功能塊的聲明關鍵字為FUNCTION_BLOCK ... END_FUNCTION_BLOCK。
● RETAIN修飾符可以用來修飾功能塊的內部和輸出變量。
● 通過VAR_EXTERNAL結構傳遞給功能塊的變量,其值可以在功能塊內部改變。
● 當一個功能塊實例的名字通過VAR_INPUT、VAR_OUTPUT或者VAR_EXTERNAL結構傳遞給另一個功能塊時,該實例的輸出值可以在功能塊內被訪問,但不能被修改。
● 當一個功能塊實例的名字通過VAR_IN_OUT或者VAR_EXTERNAL結構傳遞給另一個功能塊時,該實例可以在功能塊內被調用。
2.標準功能塊
(1)雙穩態功能塊
IEC61131定義了一個優先復位雙穩態功能塊(RS)和一個優先置位雙穩態功能塊(SR),如圖1-11所示。

圖1-11 雙穩態功能塊
RS功能塊實現了Q1輸出端的優先復位。如果輸入端SET = TRUE,則輸出端Q1被置位。即使SET為FALSE, Q1仍然保持置位狀態。如果RESET1 = TRUE,則Q1被復位。如果兩個輸入均為TRUE,則由RESET1將Q1輸出端設置為FALSE。SR則相反,如果輸入端SET1 = TRUE,則輸出端Q1被置位。即使SET1為FALSE, Q1仍然保持置位狀態。如果RESET = TRUE,則Q1被復位。如果兩個輸入均為TRUE,則由RESET將Q1輸出端設置為FALSE。
(2)邊沿檢測功能塊
標準上升沿(R_TRIG)和下降沿檢測功能塊(F_TRIG)用于檢測輸入信號CLK的上升沿和下降沿,如圖1-12所示。其行為對應下列規則:

圖1-12 邊沿檢測功能塊
● R_TRIG功能塊的Q輸出在CLK輸入從0變化到1之后,應當保持BOOL#1到下一次執行,然后在下一次執行時重置為0。
● F_TRIG功能塊的Q輸出在CLK輸入從1變化到0之后,應當保持BOOL#1到下一次執行,然后在下一次執行時重置為0。
(3)計數器功能塊
計數器功能塊如圖1-13所示。

圖1-13 計數器功能塊
CTU功能塊用于遞增計數CU輸入信號的上升沿次數。假設在CU輸入端有一個上升沿,并且RESET = FALSE,則CV遞增1。如果達到了計數器的最終值(PV),則在Q輸出端發出一個TRUE信號,并且功能塊停止計數。如果RESET = TRUE,則用0初始化計數器。為了使能計數過程,RESET輸入端必須為FALSE,否則計數器將總被重新初始化。
CTD計數器功能塊遞減計數。假設在CD輸入端有一個上升沿,且LOAD = FALSE,則CV減1。如果達到了計數器的最終值(PV),則在Q輸出端發出一個TRUE信號,并且功能塊停止計數。如果LOAD = TRUE,則按PV輸入的值初始化計數器。為了啟用計數過程,LOAD輸入端必須為FALSE,否則將重新初始化計數器。
CTUD計數器功能塊遞增或者遞減計數。假設在CU輸入端有一個上升沿,則CV遞增1。假設在CD輸入端有一個上升沿,則CV遞減1。如果CV = PV, QU設置為TRUE。如果CV = PV, QU設置為TRUE。如果RESET = TRUE,計數器初始化為0。如果LOAD= TRUE,計數器初始化為PV。為了啟用計數過程,RESET和LOAD輸入端都必須為FALSE,否則將重新初始化計數器。
(4)定時器功能塊
定時器功能塊如圖1-14所示。

圖1-14 定時器功能塊
TOF定時器功能塊實現延時關定時功能。如果輸入IN從TRUE變為FALSE,在延遲輸入PT中的時長后關機。經過PT值的時長后,Q值設置為FALSE。在輸出端ET上顯示過程時間間隔。
TON定時器功能塊實現延時開定時功能。如果輸入IN從TRUE變為FALSE,在延遲輸入PT中的時長后開機。經過PT值的時長后,Q值設置為TRUE。在輸出端ET上顯示過程時間間隔。
TF定時器功能塊產生一個脈沖。如果IN輸入端由FALSE變為TRUE,則在Q輸出端產生一個時間間隔為PT的脈沖。過程時間顯示于ET輸出端。如果IN獲得另一個時間TRUE值,而PT時間段還沒有結束,則它對在Q輸出端產生的脈沖時間段沒有影響。
(5)通信功能塊
PLC的標準通信功能塊在IEC 61131-5中定義。這些功能塊提供了可編程的通信功能,比如設備驗證、獲取查詢數據、獲取已設定數據、參數控制、互鎖控制、報告設定的警告、連接管理和保護等。
- ANSYS Workbench有限元分析完全自學手冊
- ANSYS Workbench設計建模與虛擬仿真
- MATLAB R2020a從入門到精通(升級版)
- AutoCAD 2014室內設計:從入門到精通
- CAE分析大系:ABAQUS工程實例詳解
- MATLAB與機器學習
- 深度學習高手筆記(卷1):基礎算法
- SolidWorks 2012 輔助設計與制作技能基礎教程
- CAE分析大系:ABAQUS巖土工程實例詳解
- OpenStack高可用集群(上冊):原理與架構
- 從二維到三維
- ANSYS Workbench 14.0超級學習手冊
- 信息化與新型城鎮化:互動效應與路徑研究
- Linux服務器搭建實戰詳解
- Altera FPGA/CPLD設計(基礎篇)(第2版)(Altera公司推薦FPGA/CPLD培訓