From df49477cb6772235bd7bdb04def85a1f5f61a808 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 14 Jul 2024 18:40:35 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20scanClampModuleCompres?= =?UTF-8?q?s=20=E5=92=8C=20scanClampModuleReset=20=20=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/a8k/appbean/AppErrorCode.java | 23 ++++++ .../entity/SamplesPreProcessModuleParameter.java | 27 +++++- .../SamplesPreProcessModuleCtrlService.java | 95 ++++++++++++++++------ 3 files changed, 116 insertions(+), 29 deletions(-) create mode 100644 src/main/java/a8k/appbean/AppErrorCode.java diff --git a/src/main/java/a8k/appbean/AppErrorCode.java b/src/main/java/a8k/appbean/AppErrorCode.java new file mode 100644 index 0000000..d8e0476 --- /dev/null +++ b/src/main/java/a8k/appbean/AppErrorCode.java @@ -0,0 +1,23 @@ +package a8k.appbean; + +public enum AppErrorCode { + Success("Success", 0), //成功 + TubeNotHasHat("TubeNotHasHat", 1); //试管没有帽子 + + final private String name; + final private int errorIndex; + + private AppErrorCode(String name, int errorIndex) { + this.name = name; + this.errorIndex = errorIndex; + } + + public String toString() { + return name; + } + + public int getErrorIndex() { + return errorIndex; + } + +} diff --git a/src/main/java/a8k/service/db/entity/SamplesPreProcessModuleParameter.java b/src/main/java/a8k/service/db/entity/SamplesPreProcessModuleParameter.java index bcb034e..1b00285 100644 --- a/src/main/java/a8k/service/db/entity/SamplesPreProcessModuleParameter.java +++ b/src/main/java/a8k/service/db/entity/SamplesPreProcessModuleParameter.java @@ -1,9 +1,15 @@ package a8k.service.db.entity; -import com.iflytop.uf.UfActiveRecord; import com.iflytop.uf.UfActiveRecordField; public class SamplesPreProcessModuleParameter { + + @UfActiveRecordField + public Integer moveToZeroOvertime;// 回零超时时间 + + @UfActiveRecordField + public Integer actionOvertime;// 执行动作的超时时间,该超时时间适用于当前模块在当前产品中所有动作的最大时间。 + /** * 升降电机相关位置 */ @@ -14,6 +20,12 @@ public class SamplesPreProcessModuleParameter { public Integer shortBlood_TakeCapPos;//矮全血试管取帽位置 @UfActiveRecordField + public Integer highBlood_capJudgePos;//高试管帽子判断位置 + + @UfActiveRecordField + public Integer shortBlood_capJudgePos;//矮全血试管帽子判断位置 + + @UfActiveRecordField public Integer elevating_MotorPosOffset;//升降电机位置偏移 /** @@ -32,13 +44,17 @@ public class SamplesPreProcessModuleParameter { * 取帽舵机 */ @UfActiveRecordField - public Integer takeCapServo_standbyPos; //取帽舵机,待机位置 + public Integer gripperServo_standbyPos; //抓手舵机,待机位置 + + @UfActiveRecordField + public Integer gripperServo_takeCapTorque; //抓手舵机,取帽扭矩 @UfActiveRecordField - public Integer takeCapServo_takeCapTorque; //取帽舵机,取帽扭矩 + public Integer gripperServo_takeTubePos; // 抓手舵机,取试管位置 @UfActiveRecordField - public Integer takeCapServo_takeTubePos; // 取帽舵机,取试管位置 + public Integer gripperServo_hatDeterminesPosThres; //判断是否有帽子的位置阈值 + /** * 摇匀电机 @@ -56,6 +72,9 @@ public class SamplesPreProcessModuleParameter { @UfActiveRecordField public Integer tubeClampMotor_ClampPos; + @UfActiveRecordField + public Integer aerosolFanLevel; //气溶胶风扇工作功率 + public static String getTableName() { return "SamplesPreProcessModuleParameter" + "Table"; } diff --git a/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java b/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java index b45c27f..539bd86 100644 --- a/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java +++ b/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java @@ -1,49 +1,77 @@ package a8k.service.hardware; +import a8k.appbean.AppErrorCode; import a8k.appbean.SampleTubeState; +import org.springframework.stereotype.Component; +@Component public class SamplesPreProcessModuleCtrlService { + /* + 样品预处理模块 + 主要负责样品预处理的相关操作 + + */ + + /* ======================================================================================= + 基础方法 + =======================================================================================*/ + /** - * 样品预处理模块 - * 主要负责样品预处理的相关操作 - * - * 涉及到常量 - * 1.试管的相关信息---试管高度 - * 2.试管的相关信息---试管含帽高度 - * 3.平移电机待机位置 - * 4.平移电机取试管位置 - * 5.平移电机试管处理位置 - * - * + * 按照一定顺序归零设备 */ + public void moveToZero() { + /* + 1. 假设没有试管在当前设备上的前提下归零设备 + 2. 舵机虽然没有零位,但需要将其移动到待机位置 + */ + } + + /** + * 使能模组 + * @param enable 是否使能模组 + */ + public void enableModule(boolean enable) { - public void takeTube(String tubeType) { - // - // 取试管并将试管放在夹紧位置,同时升降电机和平移电机移动到待机位 - // 试管放置的水平高度和其在试管架中的高度保持一直 - // } + + + + + /* ======================================================================================= + 主要服务 + =======================================================================================*/ + + /** - * 摇匀试管 - * @param tubeType - * @param times - * @param shakeDegree + * 取试管帽,如果试管帽存在, + * @param tubeType TubeType_HighBlood,TubeType_ShortBlood,TubeType_Mini,TubeType_MiniBlood,TubeType_BulletTube1P5,TubeType_BulletTube0P5 + * @param judgeCapExist 是否判断试管帽子存在与否 */ - public void ShakeTube(String tubeType, int times, int shakeDegree) { - // - // - // + public AppErrorCode takeTube(String tubeType,boolean judgeCapExist) { + /* + 注意事项: + 1. 取试管并将试管放在试管夹紧位置,同时升降电机和平移电机移动到待机位 + 2. 试管放置的水平高度和其在试管架中的高度保持一直 + 3. 取试管前,先通过试管夹紧功能判断一下试管帽是否存在(在试管没帽的边沿位置,抓手扭矩抓紧,如果等待一定时间后,抓手位置接近极限位置,则认为没有帽子,返回TubeNotHasHat错误) + 4. 无论是否抓取成功,只要不向外抛出异常,方法结束时,该模块涉及到组件均需要返回待机位置。 + + */ + + return AppErrorCode.Success; } /** * 取试管帽 */ - public void takeTubeCap() { + public AppErrorCode takeTubeCap() { // // // + // + + return AppErrorCode.Success; } /** @@ -55,6 +83,21 @@ public class SamplesPreProcessModuleCtrlService { // } + + /* ======================================================================================= + 辅助操作 + =======================================================================================*/ + + /** + * 摇匀试管 + * @param tubeType TubeType_HighBlood,TubeType_ShortBlood,TubeType_Mini,TubeType_MiniBlood,TubeType_BulletTube1P5,TubeType_BulletTube0P5 + * @param times 摇匀次数 + * @param shakeDegree 摇匀角度 + */ + public void ShakeTube(String tubeType, int times, int shakeDegree) { + + } + /** * 打开气溶胶风扇 */ @@ -82,4 +125,6 @@ public class SamplesPreProcessModuleCtrlService { public void moduleRuntimeReset() { } + + } From 7c66377ec1d7adebba0803637e8c159c3fd87f77 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 15 Jul 2024 08:56:47 +0800 Subject: [PATCH 2/4] update --- src/main/java/a8k/a8k_can_protocol/IOId.java | 37 +++++ src/main/java/a8k/a8k_can_protocol/ModuleId.java | 2 + src/main/java/a8k/a8k_can_protocol/ModuleType.java | 27 ++++ src/main/java/a8k/appbean/AppErrorCode.java | 4 + .../java/a8k/base_hardware/A8kCanBusService.java | 62 +++++++- .../ReactionPlatesTransmitCtrlService.java | 156 +++++++++++++++++++++ 6 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 src/main/java/a8k/a8k_can_protocol/IOId.java create mode 100644 src/main/java/a8k/a8k_can_protocol/ModuleType.java create mode 100644 src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java diff --git a/src/main/java/a8k/a8k_can_protocol/IOId.java b/src/main/java/a8k/a8k_can_protocol/IOId.java new file mode 100644 index 0000000..3805953 --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/IOId.java @@ -0,0 +1,37 @@ +package a8k.a8k_can_protocol; + +public enum IOId { + TubeHeightDetecter(ModuleType.kboard, 60, 0), //高低试管检测IO + TubeHolderTransferChannelTubeDetecterOuter(ModuleType.kboard, 60, 1),//试管架转移通道有无检测 外 + TubeHolderTransferChannelTubeDetecterInter(ModuleType.kboard, 60, 2),//试管架转移通道有无检测 内 + SampleExitTubeHolderlDetecter(ModuleType.kboard, 60, 3),//试管出料位置 试管架有无检测 + TubeExistDetecter(ModuleType.kboard, 60, 4),//试管有无光电 + SampleEnterTubeHolderlDetecter(ModuleType.kboard, 60, 5),//试管架入料位置 试管架有无检测 + + WasteBucketOverflowedDetector(ModuleType.kboard, 40, 2),//废料桶满溢检测 + WasteBucketOverflowedDetectorPowerCtrl(ModuleType.kboard, 40, 0),//废料桶光栅电源 + + PlateBoxCoverClosureDetector(ModuleType.kboard, 20, 0),//板夹仓舱盖闭合检测 + PlateBoxPlateStuckDetector(ModuleType.kboard, 20, 1),//板夹仓卡板检测 + + //转盘逻辑相关光电 + //钩板电机,零点光电,终点光电 + PlaterHookerMotorZeroPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorTestCardPullModule,0), + PlaterHookerMotorEndPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorTestCardPullModule,1), + //推板电机,零点光电,终点光电 + PlaterPusherMotorZeroPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorCardWarehousePushModule,0), + PlaterPusherMotorEndPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorCardWarehousePushModule,1), + ; + + + final public ModuleType mtype; + final public int mid; + final public int ioIndex; + + IOId(ModuleType mtype, int mid, int ioIndex) { + this.mtype = mtype; + this.mid = mid; + this.ioIndex = ioIndex; + } + +} diff --git a/src/main/java/a8k/a8k_can_protocol/ModuleId.java b/src/main/java/a8k/a8k_can_protocol/ModuleId.java index 2b7f8ed..5ca9a0e 100644 --- a/src/main/java/a8k/a8k_can_protocol/ModuleId.java +++ b/src/main/java/a8k/a8k_can_protocol/ModuleId.java @@ -7,6 +7,7 @@ public class ModuleId { public static final int MotorCardWarehouseMoveBoardModule = 20;//板夹仓模块 public static final int MotorCardWarehouseMoveModule = 21;//板夹仓移动电机 public static final int MotorCardWarehousePushModule = 22;//板夹仓推杆电机 + public static final int CardWarehouseScanerModule = 23;//板夹仓扫码模组 public static final int ShakeModuleBoard = 30;//摇匀模组板 public static final int MotorTubeScanClampModule = 31;//试管固定夹爪电机 @@ -55,6 +56,7 @@ public class ModuleId { case MotorCardWarehouseMoveBoardModule -> "MotorCardWarehouseMoveBoardModule"; case MotorCardWarehouseMoveModule -> "MotorCardWarehouseMoveModule"; case MotorCardWarehousePushModule -> "MotorCardWarehousePushModule"; + case CardWarehouseScanerModule -> "CardWarehouseScanerModule"; case ShakeModuleBoard -> "ShakeModuleBoard"; case MotorTubeScanClampModule -> "MotorTubeScanClampModule"; diff --git a/src/main/java/a8k/a8k_can_protocol/ModuleType.java b/src/main/java/a8k/a8k_can_protocol/ModuleType.java new file mode 100644 index 0000000..053057c --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/ModuleType.java @@ -0,0 +1,27 @@ +package a8k.a8k_can_protocol; + +public enum ModuleType { + khbot_module(1), // hbot模块 + ktemperature_ctrl_module(3), // 温度控制 + kfan_ctrl_module(5), // 风扇控制 + kcode_scaner(6), // 扫码器 + kpipette_ctrl_module(7), // 移液体枪控制 + ka8000_optical_module(8), // a8000光学模组 + ktmc_step_motor(10), // 步进电机 + kmini_servo_motor_module(11), // 舵机 + kboard(12), // 板子 + ka8000_idcard_reader(13), // id卡读卡器 + ka8000_plate_code_scaner(14); // 反应板条扫码器 + + final private int val; + + ModuleType(int val) { + this.val = val; + } + + public int getVal() { + return val; + } + + +} diff --git a/src/main/java/a8k/appbean/AppErrorCode.java b/src/main/java/a8k/appbean/AppErrorCode.java index d8e0476..5758a3d 100644 --- a/src/main/java/a8k/appbean/AppErrorCode.java +++ b/src/main/java/a8k/appbean/AppErrorCode.java @@ -7,11 +7,15 @@ public enum AppErrorCode { final private String name; final private int errorIndex; + public int mid; + private AppErrorCode(String name, int errorIndex) { this.name = name; this.errorIndex = errorIndex; } + + public String toString() { return name; } diff --git a/src/main/java/a8k/base_hardware/A8kCanBusService.java b/src/main/java/a8k/base_hardware/A8kCanBusService.java index 22f2eb6..6ce634d 100644 --- a/src/main/java/a8k/base_hardware/A8kCanBusService.java +++ b/src/main/java/a8k/base_hardware/A8kCanBusService.java @@ -3,6 +3,7 @@ package a8k.base_hardware; import a8k.a8k_can_protocol.A8kPacket; import a8k.a8k_can_protocol.CmdId; import a8k.a8k_can_protocol.Errorcode; +import a8k.a8k_can_protocol.IOId; import a8k.appbean.HardwareException; import a8k.appbean.appevent.A8kHardwareReport; import a8k.service.AppEventBusService; @@ -142,12 +143,67 @@ public class A8kCanBusService { } //TODO + public boolean getIOState(IOId ioid) throws HardwareException { + return false; + } + + //TODO + public void setIOState(IOId ioid, boolean val) throws HardwareException { + } + + + //TODO + public A8kPacket callcmd(Integer moduleId, Integer cmdId) throws HardwareException { + return null; + } + + //TODO + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0) throws HardwareException { + return null; + } + + //TODO + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1) throws HardwareException { + return null; + } + + //TODO + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2) throws HardwareException { + return null; + } + + //TODO + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3) throws HardwareException { + return null; + } + + //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3, Integer acitionOvertime) throws HardwareException, InterruptedException { + } + + //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer acitionOvertime) throws HardwareException, InterruptedException { + } + + //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer acitionOvertime) throws HardwareException, InterruptedException { + } + + //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer p0, Integer acitionOvertime) throws HardwareException, InterruptedException { + } + + //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer acitionOvertime) throws HardwareException, InterruptedException { + } + + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer[] params) throws HardwareException { var packet = this.packParamsToPacket(moduleId, cmdId, params); return this.sendCmd(packet, A8kPacket.CMD_OVERTIME); } - //TODO + public A8kPacket sendCmdAutoResend(A8kPacket pack, int overtime) throws HardwareException { //调用sendCmd, // 如果捕获到超时异常,则重发,最多重发三次 @@ -164,7 +220,7 @@ public class A8kCanBusService { return null; } - //TODO + public void callblockcmd(Integer moduleId, Integer cmdId, Integer[] params, int acitionOvertime) throws HardwareException, InterruptedException { var packet = this.packParamsToPacket(moduleId, cmdId, params); this.sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME); @@ -175,7 +231,7 @@ public class A8kCanBusService { long startedAt = System.currentTimeMillis(); do { - var pack = this.callcmd(moduleId, CmdId.kmodule_get_status, new Integer[]{}); + var pack = this.callcmd(moduleId, CmdId.kmodule_get_status, new Integer[]{}); var status = pack.getContentI32(0); if (0 == status) { break; diff --git a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java new file mode 100644 index 0000000..c20221d --- /dev/null +++ b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java @@ -0,0 +1,156 @@ +package a8k.service.hardware; + +import a8k.appbean.AppErrorCode; +import org.springframework.stereotype.Component; + +@Component +public class ReactionPlatesTransmitCtrlService { + + + /* + 职责说明 + 1.仓位变化 + 2.推出反应板 + 3.反应板推出异常检测 + 4.反应板推出二次校准服务 + */ + + /* ======================================================================================= + 基础操作 + =======================================================================================*/ + + boolean moduleReset() { + /* + 复位要求 + 1. 反应板夹仓推杆零点光电处于触发状态 + 2. 板夹钩爪零点光电处于触发状态 或 终点光电处于触发状态 + 3. 板夹卡板光电没有处于触发状态 + */ + + + + + + } + + + /* ======================================================================================= + 板夹仓操作 + =======================================================================================*/ + void pushReactionPlate(int plateBoxChannelNum, int turntablePosIndex) { + /* + 1. 控制转盘移动到第turntablePosIndex个位置 + 2. 控制板夹仓平移到第boxChannelNum个仓位 + 3. 推出板 + 3.1 板推出后检查推板电机终点电机是否触发,如果没有触发,则说明卡板,上报硬件异常 + 4. 板夹推杆回到零点,并执行一次归零动作。 + 5. 板夹仓平移电机,移动零点,并执行一次归零动作,归零后向后相对移动1mm,保证零点触发。 + + 推板 使用模块 CardWarehouseScanerModule + 指令: kplate_code_scaner_push_card_and_scan(参数为扫码结束位置,相当于指令moveTo参数) + 相关寄存器: + kreg_plate_code_scaner_scan_start_pos (每次扫码前需要设置该参数) + kreg_plate_code_scaner_code_judgment_threshold (扫码前设置,该数值为1,0码判定阈值) + kreg_plate_code_scaner_item (扫码完成读取) + kreg_plate_code_scaner_lot (扫码完成读取) + kreg_plate_code_scaner_code_legal (扫码完成读取) + + */ + + } + + /** + * 读取 推板时的扫码结果LotId + */ + int plateScanerReadlateLot() { + return 0; + } + + /** + * 读取 推板时的扫码结果ItermId + */ + int plateScanerReadPlateIterm() { + return 0; + } + + /** + * 读取 推板时的扫码结果合法性 + */ + boolean plateScanerReadPlateIsLegal() { + return false; + } + + + Integer[] plateScanerReadRawData() { + /* + 先不实现, + 后续实现效果, + 网页端执行完推板后,点击读取,网页端弹出一个页面, + 页面上有一条曲线 + 有曲线的最大值和最小值 + 且参考下面代码打上参考线 + for (int i = 0; i < 15; i++) { + plot2d->addRefLine(i * 12 + 6 ); + } + */ + return null; + } + + /* ======================================================================================= + 光学模组部分操作 + =======================================================================================*/ + + void pullReactionPlate(int turntablePosIndex) { + /* + 1.检查当前钩爪出口光电是否触发,如果没有触发,直接报 电机位置异常 + 2.移动转盘 + 3.移动光学模组到丢板的位置 + 4.移动光学模组到待机位置 + 5.钩爪勾取反应板到指定位置 + 6.钩爪动作完成时,检查钩爪零点光电是否触发,如果没有触发报电机阻转异常 + */ + + } + + + + /* ======================================================================================= + 转盘操作 + =======================================================================================*/ + + + /** + * 移动转盘到入口位置 + * @param turntablePos 第几个仓位 + */ + void moveTurntableToEnterPos(int turntablePos) { + /* + 注意事项: + 1.移动前检查,出转盘钩爪电机光电是否触发(两个光电必须触发一个才能执行动作),否则直接抛出 电机位置异常错误 + 2.移动前检测,入转盘钩爪零点光电是否触发。 + 3.移动前检查,入转盘卡板光电是否触发。 + */ + } + + /** + * 移动转盘到出口位置 + * @param turntablePos 第几个仓位 + */ + void moveTurntableToExitPos(int turntablePos) { + /* + 同moveTurntableToEnterPos + */ + } + + /** + * 移动转盘到点滴位置 + * @param turntablePos 第几个仓位 + */ + void moveTurntableToDropLiquidPos(int turntablePos) { + /* + 同moveTurntableToEnterPos + */ + } + + +} From 184f06ae899520803f54b7f17127a54d33a54c0b Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 15 Jul 2024 12:28:46 +0800 Subject: [PATCH 3/4] ,update --- src/main/java/a8k/appbean/DebugTask.java | 9 +++++++++ src/main/java/a8k/appbean/DebugTaskContext.java | 19 +++++++++++++++++++ .../java/a8k/service/DebugTaskSchedulerService.java | 16 ++++++++++++++++ .../hardware/ReactionPlatesTransmitCtrlService.java | 4 +--- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/main/java/a8k/appbean/DebugTask.java create mode 100644 src/main/java/a8k/appbean/DebugTaskContext.java create mode 100644 src/main/java/a8k/service/DebugTaskSchedulerService.java diff --git a/src/main/java/a8k/appbean/DebugTask.java b/src/main/java/a8k/appbean/DebugTask.java new file mode 100644 index 0000000..e597bdb --- /dev/null +++ b/src/main/java/a8k/appbean/DebugTask.java @@ -0,0 +1,9 @@ +package a8k.appbean; + +public interface DebugTask { + public void run(DebugTaskContext cxt); + + public void onStop(DebugTaskContext cxt); + + public void onException(DebugTaskContext cxt, Exception e); +} diff --git a/src/main/java/a8k/appbean/DebugTaskContext.java b/src/main/java/a8k/appbean/DebugTaskContext.java new file mode 100644 index 0000000..0c23e6c --- /dev/null +++ b/src/main/java/a8k/appbean/DebugTaskContext.java @@ -0,0 +1,19 @@ +package a8k.appbean; + +import java.util.HashMap; +import java.util.Map; + +public class DebugTaskContext { + + Map vals = new HashMap<>(); + + + void setContext(String key, Object val) { + vals.put(key, val); + } + + + public T getContext(String key) { + return (T) vals.get(key); + } +} diff --git a/src/main/java/a8k/service/DebugTaskSchedulerService.java b/src/main/java/a8k/service/DebugTaskSchedulerService.java new file mode 100644 index 0000000..868efe4 --- /dev/null +++ b/src/main/java/a8k/service/DebugTaskSchedulerService.java @@ -0,0 +1,16 @@ +package a8k.service; + + + +public class DebugTaskSchedulerService { + + + + public void stop(){ + + } + + public void start(){ + + } +} diff --git a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java index c20221d..46916ac 100644 --- a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java +++ b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java @@ -19,7 +19,7 @@ public class ReactionPlatesTransmitCtrlService { 基础操作 =======================================================================================*/ - boolean moduleReset() { + void moduleReset() { /* 复位要求 1. 反应板夹仓推杆零点光电处于触发状态 @@ -29,8 +29,6 @@ public class ReactionPlatesTransmitCtrlService { - - } From 57f99fec8c71989f78986b52338adaff857d2767 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 15 Jul 2024 15:01:04 +0800 Subject: [PATCH 4/4] add A8kDebugTaskExecutorService --- src/main/java/a8k/appbean/DebugTask.java | 9 ----- src/main/java/a8k/appbean/DebugTaskContext.java | 19 ---------- .../a8k/service/A8kDebugTaskExecutorService.java | 43 ++++++++++++++++++++++ src/main/java/a8k/service/A8kStateMgrService.java | 9 +++++ .../a8k/service/DebugTaskSchedulerService.java | 16 -------- 5 files changed, 52 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/a8k/appbean/DebugTask.java delete mode 100644 src/main/java/a8k/appbean/DebugTaskContext.java create mode 100644 src/main/java/a8k/service/A8kDebugTaskExecutorService.java create mode 100644 src/main/java/a8k/service/A8kStateMgrService.java delete mode 100644 src/main/java/a8k/service/DebugTaskSchedulerService.java diff --git a/src/main/java/a8k/appbean/DebugTask.java b/src/main/java/a8k/appbean/DebugTask.java deleted file mode 100644 index e597bdb..0000000 --- a/src/main/java/a8k/appbean/DebugTask.java +++ /dev/null @@ -1,9 +0,0 @@ -package a8k.appbean; - -public interface DebugTask { - public void run(DebugTaskContext cxt); - - public void onStop(DebugTaskContext cxt); - - public void onException(DebugTaskContext cxt, Exception e); -} diff --git a/src/main/java/a8k/appbean/DebugTaskContext.java b/src/main/java/a8k/appbean/DebugTaskContext.java deleted file mode 100644 index 0c23e6c..0000000 --- a/src/main/java/a8k/appbean/DebugTaskContext.java +++ /dev/null @@ -1,19 +0,0 @@ -package a8k.appbean; - -import java.util.HashMap; -import java.util.Map; - -public class DebugTaskContext { - - Map vals = new HashMap<>(); - - - void setContext(String key, Object val) { - vals.put(key, val); - } - - - public T getContext(String key) { - return (T) vals.get(key); - } -} diff --git a/src/main/java/a8k/service/A8kDebugTaskExecutorService.java b/src/main/java/a8k/service/A8kDebugTaskExecutorService.java new file mode 100644 index 0000000..9603e1e --- /dev/null +++ b/src/main/java/a8k/service/A8kDebugTaskExecutorService.java @@ -0,0 +1,43 @@ +package a8k.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class A8kDebugTaskExecutorService { + public static final Logger logger = LoggerFactory.getLogger(A8kDebugTaskExecutorService.class); + + Thread task; + + synchronized void exec(Runnable runnable) { + if (task != null) { + task.interrupt(); + try { + task.join(); + } catch (InterruptedException ignored) { + return; + } + } + + task = new Thread(runnable); + task.start(); + } + + synchronized void stop() { + try { + task.join(); + task = null; + } catch (InterruptedException e) { + logger.error(e.getMessage()); + } + } + + synchronized boolean isRunning() { + if (task == null) { + return false; + } + return task.isAlive(); + } + +} diff --git a/src/main/java/a8k/service/A8kStateMgrService.java b/src/main/java/a8k/service/A8kStateMgrService.java new file mode 100644 index 0000000..74eb508 --- /dev/null +++ b/src/main/java/a8k/service/A8kStateMgrService.java @@ -0,0 +1,9 @@ +package a8k.service; + +import org.springframework.stereotype.Component; + +@Component +public class A8kStateMgrService { + + +} diff --git a/src/main/java/a8k/service/DebugTaskSchedulerService.java b/src/main/java/a8k/service/DebugTaskSchedulerService.java deleted file mode 100644 index 868efe4..0000000 --- a/src/main/java/a8k/service/DebugTaskSchedulerService.java +++ /dev/null @@ -1,16 +0,0 @@ -package a8k.service; - - - -public class DebugTaskSchedulerService { - - - - public void stop(){ - - } - - public void start(){ - - } -}