C#编写一个ModBus的客户端程序
时间: 2024-02-11 08:06:40 浏览: 107
CSharpModBusExample.rar_C# modbus tcp_MODBUS tcp 程序_ModBus Tcp 通
以下是一个简单的C#编写的Modbus客户端程序的示例:
```csharp
using System;
using System.IO.Ports;
using Modbus.Device;
namespace ModbusClient
{
class Program
{
static void Main(string[] args)
{
// 创建串口对象
SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
try
{
// 打开串口
port.Open();
// 创建Modbus设备对象
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
// 设置Modbus设备地址
master.Transport.ReadTimeout = 1000;
master.Transport.Retries = 3;
byte slaveId = 1;
// 读取线圈状态
bool[] coils = master.ReadCoils(slaveId, 0, 10);
// 输出线圈状态
for (int i = 0; i < coils.Length; i++)
{
Console.WriteLine("Coil {0} = {1}", i, coils[i]);
}
// 读取离散输入状态
bool[] inputs = master.ReadInputs(slaveId, 0, 10);
// 输出离散输入状态
for (int i = 0; i < inputs.Length; i++)
{
Console.WriteLine("Input {0} = {1}", i, inputs[i]);
}
// 读取保持寄存器的值
ushort[] registers = master.ReadHoldingRegisters(slaveId, 0, 10);
// 输出保持寄存器的值
for (int i = 0; i < registers.Length; i++)
{
Console.WriteLine("Register {0} = {1}", i, registers[i]);
}
// 读取输入寄存器的值
ushort[] inputsRegisters = master.ReadInputRegisters(slaveId, 0, 10);
// 输出输入寄存器的值
for (int i = 0; i < inputsRegisters.Length; i++)
{
Console.WriteLine("Input Register {0} = {1}", i, inputsRegisters[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// 关闭串口
port.Close();
}
Console.ReadLine();
}
}
}
```
在这个示例程序中,我们创建了一个串口对象,并打开了COM1串口。然后,我们创建了一个Modbus设备对象,并设置了设备地址、超时时间和重试次数。接着,我们通过Modbus设备对象读取了线圈状态、离散输入状态、保持寄存器和输入寄存器的值,并将它们输出到控制台。最后,我们关闭了串口。
请注意,这只是一个简单的示例程序,实际的Modbus客户端程序需要根据具体的应用场景进行编写。同时,需要根据不同的Modbus设备和通信方式选择不同的Modbus库,并根据具体的通信协议进行设置。
阅读全文