這是我的最後一個職位的延續: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