ModbusFactory modbus = new ModbusFactory();
TcpClient tcpClient = new TcpClient("127.0.0.1", 5000);
var master = modbus.CreateMaster(tcpClient);
var data = master.ReadHoldingRegisters(0, 0, 2);
This is my NModbus code. In this case, I expect to get the result data of only response ReadHoldingRegisters(). However, I want to get not only response data but also the request byte array.
The above picture is the ModbusSlave program's communication log. That shows RX/TX with a timestamp. How can I get like this RX/TX log in my C# NModbus code?
There are no available logging methods in a document of NModbus GitHub.
public class GetLogMessage : ModbusLogger
{
public List<string> _message { get; set; } = new List<string>();
public GetLogMessage(LoggingLevel minimumLoggingLevel) : base(minimumLoggingLevel)
{
}
protected override void LogCore(LoggingLevel level, string message)
{
_message.Add(message);
if (level == LoggingLevel.Trace) _message.Add(message);
Trace.WriteLine($"[{level}]".PadRight(4) + message);
}
}
I found how can get a trace log. First, we create a new class that inherits ModbusLogger. Then create LogCore and Constructure.
Now we can get RX/TX data in _message.
GetLogMessage logger = new GetLogMessage(LoggingLevel.Trace);
ModbusFactory modbus = new ModbusFactory(null,true, logger);
TcpClient client = new TcpClient("127.0.0.1", 5000);
IModbusMaster master = modbus.CreateMaster(client);
ushort[] res = master.ReadHoldingRegisters(0,0,2);
var getlog = logger._message;
Console.WriteLine(getlog[0]);
Console.WriteLine(getlog[5]);
Results