基于LabVIEW+ELVIS Ⅱ的智能交通灯系统
第一部分:验证性实验实验报告
一、实验题目
数字I/O输出。
二、实验设备及硬件接线
实验设备:NI-ELVIS Ⅱ、电脑。 硬件接线:将ELVIS Prototyping Board上的DIO0连接至LED0 ;DIO1连接至LED1;依次连接,直至将DIO7连接至LED7。
三、数据采集程序
四、测试结果
物理通道选择“Dev1/port0/line0:7”,运行编写好的VI,改变布尔数组“Data”中不同位布尔输入值,可以在原型板上看到LED 0-LED7被LabVIEW程序控制而变化,当打开第1个按键时,LED0亮,依次类推进行控制。
第二部分:综合设计实验实验报告
一、实验题目
十字路口交通灯控制程序。
二、实验设备
NI-ELVIS Ⅱ、电脑。
三、实验原理及设计方案
1.实验原理
(1)交通灯原理分析
通过日常生活经验与网上资料查询,可以将十字路口交通灯的一个周期、4个阶段进行如下概括:
①阶段1:红灯1、绿灯2亮,其他灯灭。此时方向2通行,方向1禁止通行,如图2-1; ②阶段2:红灯1、黄灯2亮,其他灯灭。2方向由绿变为黄,示意停止。此时方向1、2状态均即将变化; ③阶段3:绿灯1、红灯2亮,其他灯灭。此时方向1通行,方向2禁止通行; ④阶段3:黄灯1、红灯2亮,其他灯灭。1方向由绿变为黄,示意停止。此时方向1、2状态均即将变化。 交通灯不断按照以上4个阶段为一个周期进行循环运行。只要将两组布尔灯(6个)分4个阶段,不断赋予其相应的值,便可以实现实验要求。 (2)NI-ELVIS的实现分析
在NI-ELVIS实验平台上,可以轻松实现I/O口的数字输出。通过DAQmx Write.vi能够不断读取循环体内的目标参数,随后连线将采样输出至I/O口,便可实现I/O口的数字输出过程(详细过程可见ELVIS实验指导书Lab5.1)。 通过此原理,可以将交通灯设置为布尔灯,并对6个布尔灯状态进行采样输出,便可实现实验要求的LED显示变化。
2.设计方案
具体的程序设计方案见第四大点。此处阐述如何利用ELVIS进行连线设计。 如图2-2,将Prototyping Board上的DIO0-DIO7连接至LED0和LED8,即可利用物理通道“Dev1/port0/line0:7”对LED数字量的输出。
四、程序设计
1.前面板设计
如图2-1所示,为一个十字路口模拟图。由于十字路口相对面交通灯状态相同,且实验仅要求用6个LED灯反应变化情况,故仅放置两组6个布尔灯在垂直的两个方向上。中间的数字表示交通灯红绿切换的倒计时。右上角可以手动设定两个方向上绿灯与黄灯的时间,红灯的时间等于另一个方向上绿灯时间加另一个方向上黄灯时间。右下角表示物理通道的选择。
2.程序框图设计
(1)框架设计
前面已经将交通灯的周期分为4个阶段,故采用条件结构,并设置4个条件入口“0、1、2、3”,在4个条件框内实现该阶段需要执行的内容。设置一个包含元素“0、1、2、3”的一维数组,并在条件结构外套一个大循环,将大循环的计数接线端除以4,取余数来循环索引数组中的4个数字,以此实现循环进入4个条件。
(2)条件结构内部设计
每个条件结构中设置一个小循环,循环中将真假布尔常量分别写入各布尔灯的局部变量。再给小循环的移位寄存器赋予一个阶段秒数,进入循环后不断自减1,并通过移位寄存器将数值送入下一次循环。当阶段时间减至0时,本条件结构执行完成,等待下一个入口条件触发。
(3)采样部分设计
大循环外,首先创建DAQmx通道,物理通道选择“Dev1/port0/line0:7”,线分组选择“单通道用于所有线”,模式选择“数字输出”。后续连接一个DAQmx开始任务。在采样结束后清楚任务以及连接一个简易错误处理器。 大循环内、小循环外放置一个DAQmx写入函数,并选择“数字1D布尔1通道1采样”。该模式下数据输入格式必须是一维数组,故将6个布尔灯输出控件+2个假常量通过“创建数组”函数创建一个一维数组并连接至DAQmx写入函数的数据口。
五、调试结果
物理通道选择“Dev1/port0/line0:7”,设置Green1 Time为3s,Green2 Time为3s,两个Yellow Time均为2s。按照“设计方案”连线后,打开Prototyping Board的电源,运行程序。 可以看到,两个方向的交通灯均以3s绿灯,2s黄灯,5s红灯的速率切换。且ELVIS上对应连接的LED灯也随之切换。
六、心得体会
本次实验框架结构本来采用的顺序执行结构,用四个帧分别运行四个阶段的程序,但是采样无法正确进行,原因分析可能为每次采样时间节点与布尔灯的变化速率出现冲突。本次实验结束后后续还可以对实验进行结构上的改进,实现功能的扩充,并且实现黄灯的闪烁功能。同时,对于题目中要求的“实现较大路口的有直行和左右拐弯的交通灯控制”,本人认为本次的程序无法实现左行与直行的分离控制,更合理的设计方案应该如图2-6,使用箭头形状的红绿灯,每个箭头都可以进行红-绿-黄颜色的变化。
箭头式的交通灯更为合理,能实现左行与直行的分离控制改进版的程序大致思路:利用箭头图形控件的属性节点-颜色,来进行不同阶段每个箭头不同颜色的交替变换。