需要从4个串口读数据,两台电子秤,两个条码枪,电子称是不停的在发字符串,里面含有一段采集来的重量值,重量数字的前后都有字母。条码枪是采集到条码信号就发送条码字符串。我用了4个TIMER控件来不停的扫描INPUT区,等到InBufferCount大于12就读出INPUT区的内容,用的是IF来判断InBufferCount的情况,条件不满足就跳出SUB过程。读出的电子称数据用MID语句挖出其中的重量值后将其赋给LABEL显示出来。但实际中出现的情况MID挖出的值有时候含有字母,导致重量值显示不全,条码值有时候也显示不全。请问各位高手献出高招~~~谢谢先~~~
请先告诉我我这思路有问题吗?
菜鸟在线等~~~~~~谢谢
请先告诉我我这思路有问题吗?
菜鸟在线等~~~~~~谢谢
我给你一些地址,csdn的,你看看是否对你有帮助。
http://community.csdn.net/Expert/topic/5611/5611214.xml?temp=.6590998
http://community.csdn.net/Expert/topic/5655/5655991.xml?temp=.1419947
http://community.csdn.net/Expert/topic/5682/5682611.xml?temp=8.358401E-02
还有很多,你可以看一下。
其次两台电子秤及两个条码枪与你接收代码间的通信协议.楼上有人提到使用事件驱动,我同意此观点.
使用MSCOMM控件的ONCOMM事件进行接收,接收时要依据通信协议来处理数据.不知两台电子秤及两个条码枪发送的数据字节长度都是12字节,如是的话,则应设置MSCOMM控件属性
RThreshold = 12
接收ASCII码或二进制数据,MSCOMM控件属性InputMode也不一样.数据处理方式也有差异.
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim bytData As Variant
Dim ErrorNum As Integer
DoEvents
If StartScan = True Then
With MSComm1
If .InBufferCount >= 21 Then
bytData = .Input
.InBufferCount = 0
DataStr = bytData
ErrorNum = InStr(1, DataStr, "FFFFFF")
If ErrorNum = 0 Then
ScanFinish = False
Scanning = True
TempStr = Trim(ProcessStr(DataStr))
ComCount = ComCount + 1
If ComCount >= 6000 Then
StartScan = False
ScanFinish = True
ComCount = 0
End If
m_Data = Mid(TempStr, 4, 8)
n_Data = Mid(TempStr, 13, 8)
If ComCount >= 2 Then
'收集数据
End If
Else
If Scanning = True Then ScanedCount = ScanedCount + 1
If ScanedCount > 20 Then
ScanFinish = True
End If
End If
End If
End With
Else
With MSComm1
If .InBufferCount >= 21 Then
bytData = .Input
.InBufferCount = 0
DataStr = bytData 'Replace(Trim(bytData), Chr(13), "S", 1)
ErrorNum = InStr(1, DataStr, "FFFFFF")
If ErrorNum = 0 Then
ComCount = ComCount + 1
If ComCount > 6000 Then ComCount = 0
TempStr = Trim(ProcessStr(DataStr))
m_Data = Mid(TempStr, 4, 8)
n_Data = Mid(TempStr, 13, 8)
End If
End If
End With
End If
End Sub