【筆記】VB控件MSComm功能介紹

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

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

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

  1.1 事件驅動方式

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

  1.2 查詢方式

  查詢方式實質上還是事件驅動,但在有些情況下,這種方式顯得更為便捷。在程序的每個關鍵功能之后,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產生事件,因為唯一等待接收的字符是調制解調器的“確定”響應。

2.MSComm 控件的常用屬性

  MSComm 控件有很多重要的屬性,但首先必須熟悉幾個屬性。

  CommPort? 設置并返回通訊端口號。?
  Settings? 以字符串的形式設置并返回波特率、奇偶校驗、數據位、停止位。?
  PortOpen? 設置并返回通訊端口的狀態。也可以打開和關閉端口。
  Input? 從接收緩沖區返回和刪除字符。?
  Output? 向傳輸緩沖區寫一個字符串。

  下面分別描述:

  CommPort屬性:設置并返回通訊端口號。

  語法 object.CommPort[value ] (value 一整型值,說明端口號。)

  說明 在設計時,value 可以設置成從 1 到 16 的任何數(缺省值為 1)。但是如果用 PortOpen 屬性打開一個并不存在的端口時,MSComm 控件會產生錯誤 68(設備無效)。

  注意:必須在打開端口之前設置 CommPort 屬性。

  RThreshold 屬性:在 MSComm 控件設置 CommEvent 屬性為 comEvReceive 并產生 OnComm 之前,設置并返回的要接收的字符數。

  語法:object.Rthreshold [ = value ](value 整型表達式,說明在產生 OnComm 事件之前要接收的字符數。 )

  說明:當接收字符后,若 Rthreshold 屬性設置為 0(缺省值)則不產生 OnComm 事件。例如,設置 Rthreshold 為 1,接收緩沖區收到每一個字符都會使 MSComm 控件產生 OnComm 事件。

  CTSHolding 屬性:確定是否可通過查詢 Clear To Send (CTS) 線的狀態發送數據。Clear To Send 是調制解調器發送到相聯計算機的信號,指示傳輸可以進行。該屬性在設計時無效,在運行時為只讀。

  語法: object.CTSHolding(Boolean)
  Mscomm 控件的 CTSHolding 屬性設置值:
  True Clear To Send 線為高電平。?
  False Clear To Send 線為低電平。?

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

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

  SThreshold 屬性: MSComm 控件設置 CommEvent 屬性為 comEvSend 并產生 OnComm 事件之前,設置并返回傳輸緩沖區中允許的最小字符數。
  語法 object.SThreshold [ = value ]???????????? value 整形表達式,代表在 OnComm 事件產生之前在傳輸緩沖區中的最小字符數。?

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

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

  OnComm 常數

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

  Settings 屬性: 設置并返回波特率、奇偶校驗、數據位、停止位參數。

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

  InputLen 屬性:設置并返回 Input 屬性從接收緩沖區讀取的字符數。

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

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



轉載于:https://www.cnblogs.com/kongtiao/archive/2011/05/17/2048963.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378420.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378420.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378420.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

string charat_Java String charAt()方法與示例

string charat字符串charAt()方法 (String charAt() Method) charAt() method is a String class method in Java, it is used to get the character from specified index from a given string. charAt()方法是Java中的String類方法,用于從給定字符串的指定索引中獲…

opencv模板匹配

matchTemplate函數參數 模板匹配是通過模板在采集到的原圖像進行滑動尋找與模板圖像相似的目標。模板匹配不是基于直方圖的方式,而是基于圖像的灰度匹配。 6種匹配度量方法: 平方差匹配法CV_TM_SQDIFF 歸一化平方差匹配法CV_TM_SQDIFF_NORMED 相關匹配…

Java程序設計4——集合類

1 JAVA集合概述 Java集合封裝了一系列數據結構比如鏈表、二叉樹、棧、隊列等,然后提供了針對這些數據結構的一系列算法比如查找、排序、替換,使編程難度大大降低。(這句話有可能是非法…

Python中的a+=a和a=a+a的區別(認真看完后,我相信你一定會回來感謝我的)

一、先來兩段代碼! a 100def beyond(num):numnumprint(num)beyond(a)#結果為:200 print(a)#結果為:100a 100def beyond(num):numnumnumprint(num)beyond(a)#結果為:200 print(a)#結果為:100通過這兩段代碼的結果可以…

安裝linux后win7引導程序,安裝Windows7+Ubuntu+CentOS三系統之后的引導問題

依次安裝了Windows7、Ubuntu12.04、CentOS6.3系統后,開機引導項只有CentOS和Other(即Windows7)兩個選項,無法進入Ubuntu系統,所以利用Ubuntu的LiveCD光盤啟動后進行如下操作對grub進行修復,步驟如下:啟動Live CD&#…

Web之神php

我開始學習做網頁的時候用的是asp,后來轉行用php。以前只知道php很好學,并且很方便。我學習php的時候關于php的書種類很少好像那時候我在當當上面只看到3本,跟現在沒法比,現在大家再學習php就簡單多了,那么多書那么多資料。 現在我…

python與tensorflow知識點截圖集錦(持續囤積)

目錄前言conda環境管理python語法【1】語言屬性【2】代碼縮進問題【3】input和output函數與print函數【4】關鍵字與簡單數據類型與簡單運算符【5】利用縮進體現邏輯關系【6】數據結構:列表與元組【7】數據結構:字典【8】數據結構:集合【8】基…

string concat_Java String concat()方法與示例

string concat字符串concat()方法 (String concat() Method) concat() is a String method in Java and it is used to concatenate (add) a given string to the string. It returns a concatenated string. concat()是Java中的String方法,用于將給定的字符串連接(…

第五章 染料結構對染色性能的影響單元測驗

?1,引起染料結構發生變化的因素有() 染料商品添加劑及方法。 染料合成中間體選擇及合成條件。 染色助劑。 染色溫度。 2,染料結構影響染色()性能 染色熱力學性能。 染色牢度。 染色動力學性能。 染色勻染性能。 3,染料精制除雜時,染液中加入的溶劑應該具有()性能 …

sql2008怎么轉移到sql2005

一般來說,最新版本會向下兼容,如果舊版本想用新版本則不行。 但是還是有一些辦法的,可以參考一下。-- 對象資源管理器(沒有的話按F8) 連接到你的2008實例--右鍵你要降級的數據庫-- 任務-- 生成腳本-- 在隨后出現的腳本中, 單擊"下一步&q…

字符搜索正則表達式語法詳解

工作之余抽點時間出來寫寫博文,希望對新接觸的朋友有幫助。明天在這里和大家一起學習一下字符搜索 作為一個術技,時常會到碰正則表達式相干的西東,很多時候忙著趕進度,都是在網上找一個可以決解的正則表達式,或是換另外…

gRPC之grpc resolver

1、grpc resolver 當我們的服務剛剛成型時,可能一個服務只有一臺實例,這時候client要建立grpc連接很簡單,只需要指定server 的ip就可以了。但是,當服務成熟了,業務量大了,這個時候,一個實例就…

linux測試固態硬盤讀寫速度,在 Linux 上檢測 IDE/SATA SSD 硬盤的傳輸速度

你知道你的硬盤在 Linux 下傳輸有多快嗎?不打開電腦的機箱或者機柜,你知道它運行在 SATA I (150 MB/s) 、 SATA II (300 MB/s) 還是 SATA III (6.0Gb/s) 呢?你能夠使用 hdparm 和 dd 命令來檢測你的硬盤速度。它為各種硬盤的 ioctls 提供了命…

stl標準模板庫_C ++標準模板庫(STL)中的array :: fill()

stl標準模板庫fill() is a member function of "array container", which sets a given value to all array elements. It can also be used to set the value to other of containers also. Value type should be same as container type. fill()是“數組容器”的成…

Opencv——批量處理同一文件夾下的圖片(解決savedfilename = dest + filenames[i].substr(len)問題)

文章目錄前言一、完整代碼二、實現效果前言 第一份代碼實現了批量修改同一文件夾下圖片的尺寸,有其他需求時僅需修改處理部分的代碼以及文件夾路徑。 第二份代碼實現了批量截取同一文件夾下每張圖片的ROI區域作為結果保存,注意截取后按下enter鍵才會跳到…

linux統計文件目錄及其文件個數

linux下統計目錄及其子目錄的文件的個數 查看某目錄下文件的個數 ls -l |grep "^-"|wc -l或find ./company -type f | wc -l 查看某目錄下文件的個數,包括子目錄里的。 ls -lR|grep "^-"|wc -l查看某文件夾下目錄的個數,包括子目錄里…

處理文件、攝像頭和圖形用戶界面

1、基本I/O腳本 1.1 讀/寫圖像文件 import numpy import cv2#利用二維Numpy數組簡單創建一個黑色的正方形圖像 img numpy.zeros((3,3),dtypenumpy.uint8) img #結果為:array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtypeuint8)img.shape#結果為:(3, 3)###…

linux桌面天氣,Ubuntu 14.10中安裝和配置天氣應用

對于操作系統平臺而言,有各種小插件功能方便用戶日常應用。在Ubuntu桌面中提供天氣信息的功能,可以使用Unity Dash和桌面應用來獲得相關信息,比如Typhoon。但對于用戶而言,可以提供快速查詢天氣狀況和溫度數據,并且只需…

使用ACE_SOCK_SEQPACK_Association獲取socket連接的本地及遠程IP端口信息

int connect(const std::string& ip, int port){ ACE_INET_Addr portAddr(port, ip.c_str()); ACE_SOCK_Connector connector; ACE_SOCK_Stream peer; if (-1 connector.connect(peer, portAddr)) { std::cout << "連接服務器(" <&…

linux批處理操作系統_批處理操作系統

linux批處理操作系統批處理操作系統 (Batch Processing Operating System) When we are working in an environment there is a restriction of making use of computer resources effectively and improvement in the programmers output. When we are working with tapes a l…