MBServer 概述
MBServer 是 modbus.org 推荐的两个互补的 Modbus 通信组件。需要注意的是,它们虽然都叫 “MBServer”,但实际上是两个不同的项目:
- MBServer ActiveX(mbserver.tripod.com):一个免费的 ActiveX 自动化服务器,用于在 Windows 平台上通过 Modbus RTU/ASCII 和 Modbus TCP 协议与 PLC 或其他工业设备通信
- MBServer TCP(sourceforge.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 读取 PLC | MBServer ActiveX | 仍然是 VBA 场景最简单的方式 |
| Linux 服务器 | libmodbus 或 pymodbus | 更活跃的 C/Python 库 |
| 嵌入式 Linux | libmodbus | 轻量,支持 RTU 和 TCP |
总结
MBServer 代表了 Modbus 通信的两个经典实现方向:MBServer ActiveX 专为 Windows 桌面应用和 Office 自动化设计,适合快速搭建简单的 Modbus 数据采集界面;MBServer TCP(mblogic)则是 Linux 环境下的开源 Modbus TCP 服务器和命令行工具。虽然它们的技术栈相对老旧,但作为学习资料和历史参考仍然有价值。在实际新项目中,建议根据平台和需求选择更现代的替代方案。
发表回复