五臺水泵時間比較控制塊,用於補償一直關注老董的朋友們。一個項目系列中其他的功能都差不多了,就差一個自動程序,難點不在於自動控制,自動控制主要就是判斷PID的輸出是否達到最大頻率,達到就再開一臺泵,小於最小頻率就自動停一臺。無所謂品牌,思路是重要的。
以下功能塊實現了根據備妥條件、運行信號、累計運行時間、本次運行時間,自動啟停五臺水泵。
難點在於五臺水泵誰先開誰先停。
前面老董一直再鋪墊掃描週期,其實這對程序員來講很好弄懂,但是對於梯形圖入門的自動化工程師就不太好理解了。
程序如下:使用請刪除註釋 /*註釋*/
接口:
實現:
/*統計當前運行臺數*/
PUMP_RUN_NUM:=BOOL_TO_INT (IN :=PUMP1_RUN)+BOOL_TO_INT (IN :=PUMP2_RUN)+BOOL_TO_INT (IN :=PUMP3_RUN)+BOOL_TO_INT (IN :=PUMP4_RUN)+BOOL_TO_INT (IN :=PUMP5_RUN);
/*判斷各臺水泵是否已經運行或自動未備妥,則復位該泵的啟動儲存位*/
IF PUMP1_RUN OR NOT PUMP1_AUTOREAD THEN
PUMP1_NBSTA:=FALSE;
END_IF;
IF PUMP2_RUN OR NOT PUMP2_AUTOREAD THEN
PUMP2_NBSTA:=FALSE;
END_IF;
IF PUMP3_RUN OR NOT PUMP3_AUTOREAD THEN
PUMP3_NBSTA:=FALSE;
END_IF;
IF PUMP4_RUN OR NOT PUMP4_AUTOREAD THEN
PUMP4_NBSTA:=FALSE;
END_IF;
IF PUMP5_RUN OR NOT PUMP5_AUTOREAD THEN
PUMP5_NBSTA:=FALSE;
END_IF;
/*判斷各臺水泵是否已經停止,如果停止則復位該泵的停止儲存位*/
IF NOT PUMP1_RUN THEN
PUMP1_NBSTP:=FALSE;
END_IF;
IF NOT PUMP2_RUN THEN
PUMP2_NBSTP:=FALSE;
END_IF;
IF NOT PUMP3_RUN THEN
PUMP3_NBSTP:=FALSE;
END_IF;
IF NOT PUMP4_RUN THEN
PUMP4_NBSTP:=FALSE;
END_IF;
IF NOT PUMP5_RUN THEN
PUMP5_NBSTP:=FALSE;
END_IF;
泵的啟動
/*判斷應啟動臺數是否小於運行臺數*/
IF PUMP_RUN_NUM < PUMP_STA_NUM THEN
/*判斷其他四臺泵的啟動標誌位,如果存在啟動標誌位則跳過當前泵,如果不存在,判斷本臺泵是否具備啟動條件也就是自動準備好並且沒有運行*/
IF PUMP1_NBSTA=FALSE AND PUMP2_NBSTA=FALSE AND PUMP3_NBSTA=FALSE AND PUMP4_NBSTA=FALSE AND PUMP5_NBSTA=FALSE AND PUMP1_AUTOREAD AND NOT PUMP1_RUN THEN
/*判斷累計運行時間是否時本臺最小並且有其他泵及比本臺泵累計時間短且自動備妥*/
IF (PUMP1_TOLTIME<=PUMP2_TOLTIME OR (NOT PUMP2_AUTOREAD) OR PUMP2_RUN ) AND (PUMP1_TOLTIME<=PUMP3_TOLTIME OR (NOT PUMP3_AUTOREAD) OR PUMP3_RUN ) AND (PUMP1_TOLTIME<=PUMP4_TOLTIME OR (NOT PUMP4_AUTOREAD) OR PUMP4_RUN) AND (PUMP1_TOLTIME<=PUMP5_TOLTIME OR (NOT PUMP5_AUTOREAD) OR PUMP5_RUN) THEN
PUMP1_STA:=TRUE;
PUMP1_NBSTA:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTA=FALSE AND PUMP2_NBSTA=FALSE AND PUMP3_NBSTA=FALSE AND PUMP4_NBSTA=FALSE AND PUMP5_NBSTA=FALSE AND PUMP2_AUTOREAD AND NOT PUMP2_RUN THEN
IF (PUMP2_TOLTIME<=PUMP1_TOLTIME OR (NOT PUMP1_AUTOREAD) OR PUMP1_RUN ) AND (PUMP2_TOLTIME<=PUMP3_TOLTIME OR (NOT PUMP3_AUTOREAD) OR PUMP3_RUN ) AND (PUMP2_TOLTIME<=PUMP4_TOLTIME OR (NOT PUMP4_AUTOREAD) OR PUMP4_RUN) AND (PUMP2_TOLTIME<=PUMP5_TOLTIME OR (NOT PUMP5_AUTOREAD) OR PUMP5_RUN) THEN
PUMP2_STA:=TRUE;
PUMP2_NBSTA:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTA=FALSE AND PUMP2_NBSTA=FALSE AND PUMP3_NBSTA=FALSE AND PUMP4_NBSTA=FALSE AND PUMP5_NBSTA=FALSE AND PUMP3_AUTOREAD AND NOT PUMP3_RUN THEN
IF (PUMP3_TOLTIME<=PUMP1_TOLTIME OR (NOT PUMP1_AUTOREAD) OR PUMP1_RUN ) AND (PUMP3_TOLTIME<=PUMP2_TOLTIME OR (NOT PUMP2_AUTOREAD) OR PUMP2_RUN ) AND (PUMP3_TOLTIME<=PUMP4_TOLTIME OR (NOT PUMP4_AUTOREAD) OR PUMP4_RUN) AND (PUMP3_TOLTIME<=PUMP5_TOLTIME OR (NOT PUMP5_AUTOREAD) OR PUMP5_RUN) THEN
PUMP3_STA:=TRUE;
PUMP3_NBSTA:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTA=FALSE AND PUMP2_NBSTA=FALSE AND PUMP3_NBSTA=FALSE AND PUMP4_NBSTA=FALSE AND PUMP5_NBSTA=FALSE AND PUMP4_AUTOREAD AND NOT PUMP4_RUN THEN
IF (PUMP4_TOLTIME<=PUMP1_TOLTIME OR (NOT PUMP1_AUTOREAD) OR PUMP1_RUN ) AND (PUMP4_TOLTIME<=PUMP2_TOLTIME OR (NOT PUMP2_AUTOREAD) OR PUMP2_RUN ) AND (PUMP4_TOLTIME<=PUMP3_TOLTIME OR (NOT PUMP3_AUTOREAD) OR PUMP3_RUN) AND (PUMP4_TOLTIME<=PUMP5_TOLTIME OR (NOT PUMP5_AUTOREAD) OR PUMP5_RUN) THEN
PUMP4_STA:=TRUE;
PUMP4_NBSTA:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTA=FALSE AND PUMP2_NBSTA=FALSE AND PUMP3_NBSTA=FALSE AND PUMP4_NBSTA=FALSE AND PUMP5_NBSTA=FALSE AND PUMP5_AUTOREAD AND NOT PUMP5_RUN THEN
IF (PUMP5_TOLTIME<=PUMP1_TOLTIME OR (NOT PUMP1_AUTOREAD) OR PUMP1_RUN ) AND (PUMP5_TOLTIME<=PUMP2_TOLTIME OR (NOT PUMP2_AUTOREAD) OR PUMP2_RUN ) AND (PUMP5_TOLTIME<=PUMP3_TOLTIME OR (NOT PUMP3_AUTOREAD) OR PUMP3_RUN)AND (PUMP5_TOLTIME<=PUMP4_TOLTIME OR (NOT PUMP4_AUTOREAD) OR PUMP4_RUN) THEN
PUMP5_STA:=TRUE;
PUMP5_NBSTA:=TRUE;
END_IF;
END_IF;
END_IF;
泵的停止
參考泵的啟動,看明白啟動停止也就明白了
IF PUMP_RUN_NUM > PUMP_STA_NUM THEN
IF PUMP1_NBSTP=FALSE AND PUMP2_NBSTP=FALSE AND PUMP3_NBSTP=FALSE AND PUMP4_NBSTP=FALSE AND PUMP5_NBSTP=FALSE AND PUMP1_AUTOREAD AND PUMP1_RUN THEN
IF (PUMP1_TOLTIME>=PUMP2_TOLTIME OR ( NOT PUMP2_AUTOREAD) OR NOT PUMP2_RUN ) AND (PUMP1_TOLTIME>=PUMP3_TOLTIME OR ( NOT PUMP3_AUTOREAD) OR NOT PUMP3_RUN ) AND (PUMP1_TOLTIME>=PUMP4_TOLTIME OR ( NOT PUMP4_AUTOREAD) OR NOT PUMP4_RUN) AND (PUMP1_TOLTIME>=PUMP5_TOLTIME OR ( NOT PUMP5_AUTOREAD) OR NOT
PUMP5_RUN) THEN
PUMP1_STA:=FALSE;
PUMP1_NBSTP:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTP=FALSE AND PUMP2_NBSTP=FALSE AND PUMP3_NBSTP=FALSE AND PUMP4_NBSTP=FALSE AND PUMP5_NBSTP=FALSE AND PUMP2_AUTOREAD AND PUMP2_RUN THEN
IF (PUMP2_TOLTIME>=PUMP1_TOLTIME OR ( NOT PUMP1_AUTOREAD) OR NOT PUMP1_RUN ) AND (PUMP2_TOLTIME>=PUMP3_TOLTIME OR ( NOT PUMP3_AUTOREAD) OR NOT PUMP3_RUN ) AND (PUMP2_TOLTIME>=PUMP4_TOLTIME OR ( NOT PUMP4_AUTOREAD) OR NOT PUMP4_RUN) AND (PUMP2_TOLTIME>=PUMP5_TOLTIME OR ( NOT PUMP5_AUTOREAD) OR NOT
PUMP5_RUN) THEN
PUMP2_STA:=FALSE;
PUMP2_NBSTP:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTP=FALSE AND PUMP2_NBSTP=FALSE AND PUMP3_NBSTP=FALSE AND PUMP4_NBSTP=FALSE AND PUMP5_NBSTP=FALSE AND PUMP3_AUTOREAD AND PUMP3_RUN THEN
IF (PUMP3_TOLTIME>=PUMP1_TOLTIME OR ( NOT PUMP1_AUTOREAD) OR NOT PUMP1_RUN ) AND (PUMP3_TOLTIME>=PUMP2_TOLTIME OR ( NOT PUMP2_AUTOREAD) OR NOT PUMP2_RUN ) AND (PUMP3_TOLTIME>=PUMP4_TOLTIME OR ( NOT PUMP4_AUTOREAD) OR NOT PUMP4_RUN) AND (PUMP3_TOLTIME>=PUMP5_TOLTIME OR ( NOT PUMP5_AUTOREAD) OR NOT
PUMP5_RUN) THEN
PUMP3_STA:=FALSE;
PUMP3_NBSTP:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTP=FALSE AND PUMP2_NBSTP=FALSE AND PUMP3_NBSTP=FALSE AND PUMP4_NBSTP=FALSE AND PUMP5_NBSTP=FALSE AND PUMP4_AUTOREAD AND PUMP4_RUN THEN
IF (PUMP4_TOLTIME>=PUMP1_TOLTIME OR ( NOT PUMP1_AUTOREAD) OR NOT PUMP1_RUN ) AND (PUMP4_TOLTIME>=PUMP2_TOLTIME OR ( NOT PUMP2_AUTOREAD) OR NOT PUMP2_RUN ) AND (PUMP4_TOLTIME>=PUMP3_TOLTIME OR ( NOT PUMP3_AUTOREAD) OR NOT PUMP3_RUN) AND (PUMP4_TOLTIME>=PUMP5_TOLTIME OR ( NOT PUMP5_AUTOREAD) OR NOT
PUMP5_RUN) THEN
PUMP4_STA:=FALSE;
PUMP4_NBSTP:=TRUE;
END_IF;
END_IF;
IF PUMP1_NBSTP=FALSE AND PUMP2_NBSTP=FALSE AND PUMP3_NBSTP=FALSE AND PUMP4_NBSTP=FALSE AND PUMP5_NBSTP=FALSE AND PUMP5_AUTOREAD AND PUMP5_RUN THEN
IF (PUMP5_TOLTIME>=PUMP1_TOLTIME OR ( NOT PUMP1_AUTOREAD) OR NOT PUMP1_RUN ) AND (PUMP5_TOLTIME>=PUMP2_TOLTIME OR ( NOT PUMP2_AUTOREAD) OR NOT PUMP2_RUN ) AND (PUMP5_TOLTIME>=PUMP3_TOLTIME OR ( NOT PUMP3_AUTOREAD) OR NOT PUMP3_RUN)AND (PUMP5_TOLTIME>=PUMP4_TOLTIME OR ( NOT PUMP4_AUTOREAD) OR NOT
PUMP4_RUN) THEN
PUMP5_STA:=FALSE;
PUMP5_NBSTP:=TRUE;
END_IF;
END_IF;
END_IF;
/*所有未備妥水泵全部停止輸出*/
IF NOT PUMP1_AUTOREAD THEN
PUMP1_STA:=FALSE;
END_IF;
IF NOT PUMP2_AUTOREAD THEN
PUMP2_STA:=FALSE;
END_IF;
IF NOT PUMP3_AUTOREAD THEN
PUMP3_STA:=FALSE;
END_IF;
IF NOT PUMP4_AUTOREAD THEN
PUMP4_STA:=FALSE;
END_IF;
IF NOT PUMP5_AUTOREAD THEN
PUMP5_STA:=FALSE;
END_IF;
引用:
我是老董,關注我學習更多電氣自動化知識。
閱讀更多 老董聊電氣自動化 的文章