




已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
通信學(xué)論文-Windows環(huán)境下的串行數(shù)據(jù)通信程序設(shè)計(jì)摘要該文詳細(xì)討論了MSCOMM.VBX通信控件在Windows平臺(tái)下的通信軟件設(shè)計(jì)方法,借助于VisualBasic所附的通信控件能非常方便地開發(fā)出高級(jí)和專業(yè)性通信軟件來滿足不同業(yè)務(wù)的需要。在Windows操作系統(tǒng)平臺(tái)上開發(fā)通信軟件時(shí),雖然Windows3.1SDK提供了完備的API應(yīng)用程序接口函數(shù)和以中斷方式驅(qū)動(dòng)的通信設(shè)備驅(qū)動(dòng)程序COMM.DRV,從而可以用C或C+來完成這類應(yīng)用程序的設(shè)計(jì),但其復(fù)雜化和專業(yè)化程度仍然很高。所以,目前許多軟件開發(fā)人員都在使用MicrosoftVisualBasic來開發(fā)Windows應(yīng)用程序。本文將詳細(xì)敘述VB環(huán)境的通信軟件開發(fā)方法,通過對(duì)通信控件MSCOMM.VBX的分析,我們可以看到利用VB來開發(fā)Windows平臺(tái)下的通信軟件非常簡(jiǎn)單。最后結(jié)合我們工作中的一個(gè)實(shí)例來完整地描述該類軟件的設(shè)計(jì)方法。一、MSCOMM.VBX的描述VB中的串行通信控件已全面提供了使用RS-232來進(jìn)行數(shù)據(jù)通信軟件開發(fā)設(shè)計(jì)的所有細(xì)則,MicrosoftVisualBasic3.0中的MSCOMM.VBX(需要安裝在indowsystem目錄下)是1992年CrescentsoftwareInc.公司專為Microsoft的VB平臺(tái)設(shè)計(jì)的,它使用以下兩種不同的方式來處理和解決各類通信軟件的開發(fā)和設(shè)計(jì)問題。(1)事件驅(qū)動(dòng),它和我們用C/C+寫Windows軟件時(shí)的窗口回調(diào)函數(shù)類似,是一種功能強(qiáng)大的處理問題的方法。在實(shí)際工作中,往往要求我們處理許多通信中的相關(guān)事件。例如:當(dāng)線路數(shù)據(jù)到達(dá)本端或CD(CarrierDetect)和RTS(RequestToSend)信號(hào)線狀態(tài)發(fā)生變化時(shí),這就要求我們使用相應(yīng)的事件來跟蹤和處理。在該控件中,是使用OnComm來實(shí)現(xiàn)的,它也包括檢測(cè)和處理通信錯(cuò)誤等方面的問題。以下是MSCOMM詳細(xì)的錯(cuò)誤和事件列表(讀者可參閱SKD或MSC/C+7.0等中的Windows.h有關(guān)的通信部分常數(shù)和函數(shù)原型):MSCOMM_ER_BREAKA收到一個(gè)Breaksignal.MSCOMM_ER_CDTOCD信號(hào)超時(shí)MSCOMM_ER_CTSTOCTS信號(hào)超時(shí)MSCOMM_ER_DSRTODSR信號(hào)超時(shí)MSCOMM_ER_FRAME幀錯(cuò)誤發(fā)生MSCOMM_ER_OVERRUN接收數(shù)據(jù)丟失MSCOMM_ER_RXOVER接收緩沖器溢出MSCOMM_ER_RXPARITY糾驗(yàn)錯(cuò)MSCOMM_ER_TXFULL發(fā)送緩沖器滿MSCOMM_EV_CDCD信號(hào)改變MSCOMM_EV_CTSCTS信號(hào)改變MSCOMM_EV_DSRDSR信號(hào)改變MSCOMM_EV_EOF收到一個(gè)文本文件結(jié)束字符(26)MSCOMM_EV_RING檢測(cè)到一個(gè)振鈴信號(hào)MSCOMM_EV_RECEIVE接收到設(shè)定的字符數(shù)時(shí)產(chǎn)生該事件MSCOMM_EV_SEND發(fā)生緩沖器中的字符數(shù)低于設(shè)定的數(shù)值時(shí)產(chǎn)生該事件以上常數(shù)定義在CONSTANT.TXT文件中。(2)查詢方式,由程序設(shè)計(jì)者來負(fù)責(zé)讀取CommEvent的值并處理所發(fā)生的錯(cuò)誤或事件。通常簡(jiǎn)單的應(yīng)用程序設(shè)計(jì)可采用這種方法。使用通信控件開發(fā)通信軟件時(shí),能非常簡(jiǎn)單地設(shè)計(jì)出同時(shí)訪問多個(gè)通信口的程序,這就是Windows的好處。例如使用Commi.OnComm,其中1in(n:當(dāng)前可用的通信口),就可以設(shè)計(jì)多個(gè)通信串口處理程序。例如,一個(gè)基于電話網(wǎng)用來檢索信息資料的小型服務(wù)器的后臺(tái)軟件的設(shè)計(jì)應(yīng)用就是一個(gè)很好的例子。MSCOMM.VBX中提供了27個(gè)關(guān)于通信控件方面的屬性,以下列出最重要的幾個(gè):CommPort設(shè)置和返回通信口的數(shù)目Settings設(shè)置和返回以字符串形式給出的數(shù)據(jù)通信格式:波特率,校驗(yàn),數(shù)據(jù)位和停止位PortOpen設(shè)置和返回通信口的狀態(tài)(包括打開和關(guān)閉一個(gè)通信口)Input讀串行數(shù)據(jù)接收緩沖器Output發(fā)送一個(gè)串在MSCOMM.VBX中,有兩個(gè)與Input和Output性質(zhì)相等同的函數(shù);(1)輸入函數(shù),從串行通信接收緩沖器中讀取字符串,句型如下:Comlnput(ByValhWndAsInteger,lpDataAsAny,ByValcbDataAsInteger)AsIntegerT8S14200.GIF;圖1返回值:本次讀操作實(shí)際讀取的字符數(shù)(2)輸出函數(shù),向通信口發(fā)送一個(gè)字符串,句型如下:ComOutput(ByValhWndAsInteger,lpDataAsAny,ByValcbDataAsInteger)AsintegerT8S14201.GIF;圖2返回值:本次寫操作實(shí)際發(fā)送的字符數(shù)二、事件驅(qū)動(dòng)和查詢方式下的兩種通信軟件開發(fā)模板這兩種方式分別對(duì)應(yīng)我們通常使用匯編或C/C+來寫通信程序中的中斷和查詢方法。(1)事件驅(qū)動(dòng)下例是一個(gè)使用事件驅(qū)動(dòng)方式設(shè)計(jì)通信程序的模板,我們只需根據(jù)自己的實(shí)際情況來選擇在下列的Case語句中插入相應(yīng)的代碼即可。SubComm_OnComm()SelectCaseCommi.CommEventi=1,2.錯(cuò)誤部分CaseMSCOMM-ER_BREAK插入處理BREAK代碼CaseMSCOMM-ER_CDTO插入處理CD(RLSD)超時(shí)代碼CaseMSCOMM-ER_CTSTO插入處理CTS超時(shí)代碼CaseMSCOMM-ER_DSRTO插入處理DSR超時(shí)代碼CaseMSCOMM-ER_FRAME插入處理幀錯(cuò)誤代碼CaseMSCOMM-ER_OVERRUN插入處理數(shù)據(jù)丟失代碼CaseMSCOMM-ER_RXOVER插入處理接收緩沖器溢出代碼CaseMSCOMM-ER_RXPARITY插入處理校驗(yàn)錯(cuò)誤代碼CaseMSCOMM-ER_TXFULL插入處理發(fā)送緩沖器滿代碼事件部分CaseMSCOMM-EV_CD插入處理CD信號(hào)改變代碼CaseMSCOMM-EV_CTS插入處理CTS信號(hào)改變代碼CaseMSCOMM-EV_DSR插入處理DST信號(hào)改變代碼CaseMSCOMM-EV_EOF插入處理收到一個(gè)文本文件結(jié)束字(26)代碼CaseMSCOMM-EV_RING插入處理檢測(cè)到一個(gè)振鈴信號(hào)代碼CaseMSCOMM-EV_RECEIVE插入接收到設(shè)定的字符數(shù)時(shí)產(chǎn)生該事件代碼CaseMSCOMM-EV_SEND插入處理發(fā)生緩沖器中的字符數(shù)低于設(shè)定的數(shù)值時(shí)產(chǎn)生該事件的代碼EndSelectEndSub(2)查詢方式查詢方式,就是每個(gè)命令(含數(shù)據(jù)塊)都要查詢等待對(duì)它的回答。詳細(xì)使用方法請(qǐng)見下文的實(shí)例敘述。三、一個(gè)完整例子該程序的設(shè)計(jì)背景是全軍醫(yī)藥信息網(wǎng)上電話撥號(hào)用戶前臺(tái)軟件中的自動(dòng)撥號(hào)部分,為節(jié)省篇幅和說明問題,這里進(jìn)行了重新編輯,但其本身是完整的。該程序幫助主人進(jìn)行電話撥號(hào)以呼通被叫。調(diào)試環(huán)境:LEO486/50,HiTecMODEM,院內(nèi)電話脈沖撥號(hào),使用串行口1,PWIN3.1程序Form由下列部分組成:List1電話號(hào)碼顯示列表;Label1撥號(hào)狀態(tài)顯示;Dial,Cancel,Quit三個(gè)按鈕;MSCOMM.VBX通信控件。-VisualBasic3.0MSCOMM.VBX程序設(shè)計(jì):使用MODEM撥號(hào),人工通話程序名:MDIALER.TXT軍事醫(yī)學(xué)科學(xué)院計(jì)算中心夏云,1995.2.12運(yùn)行:使用VBFILE中的LoadText項(xiàng)裝入,按F5或生成.EXE文件運(yùn)行-OptionExplicitDimPhoneNumbers$()電話號(hào)碼存儲(chǔ)變量DimCancelFlagCancel按鈕狀態(tài)標(biāo)志SubDial(Number$)撥號(hào)例程DimDialString$,FromModem$,dummy根據(jù)脈沖/雙音多頻撥號(hào)方式來選擇DT/DP;所撥號(hào)碼存放在變量PhoneNumbers$(Index)中;命令中的分號(hào)表示MODEM在撥號(hào)后重新回到命令狀態(tài);每個(gè)命令由回車符Chr$(13)結(jié)束;DialString$=ATDT+Number$+;+Chr$(13)Commi.Settings=2400,N,8,1設(shè)置幀格式OnErrorResumeNext錯(cuò)誤恢復(fù)Commi.PortOpen=True啟動(dòng)該口工作IfErrThen如果該口不可啟動(dòng),則顯示信息MsgBox當(dāng)前串行通信端口不能工作,請(qǐng)選擇使用另外端口?!盓xitSubEndifCommi.InBufferCount=0清除接收緩沖器Commi.Output=DialString$開始撥號(hào)Do等待MODEM返回“OK”回答dummy=DoEvents()進(jìn)入等待方式,將資源提交系統(tǒng)管理IfCommi.InBufferCountThen若接收緩沖器中有數(shù)據(jù)存在,則讀FromModem$=FromModem$+Commi.InputIfInStr(FromModem$,OK)Then是否接收到“OK”Beep已經(jīng)接收到“OK”,發(fā)蜂嗚聲MsgBox對(duì)方電話已經(jīng)撥通,請(qǐng)摘話機(jī)并按回車或OK鈕”ExitDoEndIfEndIfIfCancelFlagThen若Cancel鈕按下則處理CancelFlag=FalseExitDoEndIfLoopCommi.Output=ATH+Chr$(13)掛斷命令Commi.PortOpen=False關(guān)閉該口EndSubSubDialButton_Click()Dial按鈕處理程序DimNumber$,Temp$DialButton.Enabled=FalseDial,Quit二個(gè)按鈕同時(shí)無效QuitButton.Enabled=FalseCancelButton.Enabled=True開放Cancel按鈕Number$=PhoneNumbers$(List1.ListIndex)獲得一個(gè)電話號(hào)碼Temp$=Status保存狀態(tài)Status$=“正在撥號(hào)碼:”+Number$DialNumber$撥號(hào)例程執(zhí)行DialButton.Enabled=True撥號(hào)結(jié)束開放Dail,Quit按鈕DialButton.Enabled=TrueCancelButton.Enabled=False禁止Cancel按鈕Status=Temp$恢復(fù)狀態(tài)EndSubSubForm_Load()Commi.InputLen=0設(shè)置0值:讀全部接收緩沖器內(nèi)容MDialer.Show顯示窗口List1.AddItem“四環(huán)醫(yī)學(xué)研究院計(jì)算中心”List1.AddItem“軍事醫(yī)學(xué)科學(xué)院情報(bào)所張華研究員”ReDimPhoneNumbers$(0ToList1.ListCount-1)PhoneNumbers$(0)=1-8233296PhoneNumber$(1)=1-8232255List1.ListIndex=0默認(rèn)第一個(gè)號(hào)碼EndSubSubList1-DblClick()列表框選擇號(hào)碼啟動(dòng)撥號(hào)DialButton-ClickEndSubSubCancelButton-Click()Cancel按鈕處理程序CancelFlag=True標(biāo)識(shí)Cancel鈕已按下CancelButton.Enabled=False取消該鈕繼續(xù)活動(dòng)EndSubSubQuitButton-Click()Quit按鈕End結(jié)束EndSubMSCOMM.VBX對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游體驗(yàn)、地方認(rèn)同及文化認(rèn)同關(guān)系研究
- 舟曲縣東山鎮(zhèn)鄉(xiāng)村人居環(huán)境優(yōu)化研究
- 核心素養(yǎng)理念下語境教學(xué)法在中職英語詞匯教學(xué)中的應(yīng)用研究
- 留置胃管的護(hù)理查房
- 頜下腺護(hù)理常規(guī)課件
- 法制副校長(zhǎng)教育職責(zé)與實(shí)施路徑
- 老年人頸椎病病例討論
- 顱骨骨折說課課件
- 溫病學(xué)診斷要點(diǎn)
- 順產(chǎn)護(hù)理課件
- XX小學(xué)預(yù)防未成年人違法犯罪工作制度
- 火災(zāi)自動(dòng)報(bào)警系統(tǒng)查驗(yàn)報(bào)告
- 業(yè)務(wù)傭金提成協(xié)議書模板
- GB/T 29469-2024潔凈室及相關(guān)受控環(huán)境性能及合理性評(píng)價(jià)
- 國(guó)家開放大學(xué)《城市管理學(xué)》作業(yè)-“城市病”表現(xiàn)及其治理
- 甄嬛傳電子版劇本第01-10集
- 【中國(guó)信科-中信科移動(dòng)】2023星地融合通信白皮書
- 廚師中暑防范知識(shí)講座
- 中建測(cè)評(píng)2024二測(cè)題庫及答案
- 水質(zhì)檢測(cè)員年終總結(jié)
- 公司期貨交易及風(fēng)險(xiǎn)控制管理制度
評(píng)論
0/150
提交評(píng)論