VC編寫串口程序文件_第1頁
VC編寫串口程序文件_第2頁
VC編寫串口程序文件_第3頁
VC編寫串口程序文件_第4頁
VC編寫串口程序文件_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VC控件MSCom編寫串口通信程序(轉(zhuǎn))博客分類:? C+VC+編程數(shù)據(jù)結(jié)核j MFCMicrosoft在眾多網(wǎng)友的支持下,串口調(diào)試助手從2001年5月21日發(fā)布至今,短短一個月,在 全國各地累計下載量近5000人次,在近200多個電子中,20多人提供了使用測試意 見,更有50多位朋友提出要串口調(diào)試助手的源代碼,為了答謝謝朋友們的支持,公 開推出我最初用VC控件MSComm寫串口通信程序的源代碼,并寫出 詳細的編程過 程,姑且叫串口調(diào)試助手源程序V1.0或VC串口通訊源程序吧,我相信,如果你用 VC編程,那么有了這個代碼,就可以輕而易舉地完成串口編程任務(wù)了。(也許本文 過于詳細,高手就不用看)

2、開始吧:1 .建立項目:打開VO+ 6.0,建立一個基于對話框的MFC應(yīng)用程序SCommTest (與我源代碼一致,等會你會方便一點);2 .在項目中插入MSCom控件 選擇Project菜單下Add To Project子菜單 中的Components and Controls,選項,在彈出的對話框中雙擊Registered ActiveX Co ntrols項(稍等一會,這個過程較慢),則所有注冊過的ActiveX控件出現(xiàn)在列表框中。選擇 Microsoft Communications Control, version 6.0 一 單擊 Insert按鈕將它插入到我們的Project中來

3、,接受缺省的選項。(如果你在控件列表中 看不至fj Microsoft Communications Control, version 6.0、力R可能是你在安裝VC6時沒有把ActiveX 一項選上,重新安裝VC6選上ActiveX就可以 T),這時在ClassView視窗中就可以看到CMSContm 了,(注意:此類在 ClassWizard中看不到,重構(gòu)clw文件也一樣),并且在控件工具欄Controls中出現(xiàn) 了圖標(如圖1所示),現(xiàn)在要做的是用鼠標將此圖標拖到對話框中,程序運行后,這個 圖標是看不到的。3 .利用 ClassWizard 7E義 CMSCom類控制對象打開ClassW

4、izard >MemberViariables選項卡,選擇CSCommTestDI類,為IDC_MSCOM添力口控制變量: m_ctHComm,這時你可以看一看,在對話框頭文件中自動加入了/ AFXJNCLUDESO #i nclude 'mscomm.h' /AFX_INCLUDES (這時運行程序, 如果有錯,那就再從頭開始)。4 .在對話框中添加控件 向主對話框中添加兩個編輯框,一個用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDATA另一個用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA 再添加一個按鈕,而能是按一次就把發(fā)送編輯框中的容發(fā)送一次,將其ID設(shè)為I

5、DC_BUTTON_MANUALSE 另IJ忘記了將接收編輯框的 Properties - >Styles 中把 Miltiline 和Vertical Scroll屬性選上,發(fā)送編輯框若你想輸入多行文字,也 可選上Miltiline再打開 ClassWizard >MembeViariables 選項卡,選擇 CSCommTestDI 類,為 IDC_EDIT_RXDAT 添力 口 CString 變量 m_strRXData,為 IDC_EDIT_TXDAT ;忝力 P CString 變量 m_strTXData。說明:m_strRXData 和 m_strTXData 分另

6、U用來放入 接收和發(fā)送的字符數(shù)據(jù)。一一休息一會吧?我們天天與電腦打交道,要注意保重,我現(xiàn)在在單杠上做引體向上可以來40次,可我都32 了,佩服嗎?。好了,再接著 來,下面是關(guān)鍵了 :5 .添加串口事件消息處理函數(shù)On Com m()打開ClassWizard >MessageM aps選 擇類CSCommTestDIg選擇IDC_MSCOM M雙擊消息On Comm將彈出的對話框中 將函數(shù)名改為On Comm (好記而已)OK這個函數(shù)是用來處理串口消息事件的,如每當串口接收到數(shù)據(jù),就會產(chǎn)生一個串 口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會執(zhí)行,我們在 On Comm函數(shù)加

7、入相應(yīng)的處理代碼就能實現(xiàn)自已想要的功能了。請你在函數(shù)中加 人如下代碼:void CSCommTestDIg: :0n Comm() ( / TODO: Add your con trol no tificati on han dler code here VARIANT varia ntjnp;COIeSafeArray safearrayj np;LONG Ie n5k;BYTE rxdata2048; / 設(shè)置 BYTE 數(shù)組 An 8-bit integerthat is not sig ned.CStri ng strtemp;if(m_ctrlComm.GetCommEvent()=

8、2) 事件值為2表示接收緩沖區(qū)有字 符.以下你可以根據(jù)自己的通信協(xié)議加入處理代碼varia ntjn p=m_ctrlComm.Getl nput(); /讀緩沖區(qū) 型safearrayj np=varia ntjnp; /VARIANT ColeSafeArray 型變 變量轉(zhuǎn)換為 量len=safearray_i np.Get On eDimSize(); /得到有效數(shù)據(jù)長度for(k=0;k<le n;k+)safearrayj np.GetEleme nt(&k,rxdata+k);/ 轉(zhuǎn)換為 BYTE型數(shù)組for(k=0;k<len;k+) /將數(shù)組轉(zhuǎn)換為Cstr

9、ing型變量(BYTE bt=*(char*)(rxdata+k); / 字符型strtemp.Format(n%cn,bt); /將字符送入臨時變量strtemp 存放m_strRXData+=strtemp; / 加入接收編輯框?qū)?yīng)字符 串一 UpdateData(FALSE);/ 更新編輯框容到目前為止還不能在接收編輯框中看到數(shù)據(jù),因為我們還沒有打開串口,但運行 程序 不應(yīng)該有任何錯誤,不然,你肯定哪兒沒看仔細,因為我是打開VC6對照著做一步寫 一行的,運行試試。沒錯吧?那么做下一步:6.打開串口和設(shè)置串口參數(shù)你可以在你需要的時候打開串口,例如在程序中做一個開始按鈕,在該按鈕的處理函數(shù)中

10、打開串口?,F(xiàn)在我們在主對話框的CSCommTestDlg:O nl ni tDialog()打開串口,加入如下代碼:/TODO: Add extra initialization here if(m_ctrlComm.GetPortOpe n()m ctrlComm.SetPortOpe n(FALSE);m_ctrlComm.SetCommPort;選擇 com1 if( !m_ctrlComm.GetPortOpe n() m_ctrlComm.SetPortOpen(TRUE);/ 打開串口 elseAfxMessageBox("ca nnot ope n serial por

11、t");m_ctrlComm.SetSettings(,9600,n58,1,'); / 波特率 9600,無校驗,8 個數(shù)據(jù)位,1個停止位m_ctrlComm.Setl nputModel(l); /1:表示以二進制方式檢取數(shù)據(jù)m_ctrlComm.SetRThreshold(1);鄉(xiāng)數(shù)1表示每當串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的On Com事件m_ctrlComm.Set In putLe n(0);/設(shè)置當前接收區(qū)數(shù)據(jù)長度為0m_ctrlComm.Getl nput();/先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)現(xiàn)在你可以試試程序了,將串口線接好后(不會接?去

12、看看我寫的串口接線基本 方 法),打開串口調(diào)試助手,并將串口設(shè)在com2選上自動發(fā)送,也可以等會手動發(fā)送。 再執(zhí)行你編寫的程序,接收框里應(yīng)該有數(shù)據(jù)顯示了。7 .發(fā)送數(shù)據(jù)先為發(fā)送按鈕添加一個單擊消息即BN_CLICKE處理函數(shù),打開ClassWizard >Message Maps 選擇類 CSCommTestD,選擇IDC_BUTTON_MANUALS 擊 BN_CLICKE 添力口 0nBlmonManualsend()函數(shù),并在函數(shù)中添加如下代碼:void CSCommTestDlg:O nButto nMan ualse nd()(/ TODO: Add your con trol

13、 no tificati on han dler code here UpdateData(TRUE); / 讀 取編輯框容 m_ctrlComm.SetOutput(COIeVaria nt(m_strTXData); / 發(fā)送數(shù)據(jù)廠一運行程序,在發(fā)送編輯框中隨意輸入點什么,單擊發(fā)送按鈕,啊!看看,在另端的串 口調(diào)試助手(或別的調(diào)試工具)接收框里出現(xiàn)了什么。如果你真是初次涉獵串口編程,又一次成功,那該說聲謝謝我了,因為我第一次做串 口程序時可費勁了,那時網(wǎng)上的資料也不好找。開開玩笑,謝謝你的支持,有什么好 東西別忘了給我寄一份。最后說明一下,由于用到VC控件,在沒有安裝VC的計算機上運行時要

14、從VC中把 mscomm32.ocxmsvcrt.dll、mfc42.dll 拷到 Windows 目錄下的 System 子目錄中 (win2000為System32)并再進行注冊設(shè)置,請參考 如何手工注冊MSCom控件。龔建偉20016208 .發(fā)送十六進制字符在主對話框中加入一個復選接鈕,ID為IDC_CHECK_HEXSENption:十 六進 制發(fā)送,再利用ClassWizard為其添加控制變量:m_ctrlHexSend ;在ClassView中為SCommTestDI 口關(guān)添加以下兩個PUBLIC成員函數(shù),并輸入相應(yīng)代碼;由于這個轉(zhuǎn)換函數(shù)的格式限制,在發(fā)送框中的十六制字符應(yīng)該每兩

15、個字符之間插入 一個空隔如:A1 23 45 0B 00 29/CByteArray是一個動態(tài)字節(jié)數(shù)組,可參看MSD幫助int CSCommTestDlg:Stri ng2Hex(CStri ng str, GByte Array &se nddata)(int hexdata,lowhexdata;int hexdatale n=0;int len=str.GetLe ngth();sen ddata.SetSize(le n/2);for(i nt i=0;i<le n;)(char lstr,hstr=stri;if(hstr=n)(i+;con ti nue;i+;if(

16、i>=le n)break;lstr=stri;hexdata=C onv ertHexChar(hstr);lowhexdata=C onv ertHexChar(lstr);if(hexdata=16)|(lowhexdata=16)break;elsehexdata=hexdata*16+lowhexdata;i+;sen ddatahexdatale n=(char)hexdata;hexdatale n+;sen ddata.SetSize(hexdatale n);retur n hexdatale n;這是一個將字符轉(zhuǎn)換為相應(yīng)的十六進制值的函數(shù)好多C語言書上都可以找到功能:

17、若是在0-F之間的字符,則轉(zhuǎn)換為相應(yīng)的十六進制字符,否則返回 -1char CSCommTestDlg:Co nvertHexChar(char ch)(if(ch>=0,)&&(ch<='9,)return ch-0x30;else if(ch>=,A,)&&(ch<='F')return ch-'A'+10;else if(ch>=,a,)&&( ch<=*f)return ch-'a'+10;else return (-1);再將 CSCommTes

18、tDlg:OnButtonManualsend(并多改成以下形式:void CSCommTestDlg:O nButto nMan ualse nd()(/ TODO: Add your con trol no tificati on han dler code hereUpdateData(TRUE);/ 讀取編輯加匡容if(m_ctrlHexSe nd.GetCheck()CByteArray hexdata;int len=String2Hex(m_strTXData,hexdata); /此處返回的 len 可以用于計算發(fā)送了多少個十六進而數(shù)m_ctrlComm.SetOutput(C

19、OIeVaria nt(hexdata); /發(fā)送十六進制數(shù)據(jù) elsem_ctrlComm.SetOutput(COIeVariant(m_strTXData); / 發(fā)送 ASCII 字符數(shù)據(jù)現(xiàn)在,你先將串口線接好并打開串口調(diào)試助手 V2.1,選上以十六制顯示,設(shè)置 好相應(yīng)串口,然后運行我們這個程序,在發(fā)送框中輸入 00 01 02 03 A1 CC等十 六進制字符,并選上以十六進制發(fā)送,單擊手動發(fā)送,在串口調(diào)試助手的接收框中應(yīng) 該可以看至J 00 01 02 03 A1 CC 了。9 .在接收框中以十六進制顯示這就容易多了:在主對話框中加入一個復選接鈕,IDC_CHECK_HEXDISP

20、LAOption:十六進制顯示,再利用ClassWizard為其添加 控 制變量:m_ctrlHexDiaplay。然后修改 CSCommTestDlg:OnCommf 數(shù):void CSCommTestDIg: :On Comm() (/ TODO: Add your con trol no tificati on han dler code hereVARIANT varia ntjn p;COIeSafeArray safearrayj np;LONG Ie n,k;BYTE rxdata2048; 設(shè)置 BYTE 數(shù)組 An 8-bit integerthat is not signe

21、d.CStn ng strtemp; if(m_ctrlComm.GetCommEve nt()=2) / varia ntjn p=m_ctrlComm.Getl nput(); / safearrayj np=varia ntjnp; /VARIANT len=safearrayj np.Get On eDimSize(); / for(k=0;k<le n;k+) safearrayj np.GetEleme nt(&k,rxdata+k);/事件值為2表示接收緩沖區(qū)有字符讀緩沖區(qū)型變量轉(zhuǎn)換為ColeSafeArray型變量得到轉(zhuǎn)救數(shù)幅笈度型數(shù)組for(k=0;k<l

22、en;k+) /將數(shù)組轉(zhuǎn)換為Cstring型變量BYTE bt=*(char*)(rxdata+k); / 字符型if(m_ctrlHexDisplay.GetCheck()strtemp.Format("%02X ",bt);/將字符以十六進制方式送入臨時變量strtemp存放,注意這里加入一個空隔elsestrtemp.FormatCc'bt); /將字符送入臨時變量strtemp存放m_strRXData+=strtemp; /加入接收編輯框?qū)?yīng)字符串 )-UpdateData(FALSE); / 更新編輯框容測試:在串口調(diào)試助手發(fā)送框中輸入00 01 02

23、03 A1 CC等十六進制字符,并選 上以 十六進制發(fā)送,單擊手動發(fā)送,在本程序運行后選上以十六進制顯示,在串口調(diào)試助 手中單擊手動發(fā)送或自動發(fā)送,則在本程序的接收框中應(yīng)該可以看到00 01 02 03 A1 CC 了。10 .如何設(shè)置自動發(fā)送最簡單的設(shè)定自動發(fā)送周期是用SetTimer。函數(shù),這在數(shù)據(jù)采集中很 有 用,在控制中指令的傳送也可能用到定時發(fā)送。方法是:在ClassWizard中選上MessageMa卡,然后在Objects IDs選中 CSCommTestDIg,再在Messages框中選上 WM_TIME消息,單擊 ADD_FUNCTIO 力口入 void CSCommTest

24、Dlg:OnTimer(UINTnlDEvent)函數(shù),這個函 數(shù)是放入“時間到”后要處理的代碼:void CSCommTestDIg: :On Timer(UINT nIDEve nt)/ TODO: Add your message han dler code here an d/or call default On ButtonManualsend(); CDialog:O nTimer( nIDEve nt);再在在主對話框中加入一個復選接鈕,ID為IDC_CHECK_AUTOSEND Captio自 動 發(fā)送(周期1秒),再利用ClassWizard為其添加BN_CLICK消息處理函

25、數(shù)void CSCommTestDIg:。nCheckAutose nd():void CSCommTestDIg: :On CheckAutose nd() (/ TODO: Add your con trol no tificati on han dler code here m_bAutoSe nd=!m_bAutoSe nd;if(m_bAutoSe nd) SetTimer(1,1000,NULL);/ 時間為 1000 毫秒 elseKillTimer(l); 取消定時)其中:m_bAutoSend 為 BOO 型變量,在 CLASSVIEV 中為 CSCommTestDIg 力口

26、 入,并在廟造函數(shù)中初始化:m_bAutoSe n=FALSE;現(xiàn)在可以運行程序測試了。11 .什么是VARIANT數(shù)據(jù)類型?如何使用VARIANT數(shù)據(jù)類型?不知如何使用VARIANT數(shù)據(jù)類型,有不少朋友對VARIANT這個新的數(shù)據(jù) 類型大感頭疼。SetOutput()函數(shù)中需要的VARIANT參數(shù)還可以使用COIeVariant類 的構(gòu)造函數(shù)簡單生成,現(xiàn)在Get In put()函數(shù)的返回值也成了 VARIANTS型,那么如 何從返回的值中提取有用的容。VARIANT及由之而派生出的COIeVariant類主要用于在OLE自動化中傳遞數(shù)據(jù)。實際上VARIANT也只不過是 一個新定義的結(jié)構(gòu)罷了

27、,它的主要成員包括一個聯(lián)合體及一個變量。該聯(lián)合體由各種 類型的數(shù)據(jù)成員構(gòu)成,而該變量則用來指明聯(lián)合體中目前起作用的數(shù)據(jù)類型。我們所 關(guān)心的接收到的數(shù)據(jù)就存儲在該聯(lián)合體的某個數(shù)據(jù)成員中。該聯(lián)合體中包含的數(shù)據(jù)類型很多,從一些簡單的變量到非常復雜的數(shù)組和指針。由于通過串口接收到的容常常是一個字節(jié)串,我們將使用其中的某個數(shù)組或指針來訪問接收 至帕勺數(shù)據(jù)。這里推薦給大家的是指向一個SAFEARRAYCOIeSafeArray )類型變量。新的數(shù)據(jù)類型SAFEARRA正如其名字一樣,是一個“安全數(shù)組”,它能 根 據(jù)系統(tǒng)環(huán)境自動調(diào)整其16位或32位的定義,并且不會被OLE改變(某些類 型如BSTF在16位或

28、32位應(yīng)用程序間傳遞時會被OLE翻譯從而破壞其中的二進 制 數(shù)據(jù))。大家無須了解SAFEARRA的具體定義,只要知道它是另外一個結(jié)構(gòu),其中包 含一個(void *)類型的指針pvData,其指向的存就是存放有用數(shù)據(jù)的地方。簡而言 之,從Getlnput()函數(shù)返回的VARIANT類型變量中,找出parray指針,再從該指針 指向的SAFEARRA變量中找出pvData指針,就可以向訪問數(shù)組一樣取得所接收到的 數(shù)據(jù)了。具體應(yīng)用請參見void CSCommTestDIg:。nComm()函數(shù)。大概我現(xiàn)在也說不清這個問題,我自己從第一次接觸這個東西,到現(xiàn)在還是給別人講不清。MSCom控件使用詳解龔建

29、偉:這篇東西來不及好好整理,因有朋友經(jīng)常提及,先放在這里,如果有 必要,再詳細理順一下,更為詳細的信息請去看 MSDN摘要:本文詳細介紹了 MSCom控件在串口編程中使用。MSCom控件兩種處理通訊的方式CommPor 屬性RThreshold 屬性CTSHoldi ng 屬性SThresholdCDHoldi ng 屬性 DSRHoldi ng 屬性 Sett in gs 屬性 InputLen 屬性 EOFE nable 屬性Ha rdshake 常類勺On Comr常數(shù) InputMode 常數(shù) 錯誤消息MSComn控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功 能。MSCom

30、控件在串口編程時非常方便,程序員不必去花時間去了解較為復雜的 API函數(shù),而且在VC VB Delphi等語言中均可使用。MicrosoftCommunications Control (以下簡稱 MSCon)m 是 Microsoft 公司提供的簡化 Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù) 據(jù)的簡便方法。具體的來說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(Event driven)方法,一是查詢法。1. MSCom控件兩種處理通訊的方式MSCom控件提供下列兩種處理通訊的方式:事件驅(qū)動方式和查詢方式。1.1 事件驅(qū)動方式事件驅(qū)動通訊是處理

31、串行端口交互作用的一種非常有效的方法。在許多情況下,在事 件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者CarrierDetect (CD)或Request To Send (RTS)線上一個字符到達或一個變化發(fā)生時。在這些情況下,可以利用MSComn控件的On Comm事件捕獲并處理這些通訊事件。OnComn事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參 閱CommEve nt屬性。在編程過程中,就可以在On Com事件處理函數(shù)中加入自己 的處理代碼。這種方法的優(yōu)點是程序響應(yīng)及時,可靠性高。每個MSCom控件對應(yīng)著 一個串行端口。如果應(yīng)用程序需要訪問多個串行端口,

32、必須使用多個MSCom控件。1.2 查詢方式查詢方式實質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的 每個關(guān)鍵功能之后,可以通過檢查CommEvent屬性的值來查詢事件和錯誤。如果應(yīng) 用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的 撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因為唯一等待接收的字符是調(diào) 制解調(diào)器的“確定”響應(yīng)。2. MSComn控件的常用屬性MSCom控件有很多重要的屬性,但首先必須熟悉幾個屬性。CommPort設(shè)置并返回通訊端口號。Sett in gs以字符串的形式設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。PortOpe n

33、設(shè)置并返回通訊端口的狀態(tài)。也可以打開和關(guān)閉端口。In put從接收緩沖區(qū)返回和刪除字符。Output向傳輸緩沖區(qū)寫一個字符串。下面分別描述:CommPor屬性 設(shè)置并返回通訊端口號。語法 object.CommPortvalue (value 一整型值 5 說明端口號。)說明在設(shè)計時,value可以設(shè)置成從1到16的任何數(shù)(缺省值為1 )。但是如果用 PortOpen屬性打開一個并不存在的端口時,MSCom控件會產(chǎn)生錯誤68 (設(shè)備無 效)。注意:必須在打開端口之前設(shè)置CommPort屬性。RThreshold 屬性:在 MSComn 控件設(shè)置 CommEvent 屬性為 comEvRecei

34、ve 并 產(chǎn) 生On Comm之前,設(shè)置并返回的要接收的字符數(shù)。語法object.Rthreshold = value (value整型表達式,說明在產(chǎn)生On Comm事件 之前要接收的字符數(shù)。)說明當接收字符后,若Rthreshold屬性設(shè)置為0 (缺省值)則不產(chǎn)生On Comm事件。 例如,設(shè)置Rthreshold為1,接收緩沖區(qū)收到每一個字符都會使MSComm控件產(chǎn)生 On Comm 事件。CTSHold ing屬性:確定是否可通過查詢Clear To Se nd (CTS)線的狀態(tài)發(fā)送 數(shù)據(jù)。 Clear To Send是調(diào)制解調(diào)器發(fā)送到相聯(lián)計算機的信號,指示傳輸可以進行。該屬性 在設(shè)

35、計時無效,在運行時為只讀。語法:object.CTSHolding ( Boolean)Mscomn控件的CTSHolding屬性設(shè)置值:True Clear To Send 線為高電平。False Clear To Se nd線為彳氐電平。說明:如果Clear To Send線為低電平(CTSHolding = False)并且超時時,MSCom 控件設(shè)置 CommEvent 屬性為 comEventCTSTQCIear To Send Timeout)并產(chǎn)生 On Comm事件。Clear To Send 線用于 RTS/CTS (Request To Send/Clear To Send

36、)硬件握手。如果 需要確定Clear To Send線的狀態(tài),CTSHolding屬性給出一種手工查詢 的方法。詳細信息有關(guān)握手協(xié)議,請參閱Handshaking屬性。SThreshold屬性:MSComn控件設(shè)置CommEvent屬性為comEvSend并產(chǎn)生On Comr事件之前,設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù)。語法 object.SThreshold = value value整形表達式,代表在On Comm事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符 數(shù)。說明:若設(shè)置Sthreshold屬性為0 (缺省值),數(shù)據(jù)傳輸事件不會產(chǎn)生On Comm事件。若設(shè)置Sthreshold屬性為1,當

37、傳輸緩沖區(qū)完全空時,MSCom控件產(chǎn)生OnComm事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于value,CommEve nt屬性設(shè)置為comEvSe nc|并產(chǎn)生On Comm事件。comEvSe nd事件僅當字符數(shù)與 Sthreshold交叉時被激活一次。例如,如果Sthreshold等于5,僅當在輸出 隊列中字 符數(shù)從5降至(J 4時,comEvSend才發(fā)生。如果在輸出隊列中從沒有 比Sthreshold多 的字符,comEvSend事件將絕不會發(fā)生。Han dshake 常數(shù)常數(shù)值描述com None 0無握手。comXonXoff 1 XOn /Xoff 握手。comRTS 2 Reque

38、st-to-se nd/clear-to-se nd 握手。comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。On Comr常數(shù)常數(shù)值描述comEvSe nd 1 發(fā)送事件。comEvReceive 2 接收事件。comEvCTS 3 clear-to-se nd 線變化。comEvDSR 4 data-set ready 線變化。comEvCD 5 carrier detect 線變化。 comEvR ing 6振鈴檢測。comEvEOF 7文件結(jié)束。Error常數(shù)常數(shù)值描述comEve ntBreak 1001接收到中斷信號comEv

39、e ntCTSTO 1002 Clear-to-se nd 超時comEventDSRTO 1003 Data-set ready 超時comEve ntFrame 1004 幀錯誤comEventOverrun 1006 端口超速comEve ntCDTO 1007 Carrier detect 超時comEve ntRxOver 1008接收緩沖區(qū)溢出comEve ntRxParity 1009 Parity 錯誤comEve ntTxFull 1010傳輸緩沖區(qū)滿comEventDCB 1011檢索端口設(shè)備控制塊(DCB)時的意外錯誤InputMode 常數(shù) 常數(shù)值描述coml nput

40、ModeText 0 (缺省)通過In put屬性以文本方式取回數(shù)據(jù)。coml nputModeBi nary 1通過In put屬性以二進制方式檢取回數(shù)據(jù)。CDHolding屬性:通過查詢Carrier Detect (CD)線的狀態(tài)確定當前是否有傳 輸。Carrier Detect是從調(diào)制解調(diào)器發(fā)送到相聯(lián)計算機的一個信號,指示調(diào)制解調(diào)器正在聯(lián) 機。該屬性在設(shè)計時無效,在運行時為只讀。語法object.CDHold ing設(shè)置值:CDHolding屬性的設(shè)置值為:設(shè)置描述True Carrier Detect 線為高電平False Carrier Detect線為低電平 說明:注意當Carr

41、ier Detect線為高電平(CDHolding = True)且超時時,MSCom控 件設(shè)置CommEven屬性為comEventCDTO( Carrier Detect超時錯 誤),并產(chǎn)生On Comm事件。注意在主機應(yīng)用程序中捕獲一個丟失的傳輸是特別重要的,例如一個公告板,因為呼 叫者可以隨時掛起(放棄傳輸)。Carrier Detect 也被稱為 Receive Line Signal Detect (RLSD)。數(shù)據(jù)類型 BooleanDSRHolding 屬性:確定 Data Set Ready (DSR)線的狀態(tài)。Data Set Ready 信 號由 調(diào)制解調(diào)器發(fā)送到相連計算機,指示作好操作準備。該屬性在設(shè)計時無效,在運行時 為只讀。語法:object.DSRHoldingobject所在處表示對象表達式,其值是“應(yīng)用于”列表中的對象。DSRHoldi ng屬性返回以下值:值描述True Data Set Ready 線高False Data Set Ready 線低說明:當Data Set Ready線為高電平(DSRHolding = True)且超時時,MSComm控 件設(shè)置CommEve nt屬性為com Eve ntDSRT(數(shù)據(jù)準備超時)并產(chǎn)生On Comm事 件。當為 Data Terminal Equipment (DTE)機器寫 Data

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論