You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.5 KiB
3.5 KiB
/*
*
* while(!isWaitingForStop()){
* if(当前样本处理完成){
* if(入料口有样本){
* 扫描样本 && 判断耗材是否充足
* 如果耗材不足,
* 提示用户(抛出提示事件),
* 暂停设备(退出线程(抛出pause异常))
* 如果扫描样本有误
* 提示用户
* 暂停设备
* }
* }
* else{
* 处理样本
* }
* }
*
* try{
*
* }catch(PauseException e){
* //pauseSelf
* //抛出事件
* }
*
* if(event){
* pauseSampleProcessThread();
* }
*
*/
经验: 动作与赋值分开 当一组动作完全执行完之后,再赋值给状态,这样就可以使得动作在执行过程中任意时间点都可以被打断。
while(true){ TubeCfg cfg = getTubeCfg(i); moveTubeHolderProcessPos if(tubeType == xxx) takeTube shakeTube(times,degree) takeHap move else if(){ ...
}
pausePoint;
}
问题: 有两种暂停状态: 一种是复位势暂停。 一种是保持现状势暂停。(前提是循环中)
pause/stop
动作划分为状态机 scan{ . . . . }
状态机->enter
状态机->enter
{ IDLE { if(state.eq(wokring)){ state.changeTo(scanPrepare) }
}
SCANPREPARE
{
enterState
exitState
if(ioTrigger){
moveTubeHolderTo
waitForIoTrigger
changeStateTo(scanTubeHolderType)
if(error){
changeStateToError
}
}
}
SCANHODLER
{
move
scan
}
SCAN
PAUSE
{
}
}
用户PAUSE --> 暂停,恢复,全局状态的变更。
遇到错误 --> 通知,记录,清空工作位。无需恢复。
状态机 -->
修改全局状态。
记录。
执行动作。
前端接口:
pause;
continue;
全局都有哪些状态?
1. 类似于配置,
初始化
运行过程中修改(前端提交)
2. 运行过程控制,记录当前设备运行到哪一步,以便执行下一步。
步骤与暂停之间的关系。
步骤与恢复?
步骤与停止之间的关系。
步骤
步骤
步骤
步骤
步骤
暂停
步骤
----------------------------------------------
每一步都有几种处理方法
1. firstEnter
checkCondition是否满足
2. finalExit
3. loop
4. pause
5. continue
waitting_for_take_sample
pause
stepPause;
stepContinue;
stop
协作?
全局状态
{
take_tip
take_xxx
put_xxx
waitting_for
onPause{
....
}
onStop{
...
}
pauseCondtion{
...
}
}
{
pause...
}
pause_point
服务的提供者,
服务的使用者,
相互配合呢?
triggerHasTakeSample
doNext
---处理---
| |
| --搬运--(等待)
| |
扫描与预处理(等待) 抛出事件。
机械臂
takeSampleEnd
----------------------------
暂停:
waitingForPause,不需要弹出,只有单次循环结束
停止:
break?
异常:
exception?
第一假如需要允许暂停,则需要将步骤进行拆分,暂停点作为一步。
机械动作的暂停,涉及到,暂停和暂停恢复,不能简单的在代码中添加一个pause就可以的。