初识Jasima-Jasima中的事件和消息

299 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

获取更多资讯,赶快关注上面的公众号吧!
【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

仿真基本事件、处理和消息

虽然上面的内容看起来很多,但在实际应用中不会都涉及到,下面这幅图给出了一次仿真中大多会涉及的事件、处理和消息,看完后是不是觉得很清晰。