首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-12-14 
用逐语句或逐过程调试,结果正确,一旦正常运行,总是出错我是vb中菜鸟,求指点Option ExplicitPrivate Sub cm

用逐语句或逐过程调试,结果正确,一旦正常运行,总是出错
我是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数组的后四位,求大侠几点

[最优解释]


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(串口,网络等)跟不上所致。
------其他解决方案--------------------


  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
[其他解释]

引用:
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

问题很简单,就是下位机返回数据需要时间,所以你在Output和Input之间延迟片刻即可。
[其他解释]
谢谢各位,已解决!特别谢谢3楼!不过对于4楼的dovents函数不能直接引用,需要自己编写吗?我是vb新手,不过我大致动的了原理,谢谢!
[其他解释]
哈哈,dovents....雅琪MM是手误了,应该为doevents.

热点排行