MBServer Modbus通信组件详解:ActiveX控件与TCP服务器库

MBServer 概述

MBServer 是 modbus.org 推荐的两个互补的 Modbus 通信组件。需要注意的是,它们虽然都叫 “MBServer”,但实际上是两个不同的项目:

  • MBServer ActiveXmbserver.tripod.com):一个免费的 ActiveX 自动化服务器,用于在 Windows 平台上通过 Modbus RTU/ASCII 和 Modbus TCP 协议与 PLC 或其他工业设备通信
  • MBServer TCPsourceforge.net/projects/mblogic):一个开源的 Modbus TCP 服务器/客户端库集合,包含独立服务器、客户端和命令行工具

MBServer ActiveX 组件

MBServer ActiveX 是一个进程外(out-process)的 ActiveX 自动化服务器,这意味着它可以被任何支持 COM/OLE 的语言调用——Visual Basic 6、VBA(Excel 宏)、C#、C++、Delphi 等。它是一个 FREEWARE(免费软件),不需要付费即可使用全部功能。

支持的功能

  • Modbus RTU/ASCII(串口 RS-232/RS-485)
  • Modbus TCP(以太网通信)
  • 功能码:FC01 读线圈、FC02 读离散输入、FC03 读保持寄存器、FC04 读输入寄存器、FC05 写单线圈、FC06 写单寄存器、FC15 写多线圈、FC16 写多寄存器
  • 自动重连机制
  • 多线程安全设计

在 VBA(Excel)中使用 MBServer ActiveX

这是 MBServer ActiveX 最实用的场景之一——在 Excel 中直接读写 PLC 数据:

' VBA 代码:在 Excel 中读取 Modbus TCP 设备数据
Sub ReadModbusData()
    Dim mb As Object
    Set mb = CreateObject("MBServer.MBServerCtrl.1")
    
    ' 配置 Modbus TCP 连接
    mb.Protocol = 3  ' 3 = Modbus TCP
    
    ' 连接设备
    If mb.Connect("192.168.1.100", 502) Then
        ' 读取从站 1,起始地址 40001,10 个保持寄存器
        Dim values As Variant
        values = mb.ReadHoldingRegisters(1, 40001, 10)
        
        ' 将数据写入 Excel 单元格
        Dim i As Integer
        For i = 0 To UBound(values)
            Cells(i + 1, 1).Value = values(i)
        Next i
        
        mb.Disconnect
    Else
        MsgBox "连接失败!"
    End If
End Sub

在 C# 中使用 MBServer ActiveX

// C# 代码:通过互操作调用 MBServer ActiveX
using System.Runtime.InteropServices;

Type mbType = Type.GetTypeFromProgID("MBServer.MBServerCtrl.1");
dynamic mb = Activator.CreateInstance(mbType);

mb.Protocol = 3;  // Modbus TCP
if (mb.Connect("192.168.1.100", 502))
{
    // 读取 10 个保持寄存器
    Array values = (Array)mb.ReadHoldingRegisters(1, 40001, 10);
    foreach (var v in values)
    {
        Console.WriteLine(v);
    }
    mb.Disconnect();
}

MBServer ActiveX 的局限性

ActiveX 技术诞生于 1990 年代,在现代 Windows 开发中已经逐渐被 .NET、COM Interop 等更新技术取代。MBServer ActiveX 仅支持 32 位 Windows,在 64 位应用程序中需要通过 WOW64 兼容层或 surrogate process 来使用。对于新项目,更推荐使用 NModbus(C#)或 ASComm.NET 等 .NET 原生库。

MBServer TCP(mblogic)

MBServer TCP 是一个完全不同的项目,定位为开源的 Modbus TCP 工具集,托管在 SourceForge。许可证为 GPL(适合开源项目使用,商业项目需注意合规)。

组成部分

  • mbserverd:独立的 Modbus TCP 服务器守护进程,可以部署为系统服务
  • mbclient:命令行 Modbus TCP 客户端,用于测试和脚本调用
  • libmblogic:C 语言 Modbus TCP 协议库,可以被其他程序调用

Linux 上安装 MBServer TCP

# 从 SourceForge 下载源码
git clone https://git.code.sf.net/p/mblogic/code mblogic-code
cd mblogic-code

# 编译(需要 gcc 和 make)
./configure
make
sudo make install

# 启动 Modbus TCP 服务器
mbserverd -p 502 -a 1

使用 mbclient 测试

# 读取 127.0.0.1:502 上从站 1 的保持寄存器 0-9
mbclient -H 127.0.0.1 -p 502 -a 1 -f 3 -s 0 -n 10

# 写入从站 1 的保持寄存器 0
mbclient -H 127.0.0.1 -p 502 -a 1 -f 6 -s 0 -v 1234

现代替代方案

由于 MBServer ActiveX 技术栈较老,且 mblogic 项目活跃度不高,在实际项目中推荐以下替代方案:

需求场景推荐方案说明
Windows .NET/C# 开发NModbus 或 ASComm.NET.NET 原生库,无需 ActiveX 依赖
Excel VBA 读取 PLCMBServer ActiveX仍然是 VBA 场景最简单的方式
Linux 服务器libmodbus 或 pymodbus更活跃的 C/Python 库
嵌入式 Linuxlibmodbus轻量,支持 RTU 和 TCP

总结

MBServer 代表了 Modbus 通信的两个经典实现方向:MBServer ActiveX 专为 Windows 桌面应用和 Office 自动化设计,适合快速搭建简单的 Modbus 数据采集界面;MBServer TCP(mblogic)则是 Linux 环境下的开源 Modbus TCP 服务器和命令行工具。虽然它们的技术栈相对老旧,但作为学习资料和历史参考仍然有价值。在实际新项目中,建议根据平台和需求选择更现代的替代方案。

把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注