CoreUnify 基类 - Snet Docs

🧬 CoreUnify 基类

命名空间: Snet.Core | 类: CoreUnify<O, D> | 泛型参数: O(操作类型),D(数据/基础配置类型)

CoreUnify<O, D> 是所有 Snet 操作组件(协议驱动和中间件)的基础基类。它提供单例生命周期管理、统一的事件系统、计时仪表、日志记录、多语言支持等功能。

类型参数

参数 描述 示例
O 具体的操作类型(自引用) ModbusOperate
D 数据/基础配置类型 ModbusData.Basics

单例管理

每个 CoreUnify 子类被注册为单例,最多支持 255 个实例:

// 创建实例 -- 按类型进行单例管理
var op = new ModbusOperate(new ModbusData.Basics
{
    IpAddress = "192.168.1.100",
    Port = 502,
    Station = 1
});

// 每种唯一的操作类型最多可以有 255 个实例
// 实例 ID 自动分配(1-255)

事件系统

CoreUnify 通过 IEvent 提供 3 对事件(共 6 个事件):

同步 异步 描述
OnDataEvent OnDataEventAsync 当接收到数据时触发
OnInfoEvent OnInfoEventAsync 当状态、信息和诊断消息时触发
OnLanguageEvent OnLanguageEventAsync 当语言/区域设置变更时触发
// 注册处理器
op.OnDataEventAsync += async result =>
{
    Console.WriteLine($"数据: {result.Message}");
};

op.OnInfoEventAsync += async result =>
{
    Console.WriteLine($"信息: {result.Message}");
};

op.OnLanguageEventAsync += async result =>
{
    Console.WriteLine($"语言已更改: {result.Message}");
};

计时仪表

CoreUnify 通过 BegOperateEndOperate 提供内置的操作计时:

// 计时是自动的 -- 每个操作都跟踪执行时间
var result = await op.ReadAsync("40001");
Console.WriteLine($"操作耗时 {result.RunTime} ms");
// RunTime 由 BegOperate/EndOperate 计时机制自动填充

日志记录

CoreUnify 使用 Serilog 进行日志记录,日志级别由 Serilog.Events.LogEventLevel 枚举定义。标准 Serilog 级别包括:VerboseDebugInformationWarningErrorFatal

多语言支持

// 设置语言为中文
await op.SetLanguageAsync(LanguageType.zh);

// 设置语言为英文
await op.SetLanguageAsync(LanguageType.en);

ICreateInstance

创建具有修改参数的新组件副本:

// 使用新设置克隆操作实例
var newOp = await op.CreateInstanceAsync(new ModbusData.Basics
{
    IpAddress = "192.168.1.101",
    Port = 502,
    Station = 2
});

GetParam

获取当前的参数/配置:

// 获取当前的基础配置
var basics = await op.GetParamAsync();
Console.WriteLine($"已连接到: {basics.IpAddress}:{basics.Port}");

继承链

CoreUnify<O, D>                   -- 单例、事件、计时、日志、语言
  └── DaqAbstract<O, D>          -- 读/写/订阅(用于协议驱动)
  └── MqAbstract<O, D>           -- 发布/消费(用于中间件)
        └── ModbusOperate        -- 具体协议实现
        └── SiemensOperate       -- 具体协议实现
        └── MqttClientOperate     -- 具体中间件实现
        └── KafkaOperate         -- 具体中间件实现
        └── ...                  -- 等等

关键设计要点

  • 单例模式 确保每个配置在 255 个实例限制内只有一个逻辑实例
  • 所有方法都是异步的 -- 始终使用 await 进行操作调用
  • 事件同时使用同步和异步委托 -- 异步处理器顺序执行,同步处理器并行执行
  • 计时是自动的 -- 每个操作结果都包含由 BegOperate/EndOperate 测量的 RunTime

参见