编写一个好看的电动机正反转程序,不仅需要考虑程序的功能性,还需要考虑代码的可读性和可维护性。以下是一个基于STEP 7开发平台的正反转程序设计的示例,该程序实现了正转10秒、停止10秒、反转10秒、停止10秒的循环。
基于步进指令风格的程序设计
这种风格便于调试和维护,通过监控状态编号MW10的值可以找到当前运行的代码。每一步运行完成后置位下一步对应的MW10状态。状态触点接通后,与其相连的电路动作;状态触点断开,相连的电路停止工作。
```pascal
PROGRAM MotorControl
VAR
MW10: BOOL; // 状态编号,用于跟踪当前运行的代码
t: TIME;// 计时变量
BEGIN
WHILE TRUE DO
CASE MW10 OF
TRUE:
IF t = 0 THEN
// 正转10秒
MW10 := FALSE;
t := T10s;
END_IF;
IF t = T10s THEN
// 停止10秒
MW10 := FALSE;
t := T10s;
END_IF;
IF t = T10s THEN
// 反转10秒
MW10 := FALSE;
t := T10s;
END_IF;
IF t = T10s THEN
// 停止10秒
MW10 := FALSE;
t := T0s;
END_IF;
FALSE:
// 初始化计时变量
t := T0s;
END_CASE;
END_WHILE;
END_PROGRAM;
```
基于传统起保停风格的程序设计
这种风格遵循前级步已生效、本级步转换条件满足且后级步未生效时,本级步输出线圈并自锁,直至后级步生效的原则。
```pascal
PROGRAM MotorControl
VAR
MW10: BOOL; // 状态编号,用于跟踪当前运行的代码
t: TIME;// 计时变量
BEGIN
MW10 := FALSE;
WHILE TRUE DO
IF MW10 = FALSE AND t = T0s THEN
// 正转
MW10 := TRUE;
t := T10s;
ELSEIF MW10 = TRUE AND t = T10s THEN
// 停止
MW10 := FALSE;
t := T10s;
ELSEIF MW10 = FALSE AND t = T10s THEN
// 反转
MW10 := TRUE;
t := T10s;
ELSEIF MW10 = TRUE AND t = T10s THEN
// 停止
MW10 := FALSE;
t := T0s;
END_IF;
END_WHILE;
END_PROGRAM;
```
基于置位复位风格的程序设计
这种风格通过置位本级步,同时复位前级步,然后执行本级步对应的动作并停止前级步的动作。
```pascal
PROGRAM MotorControl
VAR
MW10: BOOL; // 状态编号,用于跟踪当前运行的代码
t: TIME;// 计时变量
BEGIN
MW10 := FALSE;
WHILE TRUE DO
IF MW10 = FALSE AND t = T0s THEN
// 正转
MW10 := TRUE;
t := T10s;
ELSEIF MW10 = TRUE AND t = T10s THEN
// 停止
MW10 := FALSE;
t := T10s;
ELSEIF MW10 = FALSE AND t = T10s THEN
// 反转
MW10 := TRUE;
t := T10s;
ELSEIF MW10 = TRUE AND t = T10s THEN
// 停止
MW10 := FALSE;
t := T0s;
END_IF;
END_WHILE;
END_PROGRAM;
```
基于移位风格的程序设计
这种风格通过同时满足前级步及转换条件,对状态编号进行移位,所用的状态编号需连续。