LZ的代码是哪儿搞来拼凑的。代码又不全,依据关键代码调试发现存在许多错误。现将关键部分代码贴上,供LZ参考: Option ExplicitPrivate Sub Form_Load() MSComm1.CommPort = 1 'comport MSComm1.Settings = "9600,n,8,1" '设置串口1的参数 MSComm1.InputMode = comInputModeBinary '接收二进制数据 MSComm1.InBufferSize = 2048 MSComm1.RThreshold = 1 ' MSComm1.Input = 0 MSComm1.InputLen = 0 MSComm1.OutBufferCount = 0 MSComm1.InBufferCount = 0 MSComm1.PortOpen = True End SubPrivate Sub MSComm1_OnComm() Dim J As Long Dim I As Integer Dim strBuff As Variant Dim BytReceived() As Byte Select Case MSComm1.CommEvent Case 2 strBuff = MSComm1.Input BytReceived() = strBuff For I = 0 To UBound(BytReceived) Print BytReceived(I) Next 'jieshou '数据处理代码 End Select End Sub
Dim iBuf() As Byte Dim lnx As String Dim i As Long ReDim iBuf(bytesTotal - 1) ' log每个收到的字节 i = 0 lnx = "-->BYTE:" + Right("0000000" + Hex(i), 8) + "-" For i = 0 To bytesTotal - 1 lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2) If i Mod 16 = 15 Then debug.print lnx lnx = "-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-" End If Next i = bytesTotal - 1 If i Mod 16 <> 15 Then debug.print lnx End If
Option ExplicitPrivate Sub Form_Load()
MSComm1.CommPort = 1 'comport
MSComm1.Settings = "9600,n,8,1" '设置串口1的参数
MSComm1.InputMode = comInputModeBinary '接收二进制数据
MSComm1.InBufferSize = 2048
MSComm1.RThreshold = 1 ' MSComm1.Input = 0
MSComm1.InputLen = 0
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Dim J As Long
Dim I As Integer
Dim strBuff As Variant
Dim BytReceived() As Byte
Select Case MSComm1.CommEvent
Case 2
strBuff = MSComm1.Input
BytReceived() = strBuff
For I = 0 To UBound(BytReceived)
Print BytReceived(I)
Next
'jieshou
'数据处理代码
End Select
End Sub
CommEvent接收事件的触发,和RThreshold 属相有关,设置为0不会触发CommEvent接收事件,设置为1每接收到一个字节触发一个CommEvent事件。
RThreshold 属性
在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法object.Rthreshold [ = value ]Rthreshold 属性语法包括下列部分:部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。
说明当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。数据类型Integer
十六进制是一种数据显示或书写格式。我们说数据传输时,说的是数据编码格式,没有十六进制数据的说法。对于串口通讯,只有二进制数据(自然编码),或字符数据(ASCII 编码)之分。当然,如果你传输的是十六进制字符串,那就是字符数据。
Dim iBuf() As Byte
Dim lnx As String
Dim i As Long
ReDim iBuf(bytesTotal - 1)
' log每个收到的字节
i = 0
lnx = "-->BYTE:" + Right("0000000" + Hex(i), 8) + "-"
For i = 0 To bytesTotal - 1
lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2)
If i Mod 16 = 15 Then
debug.print lnx
lnx = "-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-"
End If
Next
i = bytesTotal - 1
If i Mod 16 <> 15 Then
debug.print lnx
End If