针对由S7-300、HMI和ET200S组成PROFINET网络。提出如下控制要求,根据要求编写程序。 S7-300外接本地启动按钮SB11和停止按钮SB12。当按下SB11时,ET200S外接的5个LED灯循环点亮,每个LED灯亮1S。当按下SB12时,LED灯全灭。 >HMI运行的可视化监控画面,画面中有操作的启动按钮SB21和停止按钮SB22。SB21的作用与SB11相同,SB22的作用与SB12相同。画面中显示5个LED灯的循环点亮效果。
时间: 2023-05-31 08:03:32 浏览: 96
S7-1200 与 S7-300 PN Profinet 通信例程.zip
5星 · 资源好评率100%
程序如下:
S7-300:
```
VAR
LED_Count: INT := 0; // 记录当前点亮的 LED 编号
LED_Timer: TIME := T#1S; // LED 点亮时间
END_VAR
// 外部中断处理
INTERRUPT OB1
IF SB11 THEN // 启动按钮按下
LED_Count := 0; // 从第一个 LED 开始点亮
LED_Timer := T#1S; // 重置计时器
ELSIF SB12 THEN // 停止按钮按下
LED_Count := 0; // 关闭所有 LED
END_IF
END_INTERRUPT
// 定时中断处理
INTERRUPT OB35
IF LED_Timer <= T#0S THEN // LED 点亮时间到
LED_Timer := T#1S; // 重置计时器
IF LED_Count < 5 THEN // 还有 LED 需要点亮
LED_Count := LED_Count + 1; // 点亮下一个 LED
LED[LED_Count] := TRUE; // 点亮 LED
ELSE // 所有 LED 都已经点亮
LED_Count := 0; // 从第一个 LED 开始点亮
LED := FALSE; // 关闭所有 LED
END_IF
ELSE // LED 点亮时间还没到
LED_Timer := LED_Timer - T#100MS; // 减少计时器时间
END_IF
END_INTERRUPT
```
HMI:
画面中添加一个按钮控件和五个灯控件,设置按钮控件的 ID 分别为 `SB21` 和 `SB22`,五个灯控件的 ID 分别为 `LED1`、`LED2`、`LED3`、`LED4` 和 `LED5`。
在按钮控件的事件中添加以下代码:
```
IF e.EventName = "OnClick" THEN // 按钮被点击
IF e.Sender.ID = "SB21" THEN // 启动按钮被点击
LED1.State := TRUE; // 点亮第一个 LED
Wait(T#1S); // 等待 1 秒
LED2.State := TRUE; // 点亮第二个 LED
Wait(T#1S);
LED3.State := TRUE;
Wait(T#1S);
LED4.State := TRUE;
Wait(T#1S);
LED5.State := TRUE;
Wait(T#1S);
LED1.State := FALSE; // 关闭所有 LED
LED2.State := FALSE;
LED3.State := FALSE;
LED4.State := FALSE;
LED5.State := FALSE;
ELSIF e.Sender.ID = "SB22" THEN // 停止按钮被点击
LED1.State := FALSE; // 关闭所有 LED
LED2.State := FALSE;
LED3.State := FALSE;
LED4.State := FALSE;
LED5.State := FALSE;
END_IF
END_IF
```
阅读全文