红绿灯实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红绿灯实验报告
上海交通大学材料科学与工程学院
实验目的:
通过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?”元件输出的布尔量就必然是假,两个横向黄灯就不会亮了。