看到源代码了,但是order数组的内容是什么,变量的类型是什么,详细点
解决方案 »
- 在VB6中向字符串变量str1中赋串s2+"10",我一般这样做:str1="s2+" + Chr(34) + "10" + Chr(34)。这太麻烦,比如把串x+"rr"+cpr+"1:23"+y
- dll中变量访问的问题
- 如何动态设定LABLE1.Height!高手来看看!
- 困扰了一天的问题??????
- 关于createprocess用法
- 求助:我的代码一运行vb就出错,自动关闭。且有时候可以读一些小文件,一遇到大的就不行了
- 如何在自定义控件中创建如ComboBox中的List一样的属性?
- 怎样当点击按扭后,向mdb数据库修改某一字段的值?(急,我给分的)
- vsflex控件,是什么
- 有人可以告诉我在VB中怎样编FAX(传真)的程序吗?
- VB里面的Winsock控件的一次Send可以发送多少个字节的数据?
- ★如果你学习学累了想在网上听听歌曲或是看电影什么的可以到我新的网站的上去看看,也请你对我这个小站提点好的见意谢谢!!!
使数据全部到达后再开始校验。
Dim max As Variant
Dim foo As Variant
Dim serial As Variant '当前包号
Dim sum As Variant
'On Error GoTo Mscomm2Error
InByte = MSComm2.Input
'屏蔽空信号
If UBound(InByte) = -1 Then
Exit Sub
End If If readstart = True Then '判断是否命令的开头
If Not InByte(0) = &HE7 Then '检验起使位是否为E7
'放弃
MessageBox 0&, "前导码错,退出", "IDMS", &H0&
Call Cancel1 Exit Sub End If
If Not (InByte(1) = &HA0 Or InByte(1) = &HA1) Then '检验数据流向位是否为A0或A1
'放弃
MessageBox 0&, "数据流向错,退出", "IDMS", &H0&
Call Cancel1 Exit Sub
End If max = UBound(InByte)
ReDim order(0 To max)
order = InByte
readstart = False
Else
'合并数组order()与inbyte()
foo = UBound(order)
max = foo + UBound(InByte) + 1
ReDim Preserve order(max)
For I = LBound(InByte) To UBound(InByte) order(foo + 1 + I) = InByte(I)
Next I
If UBound(order) >= 41 Then '命令完整读入
'检查效验和
sum = 0
For I = 0 To (40)
sum = sum + order(I)
Next I
I = 0
sum = Hex(sum And 255)
If Not Hex(order(41)) = sum Then
'需要扩充放弃
MessageBox 0&, "校验和错,退出", "IDMS", &H0& Call Cancel1 End If readstart = True
serial = order(11) * 16 * 16 + order(12)
If Not serial = Num + 1 Then
'放弃
MessageBox 0&, "包号不连续,退出", "IDMS", &H0& Call Cancel1 End If
Num = serial '调用命令处理过程 Call Perform(order)
End If
命令不一定会一直是42个字节,其他类型的命令长度不定呀
MSComm.CommPort = 1
MSComm.RThreshold = 1
MSComm.InputLen = 0
MSComm.PortOpen = True
MSComm.InBufferCount = 0
这是我打开串口的代码
inbyte()字节数组,将输入缓存区的内容读入到数组
order()字节数组,存储inbyte(_)读出的数据直到命令完整读出.
sum 是Variant型
我觉得原因不应该是数据类型的问题呀,因为单步执行的话一点问题都没有,不知道有没有朋友遇到过类似的情况
建议用Debug.Print 来查看数据,不要设断点