Skip to content

cModbusSlave ��ο�

? �����

cModbusSlave �� Modbus ��վ����������ʵ���࣬�ṩ�������ӡ�������վ����ά�����ݴ洢�ȹ��ܡ�


? �¼��б�

�¼�������ʱ������
OnStarted������������
OnStopped������ֹͣ��
OnClientConnect�ͻ������ӣ�TCP ģʽ��ClientID (�ͻ��� ID), RemoteAddress (Զ�̵�ַ)
OnClientDisconnect�ͻ��˶Ͽ���TCP ģʽ��ClientID (�ͻ��� ID), Reason (�Ͽ�ԭ��)
OnReadRequest�յ���ȡ����ClientID, FunctionCode, Address, Quantity
OnWriteRequest�յ�д������ClientID, FunctionCode, Data
OnError��������Description (��������)
OnDataReceived�յ����ݣ������ã�ClientID, Data() (�ֽ�����)

? ���Բο�

ProtocolType - ������

����: ModbusSlaveProtocolType (ö��)
��д: ��д

ֵ:

����ֵ˵��
MB_SLAVE_PROTOCOL_RTU1RTU ģʽ������ͨ�ţ�
MB_SLAVE_PROTOCOL_TCP2TCP ģʽ������ͨ�ţ�

ʾ��:

vb
' ����Ϊ TCP ģʽ
mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP

' ����Ϊ RTU ģʽ
mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_RTU

State - ������״̬

����: ModbusSlaveState (ö��)
��д: ֻ��

ֵ:

����ֵ˵��
MB_SLAVE_STATE_STOPPED0��ֹͣ
MB_SLAVE_STATE_STARTING1��������
MB_SLAVE_STATE_RUNNING2������
MB_SLAVE_STATE_ERROR3����״̬

ʾ��:

vb
If mbSlave.State = MB_SLAVE_STATE_RUNNING Then
    Debug.Print "������������"
End If

SlaveID - ��վ ID

����: Byte
��д: ��д

˵��: ��վ�豸��ַ��1-247����0 ��ʾ�㲥��ַ��

ʾ��:

vb
mbSlave.SlaveID = 1

Defaults - Ĭ�ϳ���

����: ModbusSlaveDefaults (�ṹ��)
��д: ֻ��

ʾ��:

vb
Debug.Print "Ĭ�϶˿�: " & mbSlave.Defaults.TCP_PORT

RTU ģʽ����

SerialPort - ��������

����: String
��д: ��д

ʾ��:

vb
mbSlave.SerialPort = "COM1"

BaudRate - ������

����: Long
��д: ��д

ʾ��:

vb
mbSlave.BaudRate = 9600

DataBits - ����λ

����: Long
��д: ��д

ʾ��:

vb
mbSlave.DataBits = 8

Parity - У��λ

����: String
��д: ��д

ֵ: "N" (��), "E" (żУ��), "O" (��У��)

ʾ��:

vb
mbSlave.Parity = "N"  ' ����

StopBits - ֹͣλ

����: Long
��д: ��д

ʾ��:

vb
mbSlave.StopBits = 1

TCP ģʽ����

Port - �����˿�

����: Long (ֻ��)
��д: ֻ��

˵��: ��ȡ��ǰ�����Ķ˿ڡ�


BindAddress - ������ַ

����: String
��д: ��д

˵��: TCP ������ַ���ã�v1.1.0+����֧������ȡֵ��

  • "0.0.0.0" ����ַ��� - ������������ӿڣ�Ĭ�ϣ�
  • "127.0.0.1" - ���������ػػ���ַ
  • "192.168.1.100" - ����ָ������ӿ�

ʾ��:

vb
' �������������ӣ�����ȫ��
mbSlave.BindAddress = "127.0.0.1"
mbSlave.Start 502

' ������������ӿڣ�Ĭ�ϣ�
mbSlave.BindAddress = "0.0.0.0"
mbSlave.Start 502

' �� Start ������ָ��������ַ
mbSlave.Start 502, "192.168.1.100"

ClientCount - ���ӵĿͻ�����

����: Long (ֻ��)
��д: ֻ��

˵��: TCP ģʽ�������ӵĿͻ���������

ʾ��:

vb
Debug.Print "��ǰ������: " & mbSlave.ClientCount

? �����ο�

Start - ����������

�﷨:

vb
Public Sub Start(Optional ByVal PortOrSerial As String = "", Optional ByVal BindAddress As String = "")

����:

��������˵��
PortOrSerialString (��ѡ)TCP ģʽ���˿ںţ�RTU ģʽ����������
BindAddressString (��ѡ)TCP ģʽ��������ַ���� "127.0.0.1"����RTU ģʽ���Դ˲�����v1.1.0+��

ʾ��:

vb
' TCP ģʽ - ����������
mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP
mbSlave.SlaveID = 1
mbSlave.Start 502

' TCP ģʽ - ָ��������ַ
mbSlave.Start 502, "127.0.0.1"  ' ����������
mbSlave.Start 502, "0.0.0.0"    ' �������нӿ�

' RTU ģʽ - ����������
mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_RTU
mbSlave.SerialPort = "COM1"
mbSlave.BaudRate = 9600
mbSlave.DataBits = 8
mbSlave.Parity = "N"
mbSlave.StopBits = 1
mbSlave.SlaveID = 1
mbSlave.Start "COM1"

StopMe - ֹͣ������

�﷨:

vb
Public Sub StopMe()

˵��: �� v1.1.0 ��ʼ��Stop ��������Ϊ StopMe�������� VB �ؼ��ֳ�ͻ��

ʾ��:

vb
mbSlave.StopMe

SetCoil - ������Ȧֵ

�﷨:

vb
Public Sub SetCoil(ByVal Address As Long, ByVal Value As Boolean)

����:

��������˵��
AddressLong��Ȧ��ַ (0-1990)
ValueBoolean��Ȧֵ

ʾ��:

vb
mbSlave.SetCoil 0, True
mbSlave.SetCoil 1, False

GetCoil - ��ȡ��Ȧֵ

�﷨:

vb
Public Function GetCoil(ByVal Address As Long) As Boolean

����:

��������˵��
AddressLong��Ȧ��ַ

����ֵ: Boolean - ��Ȧֵ

ʾ��:

vb
Dim bValue As Boolean
bValue = mbSlave.GetCoil(0)
Debug.Print "Coil[0] = " & bValue

SetDiscreteInput - ������ɢ����ֵ

�﷨:

vb
Public Sub SetDiscreteInput(ByVal Address As Long, ByVal Value As Boolean)

����:

��������˵��
AddressLong��ɢ�����ַ (0-2000)
ValueBoolean��ɢ����ֵ

ʾ��:

vb
mbSlave.SetDiscreteInput 0, True

GetDiscreteInput - ��ȡ��ɢ����ֵ

�﷨:

vb
Public Function GetDiscreteInput(ByVal Address As Long) As Boolean

����:

��������˵��
AddressLong��ɢ�����ַ

����ֵ: Boolean - ��ɢ����ֵ

ʾ��:

vb
Dim bValue As Boolean
bValue = mbSlave.GetDiscreteInput(0)

SetHoldingRegister - ���ñ��ּĴ���ֵ

�﷨:

vb
Public Sub SetHoldingRegister(ByVal Address As Long, ByVal Value As Integer)

����:

��������˵��
AddressLong�Ĵ�����ַ (0-125)
ValueInteger�Ĵ���ֵ (16λ)

ʾ��:

vb
mbSlave.SetHoldingRegister 0, 1234
mbSlave.SetHoldingRegister 1, 5678

GetHoldingRegister - ��ȡ���ּĴ���ֵ

�﷨:

vb
Public Function GetHoldingRegister(ByVal Address As Long) As Integer

����:

��������˵��
AddressLong�Ĵ�����ַ

����ֵ: Integer - �Ĵ���ֵ

ʾ��:

vb
Dim iValue As Integer
iValue = mbSlave.GetHoldingRegister(0)
Debug.Print "Reg[0] = " & iValue

SetInputRegister - ��������Ĵ���ֵ

�﷨:

vb
Public Sub SetInputRegister(ByVal Address As Long, ByVal Value As Integer)

����:

��������˵��
AddressLong�Ĵ�����ַ (0-125)
ValueInteger�Ĵ���ֵ (16λ)

ʾ��:

vb
mbSlave.SetInputRegister 0, 1234

GetInputRegister - ��ȡ����Ĵ���ֵ

�﷨:

vb
Public Function GetInputRegister(ByVal Address As Long) As Integer

����:

��������˵��
AddressLong�Ĵ�����ַ

����ֵ: Integer - �Ĵ���ֵ

ʾ��:

vb
Dim iValue As Integer
iValue = mbSlave.GetInputRegister(0)

ClearAllData - �����������

�﷨:

vb
Public Sub ClearAllData()

ʾ��:

vb
mbSlave.ClearAllData

? �¼����

OnStarted - ����������

�﷨:

vb
Event OnStarted()

ʾ��:

vb
Private Sub mbSlave_OnStarted()
    Debug.Print "������������"
    lblStatus.Caption = "������"
    cmdStart.Enabled = False
    cmdStop.Enabled = True
End Sub

OnStopped - ������ֹͣ

�﷨:

vb
Event OnStopped()

ʾ��:

vb
Private Sub mbSlave_OnStopped()
    Debug.Print "��������ֹͣ"
    lblStatus.Caption = "��ֹͣ"
    cmdStart.Enabled = True
    cmdStop.Enabled = False
End Sub

OnClientConnect - �ͻ�������

�﷨:

vb
Event OnClientConnect(ByVal ClientID As String, ByVal RemoteAddress As String)

����:

��������˵��
ClientIDString�ͻ��� ID
RemoteAddressStringԶ�̵�ַ

ʾ��:

vb
Private Sub mbSlave_OnClientConnect(ByVal ClientID As String, ByVal RemoteAddress As String)
    Debug.Print "�ͻ�������: " & ClientID & " (" & RemoteAddress & ")"
    lstClients.AddItem ClientID & " - " & RemoteAddress
End Sub

OnClientDisconnect - �ͻ��˶Ͽ�

�﷨:

vb
Event OnClientDisconnect(ByVal ClientID As String, ByVal Reason As String)

����:

��������˵��
ClientIDString�ͻ��� ID
ReasonString�Ͽ�ԭ��

ʾ��:

vb
Private Sub mbSlave_OnClientDisconnect(ByVal ClientID As String, ByVal Reason As String)
    Debug.Print "�ͻ��˶Ͽ�: " & ClientID & " - " & Reason
    
    Dim i As Long
    For i = 0 To lstClients.ListCount - 1
        If InStr(lstClients.List(i), ClientID) > 0 Then
            lstClients.RemoveItem i
            Exit For
        End If
    Next i
End Sub

OnReadRequest - ��ȡ����

�﷨:

vb
Event OnReadRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ByVal Address As Long, ByVal Quantity As Long)

˵��: ����վ���Ͷ�ȡ����ʱ������

ʾ��:

vb
Private Sub mbSlave_OnReadRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ByVal Address As Long, ByVal Quantity As Long)
    Debug.Print "��ȡ����: " & FunctionCode & ", ��ַ=" & Address & ", ����=" & Quantity
    
    ' ���ݹ����봦��
    Select Case FunctionCode
        Case MB_SLAVE_FC_READ_COILS
            Debug.Print "��ȡ��Ȧ"
        Case MB_SLAVE_FC_READ_HOLDING_REGISTERS
            Debug.Print "��ȡ���ּĴ���"
    End Select
End Sub

OnWriteRequest - �����

�﷨:

vb
Event OnWriteRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ByVal Address As Long, ByRef Data As Variant)

˵��: ����վ����д������ʱ������

ʾ��:

vb
Private Sub mbSlave_OnWriteRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ByVal Address As Long, ByRef Data As Variant)
    Debug.Print "д������: " & FunctionCode & ", ��ַ=" & Address
    
    ' ���ݹ����봦��
    Select Case FunctionCode
        Case MB_SLAVE_FC_WRITE_SINGLE_REGISTER
            Debug.Print "д�뵥���Ĵ���"
        Case MB_SLAVE_FC_WRITE_MULTIPLE_REGISTERS
            Debug.Print "д�����Ĵ���"
    End Select
End Sub

OnError - ��������

�﷨:

vb
Event OnError(ByVal Description As String)

ʾ��:

vb
Private Sub mbSlave_OnError(ByVal Description As String)
    Debug.Print "����: " & Description
    MsgBox "��������: " & Description, vbExclamation
    LogError Description
End Sub

OnDataReceived - �յ�����

�﷨:

vb
Event OnDataReceived(ByVal ClientID As String, Data() As Byte)

˵��: �����¼������ڲ鿴ԭʼ�յ������ݡ�

ʾ��:

vb
Private Sub mbSlave_OnDataReceived(ByVal ClientID As String, Data() As Byte)
    Debug.Print ClientID & " �յ� " & (UBound(Data) + 1) & " �ֽ�"
    
    Dim sHex As String
    Dim i As Long
    For i = 0 To UBound(Data)
        sHex = sHex & Hex$(Data(i)) & " "
    Next i
    Debug.Print "����: " & sHex
End Sub

? ����ʾ��

������վʾ��

vb
Option Explicit

Private WithEvents mbSlave As cModbusSlave

Private Sub Form_Load()
    Set mbSlave = New cModbusSlave
End Sub

Private Sub cmdStart_Click()
    mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP
    mbSlave.SlaveID = 1
    mbSlave.Start 502
End Sub

Private Sub cmdStop_Click()
    mbSlave.StopMe
End Sub

Private Sub mbSlave_OnStarted()
    Debug.Print "������"
    cmdStart.Enabled = False
    cmdStop.Enabled = True
End Sub

Private Sub mbSlave_OnStopped()
    Debug.Print "��ֹͣ"
    cmdStart.Enabled = True
    cmdStop.Enabled = False
End Sub

��̬���ݸ���ʾ��

vb
Option Explicit

Private WithEvents mbSlave As cModbusSlave
Private WithEvents tmrUpdate As Timer

Private Sub Form_Load()
    Set mbSlave = New cModbusSlave
    Set tmrUpdate = New Timer
    
    tmrUpdate.Interval = 1000  ' ÿ�����
    
    mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP
    mbSlave.SlaveID = 1
    mbSlave.Start 502
End Sub

Private Sub mbSlave_OnStarted()
    tmrUpdate.Enabled = True
    Debug.Print "��ʼ��̬��������"
End Sub

Private Sub tmrUpdate_Timer()
    Dim i As Long
    
    ' ����ʱ�����ݵ��Ĵ��� 0-5
    Dim dtNow As Date
    dtNow = Now
    
    mbSlave.SetHoldingRegister 0, Year(dtNow)
    mbSlave.SetHoldingRegister 1, Month(dtNow)
    mbSlave.SetHoldingRegister 2, Day(dtNow)
    mbSlave.SetHoldingRegister 3, Hour(dtNow)
    mbSlave.SetHoldingRegister 4, Minute(dtNow)
    mbSlave.SetHoldingRegister 5, Second(dtNow)
    
    ' ���´��������ݵ��Ĵ��� 10-20
    For i = 10 To 20
        Dim iValue As Integer
        iValue = ReadSensor(i - 10)  ' �Ӵ�������ȡ
        mbSlave.SetHoldingRegister i, iValue
    Next i
End Sub

Private Function ReadSensor(iSensorID As Long) As Integer
    ' ģ�⴫��������
    ReadSensor = Rnd * 10000
End Function

Private Sub Form_Unload(Cancel As Integer)
    tmrUpdate.Enabled = False
    mbSlave.StopMe
End Sub

��ͻ��˴���ʾ��

vb
Option Explicit

Private WithEvents mbSlave As cModbusSlave
Private m_Clients As Collection

Private Sub Form_Load()
    Set mbSlave = New cModbusSlave
    Set m_Clients = New Collection
    
    mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP
    mbSlave.SlaveID = 1
    mbSlave.Start 502
End Sub

Private Sub mbSlave_OnClientConnect(ByVal ClientID As String, ByVal RemoteAddress As String)
    Debug.Print "�ͻ�������: " & ClientID & " (" & RemoteAddress & ")"
    
    ' ��¼�ͻ�����Ϣ
    Dim clientInfo As New Collection
    clientInfo.Add ClientID, "ID"
    clientInfo.Add RemoteAddress, "Address"
    clientInfo.Add Now, "ConnectTime"
    
    m_Clients.Add clientInfo, ClientID
    
    ' ���ͻ�ӭ����
    mbSlave.SetHoldingRegister 100, Year(Now)
    mbSlave.SetHoldingRegister 101, Month(Now)
End Sub

Private Sub mbSlave_OnClientDisconnect(ByVal ClientID As String, ByVal Reason As String)
    Debug.Print "�ͻ��˶Ͽ�: " & ClientID
    
    On Error Resume Next
    m_Clients.Remove ClientID
    On Error GoTo 0
End Sub

Private Sub GetClientInfo(ByVal ClientID As String) As String
    On Error Resume Next
    Dim clientInfo As Collection
    Set clientInfo = m_Clients(ClientID)
    
    If Not clientInfo Is Nothing Then
        GetClientInfo = "ID: " & clientInfo("ID") & _
                        ", Address: " & clientInfo("Address") & _
                        ", ConnectTime: " & Format$(clientInfo("ConnectTime"), "hh:mm:ss")
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    mbSlave.StopMe
    Set m_Clients = Nothing
End Sub

������: 2026-01-16

������־

2026-01-16 (v1.1.0)

  • ���� BindAddress ���� - ֧������ TCP ������ַ
  • ���� Start �������� - ֧��������ʱָ��������ַ
  • ���·���������Stop() �� StopMe()
  • ����ö������������ Slave ��׺����
    • ModbusFunctionCode �� ModbusSlaveFunctionCode
    • ModbusExceptionCode �� ModbusSlaveExceptionCode
    • ModbusState �� ModbusSlaveState
    • ModbusProtocolType �� ModbusSlaveProtocolType
    • ModbusDefaults �� ModbusSlaveDefaults
  • ����ʾ��������ͬ������

VB6及其LOGO版权为微软公司所有