发送一组数据,发送后会自动接收一些数据,是定长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这是什么原因?
如何判断接收完数据呢?接受完数据后会自动执行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这是什么原因?
这样在协议层可以很大程度上保证数据的完整性。
如果不是自己定义的通讯协议,那就看原来别人定义的协议有没有数据完整性的处理,如果没有,
就很难确保,只能根据别人定西的内容自己处理,若出现干扰、频率误差出现数据丢失,也是没有
办法的事。不过通常硬件层很少会出现这样的现象。所以只要根据收到的内容处理就可以了。
至于程序处理方法上,你可以参考一下下面的帖子我的代码:
http://topic.csdn.net/u/20110404/10/32a8336b-be14-4135-ba3c-9e604a8a2b4e.html