Skip to content

cModbusMaster ��ο�

? �����

cModbusMaster �� Modbus ��վ���ͻ��ˣ�ʵ���࣬�ṩ���ӵ� Modbus ��վ������/�������ݡ��Զ�����Э��֡�ȹ��ܡ�


? �¼��б�

�¼�������ʱ������
OnConnect���ӳɹ�������
OnDisconnect�����ѹر���
OnError��������Description (��������)
OnDataReceived�յ����ݣ������ã�Data() (�ֽ�����)

? ���Բο�

ProtocolType - ������

����: ModbusMasterProtocolType (ö��)
��д: ��д

ֵ:

����ֵ˵��
MB_MASTER_PROTOCOL_RTU1RTU ģʽ������ͨ�ţ�
MB_MASTER_PROTOCOL_TCP2TCP ģʽ������ͨ�ţ�

ʾ��:

vb
' ����Ϊ TCP ģʽ
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP

' ����Ϊ RTU ģʽ
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_RTU

State - ����״̬

����: ModbusMasterState (ö��)
��д: ֻ��

ֵ:

����ֵ˵��
MB_MASTER_STATE_DISCONNECTED0�ѶϿ�
MB_MASTER_STATE_CONNECTING1��������
MB_MASTER_STATE_CONNECTED2������
MB_MASTER_STATE_ERROR3����״̬

ʾ��:

vb
If mbMaster.State = MB_MASTER_STATE_CONNECTED Then
    Debug.Print "������"
Else
    Debug.Print "���"
End If

SlaveID - ��վ ID

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

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

ʾ��:

vb
' ���ô�վ ID Ϊ 1
mbMaster.SlaveID = 1

' �㲥�����д�վ
mbMaster.SlaveID = 0

ResponseTimeout - ��Ӧ��ʱ

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

˵��: �ȴ���վ��Ӧ�ij�ʱʱ�䣨���룩��Ĭ��Ϊ 1000ms��

ʾ��:

vb
' ���ó�ʱΪ 3 ��
mbMaster.ResponseTimeout = 3000

' �ָ�Ĭ��ֵ
mbMaster.ResponseTimeout = 1000

Defaults - Ĭ�ϳ���

����: ModbusMasterDefaults (�ṹ��)
��д: ֻ��

�ֶ�:

�ֶ�����˵��
TCP_PORTLongĬ�� TCP �˿ڣ�502��
RTU_DEFAULT_BAUDRATELongĬ�ϲ����ʣ�9600��
RTU_DEFAULT_DATABITSLongĬ������λ��8��
RTU_DEFAULT_PARITYStringĬ��У��λ��"N"��
RTU_DEFAULT_STOPBITSLongĬ��ֹͣλ��1��
RTU_DEFAULT_TIMEOUTLongĬ�ϳ�ʱ��1000ms��
MAX_PDU_SIZELong��� PDU ����253��
MAX_REGISTERSLong���Ĵ���������125��
MAX_COILSLong�����Ȧ������2000��
TCP_MBAP_SIZELongMBAP ͷ��С��7��

ʾ��:

vb
Debug.Print "Ĭ�϶˿�: " & mbMaster.Defaults.TCP_PORT
Debug.Print "���Ĵ���: " & mbMaster.Defaults.MAX_REGISTERS

RTU ģʽ����

SerialPort - ��������

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

ʾ��:

vb
mbMaster.SerialPort = "COM1"

BaudRate - ������

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

ʾ��:

vb
mbMaster.BaudRate = 9600

DataBits - ����λ

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

ʾ��:

vb
mbMaster.DataBits = 8

Parity - У��λ

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

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

ʾ��:

vb
mbMaster.Parity = "N"  ' ����
mbMaster.Parity = "E"  ' żУ��
mbMaster.Parity = "O"  ' ����

StopBits - ֹͣλ

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

ʾ��:

vb
mbMaster.StopBits = 1  ' 1 ��ֹͣλ
mbMaster.StopBits = 2  ' 2 ��ֹͣλ

TCP ģʽ����

TCPHost - TCP ������ַ

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

ʾ��:

vb
mbMaster.TCPHost = "192.168.1.100"
mbMaster.TCPHost = "127.0.0.1"

TCPPort - TCP �˿�

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

ʾ��:

vb
mbMaster.TCPPort = 502  ' Modbus Ĭ�϶˿�

? �����ο�

Connect - ���Ӵ�վ

�﷨:

vb
Public Sub Connect(Optional ByVal SerialPort As String = "", _
                   Optional ByVal TCPHost As String = "", _
                   Optional ByVal TCPPort As Long = 0)

����:

��������˵��
SerialPortString (��ѡ��RTU ģʽ���������ƣ�COM1, COM2...��
TCPHostString (��ѡ��TCP ģʽ��������ַ�� IP
TCPPortLong (��ѡ��TCP ģʽ���˿ں�

ʾ��:

vb
' TCP ����
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
mbMaster.TCPHost = "192.168.1.100"
mbMaster.TCPPort = 502
mbMaster.SlaveID = 1
mbMaster.Connect

' RTU ����
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_RTU
mbMaster.SerialPort = "COM1"
mbMaster.BaudRate = 9600
mbMaster.DataBits = 8
mbMaster.Parity = "N"
mbMaster.StopBits = 1
mbMaster.SlaveID = 1
mbMaster.Connect "COM1"

Disconnect - �Ͽ�����

�﷨:

vb
Public Sub Disconnect()

ʾ��:

vb
mbMaster.Disconnect

ReadCoils - ��ȡ��Ȧ (0x01)

�﷨:

vb
Public Function ReadCoils(ByVal StartAddress As Long, ByVal Quantity As Long) As Boolean()

����:

��������˵��
StartAddressLong��ʼ��Ȧ��ַ��0-based��
QuantityLongҪ��ȡ����Ȧ������1-2000��

����ֵ: Boolean() - ��Ȧֵ����

ʾ��:

vb
Dim baCoils() As Boolean
baCoils = mbMaster.ReadCoils(0, 10)

Dim i As Long
For i = 0 To UBound(baCoils)
    Debug.Print "Coil[" & i & "] = " & baCoils(i)
Next i

ReadDiscreteInputs - ��ȡ��ɢ���� (0x02)

�﷨:

vb
Public Function ReadDiscreteInputs(ByVal StartAddress As Long, ByVal Quantity As Long) As Boolean()

����:

��������˵��
StartAddressLong��ʼ��ɢ�����ַ��0-based��
QuantityLongҪ��ȡ����ɢ����������1-2000��

����ֵ: Boolean() - ��ɢ����ֵ����

ʾ��:

vb
Dim baInputs() As Boolean
baInputs = mbMaster.ReadDiscreteInputs(0, 10)

Dim i As Long
For i = 0 To UBound(baInputs)
    Debug.Print "Input[" & i & "] = " & baInputs(i)
Next i

ReadHoldingRegisters - ��ȡ���ּĴ��� (0x03)

�﷨:

vb
Public Function ReadHoldingRegisters(ByVal StartAddress As Long, ByVal Quantity As Long) As Integer()

����:

��������˵��
StartAddressLong��ʼ�Ĵ�����ַ��0-based��
QuantityLongҪ��ȡ�ļĴ���������1-125��

����ֵ: Integer() - 16λ�Ĵ���ֵ����

ʾ��:

vb
Dim iRegs() As Integer
iRegs = mbMaster.ReadHoldingRegisters(0, 10)

Dim i As Long
For i = 0 To UBound(iRegs)
    Debug.Print "Reg[" & i & "] = " & iRegs(i)
Next i

ReadInputRegisters - ��ȡ����Ĵ��� (0x04)

�﷨:

vb
Public Function ReadInputRegisters(ByVal StartAddress As Long, ByVal Quantity As Long) As Integer()

����:

��������˵��
StartAddressLong��ʼ�Ĵ�����ַ��0-based��
QuantityLongҪ��ȡ�ļĴ���������1-125��

����ֵ: Integer() - 16λ�Ĵ���ֵ����

ʾ��:

vb
Dim iRegs() As Integer
iRegs = mbMaster.ReadInputRegisters(0, 10)

Dim i As Long
For i = 0 To UBound(iRegs)
    Debug.Print "InputReg[" & i & "] = " & iRegs(i)
Next i

WriteSingleCoil - д�뵥����Ȧ (0x05)

�﷨:

vb
Public Function WriteSingleCoil(ByVal Address As Long, ByVal Value As Boolean) As Boolean

����:

��������˵��
AddressLong��Ȧ��ַ
ValueBooleanҪд���ֵ��True/False��

����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False

ʾ��:

vb
Dim bSuccess As Boolean
bSuccess = mbMaster.WriteSingleCoil(0, True)

If bSuccess Then
    Debug.Print "д��ɹ�"
Else
    Debug.Print "д��ʧ��"
End If

WriteMultipleCoils - д������Ȧ (0x0F)

�﷨:

vb
Public Function WriteMultipleCoils(ByVal StartAddress As Long, ByRef Values() As Boolean) As Boolean

����:

��������˵��
StartAddressLong��ʼ��Ȧ��ַ
Values()Boolean()Ҫд�����Ȧֵ����

����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False

ʾ��:

vb
Dim baCoils(4) As Boolean
baCoils(0) = True
baCoils(1) = False
baCoils(2) = True
baCoils(3) = False
baCoils(4) = True

Dim bSuccess As Boolean
bSuccess = mbMaster.WriteMultipleCoils(0, baCoils)

WriteSingleRegister - д�뵥���Ĵ��� (0x06)

�﷨:

vb
Public Function WriteSingleRegister(ByVal Address As Long, ByVal Value As Integer) As Boolean

����:

��������˵��
AddressLong�Ĵ�����ַ
ValueIntegerҪд���ֵ��16λ��

����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False

ʾ��:

vb
Dim bSuccess As Boolean
bSuccess = mbMaster.WriteSingleRegister(0, 1234)

If bSuccess Then
    Debug.Print "д��ɹ�"
Else
    Debug.Print "д��ʧ��"
End If

WriteMultipleRegisters - д�����Ĵ��� (0x10)

�﷨:

vb
Public Function WriteMultipleRegisters(ByVal StartAddress As Long, ByRef Values() As Integer) As Boolean

����:

��������˵��
StartAddressLong��ʼ�Ĵ�����ַ
Values()Integer()Ҫд��ļĴ���ֵ����

����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False

ʾ��:

vb
Dim iRegs(4) As Integer
iRegs(0) = 100
iRegs(1) = 200
iRegs(2) = 300
iRegs(3) = 400
iRegs(4) = 500

Dim bSuccess As Boolean
bSuccess = mbMaster.WriteMultipleRegisters(0, iRegs)

? �¼����

OnConnect - ���ӳɹ�

�﷨:

vb
Event OnConnect()

ʾ��:

vb
Private Sub mbMaster_OnConnect()
    Debug.Print "�ѳɹ����ӵ� Modbus ��վ"
    lblStatus.Caption = "������"
    cmdRead.Enabled = True
    cmdWrite.Enabled = True
End Sub

OnDisconnect - ���ӶϿ�

�﷨:

vb
Event OnDisconnect()

ʾ��:

vb
Private Sub mbMaster_OnDisconnect()
    Debug.Print "�����ѶϿ�"
    lblStatus.Caption = "�ѶϿ�"
    cmdRead.Enabled = False
    cmdWrite.Enabled = False
End Sub

OnError - ��������

�﷨:

vb
Event OnError(ByVal Description As String)

ʾ��:

vb
Private Sub mbMaster_OnError(ByVal Description As String)
    Debug.Print "����: " & Description
    
    ' ��ʾ������ʾ
    MsgBox "��������: " & Description, vbExclamation
    
    ' ��¼������־
    LogError Description
    
    ' ���� UI
    lblStatus.Caption = "����"
End Sub

OnDataReceived - �յ�����

�﷨:

vb
Event OnDataReceived(Data() As Byte)

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

ʾ��:

vb
Private Sub mbMaster_OnDataReceived(Data() As Byte)
    Debug.Print "�յ� " & (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 mbMaster As cModbusMaster

Private Sub Form_Load()
    Set mbMaster = New cModbusMaster
    mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
    mbMaster.TCPHost = "127.0.0.1"
    mbMaster.TCPPort = 502
    mbMaster.SlaveID = 1
End Sub

Private Sub cmdConnect_Click()
    mbMaster.Connect
End Sub

Private Sub cmdRead_Click()
    Dim iRegs() As Integer
    iRegs = mbMaster.ReadHoldingRegisters(0, 10)
    
    Dim i As Long
    For i = 0 To UBound(iRegs)
        lstRegisters.AddItem "Reg[" & i & "] = " & iRegs(i)
    Next i
End Sub

Private Sub mbMaster_OnConnect()
    Debug.Print "������"
End Sub

Private Sub mbMaster_OnDisconnect()
    Debug.Print "�ѶϿ�"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    mbMaster.Disconnect
End Sub

����������վ

vb
Option Explicit

Private WithEvents mbMaster As cModbusMaster
Private WithEvents tmrReconnect As Timer
Private m_bAutoReconnect As Boolean

Private Sub Form_Load()
    Set mbMaster = New cModbusMaster
    Set tmrReconnect = New Timer
    
    tmrReconnect.Interval = 5000  ' 5 �������
    m_bAutoReconnect = True
    
    mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
    mbMaster.TCPHost = "127.0.0.1"
    mbMaster.TCPPort = 502
    mbMaster.SlaveID = 1
    
    ConnectToServer
End Sub

Private Sub ConnectToServer()
    If mbMaster.State = MB_MASTER_STATE_DISCONNECTED Then
        Debug.Print "��������..."
        mbMaster.Connect
    End If
End Sub

Private Sub mbMaster_OnConnect()
    Debug.Print "������"
    tmrReconnect.Enabled = False
End Sub

Private Sub mbMaster_OnDisconnect()
    Debug.Print "���ӶϿ�"
    
    If m_bAutoReconnect Then
        Debug.Print "5 �������..."
        tmrReconnect.Enabled = True
    End If
End Sub

Private Sub tmrReconnect_Timer()
    tmrReconnect.Enabled = False
    ConnectToServer
End Sub

Private Sub Form_Unload(Cancel As Integer)
    tmrReconnect.Enabled = False
    mbMaster.Disconnect
End Sub

���ݲɼ�ʾ��

vb
Option Explicit

Private WithEvents mbMaster As cModbusMaster
Private WithEvents tmrPoll As Timer

Private Sub Form_Load()
    Set mbMaster = New cModbusMaster
    Set tmrPoll = New Timer
    
    tmrPoll.Interval = 1000  ' ÿ��ɼ�һ��
    
    mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
    mbMaster.TCPHost = "127.0.0.1"
    mbMaster.TCPPort = 502
    mbMaster.SlaveID = 1
    
    mbMaster.Connect
End Sub

Private Sub mbMaster_OnConnect()
    Debug.Print "�����ӣ���ʼ���ݲɼ�"
    tmrPoll.Enabled = True
End Sub

Private Sub tmrPoll_Timer()
    On Error Resume Next
    
    Dim iRegs() As Integer
    iRegs = mbMaster.ReadHoldingRegisters(0, 10)
    
    If UBound(iRegs) >= 0 Then
        ' ������ʾ
        UpdateDisplay iRegs
        
        ' ���浽���ݿ���ļ�
        SaveToDatabase iRegs
    End If
End Sub

Private Sub UpdateDisplay(ByRef iRegs() As Integer)
    Dim i As Long
    For i = 0 To UBound(iRegs)
        Dim sKey As String
        sKey = "txtReg" & i
        
        On Error Resume Next
        Dim txtBox As Control
        Set txtBox = Me.Controls(sKey)
        If Not txtBox Is Nothing Then
            txtBox.Text = iRegs(i)
        End If
        On Error GoTo 0
    Next i
End Sub

Private Sub Form_Unload(Cancel As Integer)
    tmrPoll.Enabled = False
    mbMaster.Disconnect
End Sub

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

������־

2026-01-16 (v1.1.0)

  • ����ö��������ModbusProtocolType �� ModbusMasterProtocolType
  • ����״̬ö�٣�ModbusState �� ModbusMasterState
  • ���½ṹ��������ModbusDefaults �� ModbusMasterDefaults
  • ����ʾ��������ͬ������

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