Modbus是一种广泛应用于工业自动化中的通信协议,主要用于设备间的数据交换。
1.环境准备:安装NMobuds库
Install-Package NModbus
2.Modbus TCP客户端实现,基于以太网的通信协议,速度快
using System;
using System.Net.Sockets;
using Modbus.Device; // 引入 NModbus 库
class Program
{
static void Main(string[] args)
{
// 1. 连接到 Modbus 服务器(Modbus TCP)
string ipAddress = "192.168.0.100"; // 设备的 IP 地址
int port = 502; // Modbus TCP 默认端口
var client = new TcpClient(ipAddress, port);
// 2. 获取 Modbus TCP 设备的协议客户端
var modbusTcpMaster = ModbusTcpMaster.CreateIp(client);
// 3. 读取从站设备的寄存器
ushort startAddress = 0; // 寄存器起始地址
ushort numRegisters = 10; // 读取 10 个寄存器
try
{
// 读取保持寄存器
ushort[] registers = modbusTcpMaster.ReadHoldingRegisters(startAddress, numRegisters);
// 输出结果
Console.WriteLine("读取到的寄存器值:");
foreach (var register in registers)
{
Console.WriteLine(register);
}
}
catch (Exception ex)
{
Console.WriteLine($"读取错误: {ex.Message}");
}
// 4. 关闭连接
client.Close();
}
}
3.Modbus RTU 客户端实现,基于串口通信
using System;
using System.IO.Ports;
using Modbus.Device; // 引入 NModbus 库
class Program
{
static void Main(string[] args)
{
// 1. 通过串口连接到 Modbus 设备
string portName = "COM1"; // 串口名称
int baudRate = 9600; // 波特率
int parity = 0; // 校验位,0: 无校验,1: 偶校验,2: 奇校验
int dataBits = 8; // 数据位
int stopBits = 1; // 停止位
var serialPort = new SerialPort(portName, baudRate, (Parity)parity, dataBits, (StopBits)stopBits);
serialPort.Open();
// 2. 创建 Modbus RTU 主机对象
var modbusRtuMaster = ModbusSerialMaster.CreateRtu(serialPort);
// 3. 读取从站设备的寄存器
ushort startAddress = 0; // 寄存器起始地址
ushort numRegisters = 10; // 读取 10 个寄存器
try
{
// 读取保持寄存器(从站地址为 1)
ushort[] registers = modbusRtuMaster.ReadHoldingRegisters(1, startAddress, numRegisters);
// 输出结果
Console.WriteLine("读取到的寄存器值:");
foreach (var register in registers)
{
Console.WriteLine(register);
}
}
catch (Exception ex)
{
Console.WriteLine($"读取错误: {ex.Message}");
}
// 4. 关闭串口连接
serialPort.Close();
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。