?? clsmodbus.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 + -