Browse Source

设备启动初始化

master
sige 1 year ago
parent
commit
b05b8f4aab
  1. 56
      src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java
  2. 23
      src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java

56
src/src/main/java/com/my/graphiteDigesterBg/api/ApiCamera.java

@ -1,9 +1,15 @@
package com.my.graphiteDigesterBg.api;
import com.my.graphiteDigesterBg.MyDevice;
import com.my.graphiteDigesterBg.diframe.DiApiControllerBase;
import com.my.graphiteDigesterBg.diframe.DiApiResponse;
import com.my.graphiteDigesterBg.diframe.DiDevice;
import com.my.graphiteDigesterBg.diframe.actuator.DiActCameraBasler;
import com.my.graphiteDigesterBg.move.MoveCameraGrabFrame;
import com.my.graphiteDigesterBg.move.MoveDetectErrorSlots;
import jakarta.annotation.Resource;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
@ -17,31 +23,43 @@ import java.util.HashMap;
import java.util.Map;
@Controller
public class ApiCamera extends DiApiControllerBase {
@Value("${camera.image-path}")
private String imagePath;
@Resource
private DiDevice device;
@ResponseBody
@PostMapping("/api/camera/image")
public DiApiResponse getImage() {
Map<String, String> response = new HashMap<>();
response.put("data", null);
File file = new File(this.imagePath);
if ( !file.exists() ) {
return this.success(response);
}
byte[] bytes = new byte[(int)file.length()];
try {
FileInputStream fis = new FileInputStream(file);
fis.read(bytes);
fis.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
String base64Image = Base64.getEncoder().encodeToString(bytes);
DiActCameraBasler camera = (DiActCameraBasler)this.device.getActuators().get(MyDevice.ACT_CAMERA);
var imageMat = camera.grabToMat();
// resize to 1/4
var size = imageMat.size();
var width = (int)(size.width * 0.25);
var height = (int)(size.height * 0.25);
var resizedMat = new Mat();
Size newSize = new Size(width, height);
Imgproc.resize(imageMat, resizedMat, newSize);
MatOfByte imageMob = new MatOfByte();
Imgcodecs.imencode(".png", resizedMat, imageMob);
byte[] imageBytes = imageMob.toArray();
String base64Image = Base64.getEncoder().encodeToString(imageBytes);
String base64Data = "data:image/image/png;base64," + base64Image;
return this.success(Map.of("data",base64Data));
}
@ResponseBody
@PostMapping("/api/camera/take-shot")
public DiApiResponse takeShot() {
var cameraGrabFrame = new MoveCameraGrabFrame();
cameraGrabFrame.setDevice(this.device);
cameraGrabFrame.run();
var imgMat = cameraGrabFrame.getDetectImageMat();
MatOfByte imageMob = new MatOfByte();
Imgcodecs.imencode(".png", imgMat, imageMob);
byte[] imageBytes = imageMob.toArray();
String base64Image = Base64.getEncoder().encodeToString(imageBytes);
String base64Data = "data:image/image/png;base64," + base64Image;
return this.success(Map.of("data",base64Data));
}

23
src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java

@ -2,21 +2,26 @@ package com.my.graphiteDigesterBg.task;
import com.my.graphiteDigesterBg.MyDevice;
import com.my.graphiteDigesterBg.diframe.DiTaskBase;
import com.my.graphiteDigesterBg.diframe.Task;
import com.my.graphiteDigesterBg.diframe.actuator.DiActCameraBasler;
import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor;
import com.my.graphiteDigesterBg.diframe.actuator.DiActPeristalticPump;
import com.my.graphiteDigesterBg.diframe.actuator.DiActServo;
import com.my.graphiteDigesterBg.model.MdbOperationLog;
import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager;
@Task(name="StartReset")
public class TaskStartReset extends DiTaskBase {
@Override
protected void execute() {
MdbOperationLog.log(this.getUser(), "设备初始化");
var runtimeVars = this.getDevice().getRuntimeVariables();
runtimeVars.setString("IsDeviceReady", "NO");
runtimeVars.setString("IsTaskStartResetExecuting", "YES");
runtimeVars.setString("NO","IsDeviceReady");
runtimeVars.setString("YES", "IsTaskStartResetExecuting");
this.setProgressMessage("设备初始化...");
this.setProgressMessage("设备初始化 : 相机");
DiActCameraBasler camera = this.getActuator(MyDevice.ACT_CAMERA, DiActCameraBasler.class);
camera.setEnable(true);
this.setProgressMessage("设备初始化 : 关闭设备门");
DiActMotor doorMotor = this.getActuator(MyDevice.ACT_DOOR_MOTOR, DiActMotor.class);
doorMotor.setEnable(true);
@ -33,7 +38,6 @@ public class TaskStartReset extends DiTaskBase {
liquidMotor.reset();
liquidMotor.moveTo("LiquidArmStandby");
// @todo http://127.0.0.1:5566/issues/38
this.setProgressMessage("设备初始化 : 搬运机械臂上下移动复位");
DiActMotor transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class);
transUdMotor.setEnable(true);
@ -77,15 +81,20 @@ public class TaskStartReset extends DiTaskBase {
}
}
this.setProgressMessage("设备初始化 : 定时刷新加热盘温度");
var slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class);
slotMan.startTemperatureRefresh();
this.setProgressMessage("设备初始化 : 完成");
runtimeVars.setString("IsDeviceReady", "YES");
runtimeVars.setString("IsTaskStartResetExecuting", "NO");
runtimeVars.setString("YES","IsDeviceReady");
runtimeVars.setString("NO", "IsTaskStartResetExecuting");
runtimeVars.setString("设备已就绪", "StatusMessage");
this.setStatus(TaskStatus.FINISHED);
}
// set progress message
private void setProgressMessage(String message) {
var runtimeVars = this.getDevice().getRuntimeVariables();
runtimeVars.setString("TaskStartResetMessage", message);
runtimeVars.setString(message, "TaskStartResetMessage");
}
}
Loading…
Cancel
Save