发送一组数据,发送后会自动接收一些数据,是定长170个字节的数据,但是接收的数据是动态的,可能接收10条,可能会接收20条这样的数据
如何判断接收完数据呢?接受完数据后会自动执行cmdBCkjl0102按钮点击 call cmdBCkjl0102_click
    Dim receiveData As String                                                       ' 数据暂存
   Dim Counter As Integer                                                          ' 接收数据个数计数器Private Sub MSComm1_OnComm()
On Error GoTo Err
    Dim ReceiveArr() As Byte                                                        ' 接收数据数组
   ' Dim receiveData As String                                                       ' 数据暂存
 '   Dim Counter As Integer                                                          ' 接收数据个数计数器
    Dim I As Integer                                                                ' 循环变量
 If (MSComm1.InBufferCount > 0) Then
        Counter = MSComm1.InBufferCount                                              ' 读取接收数据个数
        receiveData = ""                                                            ' 清缓冲        ReceiveArr = MSComm1.Input                                                   ' 数据放入数组        For I = 0 To (Counter - 1) Step 1                                           ' 数据格式处理            If (ReceiveArr(I) < 16) Then
                receiveData = receiveData & "0" + Hex(ReceiveArr(I))                ' 小于16,前面加0
            Else
                receiveData = receiveData & Hex(ReceiveArr(I))                      ' 加空格显示
            End If        Next I
        
    KJL.Text = KJL.Text & receiveData
    KJL.SelStart = Len(KJL.Text)
        End If
Err:
End Sub
这段代码是接收数据的代码,显示在ICJL文本框中,该如何判断ICJL文本框中的数据已经是全部接收完了,然后再自动执行cmdBCkjl0102按钮单击事件呢?Private Sub KJL_Change()
Dim yyy As String
yyy = Len(KJL)
LSJLZS.Caption = yyy / 336
Label2.Caption = Len(receiveData) 
    If Len(receiveData) = yyy / 336 Then                                               
 Call cmdBCkjl0102_Click
End If
End Sub
奇怪的是每次从Label2.Caption =Len(receiveData)读取到的数据长度是不一样的,导致Len(receiveData) 不等于 yyy / 336这是什么原因?

解决方案 »

  1.   

    如果是自己定义的通讯协议,可以按数据包处理,然后在包头加上数据长度,包尾加上校检码,
    这样在协议层可以很大程度上保证数据的完整性。
    如果不是自己定义的通讯协议,那就看原来别人定义的协议有没有数据完整性的处理,如果没有,
    就很难确保,只能根据别人定西的内容自己处理,若出现干扰、频率误差出现数据丢失,也是没有
    办法的事。不过通常硬件层很少会出现这样的现象。所以只要根据收到的内容处理就可以了。
    至于程序处理方法上,你可以参考一下下面的帖子我的代码:
    http://topic.csdn.net/u/20110404/10/32a8336b-be14-4135-ba3c-9e604a8a2b4e.html