你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
本文介绍一个结构化文本 (PLC) 程序,它是在之前的交通灯示例基础上构建的行人过路按键控制解决方案
在上一篇博客中,我通过 LogiCAD 3 用结构化文本对 Kunbus RevolutionPi 进行编程,成功模拟了一组简单的交通灯。现在,我决定尝试将交通灯项目扩展为行人过路按键项目。这包括增加按钮形式的输入,以便行人按下触发交通灯,此外还需增加行人过路指示灯的输出。为增强真实性,本例中还将增加蜂鸣器以警示交通灯即将变回绿色,因此过马路将不再安全。
硬件
这次我仍然将 RevPi Dore 3 和用于输入/输出的 DIO 安装在 DIN 导轨上,然后固定在一块激光切割的 5mm MDF 上。除了已有设置以外,我现在需要向 DIO 电源输入端提供 24V 电压,并参考快速入门指南中的如何连接电源章节,确保连接正确。
它们连接在 DIO 模块上的 X2 连接器上 - 24V 至引脚 1,接地至引脚 2。
人行横道灯、白色 LED 指示灯 (763-7905) 和蜂鸣器 (626-157) 分别连接至 DIO 模块的输出 4 和 5。然后将按钮连接至输入 1 - 请注意,输入从连接器的右下角开始编号,然后是 24V。由于输入端从电源接收 24V 电压,因此我最初以为按钮的一侧应接地,但是在重新阅读《入门指南》和本论坛的帖子后,我意识到应该将它连接到 24V。
接着,我通过切割和弯曲制作了一个简单的亚克力底座,用于安装行人过路按键组件(按钮、蜂鸣器和白色 LED),然后将一名东德式的绿色小人贴在 LED 上,以增加项目的娱乐性。
设置
下一步是在 RevPi 的配置中设置新的组件友好标签。这意味着使用 PiCtory 的参数编辑器部分,对 LogiCAD 3 中的全局设置文件进行相应的更改。
在 LogiCAD 上进行以上操作时,右键单击项目管理器中 Revolution Pi 下的 RevolutionPiResource,然后单击更改 IO 配置。这时 PiCtory 页面将在默认网络浏览器中打开。
在 PiCtory 右下角的参数编辑器部分中编辑输入和输出。我将输出 4 更改为“Cross_4”,将输出 5 更改为“Buzzer_5”。然后我将输入 1 更改为“Button_1”。
然后单击“File(文件)”并选择 Save as Start-Config(另存为 Start-Config)进行保存。
现在返回 Logi.Cad 3,再次右键单击“RevolutionPiResource”,然后选择“Load IOConfiguration(加载 IOConfiguration)”,这时将从 RevPi 中获取配置文件,并相应更新 LogiCAD 3 项目中的全局设置文件。
结构化文本代码
PROGRAM RevolutionPiProgram
VAR
wait : TON;
count : INT;
END_VAR
VAR_EXTERNAL
Red_1 : BOOL;
Amber_2 : BOOL;
Green_3 : BOOL;
Cross_4 : BOOL;
Buzzer_5 : BOOL;
Button_1 : BOOL;
END_VAR
CASE count OF
0: //init
count := count 4;
1: // Amber
Red_1 := False;
Amber_2 := True;
Green_3 := False;
Cross_4 := False;
Buzzer_5 := False;
wait(IN:=TRUE, PT:=T#7s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
2: // Red and Cross
Red_1 := True;
Amber_2 := False;
Green_3 := False;
Cross_4 := True;
Buzzer_5 := False;
wait(IN:=TRUE, PT:=T#10s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
3: // Red, Amber and Buzzer
Red_1 := True;
Amber_2 := True;
Green_3 := False;
Cross_4 := False;
Buzzer_5 := True;
wait(IN:=TRUE, PT:=T#5s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
4: // Green
IF Button_1 = FALSE THEN count := 1;
END_IF;
Red_1 := False;
Amber_2 := False;
Green_3 := True;
Cross_4 := False;
Buzzer_5 := False;
ELSE
count := 4;
END_CASE;
END_PROGRAM
在代码的开始部分设置变量:
VAR_EXTERNAL
外部变量需要与 PiCtory 中设置的输入和输出以及 LogiCAD 3 配置文件的标签完全匹配。
然后是指令:
count := 4;
使程序开始运行标有编号 4 的语句块。这些语句首先检查按钮是否已按下,如果没有按下,则绿色指示灯亮起,同时所有其他指示灯和蜂鸣器关闭。作为结构化文本程序,此程序循环运行,因此它将返回到起始行再次运行。运行的结果是绿色指示灯将持续亮起,直到检测到按钮已按下,这时程序进入标记为 1 的语句块,然后按顺序运行。
每个语句块中都有一个计时器:
wait(IN:=TRUE, PT:=T#5s);
如此一来,每个步骤运行的时间都可通过编辑 T# 后面的数值轻松调整。本例中设置为 5 秒 - 10s 将为 10 秒,而 10ms 将为 10 毫秒。
尽管不必要,但我还是在每个语句块中设置了每个变量的值,因为这样便于查看每个过程步骤所产生的效果,并在必要时进行编辑。
当 LogiCAD 3 连接至 RevPi,并且代码已编写并上传后,指示灯、按钮和蜂鸣器将按照预期工作。
潜在应用
本例是一组仅含 4 个步骤的简单事件序列,但是可以轻松增加更多输出和/或不同的输出组合,并按顺序以不同的持续时间运行。这意味着它只需适当调整,就能用于触发各种灯、蜂鸣器、电动机等,还可通过增加温度或运动传感器等输入来进一步扩展。