ModbusTCP_IP
Library writed in C# about Modbus protocole via TCP/IP connection. This library allows connection with slave by Sockets and communication with this slave by Modbus protocol using function's codes in Modbus frames. Also project gives classes to create and decode Modbus frames with error handling. Library inlcudes unit tests for better understanding of classes and their methods.
Examples
Connect with slave and read holding registers:
using ModbusTCPIP;
string slaveIP = "192.167.8.11";
int slavePort = 502;
ModbusConnection mySlave = new ModbusConnection(slaveIP, slavePort);
int registerAddress = 1;
int range = 20;
mySlave.Connect();
List<int> slaveRegisters = mySlave.ReadMultipleHoldingRegisters(registerAddress, range);
mySlave.Disconnect();
Connect with slave write and then read holding Register values:
using ModbusTCPIP;
string slaveIP = "192.167.8.11";
int slavePort = 502;
ModbusConnection mySlave = new ModbusConnection(slaveIP, slavePort);
int registerAddress = 1;
int range = 7;
int[] values = { 122, 1111, 334, 1, 7688, 21000, 50 };
mySlave.Connect();
mySlave.WriteMultipleHoldingRegisters(registerAddress, range, values);
List<int> slaveRegisters = mySlave.ReadMultipleHoldingRegisters(registerAddress, range);
mySlave.Disconnect();
Create frame for communication:
using ModbusTCPIP;
int unitId = 1;
int function = 3;
int[] parametrs = { 3, 10 };
int[] values = { 122, 1111, 334, 1, 7688, 21000, 50 };
//Generally
byte[] frame = ModBusFrameCreator.CreateFrame(unitId, function, parametrs);
//Partly
byte[] header = ModBusFrameCreator.CreateMBAPHeader(unitId, 2);
byte[] pduR = ModBusFrameCreator.ReadingPDU(parametrs[0], parametrs[1], function); //For read functions
byte[] pduW = ModBusFrameCreator.MultipleWritingPDU(parametrs[0], parametrs[1], function, values); //For write multiple, but you can also write Single
frame = header.Concat(pduR).ToArray(); //Concat at the end
Decode frame:
using ModbusTCPIP;
int unitId = 1;
int function = 3;
int[] parametrs = { 3, 10 };
byte[] frame = ModBusFrameCreator.CreateFrame(unitId, function, parametrs);
List<int> decoded = new ModbusFrameObject(frame).DecodeRegisters();