rthan008 2015-06-26 08:13 采纳率: 20%
浏览 913

使用MODBUS再TCPIP上通信的问题

Public Sub WriteQW16(ByVal Address As Short, ByVal value As Short)
Dim buffer As Byte()
If Me.Connected = False Then
'Information.Err().Raise(0x215, "", "not connected", null, null);
Throw New Exception("not connected!")
End If

    Dim buffer3(14) As Byte
    Dim num As Integer = 0

    Dim bytes As Byte()
    bytes = BitConverter.GetBytes(value)

    Dim nsStream As NetworkStream = Me.nsStream
    SyncLock nsStream
        'Address = (short) Math.Round((double) (((double) Address) / 2.0));
        'Dim bytes As Byte()
        'bytes = BitConverter.GetBytes(Address)

        Dim buffer4 As Byte()
        buffer4 = BitConverter.GetBytes(Address)

        buffer3(0) = 0
        buffer3(1) = 0
        buffer3(2) = 0
        buffer3(3) = 0
        buffer3(4) = 0
        buffer3(5) = 9

        buffer3(6) = 255 '0xff
        buffer3(7) = 16 '0x10;
        buffer3(8) = buffer4(1)
        buffer3(9) = buffer4(0)
        buffer3(10) = 0
        buffer3(11) = 1
        buffer3(12) = 2
        buffer3(13) = bytes(1)
        buffer3(14) = bytes(0)


        Me.nsStream.Write(buffer3, 0, 15)
        Me.nsStream.Flush()

        Do
            Thread.Sleep(1)
            num = num + 1
            If num > 200 Then
                Throw New Exception("超时!")
            End If
        Loop While (Me.t1Client.Client.Available < 12)
        ReDim buffer(Me.t1Client.Client.Available - 1 + 1)
        Me.nsStream.Read(buffer, 0, Me.t1Client.Client.Available)
        Dim ii As Integer
        ii = 0


    End SyncLock



End Sub


    以上是写的过程,发送单个任务,不明白数组是根据MODBUS哪个功能码,对方是如何识别数组当中的数据的,麻烦大神解释一下,看完MODBUS协议,不知道这个是如何进行通信的,为什么数组长度偏偏是15个?
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 树莓派与pix飞控通信
    • ¥15 自动转发微信群信息到另外一个微信群
    • ¥15 outlook无法配置成功
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题