Ошибка 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
Другие вопросы по тегам