一个案例带你熟悉三菱ST程序的编写过程
和这前的控制要求一样 一个按钮控制三盏灯,在FBF功能块中编写一个按钮控制三盏灯 的ST程序,然后在主程序中调用这个FB.
通过这个案例带大家熟悉在GX-WORKS2环境下ST语言的用法。
第一步 新建数据
数据名根据自己的需要赶写这里我填的是OneToThree
程序语言选择 ST

第二步 在OneToThree 功能块中建立局部标签

局部标签
================OneToThree 功能块中局部标签=====================
类 标签名 数据类型
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
=========================================================
在程序编写过程可先写注释,记录下自己的思路,并随时编译和保存程序
这样可以避免在编写了很多程序时编译发现程序中有很多错误,改起来是很痛苦的一件事。
每写一小段程序就编译一下能用时发现错误,及时保存能避免在意外情况下自己辛苦编写的程序丢失。
====================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;
下面是代码截图







程序仿真:
