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 ReadModbus데이터()
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.ReadHolding회원가입s(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.ReadHolding회원가입s(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 服务器和命令行도구。虽然它们的기술栈相对老旧,但作为학습자료和历史参考仍然有价值。在实际新项目中,建议根据平台和需求选择更现代的替代方案。
답글 작성