从串口到网口编程

wuyuzhulpp 2017-06-22 01:40:24
以前一直用的是串口和机器进行通信,现在发现串口速度有点慢,所以就用网口通信了,但是试了下来还是比较慢
应该是我的通信方法不对,请大神看看

‘‘这个是向机器查询指定寄存器里的数据的,主要速度就卡在ns.Read这个函数上。
‘以前串口的思路是每发一个指令等到机器返回结果后,然后再发吓一跳指令,不知道网卡是不是这样子的?
Public Function ReadD(ByVal Address As String, ByRef ReceiveData As Int16) As Byte
Dim strCmd As String = vbNullString
Dim result As String = vbNullString
Dim result1 As String = vbNullString
Dim bCmd() As Byte
Dim bResult(Me.ReceiveBufferSize) As Byte
If Not Me.Connected Then Return 1
If Me Is Nothing Then Return 2
If Address.Length < 5 Then Address = Address.PadLeft(5, "0")
strCmd = "<" & mStation & "#RDD" & Address & Address
strCmd = strCmd & BCC(strCmd) & vbcr
bCmd = Encoding.ASCII.GetBytes(strCmd)
Static br As New IO.BinaryReader(ns)
Static bw As New IO.BinaryWriter(ns)

Try
ns.Write(bCmd, 0, bCmd.Length)
ns.Read(bResult, 0, 64)
result = Encoding.ASCII.GetString(bResult)
If result.Contains("$") Then
result1 = result.Substring(8, 2) & result.Substring(6, 2)
ReceiveData = Convert.ToInt16(result1, 16)
Return 0
Else
Return 5
End If
Catch e As SocketException
Return 4
End Try
Return 1
End Function


'这个是后台线程,用来查询地址2000里的数据,DT2000是返回的数据,SW是StopWatch
现在这个轮询周期比较长,SW的值是100ms这样,这样和串口没啥区别了
Private Sub pM()
While flag = 1
sw.Reset()
sw.Start()
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))
fpe.ReadD("2000", dt2000(0))

t = sw.ElapsedMilliseconds
Threading.Thread.Sleep(1)
End While

End Sub





...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyuzhulpp 2017-06-22
  • 打赏
  • 举报
回复
引用 4 楼 wuyuzhutq 的回复:
[quote=引用 3 楼 xdashewan 的回复:] 你bCmd多大,量小的bCmd不足以体现LAN口速度优势,你传个几十兆的文件试试
bCmd 最多就60个字节,1KB都不到[/quote] 主要是机器回复的内容不定,但是最大也不会超过1K字节,机器是PLC(像单片机差不多),不是电脑
wuyuzhulpp 2017-06-22
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
你bCmd多大,量小的bCmd不足以体现LAN口速度优势,你传个几十兆的文件试试
bCmd 最多就60个字节,1KB都不到
xdashewan 2017-06-22
  • 打赏
  • 举报
回复
你bCmd多大,量小的bCmd不足以体现LAN口速度优势,你传个几十兆的文件试试
wuyuzhulpp 2017-06-22
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
没看出这和快慢有什么关系
如果在ReadD这个函数中不调用ns.Read那么会快很多,但是这样就没有数据了。 如果是这样进行编程,感觉和串口没有区别啊,访问速度就上不来了
xdashewan 2017-06-22
  • 打赏
  • 举报
回复
没看出这和快慢有什么关系

16,554

社区成员

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

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