第95章 事件系统
第94章建立了生命周期系统,核心是:
State + Event + Transition + History
第95章进一步建立其中的 Event System。
生命周期回答:
对象现在处于什么状态?
事件系统回答:
发生了什么?发生在哪里?由谁产生?应该通知谁?应该执行什么处理?
因此,Event System 是 SAI Framework 内部各组件之间进行状态变化通知、运行过程通知、异常通知和结果通知的基础机制。
1. Event
1.1 Event 定义
Event 可以定义为:
Event 是 SAI Framework 中对已经发生或被确认发生的状态变化、信息到达、行为执行、设备变化、学习变化或系统变化进行结构化描述的数据对象。
基本结构:
Event
{
id
type
source
target
data
state
timestamp
}
例如:
Event
{
id: "event_001",
type: "INFORMATION_RECEIVED",
source: "Sensor_A",
target: "Individual_A",
data: {
temperature: 92
},
state: "NEW",
timestamp: "..."
}
Event 本身主要描述:
发生了什么
谁产生的
影响谁
携带什么数据
什么时候发生
当前事件是什么状态
1.2 Event 与 State
必须区分:
Event = 发生的事情
State = 当前状态
例如:
Device_A
state = RUNNING
突然收到:
TEMPERATURE_HIGH
这是 Event。
经过 Detection、Risk、Diagnosis、Decision、Action 后:
RUNNING
↓
STOPPING
↓
STOPPED
这是 State Transition。
因此:
Event
↓
可能导致
↓
State Transition
但:
Event 不等于 State。
2. Event Type
Event Type 用于说明事件属于什么类型。
可以建立统一事件分类。
2.1 Framework Event
FRAMEWORK_CREATED
FRAMEWORK_INITIALIZED
FRAMEWORK_STARTED
FRAMEWORK_STOPPING
FRAMEWORK_STOPPED
FRAMEWORK_ERROR
2.2 Individual Event
INDIVIDUAL_CREATED
INDIVIDUAL_STARTED
INDIVIDUAL_RUNNING
INDIVIDUAL_WAITING
INDIVIDUAL_PAUSED
INDIVIDUAL_STOPPED
INDIVIDUAL_ERROR
2.3 Information Event
INFORMATION_RECEIVED
INFORMATION_VALIDATED
INFORMATION_ACCEPTED
INFORMATION_REJECTED
INFORMATION_PERCEIVED
INFORMATION_USED
INFORMATION_STORED
2.4 Object Event
OBJECT_DETECTED
OBJECT_CREATED
OBJECT_RECOGNIZED
OBJECT_UPDATED
OBJECT_CHANGED
OBJECT_INACTIVE
OBJECT_ARCHIVED
OBJECT_INVALID
2.5 Behavior Event
BEHAVIOR_CREATED
BEHAVIOR_READY
BEHAVIOR_STARTED
BEHAVIOR_WAITING
BEHAVIOR_COMPLETED
BEHAVIOR_FAILED
BEHAVIOR_CANCELLED
2.6 Action Event
ACTION_CREATED
ACTION_VALIDATED
ACTION_STARTED
ACTION_COMPLETED
ACTION_FAILED
ACTION_CANCELLED
2.7 Device Event
DEVICE_CONNECTED
DEVICE_READY
DEVICE_STARTED
DEVICE_RUNNING
DEVICE_STOPPED
DEVICE_ERROR
DEVICE_DISCONNECTED
DEVICE_STATE_CHANGED
2.8 Learning Event
LEARNING_CREATED
LEARNING_STARTED
LEARNING_ANALYZING
LEARNING_EXTRACTING
LEARNING_VALIDATING
LEARNING_COMPLETED
LEARNING_FAILED
KNOWLEDGE_CREATED
KNOWLEDGE_UPDATED
2.9 Self-Maintenance Event
ERROR_DETECTED
RISK_DETECTED
CONFLICT_DETECTED
DIAGNOSIS_STARTED
DIAGNOSIS_COMPLETED
REPAIR_STARTED
REPAIR_COMPLETED
VERIFICATION_STARTED
VERIFICATION_COMPLETED
因此 Event Type 实际上建立了一套 Framework 的事件词汇表。
3. Event Source
Event Source 是事件来源。
定义:
Event Source 是产生 Event 的对象、组件、设备、系统或外部环境。
例如:
Sensor_A
Individual_A
ReasoningEngine
DecisionEngine
VehicleAdapter
Device_A
LearningEngine
ExternalSystem
都可以成为 Event Source。
3.1 Sensor Source
例如温度传感器:
Source = Sensor_A
Type = TEMPERATURE
Value = 92
产生:
TEMPERATURE_CHANGED
3.2 Engine Source
例如 DetectionEngine:
Source = DetectionEngine
产生:
ERROR_DETECTED
3.3 Individual Source
Individual 运行过程中可以产生:
Source = Individual_A
例如:
DECISION_CREATED
BEHAVIOR_STARTED
3.4 Device Source
物理设备可以产生:
Source = Motor_A
例如:
DEVICE_STATE_CHANGED
DEVICE_ERROR
DEVICE_STOPPED
3.5 External Source
外部系统也可以产生事件:
Source = ExternalSystem_A
例如:
EXTERNAL_INFORMATION_RECEIVED
Event Source 与 Event Target
Source 是:
谁产生事件?
Target 是:
谁接收或受到事件影响?
例如:
Sensor_A
│
│ Event
▼
Individual_A
那么:
source = Sensor_A
target = Individual_A
4. Event Dispatch
Event Dispatch 是事件分发机制。
定义:
Event Dispatch 是将 Event 从事件产生者发送到一个或多个符合条件的 Listener 或 Handler 的过程。
基本流程:
Event Source
↓
Create Event
↓
Event Dispatcher
↓
Find Listener
↓
Dispatch
↓
Event Handler
例如:
Sensor_A
↓
TEMPERATURE_CHANGED
↓
EventDispatcher
↓
DetectionListener
↓
DetectionHandler
4.1 Dispatcher 的职责
Dispatcher 主要负责:
接收 Event
检查 Event
查找 Listener
确定分发对象
发送 Event
记录分发结果
它不应该负责:
Cognition
Reasoning
Decision
Learning
这些仍然属于对应系统。
4.2 Dispatcher 示例
class EventDispatcher
{
protected $listeners = array();
public function register($type, $listener)
{
if (!isset($this->listeners[$type])) {
$this->listeners[$type] = array();
}
$this->listeners[$type][] = $listener;
}
public function dispatch($event)
{
$type = $event->getType();
if (!isset($this->listeners[$type])) {
return false;
}
foreach ($this->listeners[$type] as $listener) {
$listener->handle($event);
}
return true;
}
}
这里 Dispatcher 只负责:
Event → Listener
不负责决定事件的业务含义。
5. Event Listener
Listener 是事件监听器。
定义:
Event Listener 是登记自己需要关注的 Event Type,并在对应事件发生时接收 Event 的组件。
例如:
DetectionListener
LearningListener
MemoryListener
DeviceListener
BehaviorListener
5.1 Listener 注册
例如:
$dispatcher->register(
'DEVICE_ERROR',
$detectionListener
);
表示:
DEVICE_ERROR
↓
DetectionListener
当:
Device_A
产生:
DEVICE_ERROR
Dispatcher 找到:
DetectionListener
然后交给它处理。
5.2 一个 Event 可以有多个 Listener
例如:
DEVICE_ERROR
│
├── DetectionListener
├── MemoryListener
└── LoggingListener
因此:
一个 Event 不一定只有一个接收者。
这使 Framework 内部组件能够保持相对独立。
6. Event Handler
Handler 是事件处理器。
Listener 负责:
监听什么事件?
Handler 负责:
收到事件以后怎么处理?
例如:
DEVICE_ERROR
↓
DeviceListener
↓
DeviceErrorHandler
↓
Detection
6.1 Handler 示例
class DeviceErrorHandler
{
public function handle($event)
{
$deviceId = $event->getTarget();
return array(
'event' => $event->getType(),
'device' => $deviceId,
'action' => 'CREATE_DETECTION'
);
}
}
Handler 不应该直接承担全部自我维护逻辑。
它可以触发:
Detection
然后由 Detection 系统继续:
Detection
↓
Risk
↓
Diagnosis
↓
Decision
↓
Repair
↓
Verification
这样事件系统与自维护系统保持边界。
Listener 与 Handler 的区别
这是事件系统中的重要区别。
Listener = 监听
Handler = 处理
例如:
Event
↓
Dispatcher
↓
Listener
↓
Handler
↓
处理结果
可以理解为:
Listener:
“我关注 DEVICE_ERROR。”
Handler:
“DEVICE_ERROR 到了,我执行相应处理。”
7. Event Queue
Event Queue 是事件队列。
当事件产生速度大于处理速度时,不能要求所有 Event 都立即处理。
因此可以:
Event Source
↓
Event
↓
Event Queue
↓
Dispatcher
↓
Listener
↓
Handler
7.1 Queue 的作用
Event Queue 可以实现:
事件暂存
事件排序
事件等待
事件逐个处理
事件失败重试
事件优先级处理
例如:
Queue
├── Event_001 DEVICE_ERROR
├── Event_002 TEMPERATURE_CHANGED
├── Event_003 INFORMATION_RECEIVED
└── Event_004 LEARNING_COMPLETED
7.2 FIFO
最基本的队列:
First In
↓
First Out
例如:
Event_001
Event_002
Event_003
处理:
Event_001
↓
Event_002
↓
Event_003
7.3 Priority Queue
有些事件不能简单按照时间顺序。
例如:
NORMAL_INFORMATION
DEVICE_STATUS
ERROR_DETECTED
EMERGENCY_STOP
可以设置:
EMERGENCY_STOP = 100
ERROR_DETECTED = 90
DEVICE_STATUS = 50
NORMAL = 10
于是:
Event Queue
↓
Priority
↓
High Priority Event
↓
Dispatcher
这与第52章 Priority 的概念可以结合,但必须注意:
Event Priority 是事件处理优先级,不等于 Decision Priority。
7.4 Event Queue 状态
事件本身也可以具有处理状态:
NEW
QUEUED
DISPATCHING
PROCESSING
HANDLED
FAILED
RETRY
CANCELLED
例如:
NEW
↓
QUEUED
↓
DISPATCHING
↓
PROCESSING
↓
HANDLED
处理失败:
PROCESSING
↓
FAILED
↓
RETRY
↓
PROCESSING
8. SAI Event 示例
现在把 Event System 放入完整 SAI 生命周期。
使用前面一直使用的工业设备案例:
Machine_A
当前:
Machine_A
state = RUNNING
production = PRODUCING
temperature = 92
load = 82
8.1 Sensor 产生信息
温度传感器检测到:
temperature = 92
产生:
Event
{
type: "TEMPERATURE_CHANGED",
source: "TemperatureSensor_A",
target: "Machine_A",
data: {
temperature: 92
}
}
8.2 Event 进入 Queue
TemperatureSensor_A
↓
TEMPERATURE_CHANGED
↓
EventQueue
状态:
QUEUED
8.3 Dispatcher 分发
EventQueue
↓
EventDispatcher
↓
TemperatureListener
8.4 Handler 处理
TemperatureListener
↓
TemperatureHandler
↓
Information
形成:
Information
{
source: "TemperatureSensor_A",
type: "TEMPERATURE",
value: 92
}
然后进入 Individual:
InformationReceiver
↓
Scene
↓
Perception
8.5 Perception
Perception 得到:
Element:
temperature = 92
建立:
Object:
Machine_A
属性:
temperature = 92
load = 82
state = RUNNING
production = PRODUCING
8.6 Cognition
Cognition 理解当前状态:
Machine_A
temperature = 92
load = 82
state = RUNNING
production = PRODUCING
形成:
Machine_A
temperature_high = TRUE
load_high = TRUE
8.7 Reasoning
读取 Rule:
IF
temperature > 85
AND
load > 80
THEN
risk = HIGH
当前:
temperature = 92 > 85
load = 82 > 80
所以:
Conclusion:
Machine_A.risk = HIGH
8.8 Decision
Candidates:
CONTINUE
REDUCE_SPEED
PAUSE
STOP
EMERGENCY_STOP
经过 Risk、Priority、Capability、Condition 检查:
Decision:
REDUCE_SPEED
8.9 Behavior
Behavior:
REDUCE_SPEED
状态:
NEW
↓
READY
↓
RUNNING
产生:
BEHAVIOR_STARTED
8.10 Action
Action:
SET_SPEED
target:
Machine_A
value:
800 RPM
产生:
ACTION_STARTED
8.11 Adapter
Action
↓
MachineAdapter
↓
Industrial Controller
↓
Machine_A
设备实际变化:
1200 RPM
↓
1000 RPM
↓
800 RPM
设备产生:
DEVICE_STATE_CHANGED
8.12 Feedback Event
Machine_A
↓
DEVICE_STATE_CHANGED
↓
EventQueue
↓
EventDispatcher
Listener:
DeviceFeedbackListener
Handler:
DeviceFeedbackHandler
形成:
Feedback
{
device: "Machine_A",
state: "RUNNING",
speed: 800,
result: "SUCCESS"
}
8.13 Experience Event
Action 完成后:
ACTION_COMPLETED
可以通知:
ExperienceListener
然后:
ExperienceHandler
↓
ExperienceMemory
保存:
Condition
Action
Process
Result
Feedback
Outcome
8.14 Learning Event
如果经验满足学习条件:
LEARNING_STARTED
经过:
ANALYZING
EXTRACTING
VALIDATING
UPDATING
最后:
LEARNING_COMPLETED
形成:
Knowledge Update
SAI Event 完整路径
最终形成:
TemperatureSensor_A
│
▼
TEMPERATURE_CHANGED
│
▼
EventQueue
│
▼
EventDispatcher
│
▼
TemperatureListener
│
▼
TemperatureHandler
│
▼
Information
│
▼
Perception
│
▼
Cognition
│
▼
Reasoning
│
▼
Decision
│
▼
Behavior
│
▼
Action
│
▼
Adapter
│
▼
Machine_A
│
▼
Feedback
│
▼
Event
│
├── Memory
├── Experience
├── Detection
└── Learning
这就是 SAI Event System 的基本闭环。
Event System 核心结构
Event Source
│
▼
Create Event
│
▼
Event Queue
│
▼
Event Dispatcher
│
▼
Event Listener
│
▼
Event Handler
│
┌───────────┼───────────┐
▼ ▼ ▼
Memory Detection Learning
│ │ │
└───────────┴───────────┘
│
▼
SAI Runtime
Event 与 SAI 各系统的关系
Event
│
├── Framework Lifecycle
│
├── Individual Lifecycle
│
├── Information Lifecycle
│
├── Object Lifecycle
│
├── Behavior Lifecycle
│
├── Device Lifecycle
│
└── Learning Lifecycle
所以第94章的:
Lifecycle
与第95章的:
Event
形成直接关系:
Event
↓
State Transition
↓
Lifecycle
同时:
Lifecycle
↓
State Change
↓
Event
两者形成双向关联。
本章核心定义
Event
Event 是对 SAI Framework 中已经发生或被确认发生的事件进行结构化描述的对象。
Event Type
Event Type 用于定义事件的类别和语义。
Event Source
Event Source 是产生事件的对象、组件、设备、Individual 或外部系统。
Event Dispatch
Event Dispatch 是将事件分发给相关 Listener 的过程。
Event Listener
Event Listener 是负责关注特定事件类型的监听组件。
Event Handler
Event Handler 是接收到 Event 后执行具体事件处理的组件。
Event Queue
Event Queue 是用于暂存、排序和依次处理 Event 的运行机制。
最终形成:
Event Source
↓
Event
↓
Event Queue
↓
Event Dispatcher
↓
Event Listener
↓
Event Handler
↓
SAI System
而 SAI 的完整事件闭环是:
信息到达
↓
产生 Event
↓
事件分发
↓
Individual 感知
↓
认知
↓
推理
↓
决策
↓
行为
↓
行动
↓
外部执行
↓
反馈
↓
再次产生 Event
↓
Memory / Experience / Learning
↓
更新
↓
新的 Information
因此,第95章建立的是 SAI Framework 的“事件神经系统”式组织机制,但它本质上仍然是明确的 Event、Queue、Dispatcher、Listener、Handler 和 State Transition 组成的离散事件系统,而不是神经网络机制。