Browse Source
Merge branch 'master' of http://192.168.1.3:3000/project_boditech_vidas_a8000_v3/a8k_app
tags/v0
Merge branch 'master' of http://192.168.1.3:3000/project_boditech_vidas_a8000_v3/a8k_app
tags/v0
10 changed files with 451 additions and 32 deletions
-
37src/main/java/a8k/a8k_can_protocol/IOId.java
-
2src/main/java/a8k/a8k_can_protocol/ModuleId.java
-
27src/main/java/a8k/a8k_can_protocol/ModuleType.java
-
27src/main/java/a8k/appbean/AppErrorCode.java
-
62src/main/java/a8k/base_hardware/A8kCanBusService.java
-
43src/main/java/a8k/service/A8kDebugTaskExecutorService.java
-
9src/main/java/a8k/service/A8kStateMgrService.java
-
27src/main/java/a8k/service/db/entity/SamplesPreProcessModuleParameter.java
-
154src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
-
95src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.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; |
|||
} |
|||
|
|||
} |
@ -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; |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,27 @@ |
|||
package a8k.appbean; |
|||
|
|||
public enum AppErrorCode { |
|||
Success("Success", 0), //成功 |
|||
TubeNotHasHat("TubeNotHasHat", 1); //试管没有帽子 |
|||
|
|||
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; |
|||
} |
|||
|
|||
public int getErrorIndex() { |
|||
return errorIndex; |
|||
} |
|||
|
|||
} |
@ -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(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,9 @@ |
|||
package a8k.service; |
|||
|
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
public class A8kStateMgrService { |
|||
|
|||
|
|||
} |
@ -0,0 +1,154 @@ |
|||
package a8k.service.hardware; |
|||
|
|||
import a8k.appbean.AppErrorCode; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
public class ReactionPlatesTransmitCtrlService { |
|||
|
|||
|
|||
/* |
|||
职责说明 |
|||
1.仓位变化 |
|||
2.推出反应板 |
|||
3.反应板推出异常检测 |
|||
4.反应板推出二次校准服务 |
|||
*/ |
|||
|
|||
/* ======================================================================================= |
|||
基础操作 |
|||
=======================================================================================*/ |
|||
|
|||
void 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 |
|||
*/ |
|||
} |
|||
|
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue