導航:首頁 > 編程語言 > vba串口編程

vba串口編程

發布時間:2022-03-01 09:05:23

⑴ 剛開始接觸VBA開發,為什麼我的沒有串口通信控制項

  1. 開發環境,以你現在最常用的環境為好,三個選項中推薦OFFICE2007。

  2. 串口通信控制項顯然是第三方的,在所有的電腦上需要安裝後才能使用。

  3. 電腦上的控制項多少與操作系統及所安裝軟體的多少、種類相關,缺少的控制項一般在需要時再進行安裝。控制項的安裝有的是跟隨應用程序直接安裝,有的找到控制項的文件(通常是DLL或OCX文件),使用regsrv32命令注冊一下就可以了。

⑵ vba串口通訊實時接收

PrivateSubMSComm1_OnComm()
SelectCaseMSComm1.CommEvent
CasecomEvReceive'收到RThreshold#of
DimsAsString,s2AsString
s=MSComm1.Input
s2=Trim(s)'s2就是接受到的數據
CaseElse
EndSelect
EndSub

⑶ 用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將成為最快速、易用、強勁的應用開發工具,是企業級客戶/伺服器應用軟體開發的首選工具之一。

⑸ 如何用VBA讀取串口數據

MSComm控制項提供了兩種處理通信的方式:一種為事件驅動方式,該方式相當於一般程序設計中的中斷方式。當串口發生事件或錯誤時,MSComm控制項會產生OnComm事件,用戶程序可以捕獲該事件進行相應處理。另一種為查詢方式,在用戶程序中設計定時或不定時查詢MSComm控制項的某些屬性是否發生變化,從而確定相應處理。在程序空閑時間較多時可以採用該方式。 常用屬性和方法 利用MSComm控制項實現計算機通信的關鍵是理解並正確設置MSComm控制項眾多屬性和方法。以下是MSComm控制項的常用屬性和方法:
●Commport:設置或返回串口號。
●Settings:以字元串的形式設置或返回串口通信參數。
●Portopen:設置或返回串口狀態。
●InputMode:設置或返回接收數據的類型。
●Inputlen:設置或返回一次從接收緩沖區中讀取位元組數。
●InBufferSize:設置或返回接收緩沖區的大小,預設值為1024位元組。
●InBufferCount:設置或返回接收緩沖區中等待計算機接收的字元數。
●Input:從接收緩沖區中讀取數據並清空該緩沖區,該屬性設計時無效,運行時只讀。
●OutBufferSize:設置或返回發送緩沖區的大小,預設值為512位元組。
●OutBufferCount:設置或返回發送緩沖區中等待計算機發送的字元數。
●Output:向發送緩沖區發送數據,該屬性設計時無效,運行時只讀。
●Rthreshold:該屬性為一閥值。當接收緩沖區中字元數達到該值時,MSComm控制項設置Commevent屬性為ComEvReceive,並產生OnComm事件。用戶可在OnComm事件處理程序中進行相應處理。若Rthreshold屬性設置為0,則不產生OnComm事件。例如用戶希望接收緩沖區中達到一個字元就接收一個字元,可將Rthreshold設置為1。這樣接收緩沖區中接收到一個字元,就產生一次OnComm事件。
●Sthreshold:該屬性亦為一閥值。當發送緩沖區中字元數小於該值時,MSComm控制項設置Commevent屬性為ComEvSend,並產生OnComm事件。若Sthreshold屬性設置為0,則不產生OnComm事件。要特別注意的是僅當發送緩沖區中字元數小於該值的瞬間才產生OnComm事件,其後就不再產生OnComm事件。例如Sthreshold設置為3,僅當發送緩沖區中字元數從3降為2時,MSComm控制項設置Commevent屬性為ComEvSend,同時產生OnComm事件,如發送緩沖區中字元始終為2,則不會再產生OnComm事件。這就避免了發送緩沖區中數據未發送完就反復發生OnComm事件。
●CommEvent:這是一個非常重要的屬性。該屬性設計時無效,運行時只讀。一旦串口發生通信事件或產生錯誤,依據產生的事件和錯誤,MSComm控制項為CommEvent屬性賦不同的代碼,同時產生OnComm事件。用戶程序就可在OnComm事件處理程序中針對不同的代碼,進行相應的處理。 CommEvent通信事件代碼 常數 含義
1 ComEvReceive 接受到Rthreshold個字元。該事件將持續產生,直到用Input屬性從接受緩沖區中讀取並刪除字元。
2 ComEvSend 發送緩沖區中數據少於Sthreshold個,說明串口已經發送了一些數據,程序可以用Output屬性繼續發送數據。
3 ComEvCTS Clear To Send信號線狀態發生變化。
4 ComEvDSR Data Set Ready信號線狀態從1變到0。
5 ComEvCD Carrier Detect信號線狀態發生變化。
6 ComEvRing 檢測到振鈴信號。
7 ComEvEOF 接受到文件結束符。
CommEvent通信錯誤代碼 常數 含義
1001 ComEvntBreak 接受到一個中斷信號。
1002 ComEvntCTSTO Clear To Send信號超時。
1003 ComEvntDSRTO Data Set Ready信號超時。
1004 ComEvntFrame 幀錯誤。
1006 ComEvntOverrun 串口超速。
1007 ComEvntCDTO 載波檢測超時。
1008 ComEvntRxOver 接受緩沖區溢出,緩沖區中已沒有空間。
1009 ComEvntRxParity 奇偶校驗錯。
1010 ComEvntTxFull 發送緩沖區溢出,緩沖區中已沒有空間。
1011 ComEvntDCB 檢索串口的設備控制塊時發生錯誤。

⑹ 如何用VBA編寫關於串口通訊的程序啊~~~

請參閱如下網址本人的答復:
http://..com/question/12535506.html
http://..com/question/12522809.html
http://..com/question/11725744.html
http://..com/question/11040704.html
http://..com/question/10941227.html

⑺ VBA 串口通訊

Dim RcvData$, aa$
Dim temp As Long
Private Sub Form_Load()
'
With MSC
.InputLen = 12
.InBufferSize = 1024
.RThreshold = 12
.CommPort = 5 '自己改 串口埠
.Settings = "9600,N,8,1" '自己改 埠設置
.InputMode = comInputModeBinary
End With
If Not MSC.PortOpen Then MSC.PortOpen = True
End Sub

Private Sub MSC_OnComm()
If MSC.CommEvent = comEvReceive Then
RcvData = MSC.Input

End If
End Sub
以上回答你滿意么?

⑻ vba運行不出結果,vba怎麼讀取串口數據

在基於對話框的應用中加入一個MSComm控制項非常簡單。只需進行以下操作即可:
打開「Project->Add To Project->Components and Controls->Registered Activex Controls」(工程/部件/控制項),然後選擇控制項:Microsoft Communication Control,version 6.0(Microsoft Comm Control 6.0)插入到當前的工程中。這樣就將類 CMSComm 的相關文件 mscomm.cpp 和 mscomm.h 一並加入到了工程中。編程時只需將控制項對話中的 MSComm 控制項拖至你的應用對話框中就OK了。

⑼ 求大神教如何用VBA讀取並發送串口數據 mscomm函數我知道,具體操作不太清楚。

Private Sub NETComm1_OnComm()
Dim t1 As Long, str1 As String
t1 = Timer
Select Case NETComm1.CommEvent
Case comEvReceive
Do
DoEvents
Loop While Timer - t1 < 1.5
com_String = NETComm1.InputData
stop '加上這句,當程序暫停時把滑鼠指針放到com_String上看。
End Select
End Sub

⑽ 關於VBA和串口通信問題,MSCOMM32,請大家幫幫忙

什麼 系統?

VBA 不是 office 里的VB 嗎?

閱讀全文

與vba串口編程相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:63
Windows常用c編譯器 瀏覽:780
關於改善國家網路安全的行政命令 瀏覽:835
安卓如何下載網易荒野pc服 瀏覽:656
javainetaddress 瀏覽:106
蘋果4s固件下載完了怎麼解壓 瀏覽:1005
命令zpa 瀏覽:288
python編譯器小程序 瀏覽:946
在app上看視頻怎麼光線調暗 瀏覽:542
可以中文解壓的解壓軟體 瀏覽:595
安卓卸載組件應用怎麼安裝 瀏覽:915
使用面向對象編程的方式 瀏覽:342
程序員項目經理的年終總結範文 瀏覽:932
內衣的加密設計用來幹嘛的 瀏覽:435
淮安數據加密 瀏覽:295
魔高一丈指標源碼 瀏覽:984
松下php研究所 瀏覽:171
c回調java 瀏覽:403
夢幻端游長安地圖互通源碼 瀏覽:747
電腦本地文件如何上傳伺服器 瀏覽:315