当前位置:文档之家› 红绿灯实验报告

红绿灯实验报告

红绿灯实验报告上海交通大学材料科学与工程学院实验目的:通过Labview程序设计做出十字路口红绿灯的计算机模拟。

程序原理:整体思路:用户将纵向红灯时间t纵红、纵向黄灯时间t纵黄、纵向绿灯时间t纵绿输入完毕后,程序会将这三段时间相加作为一个循环的时长T,并把时间计数器的时间除以1000取整数部分,再用这个结果除以T取余数得到当前循环已进行的时间t,取整数得到已进行的循环次数n。

为了简便起见,程序默认t横黄等于t纵黄。

根据实际经验可知:机动车道部分:t纵红= t横黄+ t横绿t横红= t纵黄+ t纵绿人行道部分:t纵红= t横绿= 机动车道部分t纵红t横红= t纵绿= 机动车道部分t横红因此,我们可以采用判断时间区间的办法控制各个指示灯的亮灭,即:令纵向红灯时间区间为[ 0,t 纵红 ]、纵向黄灯时间区间为[ t纵红 + t纵绿,T ]、纵向绿灯时间区间为[ t纵红,t纵红 + t纵绿 ]、横向红灯时间区间为[ t纵红,T ]、横向黄灯时间区间为[ t横绿,t纵红 ]、横向绿灯时间区间为[ 0,t横绿 ],利用判定范围元件判断t所符合的区间。

当t符合某些红灯或绿灯的区间时,指定元件将布尔量直接输出到信号灯,从而点亮这些红灯或绿灯并保持其他红灯或绿灯不工作;当t符合黄灯的区间时,利用相应元件得到黄灯已工作的时间,并将其除以2取余数,判断余数是否等于0,将布尔量输入信号灯,达到让黄灯闪烁的目的。

显然,各对指示灯时间区间均不相同,但是同一方向上三种颜色的指示灯的时间区间相加正好可以构成一个完整的循环,所以某一确定方向上有且仅有一种颜色的交通灯在工作。

另外,本程序通过控制时间区间,完美地实现了不同方向上指示灯的协同工作,很好地模拟了实际情况。

另外,程序利用while循环以及移位寄存器实现连续运行。

根据时间计数器的性质,每计时1000毫秒就会自动停止一次,所以本程序的设计中,每次循环里时间计数器只运行1000毫秒,通过不停地循环实现程序的连续运行。

将移位寄存器赋以初始值1,而开始计时的时候n = 0。

当二者不相等时,利用元件把此时移位寄存器的数值再次寄存并继续循环;当二者相等后,利用元件把移位寄存器此时的数值加1后寄存并继续循环,则二者又不相等了,元件就会把此时移位寄存器的数值再次寄存并继续循环。

依此类推,则程序就会连续运行下去,不会终止。

程序设计方案:当前循环已进行的时间t和已进行的循环次数n的获取:加入一个时间计数器。

由于时间单位是毫秒,而用户输入的时间单位是秒,因此需要转换单位:把计数的时间用“商与余数”元件除以1000取整数部分,即可将毫秒转化为秒。

记此结果为t0,然后把t纵红、t纵黄和t纵绿用复合运算元件相加得到T,再用“商与余数”元件将t0除以T取余数即可得到当前循环已进行的时间t,取整数即为已进行的循环次数n。

机动车道指示灯部分:很简单,先把t纵红作为判定范围元件的上限,再把0作为它的下限,然后计算t是否在此区间内,将它输出的布尔量直接输入两个纵向红灯。

若真,说明红灯到了该亮的时候,并且纵向红灯亮;若假,说明未到红灯工作时段,并且纵向红灯灭。

纵向黄灯:时间区间为[ t纵红 + t纵绿,T ]先把t纵红、t纵黄和t纵绿用复合运算元件相加,作为判定范围元件的上限,再把t纵红和t纵绿用加法元件相加作为下限,然后计算t是否在此区间内,让它输出一个布尔量。

此处将这个布尔量记作b。

将b输入选择元件,并将[ t - (t纵红+ t纵绿)]赋值到选择元件上端,将1赋值到选择元件下端。

然后选择元件将最终取值除以2,余数输出到“等于0?”元件内,而后此元件把得出的布尔量输入两个纵向黄灯。

由此可知:若b为真,也就是说t在此区间内,纵向黄灯到了该亮的时候。

此时选择元件取值为:[ t - (t 纵红+ t纵绿)],即黄灯的工作时间。

由于已进行时间t为一变量,所以[ t - (t纵红+ t纵绿)]的奇偶性也随时间交替变化:若这一刻为奇数,则一秒后为偶数;若这一刻为偶数,则一秒后为奇数。

因此除以2的余数在0和1之间周期性变化,间隔为1秒。

也就是说,“等于0?”元件输出的布尔量在真假之间周期性变化,间隔也是1秒,那么黄灯也就亮1秒、灭1秒了,达到了闪烁的目的;若b为假,也就是说t不在此区间,纵向黄灯不应该工作。

此时选择元件取值为1,除以2的余数也一定是1,这样“等于0?”元件输出的布尔量就必然是假,两个纵向黄灯就不会亮了。

纵向绿灯:时间区间为[ t纵红,t纵红 + t纵绿 ]先把t纵红和t纵绿用加法元件相加作为判定范围元件的上限,再将t纵红作为它的下限,然后计算t是否在此区间内,将它输出的布尔量直接输入两个纵向绿灯。

若真,说明绿灯到了该亮的时候,并且纵向绿灯亮;若假,说明未到绿灯工作时段,并且纵向绿灯灭。

横向红灯:时间区间为[ t纵红,T ]首先,因为T = t纵红 + t纵黄 + t纵绿,所以t纵黄 + t纵绿 = T - t纵红;又因为t横红 = t纵黄 + t纵绿,所以有t横红 = T - t纵红。

也就是说,我们先要先把t纵红、t纵黄和t纵绿用复合运算元件相加,作为判定范围元件的上限,再将t纵红作为它的下限,然后计算t是否在此区间内,将它输出的布尔量直接输入两个横向红灯。

若真,说明红灯到了该亮的时候,并且横向红灯亮;若假,说明未到红灯工作时段,并且横向红灯灭。

横向黄灯:时间区间为[ t横绿,t纵红 ]首先,因为t纵红 = t横黄 + t横绿,所以t横黄 = t纵红 - t横绿,这也是时间区间选为[ t横绿,t纵红 ]的原因。

并且t横黄 = t纵黄,所以有t纵红 = t纵黄 + t横绿,即t纵红 - t纵黄 = t横绿。

也就是说,我们先要通过减法元件用t纵红减去t纵黄得到t横绿,并将它作为判定范围元件的下限,将t纵红作为元件的上限,计算t是否在此区间内,然后让判定范围元件输出一个布尔量。

此处将这个布尔量记作b。

将b输入选择元件,并将[ t - t横绿 ]赋值到选择元件上端,将1赋值到选择元件下端。

然后选择元件将最终取值除以2,余数输出到“等于0?”元件内,而后此元件把得出的布尔量输入两个横向黄灯。

由此可知,若b为真,也就是说t 在此区间内,横向黄灯到了该亮的时候。

此时选择元件取值为(t - t横绿),即黄灯的工作时间。

由于已进行时间t为一变量,所以(t - t横绿)的奇偶性也随时间交替变化:若这一刻为奇数,则一秒后为偶数;若这一刻为偶数,则一秒后为奇数。

因此除以2的余数在0和1之间周期性变化,间隔为1秒。

也就是说,“等于0?”元件输出的布尔量在真假之间周期性变化,间隔也是1秒,那么黄灯也就亮1秒、灭1秒了,达到了闪烁的目的;若b为假,也就是说t不在此区间,横向黄灯不应该工作。

此时选择元件取值为1,除以2的余数也一定是1,这样“等于0?”元件输出的布尔量就必然是假,两个横向黄灯就不会亮了。

首先,因为t纵红 = t横黄 + t横绿,并且t横黄 = t纵黄,所以t纵红 = t纵黄 + t横绿,因此可得t横绿 = t纵红- t纵黄。

也就是说,我们先要通过减法元件用t纵红减去t纵黄得到t横绿,并将它作为判定范围元件的上限,再把0作为它的下限,然后计算t是否在此区间内,将它输出的布尔量直接输入两个横向绿灯。

若真,说明绿灯到了该亮的时候,并且横向绿灯亮;若假,说明未到绿灯工作时段,并且横向绿灯灭。

总结:由上述分析可见,各对指示灯时间区间均不相同,但是同一方向上三种颜色的指示灯的时间区间相加正好可以构成一个完整的循环,所以某一确定方向上有且仅有一种颜色的交通灯在工作。

另外,本程序通过控制时间区间,完美地实现了不同方向上指示灯的协同工作,很好地模拟了实际情况。

人行道指示灯部分:纵向红灯:时间区间和控制逻辑与机动车道纵向红灯完全相同,因此只需将机动车道纵向红灯的输入端并联在人行道纵向红灯上即可。

纵向绿灯:时间区间和控制逻辑与机动车道横向红灯完全相同,因此只需将机动车道横向红灯的输入端并联在人行道纵向绿灯上即可。

横向红灯:时间区间和控制逻辑与机动车道横向红灯完全相同,因此只需将机动车道横向红灯的输入端并联在人行道横向红灯上即可。

横向绿灯:时间区间和控制逻辑与机动车道纵向红灯完全相同,因此只需将机动车道纵向红灯的输入端并联在人行道横向绿灯上即可。

纵向显示:加入一个判定范围元件,把t纵红作为它的上限,再把0作为它的下限,然后计算t是否在区间[ 0 ,t纵红 ]内,记它输出的布尔量为b1。

将b1输入选择元件,同时把(t纵红 - t)赋值到选择元件上端,把0赋值到下端,记这个选择元件的输出值为a1。

再加入一个判定范围元件,把t纵红和t纵绿用加法元件相加赋值到它的上限,再将t纵红作为它的下限,然后计算t是否在区间[ t纵红,t纵红 + t纵绿 ]内,记它输出的布尔量为b2。

将b2输入选择元件,同时把(t 纵红 + t纵绿 - t)赋值到选择元件上端,把0赋值到下端,记这个选择元件的输出值为a2。

再加入一个判定范围元件,把t纵红、t纵黄和t纵绿用复合运算元件相加,赋值到判定范围元件的上限,再把t纵红和t纵绿用加法元件相加作为下限,然后计算t是否在区间[ t纵红 + t纵绿,T ]内,记它输出的布尔量为b3。

将b3输入选择元件,同时把(T - t)赋值到选择元件上端,把0赋值到下端,记这个选择元件的输出值为a3。

添加一个“最大值与最小值”元件,将a1、a2分别作为两个输入端,将最大值输出到另一个“最大值与最小值”元件的输入端,把a3赋值到另一个输入端,将最大值输出到数值显示控件。

显然,b1、b2和b3只能有一个为真,数值显示控件显示的是a1、a2和a3的最大值。

当b1为真时,a1= t 纵红 - t,a2 = a3 = 0,则数值显示控件显示的是a1,也就是红灯的剩余时间。

根据前面的说明,此时纵向红灯亮。

同理,b2为真时,数值显示控件显示的是a2,也就是绿灯的剩余时间。

根据前面的说明,此时纵向绿灯亮;b3为真时,数值显示控件显示的是a3,也就是黄灯的剩余时间。

根据前面的说明,此时纵向黄灯亮。

总之,纵向显示控件显示的是这个方向正在工作的交通灯的剩余时间。

横向显示:加入一个判定范围元件,把t纵红、t纵黄和t纵绿用复合运算元件相加,赋值到它的上限,再把t纵红作为它的下限,然后计算t是否在区间[ t纵红,T ]内,记它输出的布尔量为b1。

将b1输入选择元件,同时把(T - t)赋值到选择元件上端,把0赋值到下端,记这个选择元件的输出值为a1。

再加入一个判定范围元件,先通过减法元件用t纵红减去t纵黄得到t横绿,并将这个值作为它的上限,再把0作为它的下限,然后计算t是否在区间[ 0,t横绿 ]内,记它输出的布尔量为b2。

相关主题