本文已参与「新人创作礼」活动,一起开启掘金创作之路。
获取更多资讯,赶快关注上面的公众号吧!
【Jasima系列教程】
- 初识Jasima-调度仿真系列教程预告
- 初识Jasima-Jasima中的建模对象
- (本文)初识Jasima-Jasima中的事件和消息
@[TOC]
初识Jasima-Jasima中的事件和消息
其实在Jasima中的事件处理和消息机制并不是很复杂,看过以下内容后你就会觉得很清楚。
事件
仿真基本的流程是作业到达后进入机床队列,如果机床空闲则开始加工,否则作业在队列中等待,由于工时提前已知且确定,所以作业一旦开始加工,加工结束时间也就确定。当作业加工完成,释放机床,如果不是最后一道工序则作业进入下一道工序的队列,同上述过程相似,而如果是最后一道工序,则作业加工完成离开系统。释放后的机床又会从自己的队列中选择等待加工的作业。当所有作业加工完成或系统在制品数达到上限,则仿真结束。
投料源事件:通过该事件不断地产生作业,在事件处理中,会不断创建新的作业,同时又会将投料源事件重新加入到事件列表中,直到达到指定的作业数量。释放的作业进入机床队列,触发机床选择加工事件。
选择加工事件:该事件触发时,机床将从队列中选择最优先的作业进行加工,并创建加工完成事件,作业开始加工时又会预约下一机床,创建未来到达事件。
加工完成事件:工序完成时触发,释放机床,机床状态变为空闲IDLE,工件当前工序完成,如果为最后一道工序,则触发工件加工完成,否则发送工件至下一机床。如果当前机床缓存中有待加工工件,则选择工件进行加工,触发选择加工事件。
未来到达事件:该事件触发时,作业会添加到机床的队列中,当至少有一台机床空闲且队列中有作业正在等待时,创建选择加工事件。
消息
Jasima中采用了消息监听机制进行相应动作的处理,各个组件实现了Notifier接口,该接口负责向各个监听器NotifierListener通知事件,使用Java泛型实现了观察者模式(Observer-pattern),在其实现类NotifierImpl中通过NotifierListener对真实的通知器subject进行处理。
监听器
实验监听器ExperimentListener
为实验监听器的基类,将所有实验相关的事件指定到不同的方法。
| 事件消息 | 事件名称 |
|---|---|
| 实验开始 | EXPERIMENT_STARTING |
| 实验初始化 | EXPERIMENT_INITIALIZED |
| 实验运行前 | EXPERIMENT_BEFORE_RUN |
| 实验运行 | EXPERIMENT_RUN_PERFORMED |
| 实验运行后· | EXPERIMENT_AFTER_RUN |
| 实验完成 | EXPERIMENT_DONE |
| 实验收集结果 | EXPERIMENT_COLLECTING_RESULTS |
| 实验正在完成 | EXPERIMENT_FINISHING |
| 实验已完成 | EXPERIMENT_FINISHED |
| 其他 | handleOther |
作业监听器JobListener
| 事件消息 | 事件名称 |
|---|---|
| 作业到达 | JOB_RELEASED |
| 作业完成 | JOB_FINISHED |
| 作业进入队列 | JOB_ARRIVED_IN_QUEUE |
| 作业离开队列 | JOB_REMOVED_FROM_QUEUE |
| 作业开始加工工序 | JOB_START_OPERATION |
| 作业完成加工工序 | JOB_END_OPERATION |
| 其他 | handleOther |
仿真组件生命周期监听器SimComponentLifeCycleListener
| 事件消息 | 事件名称 |
|---|---|
| 初始化 | INIT |
| 运行前 | BEFORE_RUN |
| 运行后 | AFTER_RUN |
| 完成 | DONE |
| 打印结果消息 | ProduceResultsMessage |
| 其他 | handleOther |
车间监听器ShopListener
| 事件消息 | 事件名称 |
|---|---|
| 作业到达 | JOB_RELEASED |
| 作业完成 | JOB_FINISHED |
| 生命周期监听器 | SimComponentLifeCycleListener |
工作站监听器WorkStationListener
| 事件消息 | 事件名称 |
|---|---|
| 工作站到达作业 | WS_JOB_ARRIVAL |
| 工作站选择作业 | WS_JOB_SELECTED |
| 工作站完成作业 | WS_JOB_COMPLETED |
| 工作站激活 | WS_ACTIVATED |
| 工作站失效 | WS_DEACTIVATED |
| 生命周期监听器 | SimComponentLifeCycleListener |
仿真基本事件、处理和消息
虽然上面的内容看起来很多,但在实际应用中不会都涉及到,下面这幅图给出了一次仿真中大多会涉及的事件、处理和消息,看完后是不是觉得很清晰。