<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 使用MSCOMM32控件編寫串口程序

          使用MSCOMM32控件編寫串口程序

          作者: 時(shí)間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
          MSCOMM32控件的基本屬性


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

          1.MSComm控件兩種處理通訊的方式

          MSComm控件提供下列兩種處理通訊的方式:事件驅(qū)動方式和查詢方式。
          1.1 事件驅(qū)動方式

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

          1.2 查詢方式

          查詢方式實(shí)質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個(gè)簡單的電話撥號程序,則沒有必要對每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲ㄒ坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。

          2.MSComm 控件的常用屬性
          MSComm 控件有很多重要的屬性,但首先必須熟悉幾個(gè)屬性。
          CommPort 設(shè)置并返回通訊端口號。
          Settings 以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
          PortOpen 設(shè)置并返回通訊端口的狀態(tài)。也可以打開和關(guān)閉端口。
          Input 從接收緩沖區(qū)返回和刪除字符。
          Output 向傳輸緩沖區(qū)寫一個(gè)字符串。

          下面分別描述:

          CommPort屬性 設(shè)置并返回通訊端口號。
          語法 object.CommPort[value ] (value 一整型值,說明端口號。)
          說明 在設(shè)計(jì)時(shí),value 可以設(shè)置成從 1 到 16 的任何數(shù)(缺省值為 1)。但是如果用 PortOpen 屬性打開一個(gè)并不存在的端口時(shí),MSComm 控件會產(chǎn)生錯誤 68(設(shè)備無效)。
          注意:必須在打開端口之前設(shè)置 CommPort 屬性。

          RThreshold 屬性:在 MSComm 控件設(shè)置 CommEvent 屬性為 comEvReceive 并產(chǎn)生 OnComm 之前,設(shè)置并返回的要接收的字符數(shù)。
          語法 object.Rthreshold [ = value ](value 整型表達(dá)式,說明在產(chǎn)生 OnComm 事件之前要接收的字符數(shù)。 )
          說明 當(dāng)接收字符后,若 Rthreshold 屬性設(shè)置為 0(缺省值)則不產(chǎn)生 OnComm 事件。例如,設(shè)置 Rthreshold 為 1,接收緩沖區(qū)收到每一個(gè)字符都會使 MSComm 控件產(chǎn)生 OnComm 事件。

          CTSHolding 屬性:確定是否可通過查詢 Clear To Send (CTS) 線的狀態(tài)發(fā)送數(shù)據(jù)。Clear To Send 是調(diào)制解調(diào)器發(fā)送到相聯(lián)計(jì)算機(jī)的信號,指示傳輸可以進(jìn)行。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。
          語法: object.CTSHolding(Boolean)

          Mscomm 控件的 CTSHolding 屬性設(shè)置值:
          True Clear To Send 線為高電平。
          False Clear To Send 線為低電平。

          說明:如果 Clear To Send 線為低電平 (CTSHolding = False) 并且超時(shí)時(shí),MSComm 控件設(shè)置 CommEvent 屬性為 comEventCTSTO (Clear To Send Timeout) 并產(chǎn)生 OnComm 事件。

          Clear To Send 線用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要確定 Clear To Send 線的狀態(tài),CTSHolding 屬性給出一種手工查詢的方法。

          詳細(xì)信息 有關(guān)握手協(xié)議,請參閱 Handshaking 屬性。

          SThreshold 屬性: MSComm 控件設(shè)置 CommEvent 屬性為 comEvSend 并產(chǎn)生 OnComm 事件之前,設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù)。

          語法 object.SThreshold [ = value ]
          value 整形表達(dá)式,代表在 OnComm 事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符數(shù)。

          說明:若設(shè)置 Sthreshold 屬性為 0(缺省值),數(shù)據(jù)傳輸事件不會產(chǎn)生 OnComm 事件。若設(shè)置 Sthreshold 屬性為 1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm 控件產(chǎn)生 OnComm 事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于 value,CommEvent 屬性設(shè)置為 comEvSend,并產(chǎn)生 OnComm 事件。comEvSend 事件僅當(dāng)字符數(shù)與 Sthreshold 交叉時(shí)被激活一次。例如,如果 Sthreshold 等于 5,僅當(dāng)在輸出隊(duì)列中字符數(shù)從 5 降到 4 時(shí),comEvSend 才發(fā)生。如果在輸出隊(duì)列中從沒有比 Sthreshold 多的字符,comEvSend 事件將絕不會發(fā)生。


          Handshake 常數(shù)

          常數(shù) 值 描述
          comNone 0 無握手。
          comXonXoff 1 XOn/Xoff 握手。
          comRTS 2 Request-to-send/clear-to-send 握手。
          comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。

          comEVENT的值在產(chǎn)生事件時(shí),將會是下面的這些值:代表不同的事件發(fā)生。

          本文引用地址:http://www.ex-cimer.com/article/201701/337119.htm


          OnComm 常數(shù)

          常數(shù) 值 描述
          comEvSend 1 發(fā)送事件。
          comEvReceive 2 接收事件。
          comEvCTS 3 clear-to-send 線變化。
          comEvDSR 4 data-set ready 線變化。
          comEvCD 5 carrier detect 線變化。
          comEvRing 6 振鈴檢測。
          comEvEOF 7 文件結(jié)束。


          Error 常數(shù)

          常數(shù) 值 描述
          comEventBreak 1001 接收到中斷信號
          comEventCTSTO 1002 Clear-to-send 超時(shí)
          comEventDSRTO 1003 Data-set ready 超時(shí)
          comEventFrame 1004 幀錯誤
          comEventOverrun 1006 端口超速
          comEventCDTO 1007 Carrier detect 超時(shí)
          comEventRxOver 1008 接收緩沖區(qū)溢出
          comEventRxParity 1009 Parity 錯誤
          comEventTxFull 1010 傳輸緩沖區(qū)滿
          comEventDCB 1011 檢索端口 設(shè)備控制塊 (DCB) 時(shí)的意外錯誤

          InputMode 常數(shù)
          常數(shù) 值 描述
          comInputModeText 0 (缺省)通過 Input 屬性以文本方式取回?cái)?shù)據(jù)。
          comInputModeBinary 1 通過 Input 屬性以二進(jìn)制方式檢取回?cái)?shù)據(jù)。





          CDHolding 屬性:通過查詢 Carrier Detect (CD) 線的狀態(tài)確定當(dāng)前是否有傳輸。Carrier Detect 是從調(diào)制解調(diào)器發(fā)送到相聯(lián)計(jì)算機(jī)的一個(gè)信號,指示調(diào)制解調(diào)器正在聯(lián)機(jī)。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。

          語法 object.CDHolding
          設(shè)置值:CDHolding 屬性的設(shè)置值為:
          設(shè)置 描述
          True Carrier Detect 線為高電平
          False Carrier Detect 線為低電平
          說明:注意當(dāng) Carrier Detect 線為高電平 (CDHolding = True) 且超時(shí)時(shí),MSComm 控件設(shè)置CommEvent 屬性為 comEventCDTO(Carrier Detect 超時(shí)錯誤),并產(chǎn)生 OnComm 事件。
          注意 在主機(jī)應(yīng)用程序中捕獲一個(gè)丟失的傳輸是特別重要的,例如一個(gè)公告板,因?yàn)楹艚姓呖梢噪S時(shí)掛起(放棄傳輸)。
          Carrier Detect 也被稱為 Receive Line Signal Detect (RLSD)。
          數(shù)據(jù)類型 Boolean

          DSRHolding 屬性:確定 Data Set Ready (DSR) 線的狀態(tài)。Data Set Ready 信號由調(diào)制解調(diào)器發(fā)送到相連計(jì)算機(jī),指示作好操作準(zhǔn)備。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。
          語法:object.DSRHolding
          object 所在處表示對象表達(dá)式,其值是“應(yīng)用于”列表中的對象。
          DSRHolding 屬性返回以下值:
          值 描述
          True Data Set Ready 線高
          False Data Set Ready 線低
          說明:當(dāng) Data Set Ready 線為高電平 (DSRHolding = True) 且超時(shí)時(shí),MSComm 控件設(shè)置 CommEvent 屬性為 comEventDSRTO(數(shù)據(jù)準(zhǔn)備超時(shí))并產(chǎn)生 OnComm 事件。
          當(dāng)為 Data Terminal Equipment (DTE) 機(jī)器寫 Data Set Ready/Data Terminal Ready 握手例程時(shí)該屬性是十分有用的。
          數(shù)據(jù)類型:Boolean


          Settings 屬性: 設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位參數(shù)。

          語法: object.Settings[ = value]
          說明:當(dāng)端口打開時(shí),如果 value 非法,則 MSComm 控件產(chǎn)生錯誤 380(非法屬性值)。
          value 由四個(gè)設(shè)置值組成,有如下的格式:
          "BBBB,P,D,S"
          BBBB 為波特率,P 為奇偶校驗(yàn),D 為數(shù)據(jù)位數(shù),S 為停止位數(shù)。value 的缺省值是:
          "9600,N,8,1"


          InputLen 屬性:設(shè)置并返回 Input 屬性從接收緩沖區(qū)讀取的字符數(shù)。

          語法 object.InputLen [ = value]
          InputLen 屬性語法包括下列部分:
          value 整型表達(dá)式,說明 Input 屬性從接收緩沖區(qū)中讀取的字符數(shù)。
          說明:InputLen 屬性的缺省值是 0。設(shè)置 InputLen 為 0 時(shí),使用 Input 將使 MSComm 控件讀取接收緩沖區(qū)中全部的內(nèi)容。

          若接收緩沖區(qū)中 InputLen 字符無效,Input 屬性返回一個(gè)零長度字符串 ("")。在使用 Input 前,用戶可以選擇檢查 InBufferCount 屬性來確定緩沖區(qū)中是否已有需要數(shù)目的字符。該屬性在從輸出格式為定長數(shù)據(jù)的機(jī)器讀取數(shù)據(jù)時(shí)非常有用。


          EOFEnable 屬性:確定在輸入過程中 MSComm 控件是否尋找文件結(jié)尾 (EOF) 字符。如果找到 EOF 字符,將停止輸入并激活 OnComm 事件,此時(shí) CommEvent 屬性設(shè)置為 comEvEOF,
          語法:object.EOFEnable [ = value ]
          EOFEnable 屬性語法包括下列部分:
          value 布爾表達(dá)式,確定當(dāng)找到 EOF 字符時(shí),OnComm 事件是否被激活,如“設(shè)置值”中所描述。
          value 的設(shè)置值:
          True 當(dāng) EOF 字符找到時(shí) OnComm 事件被激活。
          False (缺?。┊?dāng) EOF 字符找到時(shí) OnComm 事件不被激活。
          說明:當(dāng) EOFEnable 屬性設(shè)置為 False,OnComm 控件將不在輸入流中尋找 EOF 字符。


          錯誤消息(MS Comm 控件)


          下表列出 MSComm 控件可以捕獲的錯誤:

          值 描述
          380 無效屬性值 comInvalidPropertyvalue
          383 屬性為只讀 comSetNotSupported
          394 屬性為只讀 comGetNotSupported
          8000 端口打開時(shí)操作不合法 comPortOpen
          8001 超時(shí)值必須大于 0
          8002 無效端口號 comPortInvalid
          8003 屬性只在運(yùn)行時(shí)有效
          8004 屬性在運(yùn)行時(shí)為只讀
          8005 端口已經(jīng)打開 comPortAlreadyOpen
          8006 設(shè)備標(biāo)識符無效或不支持該標(biāo)識符
          8007 不支持設(shè)備的波特率
          8008 指定的字節(jié)大小無效
          8009 缺省參數(shù)錯誤
          8010 硬件不可用(被其它設(shè)備鎖定)
          8011 函數(shù)不能分配隊(duì)列
          8012 設(shè)備沒有打開 comNoOpen
          8013 設(shè)備已經(jīng)打開
          8014 不能使用 comm 通知
          8015 不能設(shè)置 comm 狀態(tài) comSetCommStateFailed
          8016 不能設(shè)置 comm 事件屏蔽
          8018 僅當(dāng)端口打開時(shí)操作才有效 comPortNotOpen
          8019 設(shè)備忙
          8020 讀 comm 設(shè)備錯誤 comReadError
          8021 為該端口檢索設(shè)備控制塊時(shí)的內(nèi)部錯誤 comDCBError

          補(bǔ)充,如果是偶校驗(yàn)則將ole_1.object.settings="1200,n,8,1" 中的n改為e,奇校驗(yàn)為o
          w1 = asc(ole_1.object.input)
          //如果讀入的是7位的acs碼,則將w1 – 48 既為所要的值,48的16進(jìn)制是30H,是十進(jìn)制的0
          如果ole_1.object.commevent的返回值為3 :clear-to-send 線變化,則是因?yàn)樵O(shè)備與電腦的連接線有問題,需要將標(biāo)準(zhǔn)rc-232線進(jìn)行調(diào)線,即將2線和3線進(jìn)行交換。即將設(shè)備的發(fā)送接到電腦的接收上,將設(shè)備的接收接到電腦的發(fā)送上。


          上一頁 1 2 下一頁

          關(guān)鍵詞: MSCOMM32控件串口程

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();