日志
通过 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]));