VB.net AxWinsock控件如何从服务器端正确接收全部的返回信息

PirateNOX 2017-09-11 11:13:30
有个问题很困扰啊,希望哪位大神给解答一下:
我的服务器端是一个ZLAN串口服务器,目的是在笔记本上使用程序控制挂在该服务器上的Modbus设备
我编的程序实现了对设备的控制,但是设备的返回码确读不出来,使用厂家提供的调试工具却监控到了。

代码如下:
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
MsgBox("传输数据")

Dim SendStr As String = "" '要发送的命令 我发送的是控制命令01 03 00 00 00 01 84 0A
Dim TempStr As String = ""
Dim LL As Integer

For i = 1 To Len(TextBox4.Text) ‘文本内容为’01 03 00 00 00 01 84 0A
TempStr = Mid(Trim(TextBox4.Text), i, 1) '把要传送的数据中的空格去掉
If TempStr <> " " Then
SendStr = SendStr + TempStr
End If
Next i

LL = SendStr.Length / 2 - 1

Dim Cmd(LL) As Byte '要发送的命令 16进制数组格式
For i = 0 To LL '将文本转换为16进制数 的数组 用以发送
Cmd(i) = Val("&H" + Mid(SendStr, i * 2 + 1, 2) + "&")
Next i

AxWinsock1.SendData(Cmd)
Dim back As Byte
Dim Count0 As Integer = 0
Dim showmsg As String = ""

If AxWinsock1.BytesReceived Then
AxWinsock1.GetData(back)
showmsg = Hex(back) + " "
Do While back <> 0
AxWinsock1.GetData(back)
If Len(Hex(back)) = 1 Then
showmsg = showmsg + "0" + Hex(back) + " "
Else
showmsg = showmsg + Hex(back) + " "
End If
Loop
End If


程序运行之后,被控仪器执行的正确,但是只返回了FA 07 13 02 FA 02 28 4F E2 14 EC 27 FA FF 00

设备执行后的代码没有返回,应该在这个代码后面紧跟:FA 01 01 01 03 02 00 00 B8 44

也就是完整的返回代码应该为FA 07 13 02 FA 02 28 4F E2 14 EC 27 FA FF 00 FA 01 01 01 03 02 00 00 B8 44。


求大神指导一下,谢谢
...全文
351 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
PirateNOX 2017-09-11
  • 打赏
  • 举报
回复
在程序中,该代码之前还有一段连接的代码 If AxWinsock1.CtlState <> MSWinsockLib.StateConstants.sckClosed Then AxWinsock1.Close() MsgBox("断开连接") Else AxWinsock1.RemoteHost = TextBox38.Text AxWinsock1.RemotePort = TextBox208.Text AxWinsock1.Connect() MsgBox("连接成功") End If 从调试上来看,在连接成功是就已经返回了FA 07 13 02 FA 02 28 4F E2 14 EC 27 FA FF 在发送命令后应该返回FA 01 01 01 03 02 00 00 B8 44 然而后面的返回部分没有返回。

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧