这是我上一篇文章的延续: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
答案 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