Ошибка TCPClient iFix: недопустимая операция в текущем состоянии 40020
Это продолжение моего последнего поста: Как считать вес из шкалы, используя Ethernet-соединение
После создания TCP-соединения в vb10 - я сейчас пытаюсь прочитать вес из шкалы в iFix (vb6). Приведенный ниже код работает, если я создаю точку останова и выполняю шаги: strdata принимает вес шкалы (на данный момент 51 г). Однако, когда я просто запускаю код, я получаю ошибку:
Недопустимая операция в текущем состоянии 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
2 ответа
Используйте событие DataArrival вашего элемента управления Winsock.
Так что-то вроде:
' ... in your "frmClient" Form ...
Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData, vbString
MsgBox ("weight =" & strData)
End Sub
* Очевидно, удаление GetData()
позвони в оригинал test()
метод.
Работай! Код ниже. Я создал подпрограмму рисунка для инициализации портов /IP в начале выполнения кода, а затем для закрытия соединения в конце. Я сделал таймер для автоматического считывания веса после стабилизации, чтобы его можно было найти, нажав кнопку или просто подождав 2 секунды (2000 мс). Желаем удачи и спасибо за помощь!
Public tcpC As New Winsock
Private Sub CFixPicture_Close()
tcpC.Close
End Sub
Private Sub CFixPicture_Initialize()
tcpC.LocalPort = 0
tcpC.Connect "192.168.0.1", 8000
End Sub
Private Sub CommandButton1_Click()
On Error GoTo errHandler
Dim strData As String
tcpC.SendData "S" & vbCrLf
tcpC.GetData strData
Text4.Caption = "Weight: " & strData
Exit Sub
errHandler:
MsgBox "error:" & Err.Description
End Sub
Private Sub readScale_OnTimeOut(ByVal lTimerId As Long)
Dim strData As String
tcpC.SendData "S" & vbCrLf
tcpC.GetData strData
Text4.Caption = "Weight: " & strData
Exit Sub
End Sub