首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第95章 事件系统

第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 组成的离散事件系统,而不是神经网络机制。

Leave a Reply

Your email address will not be published. Required fields are marked *