您当前的位置:五五电子网电子知识plc技术PLC入门modbus vb源程序 可以读写寄存器 正文
modbus vb源程序 可以读写寄存器

modbus vb源程序 可以读写寄存器

点击数:7773 次   录入时间:03-04 12:01:37   整理:http://www.55dianzi.com   PLC入门
      If INByte(UBound(INByte) - 1) = btLoCRC And INByte(UBound(INByte)) = btHiCRC Then
                   '校验正确
       '////////////////////////////////////
        For i = 3 To UBound(INByte) - 2 Step 2
        Data = "&h" + Hex(INByte(i)) + Hex(INByte(i + 1))
      ' Buf = Buf + Hex(INByte(i)) + Chr(32)
        Buf = Buf + Str(Data)    '转换为十进制显示
        Next i
        List1.AddItem Buf
       End If
    End If
  MSComm1.InBufferCount = 0  '请缓存
 
End If
End Sub


Private Sub Timer1_Timer()
'定时发送命令
 Dim tbisend(7) As Byte
 Dim crc                 '定时1s
 Dim btLoCRC As Byte, btHiCRC As Byte
 Dim Buf As String
      If MSComm1.PortOpen = True Then
         tbisend(0) = "&h" + Hex(Val(Text1.Text)) '地址码
         tbisend(1) = "&h" + Hex(3)  '功能码   读寄存器
         tbisend(2) = "&h" + Hex(0)  '起始地址高位
         tbisend(3) = "&h" + Hex(0)  '起始地址低位
         tbisend(4) = "&h" + Hex(0)  '寄存器个数高位
         tbisend(5) = "&h" + Hex(Combo6.ListIndex + 1) '寄存器个数低位
         crc = CRC16(tbisend, 6, btLoCRC, btHiCRC)
         tbisend(6) = "&h" + Hex(btLoCRC) 'CRC高位
         tbisend(7) = "&h" + Hex(btHiCRC) 'CRC低位
         '发送数据
         MSComm1.Output = tbisend
      End If
End Sub

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Function CRC16(Data() As Byte, no As Integer, CRC16Lo As Byte, CRC16Hi As Byte) As String
   
      Dim CL As Byte, CH As Byte                '多项式码&HA001

      Dim SaveHi As Byte, SaveLo As Byte

      Dim i As Integer

      Dim Flag As Integer

      CRC16Lo = &HFF

      CRC16Hi = &HFF

      CL = &H1

      CH = &HA0

      For i = 0 To no - 1

        CRC16Lo = CRC16Lo Xor Data(i) '每一个数据与CRC寄存器进行异或

        For Flag = 0 To 7

          SaveHi = CRC16Hi

          SaveLo = CRC16Lo

          CRC16Hi = CRC16Hi \ 2            '高位右移一位

          CRC16Lo = CRC16Lo \ 2            '低位右移一位

          If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1

            CRC16Lo = CRC16Lo Or &H80      '则低位字节右移后前面补1

          End If                           '否则自动补0

          If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或

            CRC16Hi = CRC16Hi Xor CH

            CRC16Lo = CRC16Lo Xor CL

          End If

        Next Flag

      Next i

      Dim ReturnData(1) As Byte

      ReturnData(0) = CRC16Hi              'CRC高位

      ReturnData(1) = CRC16Lo              'CRC低位

      CRC16 = ReturnData

    End Function

'CRC低位字节值表
Function GetCRCLo(ind As Long) As Byte
 
 GetCRCLo = Choose(ind + 1, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _
                            &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, _
                           &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _
                           &H0, &HC1, &H81, &H40, &H1, &HC1, &H80, &H41, &H0, &HC1, _
                           &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, _
                           &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, _
                           &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H81, &H41, _
                           &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _
                           &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, _
                           &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, _
                           &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _
                           &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _

上一页  [1] [2] [3] [4]  下一页


本文关键字:寄存器  PLC入门plc技术 - PLC入门

上一篇:千兆以太网介绍