最简单的方式 1.错误 2.绑定的动作 clearError,根据错误列表中的错误,对设备进行恢复。也可以当错误大于两个的时候,直接报严重错误。 机械臂: ..... .准备(条件:当某个试管已经开始处理的) ..... .锁定 .取样+混合+滴定 .取样+混合+滴定 .取样+混合+滴定 .释放 .复位 ..... ..... actions = 条件检查 Errors = doActions(); -->执行动作(并行) -->执行动作(并行) -->执行动作(并行) -->执行动作(并行) clearErrors(); waitForAllActionIsDone() ..... 同一时刻只做一件事儿 设备动作: 入料 暂停 停止 继续 出料 入料 入料扫描 -预处理样本 -处理样本 -入料扫描 -移动并预处理样本-A -Tip头准备 -取样本并处理样本 -取处理好的样本滴定 -反应板准备 -反应板推出 -反应板扫描 -移动并预处理样本-B -出料 出错: 错误处理: 假设: 1. 系统状态自动切换到暂停状态。如果是fatal则自动切换到stop状态。 2. 用户按下继续后,设备可以继续工作,同时先根据错误类型,执行相应的动作。 3. 如果是fatal错误,用户需要关机,并依次移走所有耗材。 4. while(true){ stop pause } 动作: 入料并扫描 条件: 没有错误,设备运行工作中,试管架状态为IDLE,入料光电被触发 副作用: 修改耗材状态 动作: 出料 条件: 没有错误,设备运行中,试管架状态为FINISHED 副作用: 修改试管架状态为IDLE ----------------------------------------------------------------------------------- 动作: 试管预处理A 条件: 没有错误,设备运行中,试管架状态为PROCESS,试管预处理状态为CHECK_REASOUR_FINISHED,或者处理中,待处理试管不为0 副作用: 修改试管处理状态为PRE-PROCESS-A 动作: 耗材资源检查,孵育盘有空余位置。 条件: 没有错误,设备运行中,试管架状态为PROCESS,试管预处理状态为IDLE,待处理试管不为0 副作用: 动作: 样本后处理 条件 PRE_PROCESS_A FINISHED,孵育盘有空余位置。 RECORSE: 副作用: 修改PRE_PROCESS_A --> SAMPLE_POST_PROCESS cnt++; 设置孵育盘状态 基本原则: 每个动作都有一定的触发条件和硬件资源,当条件满足时且申请到硬件资源时执行动作。 ----------------------------------------------------------------------------------- 核心点? 特殊点: 一个状态触发多个任务: 状态: 1.SOMTHING_PROCESSING [处理中] 2.SOMTHING_FINISHED [处理完成]