一個案例帶你熟悉三菱ST程序的編寫過程
和這前的控制要求一樣? 一個按鈕控制三盞燈,在FBF功能塊中編寫一個按鈕控制三盞燈 的ST程序,然后在主程序中調(diào)用這個FB.
通過這個案例帶大家熟悉在GX-WORKS2環(huán)境下ST語言的用法。
第一步 新建數(shù)據(jù)?
數(shù)據(jù)名根據(jù)自己的需要趕寫這里我填的是OneToThree
程序語言選擇 ST

第二步 在OneToThree 功能塊中建立局部標簽

局部標簽
================OneToThree 功能塊中局部標簽=====================
類????????????????標簽名????????????數(shù)據(jù)類型
VAR_INPUT ????Button ????Bit
VAR_OUTPUT???? Lamp0???????? Bit
VAR_OUTPUT???? Lamp1???? ????Bit
VAR_OUTPUT???? Lamp2???????? Bit
VAR ????????????????????int_Step1 ????Word[Signed]
VAR ????????????????????int_Step2???? Word[Signed]
VAR???????????????????? TON_1 ????????????TON
VAR ????????????????????TimeOut_bool ????Bit
VAR???????????????????????? dummy_time???? Time
VAR ????????????????????????relay???????????????????? Bit
VAR???????????????????????? Button_Relay1 ????Bit
VAR???????????????????????? Button_Relay2???? Bit
=========================================================
在程序編寫過程可先寫注釋,記錄下自己的思路,并隨時編譯和保存程序
這樣可以避免在編寫了很多程序時編譯發(fā)現(xiàn)程序中有很多錯誤,改起來是很痛苦的一件事。
每寫一小段程序就編譯一下能用時發(fā)現(xiàn)錯誤,及時保存能避免在意外情況下自己辛苦編寫的程序丟失。
====================OneToThree 功能塊中ST程序=============================
(*一個按鈕三盞燈*)
(*
程序說明:
一個按鈕控制三盞燈
用 一個 按鈕 控制 三 組( 或 三個) 燈, 以 達到 控制 燈 的 亮度。
?由 PLC 組成 一個 控制器, 每 按 一次 按鈕 增加 一組 燈 亮, 三 組 燈 全 亮 后,?
每 按 一次 按鈕, 滅 一組 燈( 為了 使 每組 燈 亮的 時間 盡量 相等, 要求 先 亮的 燈 先 滅),
?如果 按下 按鈕 的 時間 超過 5s, 則 燈 全 滅。
*)
(*
程序思路
采用流程控制
初始化程序:
復位三個燈
?初始化完成后
按下按鈕進入流程1
流程1 置位0號燈
按下按鈕進入流程2
流程2置位1號燈
按下按鈕進入流程3
流程2置位2號燈
-----------------------------------
按下按鈕進入流程4
流程1 置位0號燈
按下按鈕進入流程5
流程2置位1號燈
按下按鈕進入流程6
流程2置位2號燈
======================
對按鈕進行計時,當超進5秒時復位三個燈
*)
PLS( Button, Button_Relay1 );
IF? FirstScan THEN
int_Step1:= 0 ;
Lamp0 := FALSE ;
Lamp1 := FALSE ;
Lamp2 := FALSE ;
END_IF;
CASE? int_Step1 OF
0 :
Lamp0 := FALSE ;
Lamp1 := FALSE ;
Lamp2 := FALSE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 1;
Button_Relay1 := FALSE ;
END_IF;
?
1 :
Lamp0 := TRUE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 2;
Button_Relay1 := FALSE;?
END_IF; ?
2 :
Lamp1 := TRUE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 3;
Button_Relay1 := FALSE;?
END_IF;
3 :
Lamp2 := TRUE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 4;
Button_Relay1 := FALSE ;
END_IF;
4 :
Lamp0 := FALSE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 5;
Button_Relay1 := FALSE ;
END_IF; ?
5 :
Lamp1 := FALSE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 6;
Button_Relay1 := FALSE ;
END_IF;
6 :
Lamp2 := FALSE ;
IF? Button_Relay1 = TRUE? THEN
int_Step1:= 1;
Button_Relay1 := FALSE ;
END_IF; ?
END_CASE;?
(* 按鈕按下5秒超時處理*)
TON_1(IN:= Button ,PT:= T#5s ,Q:=TimeOut_bool ,ET:= dummy_time );
PLS( TimeOut_bool, relay );
IF relay? THEN
int_Step1:= 0;
END_IF;
下面是代碼截圖







程序仿真:
