新聞中心

EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 基于串行通信的智能家居上位機(jī)設(shè)計(jì)

基于串行通信的智能家居上位機(jī)設(shè)計(jì)

作者: 時(shí)間:2010-09-22 來(lái)源:網(wǎng)絡(luò) 收藏

3.2.2 MSComm控件兩種處理通訊的方式
MSComm控件提供下列兩種處理通訊的方式:事件驅(qū)動(dòng)方式和查詢方式。
(1)事件驅(qū)動(dòng)方式
事件驅(qū)動(dòng)通訊是處理端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者CarrierDetect(CD)或Request To Send(RTS)線上一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí)。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯(cuò)誤。所有通訊事件和通訊錯(cuò)誤的列表,參閱CommEvent屬性。在編程過(guò)程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。每個(gè)MSComm控件對(duì)應(yīng)著一個(gè)端口。如果應(yīng)用程序需要訪問(wèn)多個(gè)端口,必須使用多個(gè)MSComm控件。
(2)查詢方式
查詢方式實(shí)質(zhì)上還是事件驅(qū)動(dòng),但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過(guò)檢查CommEvent屬性的值來(lái)查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫(xiě)一個(gè)簡(jiǎn)單的電話撥號(hào)程序,則沒(méi)有必要對(duì)每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。
3.3 計(jì)算機(jī)信息發(fā)送和接收的實(shí)現(xiàn)
下面以智能照明系統(tǒng)中PC機(jī)與主控器的,說(shuō)明計(jì)算機(jī)與單片機(jī)的實(shí)現(xiàn)方法。以下是實(shí)現(xiàn)的主要子程序。
頁(yè)面裝載程序:

建立后,計(jì)算機(jī)就可以與下端單片機(jī)通過(guò)設(shè)定的協(xié)議進(jìn)行通信,可以測(cè)試下端模塊的響應(yīng)。

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

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

本文引用地址:http://2s4d.com/article/157065.htm

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉