双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

学习MSComm又遇问题!

wumylove1234 wumylove1234 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
Option Explicit

Private Sub Command1_Click()
On Error GoTo ErrHandle:
If MSComm1.PortOpen = False Then
Me.MSComm1.CommPort = CInt(Text2.Text)
MSComm1.Settings = Text3.Text & "," & Text4.Text & "," & Text5.Text & "," & Text6.Text
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Command1.Caption = "关闭端口"
ElseIf MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
Command1.Caption = "打开端口"
End If
Exit Sub
ErrHandle:
MsgBox Err.Number & ":" & Err.Description
End Sub

Private Sub MSComm1_OnComm()
MSComm1.InputMode = comInputModeBinary
Select Case MSComm1.CommEvent
Case comEvReceive
Dim intLength As Integer
intLength = 0
Dim myArray() As Byte
intLength = MSComm1.InBufferCount
ReDim myArray(intLength)
myArray = MSComm1.Input
Text1.Text = ConvertToString(myArray)

End Select

End Sub

Private Function ConvertToString(inputArray() As Byte) As String
Dim strHex As String
Dim strString As String
Dim i As Integer
For i = 0 To UBound(inputArray)
strHex = strHex & CStr(Hex(inputArray(i))) & " "
If inputArray(i) < 32 Or inputArray(i) > 128 Then
strString = strString & Chr(63)
Else
strString = strString & Chr(inputArray(i))
End If
Next
ConvertToString = strHex & vbCr & strString & vbCr
End Function

这是我的测试代码,我发现单步调试时结果正常,直接运行就只接给我显示了strHex和strString最后两个字符,我读出来的数据是D ?,D是strHex的最后一位,?是strString的最后一位,但我单步调试是一样的.还有,我发现,如果我把断点放在ConvertoString这过程中会是这个结果,如果把断点放在OnComm事件里,结果是正常的,这是为什么啊?
我参考了串口调试工具的源码,它的确不会出问题,难道是它的单码长,我的代码短?
...全文
评论 14
收藏 已收藏
分享
返回顶部
wumylove1234
VB基础类 7,788 成员 197,583 内容