⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clsmodbus.txt

📁 Modbus通讯协议
💻 TXT
字号:
Option Strict Off
Option Explicit On
Imports System.Text
Public Class ClsModbus
#Region "声明"
    Private ASCIIString As String 'ASCIIS格式定义
    Private RTuStrs As String 'RTU格式定义串
    Private RTUByte() As Byte  'RTU格式定义
#End Region
#Region "枚举"
    ' 此枚举提供Modbus功能值。
    Public Enum ModbusFunction
        ModbusFunction01 = &H1 ' READ COIL STATUS
        ModbusFunction02 = &H2 'READ INPUT STATUS
        ModbusFunction03 = &H3 'READ HOLDING REGISTER
        ModbusFunction04 = &H4 'READ INPUT REGISTER
        ModbusFunction05 = &H5 'WRITE SINGLE COIL
        ModbusFunction06 = &H6 'WRITE SINGLE REGISTER
        ModbusFunction15 = &H15 'WRITE MULTIPLE COIL
        ModbusFunction16 = &H16 'WRITE MULTIPLE REGISTER 
    End Enum
#End Region

#Region "属性"
    ' 返回ASCIIS格式字符串
    Public ReadOnly Property ASCII() As String
        Get
            Return ASCIIString
        End Get
    End Property
    ' 返回只读属性RTU格式位 
    Public Overridable ReadOnly Property RTU() As Byte()
        Get
            Return RTUByte
        End Get
    End Property
    ' 返回只读属性RTU格式字符串  
    Public ReadOnly Property RTUString() As String
        Get
            Return RTuStrs
        End Get
    End Property

#End Region
#Region "方法"
    ' ASCIIS命令格式字符串
    '|?起始位(:)|SlaveAdress(0A)|Function(04)|First adress(0001)|number of registers(0005)|LRC 16|VbCRLF(结束位回车换行)
    Public Sub GetASII(ByVal SlaveAdress As String, ByVal SendFunction As ModbusFunction, _
                        ByVal Firstadress As String, ByVal No_of_registers As String)
        Dim SendFunctionStr As String = ""
        Select Case SendFunction
            Case ModbusFunction.ModbusFunction01
                SendFunctionStr = "01"
            Case ModbusFunction.ModbusFunction02
                SendFunctionStr = "02"
            Case ModbusFunction.ModbusFunction03
                SendFunctionStr = "03"
            Case ModbusFunction.ModbusFunction04
                SendFunctionStr = "04"
            Case ModbusFunction.ModbusFunction06
                SendFunctionStr = "06"
            Case ModbusFunction.ModbusFunction15
                SendFunctionStr = "15"
            Case ModbusFunction.ModbusFunction16
                SendFunctionStr = "16"
        End Select
        ASCIIString = Trim(SlaveAdress) & Trim(SendFunctionStr) & Trim(Firstadress) & Trim(No_of_registers)
        ASCIIString = ":" & ASCIIString & LRC(ASCIIString) & vbCrLf
    End Sub
    ' RTU命令格式字符串
    '|SlaveAdress(0A)|Function(04)|First adress(0001)|number of registers(0005)|CRC 16|
    Public Sub GetRtu(ByVal SlaveAdress As String, ByVal SendFunction As ModbusFunction, _
                      ByVal Firstadress As String, ByVal No_of_registers As String)
        Dim SendFunctionStr As String = ""
        Dim RTUSTr As String = ""
        Select Case SendFunction
            Case ModbusFunction.ModbusFunction01
                SendFunctionStr = "01"
            Case ModbusFunction.ModbusFunction02
                SendFunctionStr = "02"
            Case ModbusFunction.ModbusFunction03
                SendFunctionStr = "03"
            Case ModbusFunction.ModbusFunction04
                SendFunctionStr = "04"
            Case ModbusFunction.ModbusFunction06
                SendFunctionStr = "06"
            Case ModbusFunction.ModbusFunction15
                SendFunctionStr = "15"
            Case ModbusFunction.ModbusFunction16
                SendFunctionStr = "16"
        End Select
        Try
            RTUSTr = Trim(SlaveAdress) & Trim(SendFunctionStr) & Trim(Firstadress) & Trim(No_of_registers)
            RTUSTr = Trim(RTUSTr & getCrc(RTUSTr))
            RTuStrs = RTUSTr
            Dim bl As Integer
            Dim n As Integer
            bl = Len(RTUSTr) / 2
            ReDim RTUByte(bl + 1)                                '按命令长度重新定义数组
            For n = 0 To bl - 1
                RTUByte(n) = CLng("&H" & Mid(RTUSTr, 2 * n + 1, 2)) '分解命令为字节
            Next
        Catch ex As Exception
            Exit Try
        End Try
    End Sub
#End Region
#Region "函数"
    'ASCII转换函数                                   ASCIIStringToBytes
    Public Function ASCIIStringToBytes(ByVal str As String) As Byte 'ASCII转换函数
        Dim fx() As Byte
        Dim strInput As String
        Dim BL As Byte                              '数据长度
        '发送的数据
        Dim n As Byte                               '循环量
        Dim i As Integer, Buf As New StringBuilder
        strInput = str '

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -