回 帖 发 新 帖 刷新版面

主题:[原创]看看这段代码?

Option Explicit

Dim ary() As Byte
Dim buf As Variant
Dim buf1 As Variant
Dim i As Integer

Private Sub Form_Load()
MSC.CommPort = 2
MSC.Settings = "1200,n,8,1"
MSC.InBufferCount = 0
MSC.InputLen = 9
MSC.RThreshold = 9
MSC.PortOpen = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
If MSC.PortOpen = True Then MSC.PortOpen = False
End Sub

Private Sub MSC_OnComm()
Select Case MSC.CommEvent
       Case comEvReceive
       buf = MSC.Input
       ary = StrConv(buf, vbFromUnicode)
       For i = 0 To UBound(ary)
       [color=FF00FF]Do While Chr(ary(0)) <> "="
       txtreceive.Text = ""
       Loop[/color]       
       buf1 = buf1 + Chr(ary(i))
       Next
       txtreceive.Text = buf1
       buf1 = ""
       Case comEvSend
End Select
End Sub
   不知怎么了这段代码一运行就死机!msc.input是仪表传送过来的数据,(比如仪表传数据为
=11.52000=11.52000=11.52000...),别的语句没问题!就是do while语句?

回复列表 (共4个回复)

沙发

我运行了几边试了试!发现如果buf字符串中的如果是“=”号,就运行成功!如果不是“=”就死机了!是不是进行循环等待时,msc.input中的数据就不发生变化了?

板凳

我运行了几边试了试!发现如果buf字符串中的第一个字符如果是“=”号,就运行成功!如果不是“=”就死机了!是不是进行循环等待时,msc.input中的数据就不发生变化了?

3 楼

Do While Chr(ary(0)) <> "="
  txtreceive.Text = ""
Loop
[em10]这个怎么看着这么像死循环?

4 楼

就是个死循环!我把程序该了,又有别的错误:
Private Sub MSC_OnComm()
Select Case MSC.CommEvent
       Case comEvReceive
       buf = MSC.Input
       ReDim ary(Len(buf) - 1)
       For i = 1 To Len(buf)
       ary(i - 1) = Mid(buf, i, 1)
       Next
       Do While ary(0) <> "="
       txtreceive.Text = " "
       buf = MSC.Input
       ReDim ary(Len(buf) - 1)
       For i = 1 To Len(buf)
       ary(i - 1) = Mid(buf, i, 1)
       Next
       Loop       
       For i = 0 To UBound(ary)
       buf1 = buf1 + ary(i)
       Next
       txtreceive.Text = buf1
       buf1 = ""
       Case comEvSend
End Select
End Sub
   如果msc.input字符串中的第一个字符为“=”号,就能运行成功!如果不是,我就用do while 语句进行循环等待,我运行了多次发现,如果第一个字符不是“=”时,就运行错误,
错误提示是:实时错误“9”,下标越界。 真的不知哪儿错了?请高手帮忙看看!


我来回复

您尚未登录,请登录后再回复。点此登录或注册