using NModbus;
using System;
using System.Net.Sockets;
namespace ModbusTCP
{
class Program
{
private static ModbusFactory modbusFactory;
private static IModbusMaster master;
static void Main(string[] args)
{
ModbusTcp();
Console.ReadLine();
}
public async static void ModbusTcp()
{
//初始化modbusmaster
modbusFactory = new ModbusFactory();
//实例化 , ModbusTcp通信协议端口号为 502
master = modbusFactory.CreateMaster(new TcpClient('192.168.1.5', 502));
//设置读取超时时间
master.Transport.ReadTimeout = 2000;
master.Transport.Retries = 2000;
try
{
//01 读取单个线圈(站号,起始地址,长度) 读寄存器地址M10
bool[] coilsBuffer = master.ReadCoils(1, 10, 1);
for (int i = 0; i < coilsBuffer.Length; i++)
{
Console.Write(coilsBuffer[i] + ' ');
}
Console.WriteLine(' ');
//02 读取输入线圈/离散量线圈
coilsBuffer = master.ReadInputs(1, 2, 1);
for (int i = 0; i < coilsBuffer.Length; i++)
{
Console.Write(coilsBuffer[i] + ' ');
}
Console.WriteLine(' ');
//03 读取保持寄存器 读寄存器地址D20
ushort[] registerBuffer = master.ReadHoldingRegisters(1, 20, 1);
for (int i = 0; i < registerBuffer.Length; i++)
{
Console.Write(registerBuffer[i] + ' ');
}
//05 写单个线圈(站号,起始地址,值)
bool[] coilsBufferW = new bool[] { true };
await master.WriteSingleCoilAsync(1, 0, coilsBufferW[0]);
Console.WriteLine('写单个线圈操作完成!');
//06 写单个输入线圈/离散量线圈
ushort[] registerBufferW = new ushort[2];
await master.WriteSingleRegisterAsync(1, 0, registerBufferW[0]);
Console.WriteLine('写单个输入线圈/离散量线圈操作完成!');
//15 写一组线圈
bool[] coilsBufferList = new bool[] { true, false };
await master.WriteMultipleCoilsAsync(1, 0, coilsBufferList);
Console.WriteLine('写一组线圈操作完成!');
//16 写一组保持寄存器
await master.WriteMultipleRegistersAsync(1, 0, registerBuffer);
Console.WriteLine('写一组保持寄存器操作完成!');
master.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。