2. 离散事件系统基础

离散事件系统(Discrete Event System, DES)的核心特征是:系统状态只在离散的时间点上发生跳变,两次跳变之间状态保持不变。产线正是典型的离散事件系统——一台机床在 08:15:23 完成加工、一个托盘在 08:15:24 被 AGV 取走、一台设备在 08:17:05 因故障停机,这些时刻才是系统真正"发生变化"的瞬间。理解 DES 的六个核心概念,就是理解产线仿真建模的语言基础。

一、六个核心概念及其产线对应物

实体(Entity)是系统中流动、被加工或被服务的对象。在产线中,实体通常是工件、托盘、工单批次,甚至是需要维修的刀具。实体具有属性,例如工件类型、工艺路线、优先级、当前工序号。实体是"被处理的东西",它不主动改变系统,而是被系统推动着前进。

资源(Resource)是执行加工、搬运、检测等操作的能力单元,包括机床、装配工位、AGV、机械手、操作工人、检测台。资源的关键属性是容量(Capacity):容量为 1 表示同一时刻只能服务一个实体(如单主轴加工中心),容量大于 1 表示可并行服务(如 3 个并行装配工位、2 台同型号检测设备)。资源还有可用性状态:空闲、忙碌、故障、换型、计划停机。

事件(Event)是使系统状态发生瞬时改变的动作或时刻。DES 仿真中通常区分两类事件:到达事件(工件到达某工位、订单下达)和离开事件(加工完成、搬运结束、故障发生)。事件是仿真时钟推进的驱动力——仿真引擎不断从事件日历中取出最早发生的事件,把时钟直接跳到该时刻,这就是"下一事件时间推进"机制。

活动(Activity)是两个事件之间的持续过程,具有明确的持续时间。例如"加工"这一活动从"开始加工"事件起,到"加工完成"事件止,持续 42 秒。活动本身不改变状态,它只是把两个事件在时间轴上连接起来。区分事件与活动是建模的关键:事件是点,活动是区间。

进程(Process)是实体在系统中经历的完整生命周期,由若干活动按逻辑顺序串联而成。一个工件的进程可能是:到达 → 排队 → 装夹 → 加工 → 卸料 → 检测 → 入库。进程描述的是"一个实体从生到死"的路径,是面向对象建模(如 SimPy 的 Process、Plant Simulation 的 Method)的基本单位。

队列(Queue)是实体在等待资源时停留的缓冲区,本质上是"等待中的实体集合"。队列有容量限制(无限、有限、零容量即不允许等待)和排队规则(FIFO、优先级、最短加工时间优先等)。队列长度和等待时间是产线仿真最常关注的性能指标之一。

二、概念之间的关系:一张图看清

下面这张图用一条真实产线的片段,把六个概念串起来:工件作为实体,在机床、AGV、检测台这些资源之间流动;每一次状态跳变是一个事件;两个事件之间是活动;工件走完全程构成进程;等待资源时进入队列。

产线片段中的 DES 六要素映射 实体流(工件) 到达 事件 队列 Q1 FIFO 容量∞ CNC-01 资源 容量=1 加工 42s 队列 Q2 FIFO 容量5 AGV-02 资源 容量=1 搬运 18s QC-01 资源 容量=2 检测 25s 完成 事件 等待活动 加工活动 等待活动 搬运活动 检测活动 进程(Process):工件 W-001 的完整生命周期 到达 → 排队Q1 → 装夹 → 加工 → 排队Q2 → 搬运 → 排队Q3 → 检测 → 入库 事件时间轴(仿真时钟推进) t=0 到达 t=8 开始加工 t=50 加工完成 t=68 搬运完成 t=93 检测完成 事件(瞬时状态跳变) 活动(持续区间) 队列(等待缓冲区) 资源(加工/搬运/检测单元) 实体沿箭头流动;资源被实体占用;队列吸收等待;事件驱动时钟推进;活动连接两个事件;进程是实体的完整路径。

三、从概念到建模:一个可执行的映射练习

把上述概念落到仿真模型里,需要做一次"对象映射"。以一条包含 1 台 CNC、1 台 AGV、1 个双工位检测台的产线为例,建模时的映射关系如下:

DES 概念仿真模型中的对象关键参数/属性产线对应物
实体Entity / Part类型、工艺路线、优先级工件 W-001
资源Resource / Machine容量、可用率、换型时间CNC-01、AGV-02、QC-01
事件Event发生时刻、事件类型到达、开始加工、加工完成
活动Activity / Delay持续时间分布加工 42s、搬运 18s、检测 25s
进程Process步骤序列、分支条件W-001 的完整加工路径
队列Queue / Buffer容量、排队规则Q1 无限 FIFO、Q2 容量 5

建模时最容易出错的地方是把"活动"和"事件"混为一谈。例如"加工 42 秒"是一个活动,它由"开始加工"和"加工完成"两个事件界定;如果只记录"加工完成"事件而忽略"开始加工"事件,就无法统计机床的忙碌时间,也无法计算设备利用率。另一个常见错误是忽略队列容量:当 Q2 容量设为 5 而实际在制品超过 5 时,仿真会触发"阻塞"逻辑,上游机床被迫停机,这个阻塞效应往往才是产能瓶颈的真正来源。

建模检查清单:每定义一个实体,问自己:它的进程包含哪些活动?每个活动占用哪个资源?资源容量是多少?活动前后各对应什么事件?等待发生在哪个队列、队列容量和排队规则是什么?把这五个问题答完,一个可运行的 DES 模型骨架就基本成型了。

四、事件调度:仿真时钟如何推进

DES 仿真的运行机制可以用"事件日历"来理解。仿真开始时,日历中只有初始事件(如 t=0 工件到达)。引擎反复执行:取出日历中最早的事件 → 将仿真时钟推进到该时刻 → 执行该事件对应的状态变更 → 可能产生新事件并插入日历。当 t=0 的到达事件被执行后,会生成"t=8 开始加工"事件;t=8 事件执行后,又生成"t=50 加工完成"事件。时钟不是均匀走动的,而是从一个事件时刻直接跳到下一个事件时刻,这正是离散事件仿真比时间步长仿真高效的原因。

理解这一点对产能评估至关重要:仿真输出的产能、在制品、等待时间、资源利用率,全部来自事件序列的统计。如果事件定义不完整(例如漏掉故障事件、换型事件、班次切换事件),仿真结果就会系统性偏乐观。因此在建模阶段,建议先把产线中所有可能改变状态的事件列全,再逐一映射到资源与队列上,最后才去关心分布拟合和参数标定。

常见误区:把"队列"简单理解为"库存"。队列是等待中的实体集合,它占用的是时间而不是空间;库存是已完工或已入库的物料,它占用的是场地和资金。仿真中队列长度直接影响上游阻塞和下游饥饿,而库存水平更多影响的是物流成本和响应速度,两者在模型中的处理方式完全不同。