黃淑卿 廣東省佛山市南海技師學(xué)院
基于VB定時器的交通燈控制程序
——VB教學(xué)案例一則
黃淑卿 廣東省佛山市南海技師學(xué)院
對于較為枯燥的編程學(xué)習(xí),如何提高學(xué)生學(xué)習(xí)興趣,較快掌握理論知識,是我們教師多年來面對的一個課題。選擇好的學(xué)習(xí)素材則是編程教學(xué)中一項重要環(huán)節(jié),紅綠交通燈控制是人們?nèi)粘I钪薪?jīng)常見到的道路場景。用VB編程語言實現(xiàn)交通燈控制,在編程過程中引導(dǎo)學(xué)生運用模塊化設(shè)計思想、圖表化設(shè)計表達工具,完成變量的設(shè)置及賦值、VB語句編寫、子程序的調(diào)用,逐步實現(xiàn)并完善交通燈的控制程序。這一過程使編程學(xué)習(xí)更加生動有趣,各知識點的掌握及理解更加順暢。
VB編程教學(xué) 程序設(shè)計 交通燈控制
交通燈是現(xiàn)代生活中常見的交通指揮工具,特別是近年來,隨著經(jīng)濟的高速發(fā)展,汽車數(shù)量急速增加,交通燈的使用更加普遍,幾乎每個交通路口都有交通燈控制。合理的交通燈控制對于疏導(dǎo)交通、提升道路通行效率、減少交通事故有著重要意義??此坪唵我仔械募t綠控制,蘊藏著很強的邏輯性,是流程控制型編程教學(xué)的佳例,雖然現(xiàn)實生活中交通燈控制實際采用PLC可編程邏輯控制器實現(xiàn),但出于教學(xué)目的,應(yīng)用VB編程實現(xiàn)交通燈控制,生動展示編程過程,是學(xué)生學(xué)習(xí)編程相關(guān)知識的絕好素材。
交通信號燈由紅燈、綠燈、黃燈組成。紅燈表示禁止通行,綠燈表示準(zhǔn)許通行,黃燈表示警示。交通信號燈控制方式可以分為定時控制、感應(yīng)控制、自適應(yīng)控制。本文選用某處交叉路口為設(shè)計背景,通過VB編程模擬實現(xiàn)實際交通控制情形,從而展示VB編程從需求分析、概念設(shè)計到具體編程的實現(xiàn)過程。
實際操作中,通過觀察某處交叉路口交通燈控制模式,確定項目的需求,本例運用三態(tài)脈沖圖使信號燈周期性紅黃綠三態(tài)變化規(guī)律得到形象化表示,狀態(tài)轉(zhuǎn)移圖進一步把控制規(guī)律變?yōu)榍逦母拍睿鞒虉D幫助確定程序模塊的組成及調(diào)用關(guān)系,最后通過VB控件及語句,實現(xiàn)需求所要求的目標(biāo)??偟恼f來,本案例涉及到的知識點包括:概念設(shè)計中圖表的運用,控制過程的流程圖表示、程序模塊設(shè)計、VB控件的運用、邏輯控制語句的編寫、變量的設(shè)置、界面制作,這些知識基本涵蓋VB編程的基礎(chǔ)內(nèi)容,學(xué)生通過這一課題的實踐,可以初步理解VB編程的基本操作過程,并為日后完成更復(fù)雜的編程項目打下基礎(chǔ)。
3.1 需求分析
選擇某一路口作為本例的編程場景,通過對這一路口的觀察,確認所選定交叉路口采用的控制方式為:直行加左轉(zhuǎn),南北西東依次通行的控制模式,即先向南方向綠燈放行,同時南向車輛可左轉(zhuǎn),然后北向直行及左轉(zhuǎn)綠燈,接著東向,最后西向,按此順序周期循環(huán)。我們還注意到,由于從南北向進入東西向主干道的車輛較多,在南北左轉(zhuǎn)綠燈比直行綠燈多亮10秒。交通信號燈有紅黃綠三個狀態(tài),選用三態(tài)脈沖圖可反映信號的變化規(guī)律,以上情形可用三態(tài)脈沖圖表示如下:
如圖所示,數(shù)字為信號燈編號,每盞燈有綠黃紅三個狀態(tài),分別高中低三個電位表示,八盞燈分布在該交叉路口的四個角上,周期性地控制車輛通行。
3.2 信號燈控制模式的概念化表示
三態(tài)脈沖圖如實反映了交通信號燈周期性變化規(guī)律,但要把這一現(xiàn)象提升為清晰的概念,還得借助狀態(tài)轉(zhuǎn)移圖來實現(xiàn),經(jīng)過分析,我們將信號燈的變化規(guī)律轉(zhuǎn)化為五個狀態(tài)的循環(huán)轉(zhuǎn)換,以狀態(tài)轉(zhuǎn)移圖表示如下:
為簡化圖形表示,這里只顯示綠燈的狀態(tài),綠燈亮?xí)r其他燈均為紅色,另外還省略了黃燈的狀態(tài),因為綠燈轉(zhuǎn)紅燈有5秒的黃燈過渡為固定模式,逐一羅列不利于弄清信號燈的變化規(guī)律。如上圖所示,經(jīng)過簡化處理后,信號燈的控制過程更為清晰,狀態(tài)轉(zhuǎn)移圖將所觀察的現(xiàn)象轉(zhuǎn)化為清晰的概念。圖的右上方狀態(tài)顯示這一時刻二個左轉(zhuǎn)燈同時為綠,這一設(shè)置正是為滿足較多車輛要進入東西向主干道的需求而設(shè)計。
3.3 程序設(shè)計
3.3.1 信號燈變換設(shè)計
實現(xiàn)單一信號燈狀態(tài)變換是實現(xiàn)多信號燈系統(tǒng)聯(lián)動的基礎(chǔ),本例中制作信號燈小圖片,通過LoadPicture函數(shù),改變image控件的picture屬性,實現(xiàn)信號燈紅綠變化及黃燈閃爍的效果,應(yīng)用timer定時器控制信號燈的時長。本例中,模擬信號燈左轉(zhuǎn)的幾個小圖片如下:
3.3.2 子程序設(shè)計
本例中,共設(shè)置8只信號燈,按其位置分別編號1至8,圖片控件image(1)至image(8)分別控制相應(yīng)的信號狀態(tài),如下圖所示:
為了使程序簡化且便于閱讀,編寫子過程Pass(lamp_ no)、Alarm(lamp_no),通過子過程的調(diào)用實現(xiàn)各信號燈狀態(tài)的切換。
子過程Pass中參數(shù)lamp_no表示信號燈編號,如call Pass(4)表示4號燈切換到通行狀態(tài),即4號信號燈亮綠燈。子過程Alarm中參數(shù)lamp_no表示信號燈編號,如call Alarm(4)即4號信號燈進入黃閃狀態(tài)。
3.3.3 程序流程圖
根據(jù)業(yè)務(wù)需求及子程序調(diào)用形式的確定,繪制程序流程圖如下:
從流程圖來看,控制流為二個部分重合的閉環(huán)組成,為此需要設(shè)立2個定時器timer1、timer2分別控制程序流,另外黃閃控制也應(yīng)由各自的專用定時器timerAlarm1、timerAlarm2分別控制。
本例中,根據(jù)業(yè)務(wù)需求繪制三態(tài)脈沖圖,精確表達業(yè)務(wù)需求所述的情景,利用狀態(tài)遷移圖揭示業(yè)務(wù)表象下實質(zhì)性的邏輯關(guān)系,理清頭緒,簡化問題。通過對程序流程圖的分析,得知本例控制流特性為二路控制流,從而確立設(shè)置2個定時器分別控制。在編程細節(jié)上,根據(jù)信號燈的控制特點,編寫pass(),alarm()2個子程序,通過調(diào)用子程序,實現(xiàn)對相應(yīng)信號燈的控制。這種方式的編碼設(shè)置,實現(xiàn)代碼重用,提高編程效率,并使程序簡練易讀,也為日后系統(tǒng)維護提供方便。
[1]《Visual Basic 6.0程序設(shè)計與應(yīng)用教程》李俊編著,電子工業(yè)出版社
[2]《Visual Basic開發(fā)實戰(zhàn)》軟件開發(fā)技術(shù)聯(lián)盟編著,清華大學(xué)出版社
[3]《Visual Basic 2015入門經(jīng)典(第8版)/NET開發(fā)經(jīng)典名著》[美]Bryan Newsome著;李周芳,石磊,譯.清華大學(xué)出版社