cModbusMaster ��ο�
? �����
cModbusMaster �� Modbus ��վ���ͻ��ˣ�ʵ���࣬�ṩ���ӵ� Modbus ��վ������/�������ݡ��Զ�����Э��֡�ȹ��ܡ�
? �¼��б�
| �¼��� | ����ʱ�� | ���� |
|---|---|---|
OnConnect | ���ӳɹ����� | �� |
OnDisconnect | �����ѹر� | �� |
OnError | �������� | Description (��������) |
OnDataReceived | �յ����ݣ������ã� | Data() (�ֽ�����) |
? ���Բο�
ProtocolType - ������
����: ModbusMasterProtocolType (ö��)
��д: ��д
ֵ:
| ���� | ֵ | ˵�� |
|---|---|---|
MB_MASTER_PROTOCOL_RTU | 1 | RTU ģʽ������ͨ�ţ� |
MB_MASTER_PROTOCOL_TCP | 2 | TCP ģʽ������ͨ�ţ� |
ʾ��:
' ����Ϊ TCP ģʽ
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
' ����Ϊ RTU ģʽ
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_RTUState - ����״̬
����: ModbusMasterState (ö��)
��д: ֻ��
ֵ:
| ���� | ֵ | ˵�� |
|---|---|---|
MB_MASTER_STATE_DISCONNECTED | 0 | �ѶϿ� |
MB_MASTER_STATE_CONNECTING | 1 | �������� |
MB_MASTER_STATE_CONNECTED | 2 | ������ |
MB_MASTER_STATE_ERROR | 3 | ����״̬ |
ʾ��:
If mbMaster.State = MB_MASTER_STATE_CONNECTED Then
Debug.Print "������"
Else
Debug.Print "���"
End IfSlaveID - ��վ ID
����: Byte
��д: ��д
˵��: Ŀ���վ���豸��ַ��1-247����0 ��ʾ�㲥��ַ��
ʾ��:
' ���ô�վ ID Ϊ 1
mbMaster.SlaveID = 1
' �㲥�����д�վ
mbMaster.SlaveID = 0ResponseTimeout - ��Ӧ��ʱ
����: Long
��д: ��д
˵��: �ȴ���վ��Ӧ�ij�ʱʱ�䣨���룩��Ĭ��Ϊ 1000ms��
ʾ��:
' ���ó�ʱΪ 3 ��
mbMaster.ResponseTimeout = 3000
' �ָ�Ĭ��ֵ
mbMaster.ResponseTimeout = 1000Defaults - Ĭ�ϳ���
����: ModbusMasterDefaults (�ṹ��)
��д: ֻ��
�ֶ�:
| �ֶ� | ���� | ˵�� |
|---|---|---|
TCP_PORT | Long | Ĭ�� TCP �˿ڣ�502�� |
RTU_DEFAULT_BAUDRATE | Long | Ĭ�ϲ����ʣ�9600�� |
RTU_DEFAULT_DATABITS | Long | Ĭ������λ��8�� |
RTU_DEFAULT_PARITY | String | Ĭ��У��λ��"N"�� |
RTU_DEFAULT_STOPBITS | Long | Ĭ��ֹͣλ��1�� |
RTU_DEFAULT_TIMEOUT | Long | Ĭ�ϳ�ʱ��1000ms�� |
MAX_PDU_SIZE | Long | ��� PDU ����253�� |
MAX_REGISTERS | Long | ���Ĵ���������125�� |
MAX_COILS | Long | �����Ȧ������2000�� |
TCP_MBAP_SIZE | Long | MBAP ͷ��С��7�� |
ʾ��:
Debug.Print "Ĭ�϶˿�: " & mbMaster.Defaults.TCP_PORT
Debug.Print "���Ĵ���: " & mbMaster.Defaults.MAX_REGISTERSRTU ģʽ����
SerialPort - ��������
����: String
��д: ��д
ʾ��:
mbMaster.SerialPort = "COM1"BaudRate - ������
����: Long
��д: ��д
ʾ��:
mbMaster.BaudRate = 9600DataBits - ����λ
����: Long
��д: ��д
ʾ��:
mbMaster.DataBits = 8Parity - У��λ
����: String
��д: ��д
ֵ: "N" (��), "E" (żУ��), "O" (��У��)
ʾ��:
mbMaster.Parity = "N" ' ����
mbMaster.Parity = "E" ' żУ��
mbMaster.Parity = "O" ' ��У��StopBits - ֹͣλ
����: Long
��д: ��д
ʾ��:
mbMaster.StopBits = 1 ' 1 ��ֹͣλ
mbMaster.StopBits = 2 ' 2 ��ֹͣλTCP ģʽ����
TCPHost - TCP ������ַ
����: String
��д: ��д
ʾ��:
mbMaster.TCPHost = "192.168.1.100"
mbMaster.TCPHost = "127.0.0.1"TCPPort - TCP �˿�
����: Long
��д: ��д
ʾ��:
mbMaster.TCPPort = 502 ' Modbus Ĭ�϶˿�? �����ο�
Connect - ���Ӵ�վ
�:
Public Sub Connect(Optional ByVal SerialPort As String = "", _
Optional ByVal TCPHost As String = "", _
Optional ByVal TCPPort As Long = 0)����:
| ���� | ���� | ˵�� |
|---|---|---|
SerialPort | String (��ѡ�� | RTU ģʽ���������ƣ�COM1, COM2...�� |
TCPHost | String (��ѡ�� | TCP ģʽ��������ַ�� IP |
TCPPort | Long (��ѡ�� | TCP ģʽ���˿ں� |
ʾ��:
' 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 - �Ͽ�����
�:
Public Sub Disconnect()ʾ��:
mbMaster.DisconnectReadCoils - ��ȡ��Ȧ (0x01)
�:
Public Function ReadCoils(ByVal StartAddress As Long, ByVal Quantity As Long) As Boolean()����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ��Ȧ��ַ��0-based�� |
Quantity | Long | Ҫ��ȡ����Ȧ������1-2000�� |
����ֵ: Boolean() - ��Ȧֵ����
ʾ��:
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 iReadDiscreteInputs - ��ȡ��ɢ���� (0x02)
�:
Public Function ReadDiscreteInputs(ByVal StartAddress As Long, ByVal Quantity As Long) As Boolean()����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ��ɢ�����ַ��0-based�� |
Quantity | Long | Ҫ��ȡ����ɢ����������1-2000�� |
����ֵ: Boolean() - ��ɢ����ֵ����
ʾ��:
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 iReadHoldingRegisters - ��ȡ���ּĴ��� (0x03)
�:
Public Function ReadHoldingRegisters(ByVal StartAddress As Long, ByVal Quantity As Long) As Integer()����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ�Ĵ�����ַ��0-based�� |
Quantity | Long | Ҫ��ȡ�ļĴ���������1-125�� |
����ֵ: Integer() - 16λ�Ĵ���ֵ����
ʾ��:
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 iReadInputRegisters - ��ȡ����Ĵ��� (0x04)
�:
Public Function ReadInputRegisters(ByVal StartAddress As Long, ByVal Quantity As Long) As Integer()����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ�Ĵ�����ַ��0-based�� |
Quantity | Long | Ҫ��ȡ�ļĴ���������1-125�� |
����ֵ: Integer() - 16λ�Ĵ���ֵ����
ʾ��:
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 iWriteSingleCoil - д�뵥����Ȧ (0x05)
�:
Public Function WriteSingleCoil(ByVal Address As Long, ByVal Value As Boolean) As Boolean����:
| ���� | ���� | ˵�� |
|---|---|---|
Address | Long | ��Ȧ��ַ |
Value | Boolean | Ҫд���ֵ��True/False�� |
����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False
ʾ��:
Dim bSuccess As Boolean
bSuccess = mbMaster.WriteSingleCoil(0, True)
If bSuccess Then
Debug.Print "д��ɹ�"
Else
Debug.Print "д��ʧ��"
End IfWriteMultipleCoils - д������Ȧ (0x0F)
�:
Public Function WriteMultipleCoils(ByVal StartAddress As Long, ByRef Values() As Boolean) As Boolean����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ��Ȧ��ַ |
Values() | Boolean() | Ҫд�����Ȧֵ���� |
����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False
ʾ��:
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)
�:
Public Function WriteSingleRegister(ByVal Address As Long, ByVal Value As Integer) As Boolean����:
| ���� | ���� | ˵�� |
|---|---|---|
Address | Long | �Ĵ�����ַ |
Value | Integer | Ҫд���ֵ��16λ�� |
����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False
ʾ��:
Dim bSuccess As Boolean
bSuccess = mbMaster.WriteSingleRegister(0, 1234)
If bSuccess Then
Debug.Print "д��ɹ�"
Else
Debug.Print "д��ʧ��"
End IfWriteMultipleRegisters - д�����Ĵ��� (0x10)
�:
Public Function WriteMultipleRegisters(ByVal StartAddress As Long, ByRef Values() As Integer) As Boolean����:
| ���� | ���� | ˵�� |
|---|---|---|
StartAddress | Long | ��ʼ�Ĵ�����ַ |
Values() | Integer() | Ҫд��ļĴ���ֵ���� |
����ֵ: Boolean - �ɹ����� True��ʧ�ܷ��� False
ʾ��:
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 - ���ӳɹ�
�:
Event OnConnect()ʾ��:
Private Sub mbMaster_OnConnect()
Debug.Print "�ѳɹ����ӵ� Modbus ��վ"
lblStatus.Caption = "������"
cmdRead.Enabled = True
cmdWrite.Enabled = True
End SubOnDisconnect - ���ӶϿ�
�:
Event OnDisconnect()ʾ��:
Private Sub mbMaster_OnDisconnect()
Debug.Print "�����ѶϿ�"
lblStatus.Caption = "�ѶϿ�"
cmdRead.Enabled = False
cmdWrite.Enabled = False
End SubOnError - ��������
�:
Event OnError(ByVal Description As String)ʾ��:
Private Sub mbMaster_OnError(ByVal Description As String)
Debug.Print "����: " & Description
' ��ʾ������ʾ
MsgBox "��������: " & Description, vbExclamation
' ��¼������־
LogError Description
' ���� UI
lblStatus.Caption = "����"
End SubOnDataReceived - �յ�����
�:
Event OnDataReceived(Data() As Byte)˵��: �����¼������ڲ鿴ԭʼ�յ������ݡ�
ʾ��:
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? ����ʾ��
������վʾ��
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����������վ
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���ݲɼ�ʾ��
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 - ����ʾ��������ͬ������