當(dāng)前位置:首頁 > 通信技術(shù) > 通信技術(shù)
[導(dǎo)讀]在智能家居系統(tǒng)設(shè)計中,串行通信是實現(xiàn)上位機與下端模塊通信的最主要的手段。為了提高上位機與下端模塊的通信效率,在上位機設(shè)計時通過使用Windows的MSComm控件和自編制的串口接收發(fā)送動態(tài)控件的比較,發(fā)現(xiàn)利用MSComm控件雖然可以方便快捷地編制出上位機程序,但其通信效率偏低,誤幀和失幀率較高,只適用于單模塊測試。對于多模塊實時通信系統(tǒng),采用其他控件或自編制收發(fā)程序更為有效。

0 引言
    上位機設(shè)計是智能家居系統(tǒng)的一個重要組成部分,擔(dān)負著管理、控制、維護和用戶界面操作的重任,高效可靠的上位機設(shè)計是整個系統(tǒng)正常運作的重要保障。上位機與系統(tǒng)的通信實際上是與下端單片機的通信。單片機或單片機系統(tǒng)是智能家居控制的核心,當(dāng)計算機作為單片系統(tǒng)的一個角色時,通常被稱為“工控機”或“上位機”,各獨立的單片機是系統(tǒng)中實現(xiàn)功能的一個模塊,所以有時也稱單片機為模塊。
    計算機與單片機是通過串口來實現(xiàn)通信的,本文著重討論計算機與單片機的串口通信的實現(xiàn)方法和MSComm控件技術(shù)。

1上位機在智能家居系統(tǒng)的角色
    首先,必須認識計算機在智能家居系統(tǒng)的作用,可以概括為以下幾個方面:
1.1 通信測試工具
    傳統(tǒng)的單片機系統(tǒng)的通信測試通過示波器來監(jiān)測,既不直觀又容易丟失信息。將計算機加入到系統(tǒng)中,可以實時監(jiān)測到線路中的信息,并以數(shù)字化呈現(xiàn),使各個單片機間的通信得到檢驗,及時解決系統(tǒng)存在的問題。所以計算機在加速系統(tǒng)的開發(fā)和保證系統(tǒng)的運行質(zhì)量的作用就不言而喻了。
1.2 系統(tǒng)維護
    一個單片機系統(tǒng)往往需要對系統(tǒng)中各個不同功能的模塊(單片機)進行參數(shù)的設(shè)置,以適應(yīng)不同的運行環(huán)境,雖然可以通過各模塊的控制面板來調(diào)整,但操作通常比較麻煩,非專業(yè)人員不易掌握。同時對于一些需要定義其地理位置的參數(shù)難以實現(xiàn),不夠直觀。計算機加入到系統(tǒng)中,不但可以解決操作上的問題,同時還可以讀取各模塊的參數(shù),以便于調(diào)整。
1.3 單片機
    計算機可以作為單片機系統(tǒng)的一個模塊,完成相應(yīng)的功能。計算機應(yīng)答系統(tǒng)的請求、處理系統(tǒng)中的信息,一方面將信息呈現(xiàn)給用戶,另一方面計算機程序通過自動計算或用戶的輸入,將信息反饋到系統(tǒng)中,參與系統(tǒng)的控制。
1.4 主控機
    在單片機系統(tǒng)中,往往存在一個主控機或主控模塊,負責(zé)對整個系統(tǒng)的統(tǒng)籌和設(shè)置。單片機系統(tǒng)通常是通過各功能模塊的輸入和響應(yīng)來實現(xiàn)其功能的,因此必須有一個負責(zé)收集輸入任務(wù)并指定響應(yīng)模塊的主控模塊。計算機系統(tǒng)中既可以是一個普通的模塊,又可以是負責(zé)總體協(xié)調(diào)的主控器。

2 通信協(xié)議
    一個單片機系統(tǒng)是由硬件系統(tǒng)和軟件系統(tǒng)構(gòu)成的。硬件是實現(xiàn)功能的前提,而系統(tǒng)功能則是通過軟件來實現(xiàn)的,為了保證各個模塊通信,實現(xiàn)系統(tǒng)信息交流,必須制訂系統(tǒng)的通信協(xié)議。
    從物理上來說,系統(tǒng)各模塊是以半雙工的模式來通信的,下文提及的智能照明系統(tǒng)下端模塊就是以半雙工的RS 485總路線為通信架構(gòu)的。而計算機的RS 232串口是以全雙工的模式來實現(xiàn)通信的,因此,計算機要通過串口參與到單片機系統(tǒng)中必須增加一個RS 232和RS 485總線轉(zhuǎn)換的模塊。
    從邏輯上講,要實現(xiàn)各模塊之間的通信,就必須在模塊間約定一個共同遵守的通信協(xié)議。單片機以位(b)為基本單位,傳輸時以8位1字節(jié)(B)來傳輸,單片機以毫秒間距發(fā)送若干個字節(jié)為一個數(shù)據(jù)包,也稱為一幀,幀之間又規(guī)定若干毫秒的間隙。通過計算機程序可以捕獲線路中每一幀信息。
    下面以智能照明系統(tǒng)為例,講述單片機系統(tǒng)的通信協(xié)議。
    本協(xié)議采用異步串行通信方式,字節(jié)幀格式:1個起始位+8個數(shù)據(jù)位+1個停止位,無校驗位。
    幀格式如下:
    l幀=幀頭(F4H F5H)+數(shù)據(jù)包+幀尾(F4HFBH)<255B
    數(shù)據(jù)包=有效字節(jié)數(shù)(1B)+傳輸層數(shù)據(jù)+校驗和(1B)<251B
    幀數(shù)據(jù)的發(fā)送、接收過程中前后兩字節(jié)數(shù)據(jù)傳送延時不得超過O.5s。
    各模塊分配兩個字節(jié)的地址碼,第一字節(jié)代表模塊類型,第二字節(jié)代表模塊在系統(tǒng)中分配的順序。各模塊獲取總線上的幀后,對自己的地址幀響應(yīng),其他的幀拋掉。
    以下是本協(xié)議中的關(guān)于“燈開??刂?rdquo;的協(xié)議:
    描述:該信息是輸出子模塊的各路燈的開或關(guān)控制。
    構(gòu)成:該信息發(fā)送時由信息頭和信息內(nèi)容構(gòu)成,返回時由信息頭構(gòu)成。
    主控器或PC機發(fā)給輸出模塊時:

    系統(tǒng)的通信按照規(guī)定的各條協(xié)議來執(zhí)行。

3 計算機通信的實現(xiàn)
    計算機硬件上通過RS 232與RS 485接口轉(zhuǎn)換與下端模塊進行通信。而軟件的實現(xiàn)有多種方法,下面主要介紹在VB 6.0通過MSComm控件來實現(xiàn)通信的方法。
3.1 將MSComm控件引入到VB平臺
    MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。MSComm控件在串口編程時非常方便,程序員不必去花時間去了解較為復(fù)雜的API函數(shù),而且在VC,VB,Delphi等語言中均可使用。
    MSComm是Mierosoft公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。具體的來說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(Eventdriyen)方法,一是查詢法。
3.2 MSComm控件的設(shè)置
3.2.1 MSComm控件的屬性

    MSComm控件有很多重要的屬性,正確設(shè)置其屬性是程序進行正常通信的保證,下面介紹幾個必須熟悉的屬性。
    CommPort:設(shè)置并返回通訊端口號。
    Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。
    PortOpen:設(shè)置并返回通訊端口的狀態(tài),也可以打開和關(guān)閉端口。
    Input:從接收緩沖區(qū)返回和刪除字符。
    InputMode:接收模式,取O值時,接收文本數(shù)據(jù);取1時,接收二進制數(shù)據(jù)。
    Output:向傳輸緩沖區(qū)寫一個字符串。
    Rthrehold:響應(yīng)模式,取整數(shù)。當(dāng)接收字符后,若Rthrehold屬性設(shè)置為O,則不產(chǎn)生OnComm事件;若設(shè)置為1,則接收緩沖區(qū)收到每一個字符都會使MSComm控件產(chǎn)生OnComm事件。
    Sthreshold:發(fā)送模式,設(shè)置O(缺省值),數(shù)據(jù)傳輸事件不會產(chǎn)生OnComm事件;設(shè)置為1,當(dāng)傳輸緩沖區(qū)完全空時,MSComm控件產(chǎn)生OnComm事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于value,CommEvent屬性設(shè)置為comEvSend,并產(chǎn)生OnComm事件。
    Handshake:通信握手模式,取值為O時,無握手;取值為1時,表示XOn/Xoff握手;取值為2時,表示Request-to\-send/clear-to-send握手;取值為3時,表示eqLlest-to-send&clear-to-send握手皆可。
3.2.2 MSComm控件兩種處理通訊的方式
    MSComm控件提供下列兩種處理通訊的方式:事件驅(qū)動方式和查詢方式。
    (1)事件驅(qū)動方式
    事件驅(qū)動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者CarrierDetect(CD)或Request To Send(RTS)線上一個字符到達或一個變化發(fā)生時。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱CommEvent屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點是程序響應(yīng)及時,可靠性高。每個MSComm控件對應(yīng)著一個串行端口。如果應(yīng)用程序需要訪問多個串行端口,必須使用多個MSComm控件。
    (2)查詢方式
    查詢方式實質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的每個關(guān)鍵功能之后,可以通過檢查CommEvent屬性的值來查詢事件和錯誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因為惟一等待接收的字符是調(diào)制解調(diào)器的“確定”響應(yīng)。
3.3 計算機信息發(fā)送和接收的實現(xiàn)
    下面以智能照明系統(tǒng)中PC機與主控器的通信,說明計算機與單片機通信的實現(xiàn)方法。以下是實現(xiàn)的主要子程序。
    頁面裝載程序:
   
    通信建立后,計算機就可以與下端單片機通過設(shè)定的協(xié)議進行通信,可以測試下端模塊的響應(yīng)。

4 MSComm控件的問題和解決辦法
    在實際應(yīng)用中,MSComm控件對于一問一答式的通信,效果還是可以的,所以用于單模塊的通信測試問題不大。但是,如果計算機作為單片系統(tǒng)的一個角色,要實時捕獲總線上的信息并響應(yīng),存在失幀和誤幀的問題,如果系統(tǒng)要求不高,還可以對付,而象智能照明這樣要求信息持續(xù)、實時、準(zhǔn)確的系統(tǒng),利用MSComm控件處理串口通信就難以勝任了。
    在智能照明系統(tǒng)中,采用了自編制的動態(tài)庫Transdata,dll程序,作為處理串口通信的接口,誤幀率和失幀率較低,能滿足產(chǎn)品化的要求。
    Transdata.dll使用說明:
    (1)初始化串口并處于通訊狀態(tài)<函數(shù)>
    Init_OpenCom(byval m_str as string,byval nbaud as Integer)as Boolean
    參數(shù)說明:m_str為串口名稱,如“coml”“com2”等;nbaud為波特率,可為1200,2400,4800,9600等;返回值為Boolean,若為true則成功,否則失敗false。
    (2)關(guān)閉串口結(jié)束通訊<過程>
     CloseCom()
    (3)發(fā)送通訊數(shù)據(jù)<過程>
    SendData(n_str as byte,byval ncount as Integer)
    參數(shù)說明:n_str為要發(fā)送byte的數(shù)組的第一個字節(jié);如要發(fā)dim ndata(11)as byte這個數(shù)組,只需用ndata(0)作為n_str參數(shù)即可;nc-ount為要發(fā)送的字節(jié)數(shù)。
    (4)接收返回的數(shù)據(jù)<函數(shù)>
    GetData(byval m_str as string)as string
    參數(shù)說明:m_str必須為已有能容納所要接收字串的長度空間返回接收到的字串,各個字節(jié)以“\t”隔開。

5 結(jié)語
    利用MSComm控件雖然可以方便快捷編制出的上位機程序,但其通信效率偏低,誤幀和失幀率較高,只適用于單模塊測試。對于多模塊實時通信系統(tǒng),宜采用其他控件或自編制更有效的收發(fā)程序。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉