Browse Source

update

tags/v0
zhaohe 1 year ago
parent
commit
7c66377ec1
  1. 37
      src/main/java/a8k/a8k_can_protocol/IOId.java
  2. 2
      src/main/java/a8k/a8k_can_protocol/ModuleId.java
  3. 27
      src/main/java/a8k/a8k_can_protocol/ModuleType.java
  4. 4
      src/main/java/a8k/appbean/AppErrorCode.java
  5. 60
      src/main/java/a8k/base_hardware/A8kCanBusService.java
  6. 156
      src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java

37
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;
}
}

2
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";

27
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;
}
}

4
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;
}

60
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);

156
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 (扫码前设置该数值为10码判定阈值)
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
*/
}
}
Loading…
Cancel
Save