sige 1 year ago
parent
commit
7fed68facd
  1. 8
      Readme.md
  2. BIN
      app.db
  3. 137
      doc/MQTT.md
  4. 4335
      hs_err_pid28088.log
  5. 1
      src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java
  6. 15
      src/main/java/com/iflytop/digester/controller/CameraController.java
  7. 4
      src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java
  8. 5
      src/main/resources/application-dev.yml

8
Readme.md

@ -0,0 +1,8 @@
服务器无线:CCGRI 密码:cgri85511548
远程桌面地址:192.168.87.12
远程桌面账号: WRZS/wrzs
MQTT 服务器管理员账号 :admin/[admin@emqx]

BIN
app.db

137
doc/MQTT.md

@ -0,0 +1,137 @@
**服务器地址**:mqtt://192.168.87.12:1883
**业务流程**
```mermaid
sequenceDiagram
participant 机器人
participant 消解仪
机器人->>消解仪: 创建任务
Note right of 消解仪 : 开门
消解仪->>机器人: 放入试管架
机器人->>消解仪: 试管架已放入
Note right of 消解仪 : 关门
Note right of 消解仪 : 执行消解步骤
Note right of 消解仪 : 消解完成,取出试管架
Note right of 消解仪 : 开门
消解仪->>机器人: 取出试管架
机器人->>消解仪: 试管架已取出
Note right of 消解仪 : 关门
Note right of 消解仪 : 异常处理结束,取出异常试管
Note right of 消解仪 : 开门
消解仪->>机器人: 放入空试管架
机器人->>消解仪: 试管架已放入
Note right of 消解仪 : 关门
```
**任务创建**
发布至: `stw-80a`
```json
{
"action": "StartNewDigestion",
"params": {
"taskId" : "00000000-0000-0000-0000-000000000000",
"name" : "流程测试",
"batchNo" : "TR-01",
"tubes" : [{"no":"TR-01-01"},{"no":"TR-01-02"}, ... ]
}
}
```
- `taskId` : 唯一
- `name` : 消解配方名称
- `batchNo` : 批次号
- `tubes` : 试管列表,依次对应试管架中 1-16个孔位 ,当试管 `no` 属性为空时表示该孔位试管不存在。
**放入试管架**
任务创建后,设备自动打开柜门,准备放入试管架位置。 当准备完成后通知机器人将试管架放入。
发布至 :`robot`
```json
{
"src" : "stw-80a"
"action" : "TubeRackPutIn",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}
```
**试管架已放入**
当试管架放入完成后,通知设备放入操作完成,可以继续执行后续步骤。
发布至: `stw-80a`
```json
{
"taskId" : "00000000-0000-0000-0000-000000000000",
"action" : "TubeRackPutInDone",
"params" : {}
}
```
**取出试管架**
当设备中存在消解完成的批次时,将会打开柜门通知机器人将消解完成的试管架取出设备。 需要注意的是, 除消解完成之外,仍然存在其他情况需要取出试管架,但只需执行取出操作即可。
发布至 :`robot`
```json
{
"src" : "stw-80a"
"action" : "TubeRackTakeOut",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}
```
**试管架已取出**
当机器人将试管架取出完成后需要通知设备试管架已经取出,则设备将会关闭柜门继续执行后续操作。
发布至: `stw-80a`
```json
{
"taskId" : "00000000-0000-0000-0000-000000000000",
"action" : "TubeRackTakeOutDone",
"params" : {}
}
```
**放入空试管架**
在设备进行异常处理时,需要将异常处理区中已经处理完成的试管取出,则需要放入一个空的试管架来放置已完成的试管。 当机器人收到该消息后,需要将空试管架放入设备内, 并在放置完成后发送 `试管架已放置完成` 的消息。
发布至 :`robot`
```json
{
"src" : "stw-80a"
"action" : "EmptyTubeRackPutIn",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}
```

4335
hs_err_pid28088.log
File diff suppressed because it is too large
View File

1
src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java

@ -70,6 +70,7 @@ public class DigestionTaskTheadManager {
});
try {
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
client.connect(options);
} catch (MqttException e) {
UfMdbNotification.error("消解任务 MQTT 服务器连接失败 : %s : %s", uri, e.getMessage());

15
src/main/java/com/iflytop/digester/controller/CameraController.java

@ -22,12 +22,13 @@ public class CameraController extends UfApiControllerBase {
@ResponseBody
@PostMapping("/api/camera/take-shot")
public UfApiResponse takeShot() {
var srcImageMat = this.device.camera.grabToMat();
MatOfByte imageMob = new MatOfByte();
Imgcodecs.imencode(".png", srcImageMat, 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));
// var srcImageMat = this.device.camera.grabToMat();
// MatOfByte imageMob = new MatOfByte();
// Imgcodecs.imencode(".png", srcImageMat, 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));
return this.success();
}
}

4
src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java

@ -83,6 +83,10 @@ public class UfModbusRTUOverTCP extends UfConnectionBase {
// call
private List<Integer> call(byte[] cmd) {
if ( !this.enable ) {
return null;
}
if ( this.isBusy ) {
synchronized ( this ) {
try {

5
src/main/resources/application-dev.yml

@ -12,9 +12,10 @@ device:
connections:
- name : zcancmder
key : zcancmder
enable : false
enable : true
type : ZcancmderWebsocket
uri: ws://192.168.8.10:19005
# uri: ws://192.168.8.10:19005
uri : ws://127.0.0.1:19005
- name : modbus
key : modbus
enable : false

Loading…
Cancel
Save