首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕捉日志NModbus?

如何捕捉日志NModbus?
EN

Stack Overflow用户
提问于 2022-08-19 01:58:41
回答 1查看 77关注 0票数 0
代码语言:javascript
复制
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);

这是我的NModbus代码。在这种情况下,我希望只获得响应ReadHoldingRegisters()的结果数据。但是,我不仅想获得响应数据,还想获得请求字节数组。

上面的图片是ModbusSlave程序的通信日志。它显示带有时间戳的RX/TX。如何在我的C# NModbus代码中获得这样的RX/TX日志?

NModbus GitHub文档中没有可用的日志记录方法。

EN

Stack Overflow用户

回答已采纳

发布于 2022-08-22 07:05:25

代码语言:javascript
复制
    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);
        }
    }

我找到了如何得到一个追踪日志。首先,我们创建一个继承ModbusLogger的新类。然后创建LogCore和Constructure。

现在我们可以在_message中获取RX/TX数据。

代码语言:javascript
复制
        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]);

结果

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73411129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档