电竞比分网-中国电竞赛事及体育赛事平台

分享

VB通過串口進行計算機通信程序實現(xiàn)

 阿明哥哥資料區(qū) 2022-04-06

圖片

今天,我們共同學習在Windows環(huán)境下設計串口通信程序,利用Microsoft公司提供的ActiveX控件MSComm.ocx。

首先,要對MSComm控件的基本知識有所了解。

1、MSComm控件的屬性和事件
一個MSComm控件僅對應一個串行端口。如果應用程序需要訪問多個串口,必須使用多個控件。
MSComm控件有很多重要的屬性,下面是幾個最常用的屬性:
1)CommPort:用于設置并返回連接的串口號,Windouws將使用該串口和外界通信。
2)Settings:用于設置并返回數(shù)據(jù)傳輸?shù)耐ㄐ艆?shù)。例如設置值為:“4800,n,8,1”時,表示數(shù)據(jù)傳輸速率為4800bit/s,沒有奇偶校驗,數(shù)據(jù)位是8位,停止位是1位。
3)PortOpen:取值為true或flase,用于打開或者關閉端口。
4)InputMode:取值及其含義如表2-1所示,用于設置或返回Input屬性取回的數(shù)據(jù)的類型。
5)Inputlen:設置或返回依次從接收緩沖區(qū)讀取的字節(jié)數(shù)。
圖片
6)InPut:用于從接收緩沖區(qū)讀取Inputlen長度的數(shù)據(jù),并將接收數(shù)據(jù)賦予變量  7)OutPut:用于向發(fā)送緩沖區(qū)寫數(shù)據(jù),OutPut屬性可以發(fā)送文本或二進制數(shù)據(jù)。
8)Rthreshold:該屬性為一閥值,當接收緩沖區(qū)中字符數(shù)達到該值時,MSComm控件設置Commevent屬性為ComEvReceive,并產(chǎn)OnComm事件,用戶可在OnComm事件處理程序中進行相應處理,若Rthreshold屬性設置為0,則不產(chǎn)生OnComm事件。
9)Sthreshold:該屬性為一閥值,當發(fā)送緩沖區(qū)中字符數(shù)小于該值時,MSComm控件設置
Commevent屬性為ComEvSend,并產(chǎn)OnComm事件,若Sthreshold屬性設置為0,則不產(chǎn)生OnComm事件。要特別注意的是,僅當發(fā)送緩沖區(qū)中字符數(shù)小于該值的瞬間才產(chǎn)生OnComm事件,其后就不再產(chǎn)生OnComm事件。
10)Handshaking:用于設置或返回硬件握手協(xié)議,即PC機和通信設備之間為了控制流速而設定的內(nèi)部協(xié)議,取值及其含義如表2-2所示。Value默認值為ComNone,無握手協(xié)議。
圖片

11)InBufferSize:設置或返回接收緩沖區(qū)的大小,默認值為1024B。
12)InBufferCount:設置或返回接收緩沖區(qū)等待計算機接收的字節(jié)數(shù)。
13)OnBufferSize:設置或返回發(fā)送緩沖區(qū)的大小,默認值為512B。
14)OnBufferCount:設置或返回發(fā)送緩沖區(qū)等待計算機發(fā)送的字節(jié)數(shù)。

圖片

15)CommEvent:該屬性設計時無效,運行時只讀。一旦串口發(fā)生通信事件或產(chǎn)生錯誤,依據(jù)產(chǎn)生的事件和錯誤,MSComm控件為CommEvent屬性賦不同的代碼,同時產(chǎn)生OnComm事件。用戶程序就可以在OnComm事件處理程序中針對不同的代碼,進行相應的處理。CommEvent屬性的代碼、常數(shù)及含義如表2-3及表2-4所示。
圖片
圖片

MSComm控件只有一個事件,即OnComm事件。當CommEvent屬性的值發(fā)生變化時,就產(chǎn)生OnComm事件,標志發(fā)生了一個通信事件或一個錯誤。在事件處理程序設計中可以根據(jù)CommEvent屬性值來執(zhí)行不同的操作。

1)添加MSComm控件。默認狀態(tài)下工具箱中并無MSComm控件,需要在“工程”→“部件” →選擇Microsoft Comm Control 6.0組件,這樣就可以在工具箱中找到MSComm控件,把MSComm控件添加到FORM中。
2)串口屬性設置。在添加MSComm控件后,在通信之前要對屬性進行設置。根據(jù)前面的介紹,對MSComm控件設置如下:

Com.CommPort=1; 設定串口號
If( com.PortOpen )
Com.PortOpen=false; 若該端口已經(jīng)打開,則關閉該端口
Com.Rthreshold=1; 當接收到數(shù)據(jù)時就觸發(fā)OnComm事件
Com.Settings=” 9600,n,8,1”; 設置參數(shù):數(shù)據(jù)傳輸速率為9600bit/s,沒有奇偶校驗,數(shù)據(jù)位是8位,停止位是1位
Com.Handshaking=MSCommLib.HandshakeConstants.comNone; 沒有使用握手協(xié)議
Com.InputMode=MSCommLib.InputModeConstants.comInputModeText; 文本形式取回
Com.InputLen=0; 當設置為0時,在Input可用時讀取所有的數(shù)據(jù)
Com.OnComm+=new System.EventHandler(this.OnComm); OnComm事件發(fā)生加入列表
Com.PortOpen=true; 打開端口

3)發(fā)送和接收數(shù)據(jù)。數(shù)據(jù)發(fā)送容易實現(xiàn),只需將要發(fā)送的數(shù)據(jù)賦值給Output。

圖片

MSComm控件采用查詢或事件驅動方法從串口獲取數(shù)據(jù)。

'程序初始化Private Sub Form_Load() MSComm1.CommPort = 1 '通信口 MSComm1.Settings = '9600,E,7,1' '串口參數(shù)設置 MSComm1.Handshaking = 0 '握手信號 MSComm1.InputLen = 0 '設置和返回input每次讀出的字節(jié)數(shù),設為0時讀出接收緩沖區(qū)中的內(nèi)容 MSComm1.OutBufferCount = 0 '設置和返回發(fā)送緩沖區(qū)的字節(jié)數(shù),設為0時清空發(fā)送緩沖區(qū) MSComm1.InBufferCount = 0 '設置和返回接收緩沖區(qū)的字節(jié)數(shù),設為0時清空接收緩沖區(qū) MSComm1.PortOpen = True '打開串口 InAlarm.FillColor = QBColor(10) '輸入信號指示燈,初始綠色 OutAlarm.FillColor = QBColor(10) '輸出信號指示燈,初始綠色End Sub

學習只要態(tài)度認真,就一定能夠學有所成!

信息技術時代,掌握編程至關重要!

圖片

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多