Skip to content

Modbus ��⿪���ĵ�

? Modbus ��� - ���� cWinsock ��װ�� VB6 Modbus ʵ�ֿ⣬�� woeoio@qq.com ʹ�� claude ai ��������

? Ŀ¼


����

Modbus �����һ��Ϊ VB6 ��Ƶ������� Modbus ͨ�ſ⣬��ȫ���� Modbus Э��淶��RTU �� TCP���������� cWinsock ��ʵ�֣��ṩ�˼�����õ� API �������Ĺ���֧�֡�

? ��Ҫ����

  • ? ����ʵ�� - ����ؼ���ֱ��ʹ�ö�����
  • ? ����ʽ��� - ��վ��Master���ʹ�վ��Slave��������⣬ְ������
  • ? ����Э��֧�� - ֧�� Modbus RTU �� TCP ����ģʽ
  • ? ���������� - ֧�����б�׼ Modbus �����루0x01-0x10, 0x16, 0x17��
  • ? ��Ч������ - ʹ�� cByteBuffer Ԥ�����ֽڻ������������ڴ�������
  • ?? �Զ����� - �Զ����� MBAP ͷ��TCP���� CRC У�飨RTU��
  • ? ���ݴ洢 - ��վ�������ݴ洢����֧�ֶ�̬��չ
  • ? �¼����� - �������¼����ƣ����ɴ������ӡ����ݺʹ���

��������

1?? ������ְ����� ?

������ģ�黯��ƣ���վ�ʹ�վ��ȫ������

vb
' cModbusMaster - Modbus ��վ���ͻ��ˣ�
Set mbMaster = New cModbusMaster
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
mbMaster.TCPHost = "192.168.1.100"
mbMaster.TCPPort = 502
mbMaster.Connect

' cModbusSlave - Modbus ��վ����������
Set mbSlave = New cModbusSlave
mbSlave.ProtocolType = MB_SLAVE_PROTOCOL_TCP
mbSlave.SlaveID = 1
mbSlave.BindAddress = "0.0.0.0"  ' �������нӿڣ�Ĭ�ϣ�
mbSlave.Start 502

' cByteBuffer - ��Ч�ֽڻ��������ڲ�ʹ�ã�
' cWinsock - �ײ� Socket ��װ

2?? ˫Э��֧�� ?

���ͬʱ֧�� Modbus RTU �� TCP ����ģʽ��

TCP ģʽ

vb
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_TCP
mbMaster.TCPHost = "192.168.1.100"
mbMaster.TCPPort = 502
mbMaster.Connect

RTU ģʽ

vb
mbMaster.ProtocolType = MB_MASTER_PROTOCOL_RTU
mbMaster.SerialPort = "COM1"
mbMaster.BaudRate = 9600
mbMaster.DataBits = 8
mbMaster.Parity = "N"
mbMaster.StopBits = 1
mbMaster.Connect "COM1"

3?? �����Ĺ�����֧�� ?

֧�����б�׼ Modbus �����룺

����������˵��
0x01Read Coils��ȡ��Ȧ
0x02Read Discrete Inputs��ȡ��ɢ����
0x03Read Holding Registers��ȡ���ּĴ���
0x04Read Input Registers��ȡ����Ĵ���
0x05Write Single Coilд�뵥����Ȧ
0x06Write Single Registerд�뵥���Ĵ���
0x0FWrite Multiple Coilsд������Ȧ
0x10Write Multiple Registersд�����Ĵ���
0x16Mask Write Register����д�Ĵ���
0x17Read/Write Multiple Registers��д����Ĵ���

4?? ��վ���ݴ洢 ?

��վ���������ݴ洢����֧�ֶ�̬��չ��

vb
' ������Ȧ
mbSlave.SetCoil 0, True
mbSlave.SetCoil 1, False

' ���üĴ���
mbSlave.SetHoldingRegister 0, 1234
mbSlave.SetHoldingRegister 1, 5678

' ��ȡ����
Dim bCoil As Boolean
bCoil = mbSlave.GetCoil(0)

Dim iReg As Integer
iReg = mbSlave.GetHoldingRegister(0)

5?? �Զ�Э�鴦�� ??

TCP ģʽ - MBAP ͷ�Զ�����

vb
' ��վ�Զ����� MBAP ͷ
' ��վ�Զ����� MBAP ͷ
' �����ֶ����� Transaction ID��Protocol ID��Length��Unit ID

RTU ģʽ - CRC У���Զ�����

vb
' ��վ�Զ����㲢���� CRC16
' ��վ�Զ���֤ CRC16
' �����ֶ�����У��

6?? �¼�����ģ�� ?

��վ�¼�

vb
Event OnConnect()                    ' ���ӳɹ�
Event OnDisconnect()                 ' ���ӶϿ�
Event OnError(ByVal Description As String)  ' ��������
Event OnDataReceived(Data() As Byte)  ' �յ�����

��վ�¼�

vb
Event OnStarted()                              ' ����������
Event OnStopped()                               ' ������ֹͣ
Event OnClientConnect(ByVal ClientID As String, ByVal RemoteAddress As String)  ' �ͻ�������
Event OnClientDisconnect(ByVal ClientID As String, ByVal Reason As String)  ' �ͻ��˶Ͽ�
Event OnReadRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ...)  ' ��ȡ����
Event OnWriteRequest(ByVal ClientID As String, ByVal FunctionCode As ModbusSlaveFunctionCode, ...)  ' �����
Event OnError(ByVal Description As String)  ' ��������
Event OnDataReceived(ByVal ClientID As String, Data() As Byte)  ' �յ�����

7?? �쳣��֧�� ??

������ Modbus �쳣��֧�֣�

�쳣������˵��
0x01Illegal Function�Ƿ�������
0x02Illegal Data Address�Ƿ����ݵ�ַ
0x03Illegal Data Value�Ƿ�����ֵ
0x04Slave Device Failure��վ�豸����
0x05Acknowledgeȷ��
0x06Slave Device Busy��վ�豸æ
0x08Memory Parity Error�ڴ���żУ�����
0x0AGateway Path Unavailable����·��������
0x0BGateway Target Device Failed����Ŀ���豸ʧ��

�ܹ����

���νṹ

Modbus ���
������ cModbusMaster (��վ/�ͻ���)
��   ������ m_Socket: cWinsock (TCP ���� Socket)
��   ������ m_hSerialPort: Long (RTU ���ھ��)
��   ������ m_RTUBuffer: cByteBuffer (RTU ���ջ�����)
��   ������ ���󹹽�/��Ӧ����
��
������ cModbusSlave (��վ/������)
��   ������ m_ListenSocket: cWinsock (TCP ���� Socket)
��   ������ m_Clients: Collection (TCP �ͻ��˼���)
��   ������ m_hSerialPort: Long (RTU ���ھ��)
��   ������ m_RTUBuffer: cByteBuffer (RTU ���ջ�����)
��   ������ m_Coils: Boolean() (��Ȧ����)
��   ������ m_DiscreteInputs: Boolean() (��ɢ��������)
��   ������ m_HoldingRegisters: Integer() (���ּĴ�������)
��   ������ m_InputRegisters: Integer() (����Ĵ�������)
��
������ cByteBuffer (�ֽڻ�����)
��   ������ Ԥ���䡢�Զ�������Peek/Consume/Extract
��
������ cWinsock (�ײ� Socket ��װ)
    ������ TCP ���Ӻ������շ�

��վ�����ϵͼ

cModbusMaster (��վ)
������ TCP ģʽ
��   ������ Socket (���� Socket: cWinsock)
��   ������ TransactionID (���� ID)
��
������ RTU ģʽ
    ������ SerialPort (���ھ��)
    ������ RecvBuffer (cByteBuffer)
    ������ SerialConfig (�����ʡ�����λ��У��λ��ֹͣλ)

��վ�����ϵͼ

cModbusSlave (��վ)
������ TCP ģʽ
��   ������ ListenSocket (���� Socket: cWinsock)
��   ������ Clients ����
��   ��   ������ �ͻ��� 1 (cWinsock)
��   ��   ������ �ͻ��� 2 (cWinsock)
��   ��   ������ ...
��   ������ ���ݴ洢
��       ������ Coils (Boolean ����)
��       ������ DiscreteInputs (Boolean ����)
��       ������ HoldingRegisters (Integer ����)
��       ������ InputRegisters (Integer ����)
��
������ RTU ģʽ
    ������ SerialPort (���ھ��)
    ������ RecvBuffer (cByteBuffer)
    ������ ���ݴ洢
        ������ Coils (Boolean ����)
        ������ DiscreteInputs (Boolean ����)
        ������ HoldingRegisters (Integer ����)
        ������ InputRegisters (Integer ����)

ͨ������

��վ��ȡ����

1. ���ö�ȡ�������� ReadHoldingRegisters��
   ��
2. ��������֡
   - RTU: SlaveID + FC + Addr(2) + Quantity(2) + CRC(2)
   - TCP: MBAP(7) + FC + Addr(2) + Quantity(2)
   ��
3. ��������
   - RTU: ͨ�����ڷ���
   - TCP: ͨ�� Socket ����
   ��
4. �ȴ���Ӧ������ʱ��
   ��
5. ������Ӧ����
   - RTU: ��֤ CRC
   - TCP: ��֤ Transaction ID
   ��
6. ������Ӧ
   - ����쳣��
   - ��ȡ����
   ��
7. ���ؽ����������

��վ��������

1. ���������������� TCP ��򿪴��ڣ�
   ��
2. �ȴ�����
   ��
3. ���յ�����
   - TCP: �ͻ��˷�������
   - RTU: ���ڽ�������
   ��
4. ��������֡
   - RTU: ��֤ CRC
   - TCP: ���� MBAP ͷ
   ��
5. ��� Slave ID
   - �Ƿ񷢸���
   ��
6. ���ݹ�����ִ�в���
   - ��ȡ���ݣ����ڲ��洢����ȡ
   - д�����ݣ������ڲ��洢��
   ��
7. ������Ӧ֡
   - RTU: PDU + CRC(2)
   - TCP: MBAP(7) + PDU
   ��
8. ������Ӧ
   - RTU: ͨ�����ڷ���
   - TCP: ͨ�� Socket ����

�ĵ�����

�ĵ�����
�����ĵ�Modbus ����������ܺ���������ǰ�ĵ���
��վ����ϸ�ĵ�cModbusMaster �����ϸ˵��
��վ����ϸ�ĵ�cModbusSlave �����ϸ˵��
���ٿ�ʼ��������ʾ��
����Ӧ���߼����ܺ����ʵ��

������ϵ

�������
cWinsock.clsλ�� add/ Ŀ¼�µĵײ� Socket ��װ���ṩ TCP ���ӹ���
cByteBuffer.clsλ�� src/ Ŀ¼�µ��ֽڻ������࣬���ڸ�Ч�����ֽ�����
cModbusMaster.clsλ�� src/Modbus/ Ŀ¼�µ� Modbus ��վ��
cModbusSlave.clsλ�� src/Modbus/ Ŀ¼�µ� Modbus ��վ��
ModbusMasterFunctionCode / ModbusSlaveFunctionCode������ö�٣�v1.1.0+��
ModbusMasterExceptionCode / ModbusSlaveExceptionCode�쳣��ö�٣�v1.1.0+��
ModbusMasterState / ModbusSlaveState״̬ö�٣�v1.1.0+��
ModbusMasterProtocolType / ModbusSlaveProtocolTypeЭ������ö�٣�v1.1.0+��
ModbusMasterDefaults / ModbusSlaveDefaultsĬ�����ýṹ�壨v1.1.0+��

������

  • VB6/VBA - ��ȫ����
  • Windows - Windows XP �����ϰ汾
  • Modbus Э�� - Modbus RTU �� TCP����ȫ���ݣ�
  • ���� - ��׼ COM �˿ڣ�RTU ģʽ��
  • ���� - ��׼ TCP/IP��TCP ģʽ��

����֤

���� VbAsyncSocket (wqweto@gmail.com) ����


����

Modbus ���: woeoio@qq.com
���� Socket ��: woeoio@qq.com
ԭʼ Socket ��: wqweto@gmail.com


�汾��Ϣ

  • �ĵ��汾: 1.1.0
  • ������: 2026-01-16

v1.1.0 ��Ҫ����

1. ö�������淶��

Ϊ��������վ��֮���ö�����Ƴ�ͻ������ö������������ Master �� Slave ��׺��

��վö��:

  • ModbusMasterFunctionCode - ��վ������
  • ModbusMasterExceptionCode - ��վ�쳣��
  • ModbusMasterState - ��վ״̬
  • ModbusMasterProtocolType - ��վЭ������
  • ModbusMasterDefaults - ��վĬ������

��վö��:

  • ModbusSlaveFunctionCode - ��վ������
  • ModbusSlaveExceptionCode - ��վ�쳣��
  • ModbusSlaveState - ��վ״̬
  • ModbusSlaveProtocolType - ��վЭ������
  • ModbusSlaveDefaults - ��վĬ������

2. ���� BindAddress ���ܣ���վ��

��վ������ BindAddress ���ԣ�֧������ TCP ������ַ��

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"

3. ����������

cModbusSlave.Stop() ��������Ϊ StopMe()�������� VB �ؼ��ֳ�ͻ��

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

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