隨著經濟發展,汽車數量急劇增加,城市道路日漸擁擠,交通擁塞已成為一個國際性的問題。因此,設計可靠、安全、便捷的多功能交通燈控制系統有極大的現實必要性。通常情況下,交通信號燈控制的主要缺陷是交通信號燈控制系統缺乏有效的應急措施,導致十字路交通受阻,造成不必要的經濟損失。為此,我們考慮設計十字路口的監控系統。以便方便、快速的對交通燈控制。Siemens公司生產的PLC由于價格低、適應工業現場以及強大聯網功能特點被廣泛使用??紤]到這些因素,本系統以PLC作為下位機。上位機可以采用VC++、VB、Delphi等高級語言,由于本系統實現的功能相對簡單,涉及的數據處理和數據管理要求不是太高,因此考慮用價格便宜,通訊容易實現的VB作為上位機。
2. 系統構成

圖1 系統構成
系統構成如圖1
監控系統主要由計算機和PLC構成。用PC/PPI電纜連接計算機的RS-232口和PLC的RS-485口,作為數據轉換器(使用PC/PPI電纜上的DIP開關來為電纜配置正確的波特率)。
本系統選用的計算機處理器型號是Pentium (R) 4 CPU; 有40G的硬盤空間;選用Microsoft windows XP 操作系統;有一個COM口。
Siemens 公司提供多種型號的CPU以適應各種應用。本系統選用的是Siemens 公司生產的CPU224型號的S7-200PLC, 它有一個RS-485口, 14個輸入口,10個輸出口,完全可以滿足該系統的要求(該系統需要8個輸出口)。
3. 操作流程及通訊原理
3.1 操作流程
a 在SETP7-Micro/WIN軟件的操作欄中點擊system block 圖標,出現圖2所示的界面。

d 在所示的界面3上點擊右邊欄的“雙擊刷新”按鈕,以便搜尋正確的波特率。
e 將程序下載至PLC。
f 將 PLC處于RUN模式。
g 打開VB界面,點擊菜單的“運行”選項,出現圖4的所示的監控界面,在監控界面中輸入需要傳輸的數據。
h 單擊圖4的監控界面上的開始按鈕,通訊開始。
3.2 通訊原理
當程序開始時,初始化VB界面,打開通信端口,當按下VB界面上的開始按鈕時,啟動定時器,用于采集通信數據,該定時器每隔0.1s采集一次通信數據;同時接收和發送函數也已經打開,這時可以在VB界面中輸入南北、東西交通燈的運行時間。即在VB中輸入數據傳送給PLC。
PLC程序開始時,初始化PLC的通訊端口,接收VB發送過來的數據,PLC判斷是否接收到結束字符,如果沒有接收到結束字符,PLC將處于接收狀態,如果接收到結束字符,PLC延時0.01s后開始向VB發送數據。如果由于任何其它原因接收完成,啟動一個新的接收。
VB接收PLC發送過來的數據“1”或“0”來控制交通燈的“亮”或“滅”,同時控制對應車的“運行”或“停止”。
當沒有按下停止或結束按鈕時,VB每隔0.1s發送一次數據給PLC, PLC接收到數據后,如果滿足發送條件,就把數據發送給VB。這樣就達到了計算機上的模擬界面來監控實際路面交通的運行狀況,如果遇到緊急事件,需要調整車輛的運行時間,只需要在計算機中輸入需要的時間即可。
3. 4. VB中的MSComm控件簡介
4.1在Windows環境下,操作系統通過驅動程序控制各種硬件資源,不允許用戶像在DOS 環境下那樣直接對串口進行底層操作。為此,Visual Basic 6.0提供了一個串口通訊控件 Miscrosoft Comm Control,簡 稱MSComm 控件。操作員只需設置和監視MSComm控件的屬性和事件,就可以輕而易舉地實現串行通信。
4.2 MSComm控件的屬性
.CommPort: 設置并返回通信端口號。
.Settings: 以字符串的形式設置并返回波特率、奇偶校驗位、數據位和停止位。其中以字符n、o、e分別表示無校驗、奇校驗和偶校驗。
.PortOpen: 設置并返回通信端口狀態。設置為True時,打開端口;設置為False時,關閉端口。
.Input: 從接收緩沖區讀取數據,類型為Variant。
.Output: 向發送緩沖區寫入數據,類型為字符串或字節數組。
.InputMode: 設置從緩沖區讀取數據的格式,設為0時為字符串格;設為1為二進制格式。
.InBufferCount: 設置和返回接收緩沖區的字節數,設為0時清空接收緩沖區。
.OutBufferCount: 設置和返回發送緩沖區的字節數,設為0時清空發送緩沖區。
.Inputlen: 設置和返回Input每次讀出的字節數,設為0時讀出接收緩沖區的全部內容。
.Rthreshold: 表示在串口事件OnComm發生之前,接收緩沖區接收的最少字節數。若設為0,可以禁止發生OnComm事件。一般設為1,即當接收緩沖區中的字節數大于等于1時,就會產生接收事件。
CommEvent: 返回相應的Oncomm事件常數。
4.3 MSComm控件處理接收信息的方式
MSComm控件提供了兩種處理方式:
(1)事件驅動方式:Rthreshold 屬性非0時,收到字符或傳輸線發生變化時就會產生串口事件OnComm。通過查詢CommEvent屬性可以捕獲并處理這些通信事件。
(2)查詢方式:通過查詢InputBufferCount(接收緩沖區的字節數)屬性值, 處理接收到的信息。
本文采用事件驅動方式
5. 方案的具體實現
5.1程序設計

5.1.1 VB發送數據給PLC
MSComm1.Output = Text2.Text & Text3.Text &Text4.Text & Text5.Text & Chr(10)
‘利用MSComm控件向PLC發送數據 (文本框內分別為控制交通燈南北直行、南北彎行、東西直行、東西彎行的時間) 說明:由于PLC識別從VB發送過來的ASCII碼,所以這些文本框內為經過運算的, PLC的識別的ASCII碼。這里用
p = Val(txt1.Text)
Text2.Text = Chr((p - 3) * 10)等語句。
5.1.2 VB接收PLC發送過來的數據
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
‘如果接收到字符
S1 = MSComm1.Input
‘把接收緩沖區內的數據賦值給臨時變量"S1"
If (S1 = Chr(&H1B)) And (Len(SCOMS) > 2) Then ‘如果變量"S1"(接收緩沖區內的數據接收到起始字符‘&H1B‘,并且變量"SCOMS"中的字節數大于2),則
SCOMS = ""
清空變量"SCOMS"中的數據
Else
‘否則
If S1 <> Chr(&HD) Then
‘如果變量"S1"沒有接收到結束字符‘&H0D‘,則
SCOMS = SCOMS&S1
‘將"S1"中的數據累加到"SCOMS"中
Else
‘否則
……
‘數據處理
End sub
‘ 結束 Text5.text=MSComm1.input
xt5.T ‘ text5.Text為存放PLC發送過來的數據
End Sub
5.2下位機程序設計
5.2.1 PLC 接收VB發過來的數據 (PLC接收緩沖區的分配如圖5)
RCV VB100, 0

圖6 PLC 的接收緩沖區的數據分配
5.2.2 PLC向VB發送數據(PLC發送緩沖區的分配如圖6)
MOVB 8, VB400
//設置發送字節個數為8,發送緩沖區為VB400
MOVB 16#1B, VB401
//設置發送信息的起始字符為"16#1B"
MOVB 16#0D, VB408
//設置發送信息的結束字符為"16#0D",
MOVB ‘1‘, VB402
NOT
MOVB ‘0‘, VB402
//若Q0.0有輸出,VB402為"1",否則為"0"
XMT VB400, 0
//在端口0向用戶回送信息,發送緩沖區指向VB400

圖7 PLC的發送緩沖區的數據分配
6. 結論
通過VB實現與PLC通訊。使PLC的工作納入微型計算機的管理之下。經試驗驗證,編制的VB程序在Microsoft windows XP系統下和PLC之間通訊運行良好、無誤碼,能有效的解決十字路口交通的運行狀況。