问一个vb中通讯的问题,高手帮帮忙啊!!
我做了个软件,是和plc通讯,来控制机器工作的,我通过通讯实时采集一些量比如说流量采集回来,显示到屏幕上(text1控件中),但是每次得重新起一下才能采集过来,我看了源吗,还是没发现问题,那位大虾遇到过此类问题啊?
帮帮小弟啊!!
下面是一部分源码:
Select Case MSComm1.CommEvent '有通讯事件产生
Case comEvReceive '??????????????????????????????
'处理接收字符
MSComm1.InputMode = comInputModeBinary '设置返回数据的类型为二进制形式
intInputLen = MSComm1.InBufferCount '返回缓冲区中等待接受的数据
bytInput = MSComm1.Input '返回为二进制形式
'把缓冲区内的数据存入数组y中
ReDim y(LBound(bytInput) To UBound(bytInput))
For i = LBound(bytInput) To UBound(bytInput)
y(i) = bytInput(i)
'Debug.Print i
number11 = y(i)
backnum = backnum & Trim(Str(number11)) & " "
Next i
REVNUMSTR = Trim(backnum) '获得完整的输入字符串,赋给revnumstr
'处理输出字符串
LenREVNSTR = Len(REVNUMSTR)
SPaceNum = 0
For rr = 1 To LenREVNSTR
CHAR = Mid(REVNUMSTR, rr, 1) '一个一个取出已经处理好的缓冲区里的数据
If CHAR = " " Then
SPaceNum = SPaceNum + 1
End If
Next rr
stringstr1 = REVNUMSTR
ReDim SAVENUM(SPaceNum) As Integer
For s = 0 To SPaceNum
STRINGLEN = Len(stringstr1)
STRINGPOS = InStr(stringstr1, " ")
If STRINGPOS > 0 Then
stringstr2 = Left(stringstr1, STRINGPOS - 1)
stringstr1 = Right(stringstr1, STRINGLEN - STRINGPOS)
SAVENUM(s) = Val(Trim(stringstr2))
ElseIf STRINGPOS = 0 Then
SAVENUM(s) = Val(Trim(stringstr1))
End If
Debug.Print "s===" & s & "savenum(s)===" & SAVENUM(s)
Next s
'以下是几个位的信息
YingYYeLiuLiang = SAVENUM(0)
BaoJing = SAVENUM(1)
DaMiShiJiLLiang = SAVENUM(2)
JieShu = SAVENUM(3)
If JieShu = 255 Then
STATUSNUM = BaoJing
YingYYeLiuLiang = YingYYeLiuLiang * 2
' t = DMSJLLiang(YingYYeLiuLiang)
'***********************************
'要接受数据的文本框,问题的出处 *
' *
'***********************************
Text3.Text = Str(YingYYeLiuLiang)
Text4.Text = Str(DaMiShiJiLLiang)
If STATUSNUM = 15 Then '报警信息
Shape2.FillColor = vbRed
ElseIf STATUSNUM = 0 Then
Shape1.FillColor = vbGreen
Shape2.FillColor = vbGreen
End If
Else
' MsgBox "发送数据错误,请您重新发送", vbOKOnly, "错误提示"
Exit Sub
End If
Case comEvSend
End Select
End Sub