嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

通过结构式文本和 RevPi Core 3 控制行人过路按键

pedestrian_crossing_521fae3921b2b3d8d08b6473c0b5ad8fcca2bcc2.jpg
本文介绍一个结构化文本 (PLC) 程序,它是在之前的交通灯示例基础上构建的行人过路按键控制解决方案

上一篇博客中,我通过 LogiCAD 3 用结构化文本对 Kunbus RevolutionPi 进行编程,成功模拟了一组简单的交通灯。现在,我决定尝试将交通灯项目扩展为行人过路按键项目。这包括增加按钮形式的输入,以便行人按下触发交通灯,此外还需增加行人过路指示灯的输出。为增强真实性,本例中还将增加蜂鸣器以警示交通灯即将变回绿色,因此过马路将不再安全。

硬件

这次我仍然将 RevPi Dore 3 和用于输入/输出的 DIO 安装在 DIN 导轨上,然后固定在一块激光切割的 5mm MDF 上。除了已有设置以外,我现在需要向 DIO 电源输入端提供 24V 电压,并参考快速入门指南中的如何连接电源章节,确保连接正确。

Input_X2_ead8189c67fe4589d66a7343787f32462c5330e8.jpg

它们连接在 DIO 模块上的 X2 连接器上 - 24V 至引脚 1,接地至引脚 2。

人行横道灯、白色 LED 指示灯 (763-7905) 和蜂鸣器 (626-157) 分别连接至 DIO 模块的输出 4 和 5。然后将按钮连接至输入 1 - 请注意,输入从连接器的右下角开始编号,然后是 24V。由于输入端从电源接收 24V 电压,因此我最初以为按钮的一侧应接地,但是在重新阅读《入门指南》和本论坛的帖子后,我意识到应该将它连接到 24V。

接着,我通过切割和弯曲制作了一个简单的亚克力底座,用于安装行人过路按键组件(按钮、蜂鸣器和白色 LED),然后将一名东德式的绿色小人贴在 LED 上,以增加项目的娱乐性。

设置

下一步是在 RevPi 的配置中设置新的组件友好标签。这意味着使用 PiCtory 的参数编辑器部分,对 LogiCAD 3 中的全局设置文件进行相应的更改。

RevPiResource_02d39e259141107aef9ac70bd07c919f962f6094.png

在 LogiCAD 上进行以上操作时,右键单击项目管理器中 Revolution Pi 下的 RevolutionPiResource,然后单击更改 IO 配置。这时 PiCtory 页面将在默认网络浏览器中打开。

Pictory_add_buzzer_f54e23a70617af48e178800eafbd56d33f1ba749.png

在 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 毫秒。

尽管不必要,但我还是在每个语句块中设置了每个变量的值,因为这样便于查看每个过程步骤所产生的效果,并在必要时进行编辑。

buildandload_7066c973755c433b6b26efc4dd315d1d2637da71.png

当 LogiCAD 3 连接至 RevPi,并且代码已编写并上传后,指示灯、按钮和蜂鸣器将按照预期工作。

潜在应用

本例是一组仅含 4 个步骤的简单事件序列,但是可以轻松增加更多输出和/或不同的输出组合,并按顺序以不同的持续时间运行。这意味着它只需适当调整,就能用于触发各种灯、蜂鸣器、电动机等,还可通过增加温度或运动传感器等输入来进一步扩展。

I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.