vb中采用兩個MSCOMM控制元件,能不能同時接收不同單片機發送來的資料嗎?
程式如下:
Private Sub Timercomm_Timer() 定時50ms
CurrentCommUnit = CurrentCommUnit + 1 '下一個周期,回路號加一
If CurrentCommUnit > CommUnits Then '當前通信回路號大于最大回路數,則回圈回第一路
CurrentCommUnit = 1
End If
Buf_CommXH(0) = &H64
Buf_CommXH(1) = CurrentCommUnit
Buf_CommXH(2) = Buf_CommXH(0) + Buf_CommXH(1) '計算校驗碼
MSComm1.RThreshold = 6
MSComm1.OutBufferCount = 0 '清除發送緩沖區資料
MSComm1.InBufferCount = 0
MSComm1.SThreshold = 1
MSComm1.Output = Buf_CommXH '發送3個位元組
CommUnitT =CommUnitT + 1 '下一個周期,回路號加一
If CommUnitT > 2 Then '當前通信回路號大于最大回路數,則回圈回第一路
CommUnitT = 1
End If
Buf_Command(0) = &HF1
Buf_Command(1) = CommUnitT
Jym_TX = CLng(Buf_Command(0)) + CLng(Buf_Command(1)) '計算校驗碼
CheckSum_TX = Jym_TX Mod 256
Buf_Command(2) = CheckSum_TX \ 16
Buf_Command(3) = CheckSum_TX Mod 16
MSComm2.RThreshold = 2
MSComm2.OutBufferCount = 0 '清除發送緩沖區資料
MSComm2.InBufferCount = 0
MSComm2.SThreshold = 1
MSComm2.Output = Buf_Command '發送4個位元組
end sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.InputLen = 0 '設定或回傳一次從接識訓沖區讀取位元組數,0表示一次讀取所有資料
MSComm1.InputMode = 1 '接收方式,0=文本,1=二進制
MSComm1.OutBufferCount = 0 '清除發送緩沖區資料
MSComm1.OutBufferSize = 1024
MSComm1.PortOpen = True
MSComm2.Settings = "9600,n,8,1"
MSComm2.CommPort = 2
MSComm2.InBufferSize = 1024
MSComm2.InputLen = 0 '設定或回傳一次從接識訓沖區讀取位元組數,0表示一次讀取所有資料
MSComm2.InputMode = 1 '接收方式,0=文本,1=二進制
MSComm2.OutBufferCount = 0 '清除發送緩沖區資料
MSComm2.OutBufferSize = 1024
MSComm2.PortOpen = True
'------------------------------------------------------------------------------
'9600波特率下,TimerComm延時50ms,和每一個回路通信
'------------------------------------------------------------------------------
TimerComm.Interval = 50
TimerComm.Enabled = True
End Sub
uj5u.com熱心網友回復:
能同時使用兩個MsComm控制元件與兩個不同的單片機實行通信。uj5u.com熱心網友回復:
但希望以各自OnComm事件來接收單片機回傳的資料。
uj5u.com熱心網友回復:
非常感謝您的幫助!我這樣撰寫定時器有問題嗎?
OnComm事件,肯定用兩個來接收單片機回傳的資料
uj5u.com熱心網友回復:
代碼未發現大的問題,注意使用變數的申明.
Option Explicit
Dim Buf_CommXH(2) As Byte
Dim CurrentCommUnit As Integer
Dim CommUnits As Integer
Dim CommUnitT As Integer
Dim Buf_Command(3) As Byte
Dim Jym_TX As Byte
Dim CheckSum_TX
Private Sub Timercomm_Timer() '定時50ms
CurrentCommUnit = CurrentCommUnit + 1 '下一個周期,回路號加一
If CurrentCommUnit > CommUnits Then '當前通信回路號大于最大回路數,則回圈回第一路
CurrentCommUnit = 1
End If
Buf_CommXH(0) = &H64
Buf_CommXH(1) = CurrentCommUnit
Buf_CommXH(2) = Buf_CommXH(0) + Buf_CommXH(1) '計算校驗碼
MSComm1.RThreshold = 6
MSComm1.OutBufferCount = 0 '清除發送緩沖區資料
MSComm1.InBufferCount = 0
MSComm1.SThreshold = 1
MSComm1.Output = Buf_CommXH '發送3個位元組
CommUnitT = CommUnitT + 1 '下一個周期,回路號加一
If CommUnitT > 2 Then '當前通信回路號大于最大回路數,則回圈回第一路
CommUnitT = 1
End If
Buf_Command(0) = &HF1
Buf_Command(1) = CommUnitT
Jym_TX = CLng(Buf_Command(0)) + CLng(Buf_Command(1)) '計算校驗碼
CheckSum_TX = Jym_TX Mod 256
Buf_Command(2) = CheckSum_TX \ 16
Buf_Command(3) = CheckSum_TX Mod 16
MSComm2.RThreshold = 2
MSComm2.OutBufferCount = 0 '清除發送緩沖區資料
MSComm2.InBufferCount = 0
MSComm2.SThreshold = 1
MSComm2.Output = Buf_Command '發送4個位元組
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.InputLen = 0 '設定或回傳一次從接識訓沖區讀取位元組數,0表示一次讀取所有資料
MSComm1.InputMode = 1 '接收方式,0=文本,1=二進制
MSComm1.OutBufferCount = 0 '清除發送緩沖區資料
MSComm1.OutBufferSize = 1024
MSComm1.PortOpen = True
MSComm2.Settings = "9600,n,8,1"
MSComm2.CommPort = 2
MSComm2.InBufferSize = 1024
MSComm2.InputLen = 0 '設定或回傳一次從接識訓沖區讀取位元組數,0表示一次讀取所有資料
MSComm2.InputMode = 1 '接收方式,0=文本,1=二進制
MSComm2.OutBufferCount = 0 '清除發送緩沖區資料
MSComm2.OutBufferSize = 1024
MSComm2.PortOpen = True
'------------------------------------------------------------------------------
'9600波特率下,TimerComm延時50ms,和每一個回路通信
'------------------------------------------------------------------------------
Timercomm.Interval = 50
Timercomm.Enabled = True
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/109564.html
上一篇:vba編程求助
