.NET和DelphiプラットフォームModbus开发库大全:NModbus、FreeModbus.NET与Delphi组件

freeFree Technical Resource

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

.NET和DelphiプラットフォームModbus开发库大全:NModbus、FreeModbus.NET与Delphi组件

.NET プラットフォーム的 Modbus 开发生态

在 Windows 工业自動化软件开发中,.NET(C#/VB.NET)是最主流的开发プラットフォーム之一。modbus.org おすすめ了多个 .NET プラットフォーム的 Modbus 库,カバー了从开源無料到商业サポート的不同選択。本記事将逐一介绍这些库的特点和使用方法。

NModbus —— 最流行的 C# Modbus 库

NModbus 是 .NET プラットフォーム上最成熟、使用最广泛的 Modbus オープンソース·ライブラリ。最早托管在 Google Code,现已迁移至 GitHub:github.com/NModbus/NModbus。NuGet 包名:NModbus

功能特性

  • サポート Modbus RTU(serial port)、Modbus ASCII、Modbus TCP 和 Modbus UDP 四种传输モード
  • 完全サポートすべての常用機能コード(FC01-FC06, FC15, FC16)
  • 経由 NuGet 包管理器一键インストール
  • サポート .NET Framework 和 .NET Core / .NET 5+
  • 开源ライセンスは:MIT(可商用)

インストール

# NuGet 命令行インストール
dotnet add package NModbus

# 或経由 Visual Studio 的 NuGet 包管理器検索 "NModbus"

Modbus TCP 読み書きサンプル

using System;
using System.Net.Sockets;
using NModbus;

// 作成 TCP クライアント側は
using var client = new TcpClient("192.168.1.100", 502);
var factory = new ModbusFactory();
var master = factory.CreateMaster(client);

// 駅から読む。 1 保持レジスタです。 0-9
ushort[] registers = master.ReadHoldingRegisters(1, 0, 10);
Console.WriteLine("読み取り结果:");
for (int i = 0; i < registers.Length; i++)
    Console.WriteLine($"  address {i}: {registers[i]}");

// Write to a single register
master.WriteSingleRegister(1, 0, 1234);

// 一括書き込みき込み入多1つのレジスタ
ushort[] writeData = { 100, 200, 300 };
master.WriteMultipleRegisters(1, 10, writeData);

Modbus RTU Serial port communication

using System.IO.Ports;
using NModbus;

using var port = new SerialPort("COM3")
{
    BaudRate = 9600,
    DataBits = 8,
    Parity = Parity.None,
    StopBits = StopBits.One
};
port.Open();

var factory = new ModbusFactory();
var master = factory.CreateRtuMaster(port);

ushort[] data = master.ReadHoldingRegisters(1, 0, 5);
foreach (var val in data)
    Console.WriteLine(val);

Free .NET Modbus(free-dotnet-modbus)

Free .NET Modbus 是另一个开源的 .NET Modbus 库,托管在 Google Code Archive。与 NModbus 类似,它也サポート Modbus ASCII、RTU、TCP 和 UDP。もし你使用的是旧版 .NET Framework(2.0/3.5),这个库可能有更好的兼容性。但对于新项目,推奨される使用活跃维护的 NModbus。

ASComm.NET —— 商业级 .NET Modbus 驱动

ASComm.NET 是 Automated Solutions 公司的商业 .NET 组件,官网:automatedsolutions.com。它是完全托管的 .NET 库,不仅サポート Modbus TCP/RTU/ASCII,还サポート Allen-Bradley Logix、PLC5、SLC500、MicroLogix 和 GE SRTP 等多种工业协议。

核心特性

  • 可视化设计:既可以経由代码設定,也可以経由 Visual Studio 的属性窗口可视化設定
  • 后台扫描:以指定速率自动扫描データ点,检测到データ变化时触发事件
  • 序列化サポート:設定可序列化为 XML/JSON format
  • 30 天無料试用:无功能限制,完全版可充分测试
  • 多协议:一个组件サポート Modbus + Allen-Bradley + GE 等

ASComm.NET Code Example

using ASComm.NET;

// 作成 Modbus TCP 通信组件
var comm = new ModbusTcpComm();
comm.RemoteAddress = "192.168.1.100";
comm.RemotePort = 502;

// 追加要扫描的データ组
var group = new ModbusScanGroup();
group.SlaveId = 1;
group.StartAddress = 0;
group.Length = 10;
group.ScanRate = 1000; // 每秒扫描一次

// データ变化事件
group.DataChanged += (s, e) =>
{
    Console.WriteLine($"address {e.Address} 变为 {e.Value}");
};

comm.ScanGroups.Add(group);
comm.Connect();

Delphi ModbusTCP 组件

对于 Delphi/Lazarus developer,有一个开源的 Modbus TCP 组件集,托管在 SourceForge:sourceforge.net/projects/delphimodbus。它基于 Indy(Internet Direct)网络组件库,サポート Indy 9 和 Indy 10 2つ版本。

⚠️ 注意:这个项目活跃度较低,最近的 Delphi 版本(10.4 Sydney / 11 Alexandria)可能需要调整才能直接使用。もし需要在新版 Delphi 上开发 Modbus Function,也可以考虑経由 COM 互操作调用 MBServer ActiveX、或者用 Delphi 调用 C 语言版的 libmodbus 动态库(DLL)。

ModLink —— Delphi VCL 原生组件

ModLink 是一套用于 Borland Delphi 的原生 VCL 组件,由 Ivo Bauer 开发,官网 www.ozm.cz/ivobauer/modlink。它是一组可直接拖放到 Delphi 窗体上的可视化组件,让 Delphi 開発者たちは无需手写 Socket 通信代码即可集成 Modbus 通信能力。

ModLink サポート多种网络タイプ,包括:

  • Modbus TCP(経由 TModLinkTCP 组件)
  • Modbus RTU serial port(経由 TModLinkRTU 组件)
  • Modbus ASCII serial port
  • Modbus Plus 网络

⚠️ ModLink 是 Delphi 时代的产物,项目已多年未更新。もし你在维护旧的 Delphi 工控项目,ModLink 仍然有价值;但新建项目建议使用 NModbus(.NET)或 pymodbus(Python)等更现代的方案。

如何選択 .NET/Delphi Modbus 库

Scenariosおすすめ理由
C# 新项目NModbus(NuGet)MIT 许可,活跃维护,API 简洁
.NET 商业项目ASComm.NET多协议サポート,可视化設定,商业サポート
旧 Delphi 项目ModLink 或 DelphiModbus原生 Delphi 组件,免去跨语言调用
Python Scriptpymodbus最活跃的 Python Modbus 库

总结

.NET プラットフォーム的 Modbus 开发生态是最丰富的。对于新项目,开源無料的 NModbus 是大多数场景的最佳選択——MIT 许可、NuGet 一键インストール、サポートすべての主流传输モード。もし需要同时连接 Allen-Bradley 或 GE device,ASComm.NET 提供了统一的多协议方案。而 Delphi 開発者たちは虽然選択较少,但 ModLink 和 DelphiModbus 2つ组件カバー了最基础的 Modbus TCP/RTU 通信需求。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification 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 address will not be published. Required fields are marked *.