【下位机学习】ModbusTcp简单学习
💡 最近负责泰国工厂生产系统的前期搭建和现场对接,在跟厂家下位机对接时,遇到了比较常用的ModbusTcp协议,特此记录一下。
|
作者 |
小庞 |
|
状态 |
编辑中 |
|
简介 |
Modbus TCP/IP协议的简单介绍和常用对接情况处理 |
1、简介
https://www.cnblogs.com/The-explosion/p/11512677.html
可以参照这篇博客。
2、模拟工具
1、Modbus Slave 从站工具
2、ModbusPoll 主站工具
3、HslCommunicationDemo 主站工具
3、开源包
1、EasyModbusTCP.NET
2、NModbus
https://github.com/NModbus/NModbus
4、简单代码示例
1、EasyModbusTCP.NET
namespace ModbusClientApplication
{
class Program
{
public static void Main(string[] args)
{
ModbusClient modbusClient = new ModbusClient("190.201.100.100", 502); //Ip-Address and Port of Modbus-TCP-Server
modbusClient.Connect(); //Connect to Server
modbusClient.WriteMultipleCoils(4, new bool[] {true, true, true, true, true, true, true, true, true, true}); //Write Coils starting with Address 5
bool[] readCoils = modbusClient.ReadCoils(9,10); //Read 10 Coils from Server, starting with address 10
int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0,10); //Read 10 Holding Registers from Server, starting with Address 1
// Console Output
for (int i = 0; i < readCoils.Length; i++)
Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString());
for (int i = 0; i < readHoldingRegisters.Length; i++)
Console.WriteLine("Value of HoldingRegister " + (i + 1) + " "+ readHoldingRegisters[i].ToString());
modbusClient.Disconnect(); //Disconnect from Server
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
2、NModbus
/// <summary>
/// Modbus TCP master and slave example.
/// </summary>
public static void ModbusTcpMasterReadInputsFromModbusSlave()
{
byte slaveId = 1;
int port = 502;
IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
// create and start the TCP slave
TcpListener slaveTcpListener = new TcpListener(address, port);
slaveTcpListener.Start();
var factory = new ModbusFactory();
var network = factory.CreateSlaveNetwork(slaveTcpListener);
IModbusSlave slave = factory.CreateSlave(slaveId);
network.AddSlave(slave);
var listenTask = network.ListenAsync();
// create the master
TcpClient masterTcpClient = new TcpClient(address.ToString(), port);
IModbusMaster master = factory.CreateMaster(masterTcpClient);
ushort numInputs = 5;
ushort startAddress = 100;
// read five register values
ushort[] inputs = master.ReadInputRegisters(0, startAddress, numInputs);
for (int i = 0; i < numInputs; i++)
{
Console.WriteLine($"Register {(startAddress + i)}={(inputs[i])}");
}
// clean up
masterTcpClient.Close();
slaveTcpListener.Stop();
// output
// Register 100=0
// Register 101=0
// Register 102=0
// Register 103=0
// Register 104=0
}

浙公网安备 33010602011771号