用逐语句或逐过程调试,结果正确,一旦正常运行,总是出错

xinyangxiayukun 2012-05-14 07:37:21
我是vb中菜鸟 ,求指点
Option Explicit

Private Sub cmdsend_Click()
Dim i, FsArr() As Byte
ReDim FsArr(7)
For i = 0 To 7
FsArr(i) = Val("&H" + Text发送(i))
Next i

MSComm1.Output = FsArr '发送字节数组
End Sub

Private Sub Cmdclear_Click()
Dim i
For i = 0 To 7
Text接收(i) = ""
Next i
End Sub



Private Sub Form_Load()
MSComm1.CommPort = 6 'COM端口

MSComm1.InputMode = comInputModeBinary '采用二进制传输


MSComm1.PortOpen = True '打开端口

End Sub
Private Sub MSComm1_OnComm()
Dim i, JsArr
If MSComm1.InBufferCount > 0 Then
JsArr = MSComm1.Input '从接收缓冲区取二进制数据
For i = 0 To UBound(JsArr) '显示8个接收数据
Text接收(i) = Hex(JsArr(i))
Next i

End If
End Sub
逐语句调试时正确的,但是运行时就只能接受到fsarr数组的后四位,求大侠几点
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2012-05-14
  • 打赏
  • 举报
回复
哈哈,dovents....雅琪MM是手误了,应该为doevents.
xinyangxiayukun 2012-05-14
  • 打赏
  • 举报
回复
谢谢各位,已解决!特别谢谢3楼!不过对于4楼的dovents函数不能直接引用,需要自己编写吗?我是vb新手,不过我大致动的了原理,谢谢!
贝隆 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
JsArr = MSComm1.Input '从接收缓冲区取二进制数据
'--你的问题很可能是这里和后面接的太紧密了,你在这里设置一个循环试试看

for i=0 to 1000
dovents
next i

For i = 0 To UBound(JsArr) '显示8个接收数据
Text接收(i) = Hex(JsArr(i))
Next i
[/Quote]
问题很简单,就是下位机返回数据需要时间,所以你在Output和Input之间延迟片刻即可。
clear_zero 2012-05-14
  • 打赏
  • 举报
回复
JsArr = MSComm1.Input '从接收缓冲区取二进制数据
'--你的问题很可能是这里和后面接的太紧密了,你在这里设置一个循环试试看

for i=0 to 1000
dovents
next i

For i = 0 To UBound(JsArr) '显示8个接收数据
Text接收(i) = Hex(JsArr(i))
Next i
贝隆 2012-05-14
  • 打赏
  • 举报
回复

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub cmdsend_Click()
Dim i, FsArr() As Byte
ReDim FsArr(7)
For i = 0 To 7
FsArr(i) = Val("&H" + Text发送(i))
Next i

MSComm1.Output = FsArr '发送字节数组
End Sub

Private Sub Cmdclear_Click()
Dim i
For i = 0 To 7
Text接收(i) = ""
Next i
End Sub



Private Sub Form_Load()
MSComm1.CommPort = 6 'COM端口

MSComm1.InputMode = comInputModeBinary '采用二进制传输


MSComm1.PortOpen = True '打开端口

End Sub
Private Sub MSComm1_OnComm()
Dim i, JsArr
If MSComm1.InBufferCount > 0 Then
Sleep 30
JsArr = MSComm1.Input '从接收缓冲区取二进制数据
For i = 0 To UBound(JsArr) '显示8个接收数据
Text接收(i) = Hex(JsArr(i))
Next i

End If
End Sub

  • 打赏
  • 举报
回复
大凡调试运行正常而编译后不正常的,都是代码运行速度太快,外部IO(串口,网络等)跟不上所致。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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