采用的波特率是115200,利用虛擬串口的時候,從另外一個串口發過來的資料可以完整的接收,沒有一點問題。但是和真實的硬體設備連上去的時候,只能接受到個別幾個位元組的資料( 硬體發過來的的資料大約有120個位元組左右。)
————————————————————————————————————————————
串口初始化的代碼如下:
'按下按鍵打開串口
Private Sub Command10_Click()
MSComm1.CommPort = PortNo
MSComm1.Settings = BTL & ",n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
' Shape1.FillColor = &H80000003
Shape1.FillColor = &HC000C0
com_flag = 1
If MSComm1.PortOpen = True Then
Label15.Caption = "串口已打開"
End If
End Sub
串口接收代碼如下:
Private Sub MSComm1_OnComm()
Hextext.Text = ""
Dim InputLen As Integer '回傳byte陣列的長度
Dim result As String
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
InputLen = MSComm1.InBufferCount
ReDim receivedbyte(InputLen) '重新定義陣列大小
receivedbyte() = MSComm1.Input
For i = 0 To UBound(receivedbyte) - 1 'Ubound()回傳陣列的大小
If Len(Hex(receivedbyte(i))) = 1 Then
'轉換為十六進制文本缺位的補0+空格,
result = result & "0" & Hex(receivedbyte(i)) & " "
Else
'轉換為十六進制文本+空格,
result = result & Hex(receivedbyte(i)) & " "
End If
Next i
End Select
'串口回傳資料顯示為十六進制的文本
Hextext.Text = result
————————————————————————————————————————
uj5u.com熱心網友回復:
實際發送資料比較慢,所以無法一次收完,所以需要接收等待一個時間。
在OnComm事件Case comEvReceive 處加添加類似下面這樣的代碼
Dim T As Single,BytesReceived As Integer
‘。。。 。。。 。。。
Case comEvReceive
'InputLen = MSComm1.InBufferCount ‘這行不要
InputLen = 0
T = Timer
Do
If InputLen = MSComm1.InBufferSize Then Exit Do
InputLen = MSComm1.InBufferSize
Loop Until Abs(1000 * (Timer - T)) > 100 '定義超時時間100ms 根據實際情況可以調大或者調小等待時間
ReDim receivedbyte(InputLen) '重新定義陣列大小
receivedbyte() = MSComm1.Input
’。。。 。。。 。。。 。。。
uj5u.com熱心網友回復:
代碼都注釋了見樓上 人家已經回答了uj5u.com熱心網友回復:
真的太感謝了,找到了問題。同樣的代碼以前收的收據都很短,所以之前代碼沒有遇到問題。這次徹底明白了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/21753.html
