信息內(nèi)容:
第一字節(jié),燈號(hào)字節(jié)10:不相關(guān),1:相關(guān),bit7~bit0分別對(duì)應(yīng)本模塊8~1號(hào)燈
第二字節(jié),燈號(hào)字節(jié)10:不相關(guān),1:相關(guān),bit6~bit0分別對(duì)應(yīng)本模塊15~9號(hào)燈
第三字節(jié),開度值0:關(guān),1~63亮度值:開,128:突關(guān),255:突關(guān)
第四字節(jié),變光時(shí)間0~255
輸出模塊返回給主控器時(shí),信息頭定義如下:
MessageType53
MessageSubType0/2
ResultDependent on operation(1 or 0)
系統(tǒng)的通信按照規(guī)定的各條協(xié)議來(lái)執(zhí)行。
3 計(jì)算機(jī)通信的實(shí)現(xiàn)
計(jì)算機(jī)硬件上通過RS 232與RS 485接口轉(zhuǎn)換與下端模塊進(jìn)行通信。而軟件的實(shí)現(xiàn)有多種方法,下面主要介紹在VB 6.0通過MSComm控件來(lái)實(shí)現(xiàn)通信的方法[5]。
3.1 將MSComm控件引入到VB平臺(tái)
MSComm 控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。MSComm控件在串口編程時(shí)非常方便,程序員不必去花時(shí)間去了解較為復(fù)雜的API函數(shù)[6],而且在VC,VB,Delphi等語(yǔ)言中均可使用。
MSComm是Microsoft公司提供的簡(jiǎn)化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。具體的來(lái)說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(dòng)(Event-driven)方法,一是查詢法。
3.2 MSComm控件的設(shè)置
3.2.1 MSComm控件的屬性
MSComm控件有很多重要的屬性,正確設(shè)置其屬性是程序進(jìn)行正常通信的保證,下面介紹幾個(gè)必須熟悉的屬性[7] 。
CommPort:設(shè)置并返回通訊端口號(hào)。
Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
PortOpen:設(shè)置并返回通訊端口的狀態(tài),也可以打開和關(guān)閉端口。
Input:從接收緩沖區(qū)返回和刪除字符。
InputMode:接收模式,取0值時(shí),接收文本數(shù)據(jù);取1時(shí),接收二進(jìn)制數(shù)據(jù)。
Output:向傳輸緩沖區(qū)寫一個(gè)字符串。
Rthrehold:響應(yīng)模式,取整數(shù)。當(dāng)接收字符后,若Rthrehold屬性設(shè)置為 0,則不產(chǎn)生OnComm 事件;若設(shè)置為1,則接收緩沖區(qū)收到每一個(gè)字符都會(huì)使 MSComm控件產(chǎn)生OnComm事件。
Sthreshold:發(fā)送模式,設(shè)置0(缺省值),數(shù)據(jù)傳輸事件不會(huì)產(chǎn)生OnComm事件;設(shè)置為1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm控件產(chǎn)生OnComm 事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于value,CommEvent 屬性設(shè)置為comEvSend,并產(chǎn)生OnComm 事件。
Handshake:通信握手模式,取值為0時(shí),無(wú)握手;取值為1時(shí),表示XOn/Xoff握手;取值為2時(shí),表示Request-to\\-send/clear-to-send握手;取值為3時(shí),表示equest-to-send & clear-to-send握手皆可。
3.2.2 MSComm控件兩種處理通訊的方式
MSComm控件提供下列兩種處理通訊的方式:事件驅(qū)動(dòng)方式和查詢方式[8]。
(1) 事件驅(qū)動(dòng)方式
事件驅(qū)動(dòng)通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者Carrier Detect(CD)或Request To Send(RTS)線上一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí)。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯(cuò)誤。所有通訊事件和通訊錯(cuò)誤的列表,參閱CommEvent屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。每個(gè)MSComm控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè)MSComm控件。
(2) 查詢方式
查詢方式實(shí)質(zhì)上還是事件驅(qū)動(dòng),但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查CommEvent屬性的值來(lái)查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個(gè)簡(jiǎn)單的電話撥號(hào)程序,則沒有必要對(duì)每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。
3.3 計(jì)算機(jī)信息發(fā)送和接收的實(shí)現(xiàn)
下面以智能照明系統(tǒng)中PC機(jī)與主控器的通信,說明計(jì)算機(jī)與單片機(jī)通信的實(shí)現(xiàn)方法。以下是實(shí)現(xiàn)的主要子程序。
頁(yè)面裝載程序:
Private Sub Form Load()
com sl="com1"
bauty=9600
For i=0 To 59
Text2(i).Text=""
Next i
Open "recieve.txt" For Output As #1
End Sub
MSComm控件的設(shè)置程序:
Private Sub Command1 Click()
com sl=Combo1.Text
bauty=Combo2.Text
convert=Check1.Value
Form2.Hide
Form1.Command6.Enabled=False
Form1.Command4.Enabled=True
End Sub
通信口控制子程序:
Private Sub Command4 Click()
Select Case bauty
Case 1200
MSComm1.Settings="1200,n,8,1"
Case 2400
MSComm1.Settings="2400,n,8,1"
Case 9600
MSComm1.Settings="9600,n,8,1"
Case 19200
MSComm1.Settings="19200,n,8,1"
…
Case 57600
MSComm1.Settings="57600,n,8,1"
End Select
If com sl="com1" Then MSComm1.CommPort=1
…
If com sl="com7" Then MSComm1.CommPort=7
MSComm1.RThreshold=0
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
Command4.Enabled=False
Command5.Enabled=True
Command3.Enabled=False
If convert Then MSComm1.RTSEnable=True
End Sub
通信建立后,計(jì)算機(jī)就可以與下端單片機(jī)通過設(shè)定的協(xié)議進(jìn)行通信,可以測(cè)試下端模塊的響應(yīng)。
4 MSComm控件的問題和解決辦法
在實(shí)際應(yīng)用中,MSComm控件對(duì)于一問一答式的通信,效果還是可以的,所以用于單模塊的通信測(cè)試問題不大。但是,如果計(jì)算機(jī)作為單片系統(tǒng)的一個(gè)角色,要實(shí)時(shí)捕獲總線上的信息并響應(yīng),存在失幀和誤幀的問題[9],如果系統(tǒng)要求不高,還可以對(duì)付,而象智能照明這樣要求信息持續(xù)、實(shí)時(shí)、準(zhǔn)確的系統(tǒng),利用MSComm控件處理串口通信就難以勝任了[10]。
摘 要:在智能家居系統(tǒng)設(shè)計(jì)中,串行通信是實(shí)現(xiàn)上位機(jī)與下端模塊通信的最主要的手段。為了提高上位機(jī)與下端模塊的通信效率,在上位機(jī)設(shè)計(jì)時(shí)通過使用Windows的MSComm控件和自編制的串口接收發(fā)送動(dòng)態(tài)控件的比較,發(fā)現(xiàn)利用MSComm控件雖然可以方便快捷地編制出上位機(jī)程序,但其通信效率偏低,誤幀和失幀率較高,只適用于單模塊測(cè)試。對(duì)于多模塊實(shí)時(shí)通信系統(tǒng),采用其他控件或自編制收發(fā)程序更為有效。
關(guān)鍵詞:上位機(jī); 單片機(jī); 智能家居系統(tǒng); 協(xié)議; 串行通信; MSComm控件
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)13-0133-04
Upper Computer Control in Intelligent Home System Based on Serial Communication
JIANG Yong-chi
(Shantou Polytechnic College, Shantou515078, China)
Abstract: Serial communication is the most important communication method between upper computer control and lower model(MCU) in the design of intelligent home system. By comparison between MSComm control of Windows and self-written serial transcieving dynamic control during the design of the uppercomputer to improve the communication efficiency of the upper computer control and the model at lower end, it is found that the communication efficiency of the upper computer program written by MSComm control is low, and the rate of error-frame and lost-frame is high though the program can be written out quickly with MSComm control. Two different ways to test the serial port communication abbility and find the follow facts: MSComm control can only use in single model can′t use in a multi-model system.
Keywords: upper computer control; MCU; intelligent home system; protocols; serial communication; MSComm control
0 引 言
上位機(jī)設(shè)計(jì)是智能家居系統(tǒng)的一個(gè)重要組成部分,擔(dān)負(fù)著管理、控制、維護(hù)和用戶界面操作的重任,高效可靠的上位機(jī)設(shè)計(jì)是整個(gè)系統(tǒng)正常運(yùn)作的重要保障。上位機(jī)與系統(tǒng)的通信實(shí)際上是與下端單片機(jī)的通信[1]。單片機(jī)或單片機(jī)系統(tǒng)是智能家居控制的核心,當(dāng)計(jì)算機(jī)作為單片系統(tǒng)的一個(gè)角色時(shí),通常被稱為“工控機(jī)”或“上位機(jī)”,各獨(dú)立的單片機(jī)是系統(tǒng)中實(shí)現(xiàn)功能的一個(gè)模塊,所以有時(shí)也稱單片機(jī)為模塊。
計(jì)算機(jī)與單片機(jī)是通過串口來(lái)實(shí)現(xiàn)通信的,本文著重討論計(jì)算機(jī)與單片機(jī)的串口通信的實(shí)現(xiàn)方法和MSComm控件技術(shù)。
1 上位機(jī)在智能家居系統(tǒng)的角色
首先,必須認(rèn)識(shí)計(jì)算機(jī)在智能家居系統(tǒng)的作用,可以概括為以下幾個(gè)方面:
1.1 通信測(cè)試工具
傳統(tǒng)的單片機(jī)系統(tǒng)的通信測(cè)試通過示波器來(lái)監(jiān)測(cè),既不直觀又容易丟失信息。將計(jì)算機(jī)加入到系統(tǒng)中,可以實(shí)時(shí)監(jiān)測(cè)到線路中的信息,并以數(shù)字化呈現(xiàn),使各個(gè)單片機(jī)間的通信得到檢驗(yàn),及時(shí)解決系統(tǒng)存在的問題。所以計(jì)算機(jī)在加速系統(tǒng)的開發(fā)和保證系統(tǒng)的運(yùn)行質(zhì)量的作用就不言而喻了。
1.2 系統(tǒng)維護(hù)
一個(gè)單片機(jī)系統(tǒng)往往需要對(duì)系統(tǒng)中各個(gè)不同功能的模塊(單片機(jī))進(jìn)行參數(shù)的設(shè)置,以適應(yīng)不同的運(yùn)行環(huán)境,雖然可以通過各模塊的控制面板來(lái)調(diào)整,但操作通常比較麻煩,非專業(yè)人員不易掌握。同時(shí)對(duì)于一些需要定義其地理位置的參數(shù)難以實(shí)現(xiàn),不夠直觀。計(jì)算機(jī)加入到系統(tǒng)中,不但可以解決操作上的問題,同時(shí)還可以讀取各模塊的參數(shù),以便于調(diào)整[2]。
1.3 單片機(jī)
計(jì)算機(jī)可以作為單片機(jī)系統(tǒng)的一個(gè)模塊,完成相應(yīng)的功能。計(jì)算機(jī)應(yīng)答系統(tǒng)的請(qǐng)求、處理系統(tǒng)中的信息,一方面將信息呈現(xiàn)給用戶,另一方面計(jì)算機(jī)程序通過自動(dòng)計(jì)算或用戶的輸入,將信息反饋到系統(tǒng)中,參與系統(tǒng)的控制。
1.4 主控機(jī)
在單片機(jī)系統(tǒng)中,往往存在一個(gè)主控機(jī)或主控模塊,負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的統(tǒng)籌和設(shè)置。單片機(jī)系統(tǒng)通常是通過各功能模塊的輸入和響應(yīng)來(lái)實(shí)現(xiàn)其功能的,因此必須有一個(gè)負(fù)責(zé)收集輸入任務(wù)并指定響應(yīng)模塊的主控模塊。計(jì)算機(jī)系統(tǒng)中既可以是一個(gè)普通的模塊,又可以是負(fù)責(zé)總體協(xié)調(diào)的主控器。
2 通信協(xié)議
一個(gè)單片機(jī)系統(tǒng)是由硬件系統(tǒng)和軟件系統(tǒng)構(gòu)成的。硬件是實(shí)現(xiàn)功能的前提,而系統(tǒng)功能則是通過軟件來(lái)實(shí)現(xiàn)的,為了保證各個(gè)模塊通信,實(shí)現(xiàn)系統(tǒng)信息交流,必須制訂系統(tǒng)的通信協(xié)議。
從物理上來(lái)說,系統(tǒng)各模塊是以半雙工的模式來(lái)通信的,下文提及的智能照明系統(tǒng)下端模塊就是以半雙工的RS 485總路線為通信架構(gòu)的。而計(jì)算機(jī)的RS 232串口是以全雙工的模式來(lái)實(shí)現(xiàn)通信的,因此,計(jì)算機(jī)要通過串口參與到單片機(jī)系統(tǒng)中必須增加一個(gè)RS 232和RS 485總線轉(zhuǎn)換的模塊[3]。
從邏輯上講,要實(shí)現(xiàn)各模塊之間的通信,就必須在模塊間約定一個(gè)共同遵守的通信協(xié)議。單片機(jī)以位(b)為基本單位,傳輸時(shí)以8位1字節(jié)(B)來(lái)傳輸,單片機(jī)以毫秒間距發(fā)送若干個(gè)字節(jié)為一個(gè)數(shù)據(jù)包,也稱為一幀,幀之間又規(guī)定若干毫秒的間隙。通過計(jì)算機(jī)程序可以捕獲線路中每一幀信息。
下面以智能照明系統(tǒng)為例,講述單片機(jī)系統(tǒng)的通信協(xié)議。
本協(xié)議采用異步串行通信方式,字節(jié)幀格式:1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)停止位,無(wú)校驗(yàn)位。
幀格式如下[4]:
1幀=幀頭(F4H F5H)+數(shù)據(jù)包+幀尾(F4H FBH) <255 B
數(shù)據(jù)包=有效字節(jié)數(shù)(1 B)+傳輸層數(shù)據(jù)+校驗(yàn)和(1 B)<251 B
幀數(shù)據(jù)的發(fā)送、接收過程中前后兩字節(jié)數(shù)據(jù)傳送延時(shí)不得超過0.5 s。
各模塊分配兩個(gè)字節(jié)的地址碼,第一字節(jié)代表模塊類型,第二字節(jié)代表模塊在系統(tǒng)中分配的順序。各模塊獲取總線上的幀后,對(duì)自己的地址幀響應(yīng),其他的幀拋掉。
以下是本協(xié)議中的關(guān)于“燈開停控制”的協(xié)議:
描述:該信息是輸出子模塊的各路燈的開或關(guān)控制。
構(gòu)成:該信息發(fā)送時(shí)由信息頭和信息內(nèi)容構(gòu)成,返回時(shí)由信息頭構(gòu)成。
主控器或PC機(jī)發(fā)給輸出模塊時(shí):
MessageType53
MessageSubType0/2
Result0
第一字節(jié),燈號(hào)字節(jié)10:不相關(guān),1:相關(guān),bit7~bit0分別對(duì)應(yīng)本模塊8~1號(hào)燈
第二字節(jié),燈號(hào)字節(jié)10:不相關(guān),1:相關(guān),bit6~bit0分別對(duì)應(yīng)本模塊15~9號(hào)燈
第三字節(jié),開度值0:關(guān),1~63亮度值:開,128:突關(guān),255:突關(guān)
第四字節(jié),變光時(shí)間0~255
輸出模塊返回給主控器時(shí),信息頭定義如下:
MessageType53
MessageSubType0/2
ResultDependent on operation(1 or 0)
系統(tǒng)的通信按照規(guī)定的各條協(xié)議來(lái)執(zhí)行。
3 計(jì)算機(jī)通信的實(shí)現(xiàn)
計(jì)算機(jī)硬件上通過RS 232與RS 485接口轉(zhuǎn)換與下端模塊進(jìn)行通信。而軟件的實(shí)現(xiàn)有多種方法,下面主要介紹在VB 6.0通過MSComm控件來(lái)實(shí)現(xiàn)通信的方法[5]。
3.1 將MSComm控件引入到VB平臺(tái)
MSComm 控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。MSComm控件在串口編程時(shí)非常方便,程序員不必去花時(shí)間去了解較為復(fù)雜的API函數(shù)[6],而且在VC,VB,Delphi等語(yǔ)言中均可使用。
MSComm是Microsoft公司提供的簡(jiǎn)化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。具體的來(lái)說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(dòng)(Event-driven)方法,一是查詢法。
3.2 MSComm控件的設(shè)置
3.2.1 MSComm控件的屬性
MSComm控件有很多重要的屬性,正確設(shè)置其屬性是程序進(jìn)行正常通信的保證,下面介紹幾個(gè)必須熟悉的屬性[7] 。
CommPort:設(shè)置并返回通訊端口號(hào)。
Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
PortOpen:設(shè)置并返回通訊端口的狀態(tài),也可以打開和關(guān)閉端口。
Input:從接收緩沖區(qū)返回和刪除字符。
InputMode:接收模式,取0值時(shí),接收文本數(shù)據(jù);取1時(shí),接收二進(jìn)制數(shù)據(jù)。
Output:向傳輸緩沖區(qū)寫一個(gè)字符串。
Rthrehold:響應(yīng)模式,取整數(shù)。當(dāng)接收字符后,若Rthrehold屬性設(shè)置為 0,則不產(chǎn)生OnComm 事件;若設(shè)置為1,則接收緩沖區(qū)收到每一個(gè)字符都會(huì)使 MSComm控件產(chǎn)生OnComm事件。
Sthreshold:發(fā)送模式,設(shè)置0(缺省值),數(shù)據(jù)傳輸事件不會(huì)產(chǎn)生OnComm事件;設(shè)置為1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm控件產(chǎn)生OnComm 事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于value,CommEvent 屬性設(shè)置為comEvSend,并產(chǎn)生OnComm 事件。
Handshake:通信握手模式,取值為0時(shí),無(wú)握手;取值為1時(shí),表示XOn/Xoff握手;取值為2時(shí),表示Request-to\\-send/clear-to-send握手;取值為3時(shí),表示equest-to-send & clear-to-send握手皆可。
3.2.2 MSComm控件兩種處理通訊的方式
MSComm控件提供下列兩種處理通訊的方式:事件驅(qū)動(dòng)方式和查詢方式[8]。
(1) 事件驅(qū)動(dòng)方式
事件驅(qū)動(dòng)通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者Carrier Detect(CD)或Request To Send(RTS)線上一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí)。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯(cuò)誤。所有通訊事件和通訊錯(cuò)誤的列表,參閱CommEvent屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。每個(gè)MSComm控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè)MSComm控件。
(2) 查詢方式
查詢方式實(shí)質(zhì)上還是事件驅(qū)動(dòng),但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查CommEvent屬性的值來(lái)查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個(gè)簡(jiǎn)單的電話撥號(hào)程序,則沒有必要對(duì)每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。
3.3 計(jì)算機(jī)信息發(fā)送和接收的實(shí)現(xiàn)
下面以智能照明系統(tǒng)中PC機(jī)與主控器的通信,說明計(jì)算機(jī)與單片機(jī)通信的實(shí)現(xiàn)方法。以下是實(shí)現(xiàn)的主要子程序。
頁(yè)面裝載程序:
Private Sub Form Load()
com sl="com1"
bauty=9600
For i=0 To 59
Text2(i).Text=""
Next i
Open "recieve.txt" For Output As #1
End Sub
MSComm控件的設(shè)置程序:
Private Sub Command1 Click()
com sl=Combo1.Text
bauty=Combo2.Text
convert=Check1.Value
Form2.Hide
Form1.Command6.Enabled=False
Form1.Command4.Enabled=True
End Sub
通信口控制子程序:
Private Sub Command4 Click()
Select Case bauty
Case 1200
MSComm1.Settings="1200,n,8,1"
Case 2400
MSComm1.Settings="2400,n,8,1"
Case 9600
MSComm1.Settings="9600,n,8,1"
Case 19200
MSComm1.Settings="19200,n,8,1"
…
Case 57600
MSComm1.Settings="57600,n,8,1"
End Select
If com sl="com1" Then MSComm1.CommPort=1
…
If com sl="com7" Then MSComm1.CommPort=7
MSComm1.RThreshold=0
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
Command4.Enabled=False
Command5.Enabled=True
Command3.Enabled=False
If convert Then MSComm1.RTSEnable=True
End Sub
通信建立后,計(jì)算機(jī)就可以與下端單片機(jī)通過設(shè)定的協(xié)議進(jìn)行通信,可以測(cè)試下端模塊的響應(yīng)。
4 MSComm控件的問題和解決辦法
在實(shí)際應(yīng)用中,MSComm控件對(duì)于一問一答式的通信,效果還是可以的,所以用于單模塊的通信測(cè)試問題不大。但是,如果計(jì)算機(jī)作為單片系統(tǒng)的一個(gè)角色,要實(shí)時(shí)捕獲總線上的信息并響應(yīng),存在失幀和誤幀的問題[9],如果系統(tǒng)要求不高,還可以對(duì)付,而象智能照明這樣要求信息持續(xù)、實(shí)時(shí)、準(zhǔn)確的系統(tǒng),利用MSComm控件處理串口通信就難以勝任了[10]。
摘 要:在智能家居系統(tǒng)設(shè)計(jì)中,串行通信是實(shí)現(xiàn)上位機(jī)與下端模塊通信的最主要的手段。為了提高上位機(jī)與下端模塊的通信效率,在上位機(jī)設(shè)計(jì)時(shí)通過使用Windows的MSComm控件和自編制的串口接收發(fā)送動(dòng)態(tài)控件的比較,發(fā)現(xiàn)利用MSComm控件雖然可以方便快捷地編制出上位機(jī)程序,但其通信效率偏低,誤幀和失幀率較高,只適用于單模塊測(cè)試。對(duì)于多模塊實(shí)時(shí)通信系統(tǒng),采用其他控件或自編制收發(fā)程序更為有效。
關(guān)鍵詞:上位機(jī); 單片機(jī); 智能家居系統(tǒng); 協(xié)議; 串行通信; MSComm控件
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)13-0133-04
Upper Computer Control in Intelligent Home System Based on Serial Communication
JIANG Yong-chi
(Shantou Polytechnic College, Shantou515078, China)
Abstract: Serial communication is the most important communication method between upper computer control and lower model(MCU) in the design of intelligent home system. By comparison between MSComm control of Windows and self-written serial transcieving dynamic control during the design of the uppercomputer to improve the communication efficiency of the upper computer control and the model at lower end, it is found that the communication efficiency of the upper computer program written by MSComm control is low, and the rate of error-frame and lost-frame is high though the program can be written out quickly with MSComm control. Two different ways to test the serial port communication abbility and find the follow facts: MSComm control can only use in single model can′t use in a multi-model system.
Keywords: upper computer control; MCU; intelligent home system; protocols; serial communication; MSComm control
0 引 言
上位機(jī)設(shè)計(jì)是智能家居系統(tǒng)的一個(gè)重要組成部分,擔(dān)負(fù)著管理、控制、維護(hù)和用戶界面操作的重任,高效可靠的上位機(jī)設(shè)計(jì)是整個(gè)系統(tǒng)正常運(yùn)作的重要保障。上位機(jī)與系統(tǒng)的通信實(shí)際上是與下端單片機(jī)的通信[1]。單片機(jī)或單片機(jī)系統(tǒng)是智能家居控制的核心,當(dāng)計(jì)算機(jī)作為單片系統(tǒng)的一個(gè)角色時(shí),通常被稱為“工控機(jī)”或“上位機(jī)”,各獨(dú)立的單片機(jī)是系統(tǒng)中實(shí)現(xiàn)功能的一個(gè)模塊,所以有時(shí)也稱單片機(jī)為模塊。
計(jì)算機(jī)與單片機(jī)是通過串口來(lái)實(shí)現(xiàn)通信的,本文著重討論計(jì)算機(jī)與單片機(jī)的串口通信的實(shí)現(xiàn)方法和MSComm控件技術(shù)。
1 上位機(jī)在智能家居系統(tǒng)的角色
首先,必須認(rèn)識(shí)計(jì)算機(jī)在智能家居系統(tǒng)的作用,可以概括為以下幾個(gè)方面:
1.1 通信測(cè)試工具
傳統(tǒng)的單片機(jī)系統(tǒng)的通信測(cè)試通過示波器來(lái)監(jiān)測(cè),既不直觀又容易丟失信息。將計(jì)算機(jī)加入到系統(tǒng)中,可以實(shí)時(shí)監(jiān)測(cè)到線路中的信息,并以數(shù)字化呈現(xiàn),使各個(gè)單片機(jī)間的通信得到檢驗(yàn),及時(shí)解決系統(tǒng)存在的問題。所以計(jì)算機(jī)在加速系統(tǒng)的開發(fā)和保證系統(tǒng)的運(yùn)行質(zhì)量的作用就不言而喻了。
1.2 系統(tǒng)維護(hù)
一個(gè)單片機(jī)系統(tǒng)往往需要對(duì)系統(tǒng)中各個(gè)不同功能的模塊(單片機(jī))進(jìn)行參數(shù)的設(shè)置,以適應(yīng)不同的運(yùn)行環(huán)境,雖然可以通過各模塊的控制面板來(lái)調(diào)整,但操作通常比較麻煩,非專業(yè)人員不易掌握。同時(shí)對(duì)于一些需要定義其地理位置的參數(shù)難以實(shí)現(xiàn),不夠直觀。計(jì)算機(jī)加入到系統(tǒng)中,不但可以解決操作上的問題,同時(shí)還可以讀取各模塊的參數(shù),以便于調(diào)整[2]。
1.3 單片機(jī)
計(jì)算機(jī)可以作為單片機(jī)系統(tǒng)的一個(gè)模塊,完成相應(yīng)的功能。計(jì)算機(jī)應(yīng)答系統(tǒng)的請(qǐng)求、處理系統(tǒng)中的信息,一方面將信息呈現(xiàn)給用戶,另一方面計(jì)算機(jī)程序通過自動(dòng)計(jì)算或用戶的輸入,將信息反饋到系統(tǒng)中,參與系統(tǒng)的控制。
1.4 主控機(jī)
在單片機(jī)系統(tǒng)中,往往存在一個(gè)主控機(jī)或主控模塊,負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的統(tǒng)籌和設(shè)置。單片機(jī)系統(tǒng)通常是通過各功能模塊的輸入和響應(yīng)來(lái)實(shí)現(xiàn)其功能的,因此必須有一個(gè)負(fù)責(zé)收集輸入任務(wù)并指定響應(yīng)模塊的主控模塊。計(jì)算機(jī)系統(tǒng)中既可以是一個(gè)普通的模塊,又可以是負(fù)責(zé)總體協(xié)調(diào)的主控器。
2 通信協(xié)議
一個(gè)單片機(jī)系統(tǒng)是由硬件系統(tǒng)和軟件系統(tǒng)構(gòu)成的。硬件是實(shí)現(xiàn)功能的前提,而系統(tǒng)功能則是通過軟件來(lái)實(shí)現(xiàn)的,為了保證各個(gè)模塊通信,實(shí)現(xiàn)系統(tǒng)信息交流,必須制訂系統(tǒng)的通信協(xié)議。
從物理上來(lái)說,系統(tǒng)各模塊是以半雙工的模式來(lái)通信的,下文提及的智能照明系統(tǒng)下端模塊就是以半雙工的RS 485總路線為通信架構(gòu)的。而計(jì)算機(jī)的RS 232串口是以全雙工的模式來(lái)實(shí)現(xiàn)通信的,因此,計(jì)算機(jī)要通過串口參與到單片機(jī)系統(tǒng)中必須增加一個(gè)RS 232和RS 485總線轉(zhuǎn)換的模塊[3]。
從邏輯上講,要實(shí)現(xiàn)各模塊之間的通信,就必須在模塊間約定一個(gè)共同遵守的通信協(xié)議。單片機(jī)以位(b)為基本單位,傳輸時(shí)以8位1字節(jié)(B)來(lái)傳輸,單片機(jī)以毫秒間距發(fā)送若干個(gè)字節(jié)為一個(gè)數(shù)據(jù)包,也稱為一幀,幀之間又規(guī)定若干毫秒的間隙。通過計(jì)算機(jī)程序可以捕獲線路中每一幀信息。
下面以智能照明系統(tǒng)為例,講述單片機(jī)系統(tǒng)的通信協(xié)議。
本協(xié)議采用異步串行通信方式,字節(jié)幀格式:1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)停止位,無(wú)校驗(yàn)位。
幀格式如下[4]:
1幀=幀頭(F4H F5H)+數(shù)據(jù)包+幀尾(F4H FBH) <255 B
數(shù)據(jù)包=有效字節(jié)數(shù)(1 B)+傳輸層數(shù)據(jù)+校驗(yàn)和(1 B)<251 B
幀數(shù)據(jù)的發(fā)送、接收過程中前后兩字節(jié)數(shù)據(jù)傳送延時(shí)不得超過0.5 s。
各模塊分配兩個(gè)字節(jié)的地址碼,第一字節(jié)代表模塊類型,第二字節(jié)代表模塊在系統(tǒng)中分配的順序。各模塊獲取總線上的幀后,對(duì)自己的地址幀響應(yīng),其他的幀拋掉。
以下是本協(xié)議中的關(guān)于“燈開停控制”的協(xié)議:
描述:該信息是輸出子模塊的各路燈的開或關(guān)控制。
構(gòu)成:該信息發(fā)送時(shí)由信息頭和信息內(nèi)容構(gòu)成,返回時(shí)由信息頭構(gòu)成。
主控器或PC機(jī)發(fā)給輸出模塊時(shí):
MessageType53
MessageSubType0/2
Result0