TCPClient iFix error: Invalid Operation at Current State 400



这是我上一篇文章的延续:如何使用以太网连接从秤读取重量

在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

使用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()方法。

成功了!代码如下。我创建了一个图片子,在代码执行开始时初始化端口/IP,然后在结束时关闭连接。我做了一个计时器,在稳定时自动读取重量,所以重量可以通过点击按钮找到,或者只是等待2秒(2000ms)。祝你好运,谢谢你的帮助!

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

相关内容

最新更新