这是我的最后一个职位的延续:How to read weight from scale using ethernet connection的TcpClient iFix的错误:在当前状态无效操作40020
创造VB10的TCP连接之后 - 我现在想在iFIX中从规模看重量(VB6 )。下面的代码工作,如果我创建一个断点,并逐步通过:strdata采取规模(51克此刻)的重量。然而,当我只需运行的代码,我得到的错误:
Invalid operation at current state 40020.
什么,我认为正在发生的事情是值得做的如何迅速读取或试图读取多次。任何提示都会很棒。
TCPclient指的是winsock,而frmclient指的是我的表单。命令“S”是量程获取重量值的必要命令。谢谢!
Public Sub test()
On Error GoTo errHandler
Dim strData As String
frmClient.tcpClient.LocalPort = 0
frmClient.tcpClient.Connect "192.168.0.1", 8000
'Dim i As Integer
' For i = 0 To 2000
' Debug.Print "connection status=" & frmClient.tcpClient.State
' If frmClient.tcpClient.State = 7 Then
' Exit For Next i
frmClient.tcpClient.SendData "S" & vbCrLf
frmClient.tcpClient.GetData strData
MsgBox ("weight =" & strData)
'Exit Sub
errHandler:
MsgBox Err.Description & " " & Err.Number
'Resume Next
End Sub
我试过,但没有奏效。 tcpClient在窗体设计器中被初始化,但我在子窗体中关闭它,因此它会尝试再次使用它,但不会重新初始化,因为窗体仍然存在。这有意义吗?我认为我做了这不必要的复杂,因为我在窗体设计器中调用模块,所以窗体设计器继续运行 – Dallas
也许不关闭它然后?...如果您必须关闭它,请将其设置为备份并使用Connect()方法。 –
上面的代码片段也未能处理TCP数据是流并且接收数据一次可能达到一个八位字节或以任何方式分块的事实。您的代码应该重新组合流并解析数据单元以使用它们。 TCP不是数据报协议。 – Bob77