導航:首頁 > 編程語言 > vb串口通信及編程實例

vb串口通信及編程實例

發布時間:2024-01-18 08:50:23

Ⅰ 用VBA可以進行串口通訊嗎如果可以的話,該怎麼實現,多謝大俠賜教!!

以兩台PC機串列通信為例:

一.將兩台PC機串列口的連接(如圖)

2.VB編程
'PC機串列口用命令按鈕啟動接收/發送VB程序

Private Sub Form_Load()
MSComm1.PortOpen = True '開啟通信控制項的埠
End Sub

'點擊「發送」命令按鈕發送數據
Private Sub Command1_Click()
MSComm1.Output = Text1.Text'將文本框Text1的數據發送至對方
End Sub


'點擊「接收」命令按鈕接收數據
Private Sub Command2_Click()
Dim st As String
st = MSComm1.Input
Text2.Text = st '將接收到的數據至入文本框Text2
End Sub

三.運行

Ⅱ VBA 串口通訊問題

1 mscomm.vbx通信控制項描述
mscomm.vbx通信控制項可直接從vb的toolbox中加入窗體form,即可用其進行通信。若toolbox中無此控制項,則用tools的custom controls 將mscomm.vbx從windows的system子目錄中加入vb的toolbox中。

1.1 通信方式

mscomm.vbx有2種不同的方式來處理和解決各類通信軟體的開發和設計問題
1、事件驅動。它與c/c++寫windows 軟體時的窗口回調函數類似,是1種功能強大的處理問題的方法。在實際工作中,往往要處理許多通信中的相關事件,例如:當線路數據到達本端或cd線和rts信號線狀態發生變化時,要求我們使用相應的事件來跟蹤和處理,該控制項是使用oncomm事件來實現的,它也包括檢測和處理通信錯誤等方面的問題,commevent 值返回最近的通信事件或錯誤的數字代碼。通信控制項詳細的錯誤和事件舉例有:
mscomm-er-break 收到1個break signal
mscomm-er-cdto cd 信號超時
……
mscomm-ev-cd cd信號改變
……
2、查詢方式。由程序設計者負責讀取commevent的值並處理所發生的錯誤或事件。通常簡單的應用程序設計可採用這種辦法。

1.2 通信控制項的屬性

利用通信控制項編制通信程序,關鍵是准確理解設置通信控制項的屬性。mscomm.vbx提供了27個關於通信控制項方面的屬性,例如:

commport:設置或返回通信口編號。
settings:設置或返回以字元串形式出現的數據通信格式:波特率、校驗、數據位和停 止位。
portopen:設置或返回通信口狀態(包括打開和關閉1個通信口)
……
3、 實例
本程序應用背景為dcc95型靜電除塵器自動監控系統軟體,解決1個pc工控機(主站)與32個單片機(子站)之間的通信問題。主站與子站之間這匯流排式網路結構,採用rs-485通信標准,以問答方式進行數據通信。由於32個子站與主站發送通信命令(下行命令),主站在接收子站發回的相應回答命令(上行命令)後繼續發送下行命令的通信形式。根據系統功能的要求,主站需發送2種類型的命令:(1)同期命令,它由定時器觸發引起,每隔ls周期發送1次;(2)非周期性命令,它由操作者按動相應命令按鈕引起,非周期性發送。自動監控系統軟體安裝在主站上,而通信程序作為自動監控系統軟體的一部分也安裝在主站上。

本文僅列出調試通信程序時進行試驗用的基本演示程序清單。試驗時,用1台pc機作為主站,另一台pc機模擬32個子站的工作,兩台pc機之間採用rs232c串口通信。往主站的通信演示程序窗體(form)中加入1個通信控制項、2個定時器控制項和1個命令按鈕控制項,通信控制項(mscomm1)用於訪問串口,發送和接收數據;periodic定時器控制項(periodic)用於控制每秒由主站向各子站發送周期性命令;命令按鈕控制項(nonperiodic-command)與nonperiodic定時器控制項(nonperiodic)用於發送非周期性命令。數據傳送採用事件驅動的通信方式,根據不同的發送命令設置rtreshlod屬性,從而引起oncomm事件以接收數據。

2.1 窗體各控制項初始化程序

設置通信串口工作參數,設置periodic定時器的在斷間隔為ls, nonperiodic定時器的中斷間隔為0.5s。

sub form-load ()
mscomm1.commport=2 』選用com2串列口
mscomm1.settings="9600,n8,1" 』波特率9600,無奇偶校驗位,8位數據位1位停止位
mscomm1.inputlen=0 』input將讀取接收緩沖區的全部內容
mscomm1.inbuffersize=1024 』設置接收緩沖區的位元組長度
mscomm1.portopen=true 』打開通信口
mscomm1.inbuffercount=0 』清除發送緩沖區數據
mscomm1.outbuffercount=0 』清除接收緩沖區數據
periodic.inteval=100 』設置ls定時間隔,使遙測命令每隔ls發送1次
nonperiodic.inteval=500 』設置0.5s定時間隔,查詢命令按鈕是否處於激活狀態以確定是否發送周期性命令
command-pressed=false 』命令按鈕為未激活狀態
ring- periodic=false 』周期性命令數據傳輸尚未開始
ring- nonperiodic=false 』非周期性命令數據傳輸尚未開始
end sub
2.2 非周期性命令發送程序

根據命令按鈕狀態及周期性命令數據傳輸狀態,在nonperiodic定時器的中斷程序中發送非周期性命令。
sub nonperiodic-command-click ()
command-pressed=true 』命令按鈕激活
end sub

sub nonperiodic-timer ()

if ring- periodic=true or command-pressed=false

then exit sub 』若周期性命令數據傳輸尚未結束或命令按鈕處於激活狀態,則退出發送非周期性命令程序。

command-pressed=false 』命令按鈕恢復為未激活狀態

call senddata (nonperiodic-command) 』發送非周期性命令

mscomm1.rthreshold=r-nonperiodic-byte』發送非周期性命令後,設置rthreshold屬性,使主站接收所設定的位元組數後引發oncomm事件

end sub

2.3 periodic定時器程序

在periodic定時器的中斷程序中發送周期性命令:

sub periodic-timer ()

if ring- nonperiodic=true then exit sub 』若非周期性命令數據傳輸尚未結束,則退出發送非周期性命令程序。

ring-periodic=true 』設置周期性命令數據傳輸狀態為正在進行中
call senddata (periodic-command) 』發送周期性命令
mscomm1.rthreshold=r-periodic-byte 』發送周期性命令後,主站接收r-remot- edata-byte個位元組,可引發oncomm 事件
end sub
2.4 oncomm事件程序

根據rthreshold屬性設置值,當接收緩存區內接收到相應位元組的字元時,引發oncomm事件,在中斷程序中接收數據。
sub mscomm1-oncomm ()

select case mscomm1.commevent 』在此可插入處理各種不同錯誤或事件的代碼

case mscomm-ev-receive

receivestring$=mscomm1.input

select case mscomm1.rthreshold
case r-periodic-byte 』周期性命令的應答數據

call disposedata(periodic-command) 』處理接收數據

ring periodic=false 』設置周期性命令數據傳輸狀態為結束

case r-nonperiodic-byte 』非周期性命令的應答數據

call disposedata(nonperiodic-command) 』處理接收數據

ring-nonperiodic=false 』設置非周期性命令數據傳輸狀態為結束

end select
end select
end sub

隨著vb版本的不斷升級,vb將成為最快速、易用、強勁的應用開發工具,是企業級客戶/伺服器應用軟體開發的首選工具之一。

Ⅲ vb串口通信程序實例

我也是自己摸索開發出來的每一款VBtoCOM通訊,有具體的思路如下:

給你推薦一個工具「com串口測試工具 ComTone V1.0 中文綠色版」

1、打開你的噪音計的測試軟體,調整好串口號、通訊頻率等等,我用溫度計舉例說明。

Ⅳ vb如何使用串口通訊

用PC機的9針RS232介面,用VB6 含有的MSComm 控制項編程

兩台PC機串列通信串列口的接線圖:

Private Sub Form_Load()
MSComm1.PortOpen = True '開啟通信控制項的埠
Timer1.Interval = 100 』自動傳送時間間隔100毫秒
End Sub


Private Sub MSComm1_OnComm()
Dim st As String
If MSComm1.InBufferCount > 0 Then
st = MSComm1.Input
Text2.Text = st '將收到的數據放入Text2文本框
End If
End Sub

Private Sub Timer1_Timer()
MSComm1.Output = Text1.Text '發送Text1文本框內容
End Sub

閱讀全文

與vb串口通信及編程實例相關的資料

熱點內容
做解壓學慣用品手工 瀏覽:85
手機文件夾刪除又出現怎麼解決 瀏覽:285
php時間段分析 瀏覽:213
redisjava類 瀏覽:911
剪力牆錯開部分鋼筋是否加密 瀏覽:477
linux字元設備驅動程序 瀏覽:57
全排列演算法java 瀏覽:465
中國銀行app轉賬電子回單在哪裡 瀏覽:51
操作簡單的程序員 瀏覽:600
數值積分演算法求pi 瀏覽:18
按鈕怎麼連命令方塊 瀏覽:909
房貸還清後不解壓能貸款嗎 瀏覽:36
程序員哄老婆開心技術 瀏覽:672
oracle自動備份壓縮文件 瀏覽:855
遵義人字形加密網帶 瀏覽:255
寧波人社在哪裡下載app 瀏覽:92
好噠商戶app下載在哪裡下載 瀏覽:609
廣發兌星巴克是在app哪裡操作 瀏覽:783
linuxgetline 瀏覽:215
app的懸浮窗許可權在哪裡設置 瀏覽:686