C# Event(事件) 和 PLC 信号事件
核心三要素
发布者(Publisher):发出信号的设备 / 类
→ 例子:PLC、传感器
事件(Event):信号变化的通知
→ 例子:DI 信号接通、报警产生
订阅者(Subscriber):处理信号的程序
→ 例子:记录日志、弹窗提示、执行动作
using System;
// 1. PLC 类(发布者:负责读取信号、触发事件)
public class PLC
{
// 2. 定义事件:当 DI 信号变化时触发
// 参数:信号编号(bool)、信号状态
public event Action<int, bool> DI_SignalChanged;
// 模拟 PLC 扫描信号
public void ScanSignal(int signalNumber, bool newState)
{
Console.WriteLine($"\n[PLC扫描] 信号{signalNumber} 新状态: {newState}");
// 3. 触发事件!通知上位机:信号变了
DI_SignalChanged?.Invoke(signalNumber, newState);
}
}
// 主程序(订阅者:处理信号)
class Program
{
static void Main()
{
// 创建 PLC 对象
PLC plc = new PLC();
// 4. 订阅事件(监听 PLC 信号变化)
plc.DI_SignalChanged += OnDI_SignalChanged;
// 模拟:PLC 信号变化
plc.ScanSignal(1, true); // 信号1 接通
plc.ScanSignal(1, false); // 信号1 断开
plc.ScanSignal(2, true); // 信号2 接通
}
// 事件处理方法:信号变化后自动执行
static void OnDI_SignalChanged(int signalNumber, bool state)
{
string status = state ? "接通" : "断开";
Console.WriteLine($"[上位机处理] 信号{signalNumber} 已{status}");
// 在这里可以写:记录日志、弹窗、控制输出、触发流程
}
}
运行步骤
程序启动 → 创建 PLC 对象
订阅事件(+=):我要监听信号
调用 ScanSignal → 模拟信号变化
PLC 输出信号状态
触发事件 Invoke()
自动执行 OnDI_SignalChanged
上位机处理信号(记录 / 提示 / 动作)

浙公网安备 33010602011771号