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.

240 lines
3.5 KiB

10 months ago
  1. /*
  2. *
  3. * while(!isWaitingForStop()){
  4. * if(当前样本处理完成){
  5. * if(入料口有样本){
  6. * 扫描样本 && 判断耗材是否充足
  7. * 如果耗材不足,
  8. * 提示用户(抛出提示事件),
  9. * 暂停设备(退出线程(抛出pause异常))
  10. * 如果扫描样本有误
  11. * 提示用户
  12. * 暂停设备
  13. * }
  14. * }
  15. * else{
  16. * 处理样本
  17. * }
  18. * }
  19. *
  20. * try{
  21. *
  22. * }catch(PauseException e){
  23. * //pauseSelf
  24. * //抛出事件
  25. * }
  26. *
  27. * if(event){
  28. * pauseSampleProcessThread();
  29. * }
  30. *
  31. */
  32. 经验:
  33. 动作与赋值分开
  34. 当一组动作完全执行完之后,再赋值给状态,这样就可以使得动作在执行过程中任意时间点都可以被打断。
  35. while(true){
  36. TubeCfg cfg = getTubeCfg(i);
  37. moveTubeHolderProcessPos
  38. if(tubeType == xxx)
  39. takeTube
  40. shakeTube(times,degree)
  41. takeHap
  42. move
  43. else if(){
  44. ...
  45. }
  46. pausePoint;
  47. }
  48. 问题:
  49. 有两种暂停状态:
  50. 一种是复位势暂停。
  51. 一种是保持现状势暂停。(前提是循环中)
  52. pause/stop
  53. 动作划分为状态机
  54. scan{
  55. .
  56. .
  57. .
  58. .
  59. }
  60. 状态机->enter
  61. 状态机->enter
  62. {
  63. IDLE
  64. {
  65. if(state.eq(wokring)){
  66. state.changeTo(scanPrepare)
  67. }
  68. }
  69. SCANPREPARE
  70. {
  71. enterState
  72. exitState
  73. if(ioTrigger){
  74. moveTubeHolderTo
  75. waitForIoTrigger
  76. changeStateTo(scanTubeHolderType)
  77. if(error){
  78. changeStateToError
  79. }
  80. }
  81. }
  82. SCANHODLER
  83. {
  84. move
  85. scan
  86. }
  87. SCAN
  88. PAUSE
  89. {
  90. }
  91. }
  92. ```
  93. 用户PAUSE --> 暂停,恢复,全局状态的变更。
  94. 遇到错误 --> 通知,记录,清空工作位。无需恢复。
  95. 状态机 -->
  96. 修改全局状态。
  97. 记录。
  98. 执行动作。
  99. 前端接口:
  100. pause;
  101. continue;
  102. 全局都有哪些状态?
  103. 1. 类似于配置,
  104. 初始化
  105. 运行过程中修改(前端提交)
  106. 2. 运行过程控制,记录当前设备运行到哪一步,以便执行下一步。
  107. 步骤与暂停之间的关系。
  108. 步骤与恢复?
  109. 步骤与停止之间的关系。
  110. 步骤
  111. 步骤
  112. 步骤
  113. 步骤
  114. 步骤
  115. 暂停
  116. 步骤
  117. ----------------------------------------------
  118. 每一步都有几种处理方法
  119. 1. firstEnter
  120. checkCondition是否满足
  121. 2. finalExit
  122. 3. loop
  123. 4. pause
  124. 5. continue
  125. waitting_for_take_sample
  126. pause
  127. stepPause;
  128. stepContinue;
  129. stop
  130. 协作?
  131. 全局状态
  132. {
  133. take_tip
  134. take_xxx
  135. put_xxx
  136. waitting_for
  137. onPause{
  138. ....
  139. }
  140. onStop{
  141. ...
  142. }
  143. pauseCondtion{
  144. ...
  145. }
  146. }
  147. {
  148. pause...
  149. }
  150. pause_point
  151. ```
  152. ```
  153. 服务的提供者,
  154. 服务的使用者,
  155. 相互配合呢?
  156. triggerHasTakeSample
  157. doNext
  158. ---处理---
  159. | |
  160. | --搬运--(等待)
  161. | |
  162. 扫描与预处理(等待) 抛出事件。
  163. 机械臂
  164. takeSampleEnd
  165. ----------------------------
  166. 暂停:
  167. waitingForPause,不需要弹出,只有单次循环结束
  168. 停止:
  169. break?
  170. 异常:
  171. exception?
  172. 第一假如需要允许暂停,则需要将步骤进行拆分,暂停点作为一步。
  173. 机械动作的暂停,涉及到,暂停和暂停恢复,不能简单的在代码中添加一个pause就可以的。
  174. ```