读取ModbusTCP数据
封装ModbusTcp类
public class ModbusTCP
{
private ModbusFactory modbusFactory;
private IModbusMaster master;
private TcpClient tcpClient;
public string IPAdress { get; set; }
public int Port { get; set; }
public bool Connected
{
get => tcpClient.Connected;
}
public ModbusTCP(string ip, int port)
{
IPAdress = ip;
Port = port;
modbusFactory = new ModbusFactory();
tcpClient = new TcpClient(IPAdress, Port);
master = modbusFactory.CreateMaster(tcpClient);
master.Transport.ReadTimeout = 5000;
master.Transport.Retries = 10;
}
public bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort num)
{
return master.ReadCoils(slaveAddress, startAddress, num);
}
public bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort num)
{
return master.ReadInputs(slaveAddress, startAddress, num);
}
public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort num)
{
return master.ReadHoldingRegisters(slaveAddress, startAddress, num);
}
public ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort num)
{
return master.ReadInputRegisters(slaveAddress, startAddress, num);
}
public void WriteSingleCoil(byte slaveAddress, ushort startAddress, bool value)
{
master.WriteSingleCoil(slaveAddress, startAddress, value);
}
public void WriteSingleRegister(byte slaveAddress, ushort startAddress, ushort value)
{
master.WriteSingleRegister(slaveAddress, startAddress, value);
}
public void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] value)
{
master.WriteMultipleCoils(slaveAddress, startAddress, value);
}
public void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] value)
{
master.WriteMultipleRegisters(slaveAddress, startAddress, value);
}
}
读取保持寄存器

1.引入DLL类库

2.一定要记得下载NModbus包 否则会导致引用DLL不全(因为自定义类库中引用了NModbus)

3.设计如下页面

using NModbus类库;
namespace 测试ModbusTCP类库
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
btnRead.Click += BtnRead_Click;
}
private void BtnRead_Click(object? sender, EventArgs e)
{
string ipAddress = "127.0.0.1";
int port = 502;
byte slaveId = 1;
ModbusTCP modbusTCP = new ModbusTCP(ipAddress, port);
ushort[] result = modbusTCP.ReadHoldingRegisters(slaveId, 0, 2);
MessageBox.Show($"{result[0] << 16 | result[1]}");
}
}
}
4.读取模拟设备的数据

