MSComm控件接收到数后不能赋值给字节数组变量,急啊!!!

ljznc_nick 2006-03-09 10:29:51
1:Private Sub MSComm1_OnComm()
2: Dim Receive() As Byte
3: MSComm1.InputLen = 0
4: MSComm1.InputMode = comInputModeBinary
5: Receive = MSComm1.Input
6:End Sub

窗体初始化的时候设置Settings=“9600,N,8,1”、设置接收一个字符产生一次OnComm事件,并且把断点设在行5,当下位机发回包时产生OnComm事件,这时在监视窗口中可以看到MSComm1.Input中有数据,逐句运行一句后,在监视窗口中看Receive和MSComm1.Input中都没有数据,为什么呢?是MSComm1.Input控件属性没设对吗?希望高手能帮忙给个详解,谢谢!
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
thelostland 2006-03-10
  • 打赏
  • 举报
回复
Private Sub comPort_OnComm() '串口接收的数据
Select Case comPort.CommEvent
Case comEvCD
spLed(0).FillColor = IIf(comPort.CDHolding, RGB(255, 0, 0), RGB(0, 255, 0))
Case comEvCTS
spLed(7).FillColor = IIf(comPort.CTSHolding, RGB(255, 0, 0), RGB(0, 255, 0))
Case comEvDSR
spLed(5).FillColor = IIf(comPort.DSRHolding, RGB(255, 0, 0), RGB(0, 255, 0))
Case comEvRing
spLed(8).FillColor = RGB(255, 0, 0)
tmrRing.Enabled = True
Case comEvReceive
spLed(1).FillColor = RGB(255, 0, 0)
Dim Receive_Byte() As Byte, Receive_Temp As Variant, Temp As String
tmrPort.Enabled = False
Do
Receive_Temp = comPort.Input
Receive_Byte = Receive_Temp
Temp = IIf(Receive_Byte(0) < 16, "0" & Hex(Receive_Byte(0)), Hex(Receive_Byte(0)))
PortReceMsg = PortReceMsg & Temp
Loop While comPort.InBufferCount > 0
tmrPort.Enabled = True
Case comEvSend
UartSendBusy = IIf(comPort.OutBufferCount > 0, True, False)
End Select
End Sub
thelostland 2006-03-10
  • 打赏
  • 举报
回复
MSComm1.InputLen = 0 改为MSComm1.InputLen = 1
ljznc_nick 2006-03-10
  • 打赏
  • 举报
回复
Receive_Temp = comPort.Input ???
.Input根本就不能给Variant类型变量赋值,提示类型不匹配。

其实这个问题我已经自己解决了,只要不把断点设在行5(比如行5以下的语句)就可以了,这样就可以看到Receive里被赋的数据了。

可是现在又有新的问题了,我的下位机接收到我的发送包后应该给我一个21个字节的应答包的,可是我第一次发送时可以收到21个字节的应答包,再次发送时就只能收到14个字节了,为什么呢?这个时候再回头回去接收还可以收到剩下的那7个字节,可是应该怎么样把这21个字节按照顺序接起来后赋给另一个变量呢?

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧