跳到主要内容

日志

通过 DarraEtherCAT.Logs 访问。

DLL 底层运行日志通过回调推送到 DarraEtherCAT.Logs(只读列表),Init() 时自动注册。

快速开始

// 绑定到控制台输出
DarraEtherCAT.Logs.Updated += () =>
{
var logs = DarraEtherCAT.Logs;
if (logs.Count > 0)
Console.WriteLine(logs[logs.Count - 1]);
};

// 只看错误和警告
DarraEtherCAT.Logs.SetFilter(LogCategory.Error, LogCategory.Warning);

// 启用调试日志(默认关闭)
DarraEtherCAT.EnableDebugLogging();

日志类别

public enum LogCategory
{
Error = 0, // 系统错误和异常
Warning = 1, // 潜在问题
Message = 2, // 一般信息(状态切换等)
Mailbox = 3, // CoE/SoE/FoE/EoE 邮箱通信(默认关闭)
PDO = 4, // PDO 数据变化日志(默认关闭)
Debug = 5, // 详细调试信息(默认关闭)
Local = 6 // Console.WriteLine 捕获的控制台输出
}
PDO 日志

PDO 日志只在 PDO 数据发生变化时输出,不会每个周期都产生日志。适合调试 PDO 映射问题。

属性

DarraEtherCAT.Logs

public static LogView Logs { get; }

实时日志视图(只读列表),由日志系统自动维护。

相关结构:

public class LogEntry
{
public DateTime Timestamp { get; } // 日志时间戳
public LogCategory Category { get; } // 日志类别
public string Message { get; } // 日志消息内容
}

Logs.Updated

public event Action Updated;

日志数据变化时触发(新增/清空/过滤器变化)。

容量与保留策略

日志列表设有上限,超出时自动移除最旧的条目。

自动保留模式: 进入 SafeOp/OP 状态后,日志自动切换为保留模式 — 运行时事件(从站离线、PDO 丢帧、DC 同步丢失等)不会被后续操作清空。退出 SafeOp/OP 后恢复为普通模式。

过滤

SetFilter(params LogCategory[] categories)

public void SetFilter(params LogCategory[] categories)

设置过滤器,只显示指定类别的日志。覆盖之前的过滤设置。

参数:

  • categories (LogCategory[]) — 要显示的日志类别

示例:

// 只看错误和警告
DarraEtherCAT.Logs.SetFilter(LogCategory.Error, LogCategory.Warning);

// 切换为只看邮箱通信(直接覆盖)
DarraEtherCAT.Logs.SetFilter(LogCategory.Mailbox);

// 显示所有类别(传入所有枚举值)
DarraEtherCAT.Logs.SetFilter(
LogCategory.Error, LogCategory.Warning, LogCategory.Message,
LogCategory.Mailbox, LogCategory.PDO, LogCategory.Debug, LogCategory.Local);

GetAll()

public List<LogEntry> GetAll()

获取所有日志条目(无视过滤器)。用于导出或自定义过滤。

日志开关

Mailbox、PDO、Debug 三类日志默认关闭,需要时手动启用。

DarraEtherCAT.EnablePDOLogging(bool enable = true)

public static void EnablePDOLogging(bool enable = true)

启用 PDO 日志。仅在 PDO 数据变化时输出,影响实时性能,慎用。

DarraEtherCAT.EnableMailboxLogging(bool enable = true)

public static void EnableMailboxLogging(bool enable = true)

启用邮箱日志(CoE/SoE/FoE/EoE 邮箱通信日志)。

DarraEtherCAT.EnableDebugLogging(bool enable = true)

public static void EnableDebugLogging(bool enable = true)

启用调试日志(详细调试信息)。

完整示例

// 1. 绑定控制台输出(实时显示所有日志)
DarraEtherCAT.Logs.Updated += () =>
{
var logs = DarraEtherCAT.Logs;
if (logs.Count > 0)
Console.WriteLine(logs[logs.Count - 1]);
};

// 2. 启用调试日志
DarraEtherCAT.EnableDebugLogging();
DarraEtherCAT.EnableMailboxLogging();

// 3. 过滤日志(只看错误和调试)
DarraEtherCAT.Logs.SetFilter(LogCategory.Error, LogCategory.Debug);

// 4. 导出所有日志(无视过滤器)
var allLogs = DarraEtherCAT.Logs.GetAll();
foreach (var entry in allLogs)
System.IO.File.AppendAllText("debug.log", entry.ToString() + "\n");
WinForms / WPF 绑定

Logs.Updated 在非 UI 线程触发,更新 UI 时需要同步:

// WinForms
DarraEtherCAT.Logs.Updated += () =>
this.Invoke(() => listBox.Items.Add(DarraEtherCAT.Logs[DarraEtherCAT.Logs.Count - 1]));

// WPF
DarraEtherCAT.Logs.Updated += () =>
Dispatcher.Invoke(() => LogItems.Add(DarraEtherCAT.Logs[DarraEtherCAT.Logs.Count - 1]));