diff --git a/doc/A5000plus说明书_200922.pdf b/doc/A5000plus说明书_200922.pdf
new file mode 100644
index 0000000..8a24e20
Binary files /dev/null and b/doc/A5000plus说明书_200922.pdf differ
diff --git a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java
index bb96753..c424ab8 100644
--- a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java
+++ b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java
@@ -12,6 +12,7 @@ import com.dreamworks.boditech.entity.ParamTestEmergencyAppend;
import com.dreamworks.boditech.entity.ParamTestRegularAppend;
import com.dreamworks.boditech.service.DeviceService;
import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -27,6 +28,75 @@ import java.util.Map;
public class DeviceController extends BaseController {
@Resource
private DeviceService deviceService;
+ @Value("${app.device.enable}")
+ private Boolean deviceEnable;
+
+ @ResponseBody
+ @PostMapping("/api/device/load")
+ public ApiResponse load() {
+ if ( !this.deviceEnable ) { // @TODO: 测试完成后删除
+ return this.success();
+ }
+
+ this.deviceService.load();
+ return this.success();
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@ResponseBody
@PostMapping("/api/device/test-card-load")
@@ -169,11 +239,7 @@ public class DeviceController extends BaseController {
return this.success();
}
- @ResponseBody
- @PostMapping("/api/device/load")
- public ApiResponse load() {
- return this.success();
- }
+
@ResponseBody
@PostMapping("/api/device/unload")
diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardBox.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardBox.java
index bb0bd49..0c9a8ec 100644
--- a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardBox.java
+++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardBox.java
@@ -1,5 +1,8 @@
package com.dreamworks.boditech.driver.consumable;
public class CsmTestCardBox {
+ // status of test card box : OK
+ public static final String STATUS_OK = "OK";
+
/**
* index of test card box : 0 - 5
*/
@@ -14,10 +17,10 @@ public class CsmTestCardBox {
/**
* status of test card box :
- *
- EMPTY
- * - READY
+ * - OK
+ * - NOT_EXIST
* - QR_CODE_INVALID
* - ID_CHIP_INFO_NOT_FOUND
*/
- public String status = "EMPTY";
+ public String status = "NOT_EXIST";
}
diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardManager.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardManager.java
index 2559c14..24b2e5d 100644
--- a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardManager.java
+++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmTestCardManager.java
@@ -10,6 +10,8 @@ public class CsmTestCardManager {
private final Device device;
// list of test card boxes
private final List testCardBoxes = new ArrayList<>();
+ // list of project colors
+ private final String[] colors = new String[]{"red", "green", "blue", "yellow", "purple", "orange"};
// constructor
public CsmTestCardManager(Device device) {
@@ -50,7 +52,7 @@ public class CsmTestCardManager {
}
/**
- * append test card by box code
+ * append test card by box code string
* code example : 1||CAGGB66U||2024.03.26||1279||06
* code format : projectCodeNum||lotCode||expireDate||unknown||unknown
* @param index position of test card in cell
@@ -61,23 +63,25 @@ public class CsmTestCardManager {
String[] parts = code.split("\\|\\|");
if (parts.length != 5) {
- box.status = "QR_CODE_INVALID";
- return;
+ throw new RuntimeException("QR_CODE_INVALID");
}
box.lotCode = parts[1];
IdChip idChip = this.device.idChipService.findByLotCode(box.lotCode);
if ( null == idChip ) {
- box.status = "ID_CHIP_INFO_NOT_FOUND";
- return;
+ throw new RuntimeException("ID_CHIP_INFO_NOT_FOUND");
+ }
+ if ( idChip.expiredDate < System.currentTimeMillis() / 1000 ) {
+ throw new RuntimeException("ID_CHIP_EXPIRED");
}
Integer projectCodeNum = Integer.parseInt(parts[0]);
- Project project = this.device.projectService.findByCodeNum(projectCodeNum);
+ Project project = this.device.projectService.activeProjectByCodeNum(projectCodeNum);
box.projectId = project.id;
box.projectName = project.name;
+ box.projectColor = project.color;
box.cardAmount = 25;
- box.status = "READY";
+ box.status = CsmTestCardBox.STATUS_OK;
}
diff --git a/src/main/java/com/dreamworks/boditech/driver/task/TaskLoad.java b/src/main/java/com/dreamworks/boditech/driver/task/TaskLoad.java
new file mode 100644
index 0000000..a085943
--- /dev/null
+++ b/src/main/java/com/dreamworks/boditech/driver/task/TaskLoad.java
@@ -0,0 +1,47 @@
+package com.dreamworks.boditech.driver.task;
+import com.dreamworks.boditech.driver.Device;
+import com.dreamworks.boditech.driver.actuator.ActArmXY;
+import com.dreamworks.boditech.driver.actuator.ActCodeScanner;
+import com.dreamworks.boditech.driver.actuator.ActModuleTestCardBoxCase;
+import com.dreamworks.boditech.driver.actuator.ActuatorModule;
+public class TaskLoad extends TaskBase {
+ @Override
+ public void execute(Executor executor) {
+ Device device = executor.getDevice();
+ ActArmXY armXY = (ActArmXY)device.getActuator(ActuatorModule.ARM_XY);
+
+ try {
+ this.testCardLoad(executor);
+ } catch (RuntimeException e) {
+ armXY.reset();
+ throw e;
+ }
+ }
+
+ // load test card
+ private void testCardLoad(Executor executor) {
+ Device device = executor.getDevice();
+ ActArmXY armXY = (ActArmXY)device.getActuator(ActuatorModule.ARM_XY);
+ ActCodeScanner codeScanner = (ActCodeScanner)device.getActuator(ActuatorModule.ARM_Z_SCANNER);
+
+ // 检查试卡盒仓盖是否关闭
+ ActModuleTestCardBoxCase testCardBoxCase = (ActModuleTestCardBoxCase)device.getActuator(ActuatorModule.TEST_CARD_BOX_CASE);
+ if ( 1 == testCardBoxCase.readIO(ActModuleTestCardBoxCase.IO_CASE_COVER_CLOSED) ) {
+ throw new RuntimeException("TEST_CARD_BOX_CASE_COVER_NOT_CLOSED");
+ }
+
+ Integer scanStartX = device.getLocationByName("testCardScanStart.x");
+ Integer scanStartY = device.getLocationByName("testCardScanStart.y");
+ Integer scanDistance = device.getLocationByName("testCardBoxScanDistance");
+ for ( int i=0; i<6; i++ ) {
+ armXY.moveTo(scanStartX, scanStartY + i * scanDistance);
+ String code = codeScanner.scan(500);
+ if ( "".equals(code) ) {
+ continue ;
+ }
+ device.testCards.appendByBoxCode(i, code);
+ }
+
+ armXY.reset();
+ }
+}
diff --git a/src/main/java/com/dreamworks/boditech/entity/IdChip.java b/src/main/java/com/dreamworks/boditech/entity/IdChip.java
index 8bf6f27..f1c8c4c 100644
--- a/src/main/java/com/dreamworks/boditech/entity/IdChip.java
+++ b/src/main/java/com/dreamworks/boditech/entity/IdChip.java
@@ -3,5 +3,5 @@ public class IdChip {
// lot code
public String lotCode;
// expire date
- public String expiredDate;
+ public Integer expiredDate;
}
diff --git a/src/main/java/com/dreamworks/boditech/entity/Project.java b/src/main/java/com/dreamworks/boditech/entity/Project.java
index dd24ade..5e66beb 100644
--- a/src/main/java/com/dreamworks/boditech/entity/Project.java
+++ b/src/main/java/com/dreamworks/boditech/entity/Project.java
@@ -4,5 +4,7 @@ public class Project {
public String name;
public String code;
public Integer codeNum;
+ // color of project
+ public String color;
public String steps;
}
diff --git a/src/main/java/com/dreamworks/boditech/mapper/IdChipMapper.java b/src/main/java/com/dreamworks/boditech/mapper/IdChipMapper.java
index 3d60164..c1a6bb6 100644
--- a/src/main/java/com/dreamworks/boditech/mapper/IdChipMapper.java
+++ b/src/main/java/com/dreamworks/boditech/mapper/IdChipMapper.java
@@ -4,6 +4,6 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface IdChipMapper {
- @Select("SELECT * FROM id_chip WHERE lot_code = #{lotCode}")
+ @Select("SELECT * FROM bdt_id_chips WHERE lotCode = #{lotCode}")
IdChip findByLotCode(String lotCode);
}
diff --git a/src/main/java/com/dreamworks/boditech/service/DeviceService.java b/src/main/java/com/dreamworks/boditech/service/DeviceService.java
index 98d6452..c6ecb5c 100644
--- a/src/main/java/com/dreamworks/boditech/service/DeviceService.java
+++ b/src/main/java/com/dreamworks/boditech/service/DeviceService.java
@@ -24,6 +24,18 @@ public class DeviceService {
// task executor thread
private Thread taskExecutorThread;
+ /**
+ * load consumable resources
+ */
+ public void load() {
+ TaskLoad task = new TaskLoad();
+ Executor.executeTask(this.device, task);
+ }
+
+
+
+
+
// scan and load test cards
public void testCardLoad() {
TaskTestCardLoad task = new TaskTestCardLoad();
diff --git a/src/main/java/com/dreamworks/boditech/service/ProjectService.java b/src/main/java/com/dreamworks/boditech/service/ProjectService.java
index 4dc9222..1c7cf72 100644
--- a/src/main/java/com/dreamworks/boditech/service/ProjectService.java
+++ b/src/main/java/com/dreamworks/boditech/service/ProjectService.java
@@ -1,20 +1,57 @@
package com.dreamworks.boditech.service;
import com.dreamworks.boditech.entity.Project;
import com.dreamworks.boditech.mapper.ProjectMapper;
+import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
@Service
public class ProjectService {
@Resource
private ProjectMapper projectMapper;
+ // list of projects
+ private List projects;
+ // project colors
+ private final String[] colors = new String[]{"red", "green", "blue", "yellow", "orange", "pink"};
+ // project color index
+ private Integer colorIndex = 0;
+
+ @PostConstruct
+ public void init() {
+ this.projects = new ArrayList<>();
+ }
+
+ // active project
+ public Project activeProjectByCodeNum(Integer codeNum) {
+ Project project = this.findByCodeNum(codeNum);
+ if ( project == null ) {
+ throw new RuntimeException("PROJECT_CODE_NOT_AVAILABLE");
+ }
+
+ project.color = this.colors[this.colorIndex % this.colors.length];
+ this.projects.add(project);
+ this.colorIndex++;
+ return project;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
// find by id
public Project findById(Integer id) {
return projectMapper.findById(id);
}
-
-
// find by code number
public Project findByCodeNum(Integer codeNum) {
return projectMapper.findByCodeNum(codeNum);
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 98b0712..3e399f0 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -7,6 +7,7 @@ spring:
app:
device:
+ enable : true
debug : true
connectionType : SerialPort # SerialPort, WebSocket
path : COM3
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 75e9346..0c27b90 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -7,6 +7,7 @@ spring:
app:
device:
+ enable : false
debug : true
connectionType : WebSocket # SerialPort, WebSocket
path : COM3