TCPClient iFix错误:当前状态40020处的无效操作

时间:2015-07-10 14:22:43

标签: vb6 winsock tcpclient

这是我上一篇文章的延续:How to read weight from scale using ethernet connection

在vb10中创建TCP连接后 - 我现在正尝试从iFix(vb6)中的比例读取权重。如果我创建一个断点并逐步执行,下面的代码可以工作:strdata接受比例的权重(此刻为51g)。但是,当我只是运行代码时,我收到错误:

  

当前状态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 个答案:

答案 0 :(得分:0)

使用Winsock控件的DataArrival事件。

类似于:

' ... 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()来电。

答案 1 :(得分:0)

搞定了!代码如下。我创建了一个picture sub来在代码执行开始时初始化ports / 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