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

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

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 Server/客户端库集合,包含独立服务器、客户端和命令行工具

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 Reading coil、FC02 Read discrete input、FC03 Read the hold register、FC04 Read input register、FC05 Write single coil、FC06 Write single register、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 connect
    mb.Protocol = 3  ' 3 = Modbus TCP
    
    ' 连接设备
    If mb.Connect("192.168.1.100", 502) Then
        ' 读取从站 1,시작ing 주소 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))
{
    // read 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 Server
mbserverd -p 502 -a 1

使用 mbclient 测试

# read 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 read PLCMBServer ActiveX仍然是 VBA 场景最简单的方式
Linux Serverlibmodbus 或 pymodbus更活跃的 C/Python 库
embedded Linuxlibmodbus轻量,支持 RTU 和 TCP

总结

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

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC 검증 and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email 주소 will not be published. Required fields are marked *.