在 C# 中,可以使用第三方库如 NModbus 或 EasyModbus 来实现 Modbus 协议的通信。这里以 NModbus 为例,演示如何使用 C# 进行 Modbus RTU 或 Modbus TCP 通信。
首先,需要安装 NModbus 库,可以通过 NuGet 包管理器或手动下载安装。然后,根据需要选择 Modbus RTU 或 Modbus TCP 的通信方式,分别实例化 SerialPortAdapter 或 TcpClientAdapter,并将其传递给 ModbusFactory 类的 CreateMaster() 方法创建 Modbus 主站对象。以下是一个简单的示例代码,演示如何通过 Modbus TCP 读取和写入数据:```
using System;
using System.Net.Sockets;
using System.Threading;
using NModbus;
using NModbus.IO;
using NModbus.Serial;
namespace ModbusExample
{
class Program
{
static void Main(string[] args)
{
// 创建 Modbus 主站对象
var adapter = new TcpClientAdapter("127.0.0.1", 502);
var master = ModbusFactory.CreateMaster(adapter);
// 读取单个寄存器
ushort startAddress = 100;
ushort value = master.ReadHoldingRegisters(1, startAddress, 1)[0];
Console.WriteLine("Read value: " + value);
// 写入单个寄存器
startAddress = 100;
ushort newValue = 12345;
master.WriteSingleRegister(1, startAddress, newValue);
// 读取多个寄存器
startAddress = 200;
ushort[] values = master.ReadHoldingRegisters(1, startAddress, 5);
Console.WriteLine("Read values: " + string.Join(",", values));
// 关闭连接
master.Transport.Close();
Console.ReadLine();
}
}
}
```
在上面的代码中,首先创建了一个 Modbus 主站对象,使用 TcpClientAdapter 连接到本地主机的 502 端口。然后通过 ReadHoldingRegisters() 和 WriteSingleRegister() 方法读取和写入单个寄存器的值,通过 ReadHoldingRegisters() 方法读取多个连续寄存器的值。最后关闭连接,释放资源。
需要注意的是,在使用 Modbus 协议进行通信时,需要事先了解设备的寄存器地址、数据类型、读写权限等信息,以便正确地使用 Modbus 主站对象的方法进行读写操作。另外,还需要考虑到数据的转换、解析和错误处理等问题,以确保数据的正确传输和处理。