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.

161 lines
8.0 KiB

1 year ago
  1. <template>
  2. <div class="h-full flex flex-col">
  3. <div class="border-b p-5 bg-white flex flex-row">
  4. <div>样本预处理</div>
  5. <div v-if="false" class="ml-1"><LoadingOutlined /></div>
  6. </div>
  7. <a-row class="h-0 grow">
  8. <a-col class="border-r" :span="16">
  9. <div class="p-5 border-t border-b">
  10. <a-row>
  11. <a-col class="p-1" :span="8"><a-input prefix="回零超时时间 : " v-model:value="serviceParams.MoveToZeroOvertime" /></a-col>
  12. <a-col class="p-1" :span="8"><a-input prefix="执行动作的超时时间 : " v-model:value="serviceParams.ActionOvertime" /></a-col>
  13. <a-col class="p-1" :span="8"><a-input prefix="高全血试管取帽位置 : " v-model:value="serviceParams.ZMotor_HighBloodTakeCapHeight" /></a-col>
  14. <a-col class="p-1" :span="8"><a-input prefix="矮全血试管取帽位置 : " v-model:value="serviceParams.ZMotor_ShortBloodTakeCapHeight" /></a-col>
  15. <a-col class="p-1" :span="8"><a-input prefix="高试管帽子判断位置 : " v-model:value="serviceParams.ZMotor_HighBloodCapJudgeHeight" /></a-col>
  16. <a-col class="p-1" :span="8"><a-input prefix="矮全血试管帽子判断位置 : " v-model:value="serviceParams.ZMotor_ShortBloodCapJudgeHeight" /></a-col>
  17. <a-col class="p-1" :span="8"><a-input prefix="摇匀位放置高度 : " v-model:value="serviceParams.ZMotor_placeShakeHeight" /></a-col>
  18. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机待机位置 : " v-model:value="serviceParams.HorizontalMotor_standbyPos" /></a-col>
  19. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机取帽位置 : " v-model:value="serviceParams.HorizontalMotor_takeCapPos" /></a-col>
  20. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机放帽位置 : " v-model:value="serviceParams.HorizontalMotor_takePushCapPos" /></a-col>
  21. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机待机位置 : " v-model:value="serviceParams.GripperServo_standbyPos" /></a-col>
  22. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机取帽扭矩 : " v-model:value="serviceParams.GripperServo_takeCapTorque" /></a-col>
  23. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机取试管位置 : " v-model:value="serviceParams.GripperServo_takeTubePos" /></a-col>
  24. <a-col class="p-1" :span="8"><a-input prefix="判断是否有帽子的位置阈值 : " v-model:value="serviceParams.GripperServo_hatDeterminesPosThres" /></a-col>
  25. <a-col class="p-1" :span="8"><a-input prefix="摇匀电机待机位置 : " v-model:value="serviceParams.ShakeMotor_standbyPos" /></a-col>
  26. <a-col class="p-1" :span="8"><a-input prefix="摇匀电机摇匀角度 : " v-model:value="serviceParams.ShakeMotor_shakeDegree" /></a-col>
  27. <a-col class="p-1" :span="8"><a-input prefix="试管夹紧电机待机位置 : " v-model:value="serviceParams.TubeClampMotor_standbyPos" /></a-col>
  28. <a-col class="p-1" :span="8"><a-input prefix="试管夹紧电机夹紧位置 : " v-model:value="serviceParams.TubeClampMotor_ClampPos" /></a-col>
  29. <a-col class="p-1" :span="8"><a-input prefix="气溶胶风扇控制参数 : " v-model:value="serviceParams.AerosolFanLevel" /></a-col>
  30. <a-col class="p-1" :span="8">
  31. <a-button class="mr-1" @click="actionServiceParamsReload">刷新</a-button>
  32. <a-button @click="actionServiceParamsSave">保存</a-button>
  33. </a-col>
  34. </a-row>
  35. </div>
  36. <div class="p-5">
  37. <a-button class="m-1" @click="actionQuickExec('enableModule',0)">失能</a-button>
  38. <a-button class="m-1" @click="actionQuickExec('enableModule',1)">使能</a-button>
  39. <a-button class="m-1" @click="actionQuickExec('')">停止</a-button>
  40. <a-button class="m-1" @click="actionQuickExec('moveToZero')">归零</a-button>
  41. <a-button class="m-1" @click="actionQuickExec('openAerosolFan')">打开气溶胶风扇</a-button>
  42. <a-button class="m-1" @click="actionQuickExec('closeAerosolFan')">关闭气溶胶风扇</a-button>
  43. <a-button class="m-1" @click="actionQuickExec('moduleResetWhenPowerOn')">设备初始化时复位</a-button>
  44. <a-button class="m-1" @click="actionQuickExec('moduleRuntimeReset')">设备运行时复位</a-button>
  45. <div class="mt-1">
  46. <a-input-group compact class="flex flex-row">
  47. <a-button @click="actionShakeTube">摇匀试管</a-button>
  48. <a-input class="!w-64" prefix="TubeType : " v-model:value="shakeTubeParams[0]"/>
  49. <a-input class="!w-32" prefix="TubeIndex : " v-model:value="shakeTubeParams[1]"/>
  50. </a-input-group>
  51. </div>
  52. <div class="mt-1">
  53. <a-input-group compact class="flex flex-row">
  54. <a-button @click="actionTakeTube">取试管</a-button>
  55. <a-input class="!w-64" prefix="TubeType : " v-model:value="takeTubeParams[0]"/>
  56. </a-input-group>
  57. </div>
  58. <div class="mt-1">
  59. <a-input-group compact class="flex flex-row">
  60. <a-button @click="actionTakeTubeCap">取试管帽</a-button>
  61. <a-input class="!w-64" prefix="TubeType : " v-model:value="takeTubeCapParams[0]"/>
  62. </a-input-group>
  63. </div>
  64. <div class="mt-1">
  65. <a-input-group compact class="flex flex-row">
  66. <a-button @click="actionPushBackTubeCapAndTakeBakTube">盖试管帽并将试管移动回试管架中</a-button>
  67. <a-input class="!w-64" prefix="TubeType : " v-model:value="pushBackTubeCapAndTakeBakTubeParams[0]"/>
  68. </a-input-group>
  69. </div>
  70. </div>
  71. </a-col>
  72. <a-col :span="8" class="p-5">
  73. <div class="border rounded p-5 whitespace-pre-line h-full overflow-y-auto bg-white"
  74. >{{ message }}</div>
  75. </a-col>
  76. </a-row>
  77. </div>
  78. </template>
  79. <script setup>
  80. import ApiClient from '@/utils/ApiClient';
  81. import { ref } from 'vue';
  82. import { LoadingOutlined } from '@ant-design/icons-vue';
  83. const message = ref('');
  84. const serviceParams = ref({});
  85. const shakeTubeParams = ref(['', 3, 90]);
  86. const takeTubeParams = ref(['']);
  87. const takeTubeCapParams = ref(['']);
  88. const pushBackTubeCapAndTakeBakTubeParams = ref(['']);
  89. async function actionServiceParamsReload() {
  90. serviceParams.value = {};
  91. message.value = '';
  92. let client = ApiClient.getClient();
  93. try {
  94. let res = await client.call('tmp-test/get-service-params');
  95. message.value = res;
  96. serviceParams.value = res.data;
  97. } catch ( e ) {
  98. message.value = e.message
  99. }
  100. }
  101. async function actionServiceParamsSave() {
  102. message.value = '';
  103. let client = ApiClient.getClient();
  104. try {
  105. let res = await client.call('tmp-test/update-service-params', serviceParams.value);
  106. message.value = res;
  107. } catch ( e ) {
  108. message.value = e.message
  109. }
  110. }
  111. // execute service method
  112. async function executeServiceMethod( method, params=[]) {
  113. message.value = '';
  114. let client = ApiClient.getClient();
  115. try {
  116. let res = await client.call('tmp-test/execute-service-method', {
  117. service:'motorTubeRackMoveCtrlService',
  118. method,
  119. params
  120. });
  121. message.value = res;
  122. } catch ( e ) {
  123. message.value = e.message
  124. }
  125. }
  126. function actionQuickExec( action, ... params ) {
  127. executeServiceMethod(action, params);
  128. }
  129. function actionShakeTube() {
  130. executeServiceMethod('ShakeTube',[
  131. serviceParams.value[0],
  132. serviceParams.value[1] * 1,
  133. serviceParams.value[2] * 1
  134. ])
  135. }
  136. function actionTakeTube() {
  137. executeServiceMethod('takeTube',[
  138. takeTubeParams.value[0],
  139. ])
  140. }
  141. function actionTakeTubeCap() {
  142. executeServiceMethod('takeTubeCap',[
  143. takeTubeCapParams.value[0]
  144. ]);
  145. }
  146. function actionPushBackTubeCapAndTakeBakTube() {
  147. executeServiceMethod('pushBackTubeCapAndTakeBakTube',[
  148. pushBackTubeCapAndTakeBakTubeParams.value[0]
  149. ]);
  150. }
  151. </script>