




已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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所附的通信控件能非常方便地開(kāi)發(fā)出高級(jí)和專(zhuān)業(yè)性通信軟件來(lái)滿(mǎn)足不同業(yè)務(wù)的需要。在Windows操作系統(tǒng)平臺(tái)上開(kāi)發(fā)通信軟件時(shí),雖然Windows3.1SDK提供了完備的API應(yīng)用程序接口函數(shù)和以中斷方式驅(qū)動(dòng)的通信設(shè)備驅(qū)動(dòng)程序COMM.DRV,從而可以用C或C+來(lái)完成這類(lèi)應(yīng)用程序的設(shè)計(jì),但其復(fù)雜化和專(zhuān)業(yè)化程度仍然很高。所以,目前許多軟件開(kāi)發(fā)人員都在使用MicrosoftVisualBasic來(lái)開(kāi)發(fā)Windows應(yīng)用程序。本文將詳細(xì)敘述VB環(huán)境的通信軟件開(kāi)發(fā)方法,通過(guò)對(duì)通信控件MSCOMM.VBX的分析,我們可以看到利用VB來(lái)開(kāi)發(fā)Windows平臺(tái)下的通信軟件非常簡(jiǎn)單。最后結(jié)合我們工作中的一個(gè)實(shí)例來(lái)完整地描述該類(lèi)軟件的設(shè)計(jì)方法。一、MSCOMM.VBX的描述VB中的串行通信控件已全面提供了使用RS-232來(lái)進(jìn)行數(shù)據(jù)通信軟件開(kāi)發(fā)設(shè)計(jì)的所有細(xì)則,MicrosoftVisualBasic3.0中的MSCOMM.VBX(需要安裝在indowsystem目錄下)是1992年CrescentsoftwareInc.公司專(zhuān)為Microsoft的VB平臺(tái)設(shè)計(jì)的,它使用以下兩種不同的方式來(lái)處理和解決各類(lèi)通信軟件的開(kāi)發(fā)和設(shè)計(jì)問(wèn)題。(1)事件驅(qū)動(dòng),它和我們用C/C+寫(xiě)Windows軟件時(shí)的窗口回調(diào)函數(shù)類(lèi)似,是一種功能強(qiáng)大的處理問(wèn)題的方法。在實(shí)際工作中,往往要求我們處理許多通信中的相關(guān)事件。例如:當(dāng)線(xiàn)路數(shù)據(jù)到達(dá)本端或CD(CarrierDetect)和RTS(RequestToSend)信號(hào)線(xiàn)狀態(tài)發(fā)生變化時(shí),這就要求我們使用相應(yīng)的事件來(lái)跟蹤和處理。在該控件中,是使用OnComm來(lái)實(shí)現(xiàn)的,它也包括檢測(cè)和處理通信錯(cuò)誤等方面的問(wèn)題。以下是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ā)送緩沖器滿(mǎn)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)查詢(xún)方式,由程序設(shè)計(jì)者來(lái)負(fù)責(zé)讀取CommEvent的值并處理所發(fā)生的錯(cuò)誤或事件。通常簡(jiǎn)單的應(yīng)用程序設(shè)計(jì)可采用這種方法。使用通信控件開(kāi)發(fā)通信軟件時(shí),能非常簡(jiǎn)單地設(shè)計(jì)出同時(shí)訪(fǎng)問(wèn)多個(gè)通信口的程序,這就是Windows的好處。例如使用Commi.OnComm,其中1in(n:當(dāng)前可用的通信口),就可以設(shè)計(jì)多個(gè)通信串口處理程序。例如,一個(gè)基于電話(huà)網(wǎng)用來(lái)檢索信息資料的小型服務(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)(包括打開(kā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返回值:本次寫(xiě)操作實(shí)際發(fā)送的字符數(shù)二、事件驅(qū)動(dòng)和查詢(xún)方式下的兩種通信軟件開(kāi)發(fā)模板這兩種方式分別對(duì)應(yīng)我們通常使用匯編或C/C+來(lái)寫(xiě)通信程序中的中斷和查詢(xún)方法。(1)事件驅(qū)動(dòng)下例是一個(gè)使用事件驅(qū)動(dòng)方式設(shè)計(jì)通信程序的模板,我們只需根據(jù)自己的實(shí)際情況來(lái)選擇在下列的Case語(yǔ)句中插入相應(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ā)送緩沖器滿(mǎn)代碼事件部分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)查詢(xún)方式查詢(xún)方式,就是每個(gè)命令(含數(shù)據(jù)塊)都要查詢(xún)等待對(duì)它的回答。詳細(xì)使用方法請(qǐng)見(jiàn)下文的實(shí)例敘述。三、一個(gè)完整例子該程序的設(shè)計(jì)背景是全軍醫(yī)藥信息網(wǎng)上電話(huà)撥號(hào)用戶(hù)前臺(tái)軟件中的自動(dòng)撥號(hào)部分,為節(jié)省篇幅和說(shuō)明問(wèn)題,這里進(jìn)行了重新編輯,但其本身是完整的。該程序幫助主人進(jìn)行電話(huà)撥號(hào)以呼通被叫。調(diào)試環(huán)境:LEO486/50,HiTecMODEM,院內(nèi)電話(huà)脈沖撥號(hào),使用串行口1,PWIN3.1程序Form由下列部分組成:List1電話(huà)號(hào)碼顯示列表;Label1撥號(hào)狀態(tài)顯示;Dial,Cancel,Quit三個(gè)按鈕;MSCOMM.VBX通信控件。-VisualBasic3.0MSCOMM.VBX程序設(shè)計(jì):使用MODEM撥號(hào),人工通話(huà)程序名:MDIALER.TXT軍事醫(yī)學(xué)科學(xué)院計(jì)算中心夏云,1995.2.12運(yùn)行:使用VBFILE中的LoadText項(xiàng)裝入,按F5或生成.EXE文件運(yùn)行-OptionExplicitDimPhoneNumbers$()電話(huà)號(hào)碼存儲(chǔ)變量DimCancelFlagCancel按鈕狀態(tài)標(biāo)志SubDial(Number$)撥號(hào)例程DimDialString$,FromModem$,dummy根據(jù)脈沖/雙音多頻撥號(hào)方式來(lái)選擇DT/DP;所撥號(hào)碼存放在變量PhoneNumbers$(Index)中;命令中的分號(hào)表示MODEM在撥號(hào)后重新回到命令狀態(tài);每個(gè)命令由回車(chē)符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$開(kāi)始撥號(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ì)方電話(huà)已經(jīng)撥通,請(qǐng)摘話(huà)機(jī)并按回車(chē)或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í)無(wú)效QuitButton.Enabled=FalseCancelButton.Enabled=True開(kāi)放Cancel按鈕Number$=PhoneNumbers$(List1.ListIndex)獲得一個(gè)電話(huà)號(hào)碼Temp$=Status保存狀態(tài)Status$=“正在撥號(hào)碼:”+Number$DialNumber$撥號(hào)例程執(zhí)行DialButton.Enabled=True撥號(hào)結(jié)束開(kāi)放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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025浙江紹興上虞曹娥里十三弄運(yùn)營(yíng)管理有限公司合同制職工招聘16人筆試參考題庫(kù)附帶答案詳解
- 2025天津東疆綜合保稅區(qū)管理委員會(huì)招聘10人筆試參考題庫(kù)附帶答案詳解
- 上海電機(jī)學(xué)院《自然地理》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京城市學(xué)院《醫(yī)學(xué)文獻(xiàn)獲取與研究利用》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京機(jī)電職業(yè)技術(shù)學(xué)院《基礎(chǔ)生物化學(xué)A(實(shí)驗(yàn))》2023-2024學(xué)年第二學(xué)期期末試卷
- 安徽財(cái)經(jīng)大學(xué)《云平臺(tái)技術(shù)綜合設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 鶴壁職業(yè)技術(shù)學(xué)院《園林建筑構(gòu)造》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧德師范學(xué)院《文化遺產(chǎn)創(chuàng)新創(chuàng)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏民族職業(yè)技術(shù)學(xué)院《學(xué)前兒童特殊教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東中醫(yī)藥高等專(zhuān)科學(xué)校《基礎(chǔ)護(hù)理學(xué)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- GB 29449-2012輪胎單位產(chǎn)品能源消耗限額
- 文獻(xiàn)閱讀技巧課件
- 一年級(jí)數(shù)學(xué)下冊(cè)-應(yīng)用題專(zhuān)項(xiàng)練習(xí)
- 2021人教版新教材高中英語(yǔ)必修三全冊(cè)課文翻譯(中英文Word)
- 實(shí)習(xí)證明模板下載版新版
- 研究生入學(xué)體檢表
- 工控培訓(xùn)教程、手冊(cè)合集倍福plc從入門(mén)到精通
- 三年級(jí)下冊(cè)美術(shù)教案-第11課 門(mén)票設(shè)計(jì)-非遺館|浙美版
- 檔案袋密封條模板
- I-am-a-bunny-繪本教學(xué)課件
- 學(xué)院“課程思政”建設(shè)管理辦法(新)
評(píng)論
0/150
提交評(píng)論