sige 1 year ago
parent
commit
90e818f71e
  1. BIN
      app.db
  2. BIN
      doc/MQTT-v2.pdf
  3. 16
      doc/MQTT.md
  4. 2
      src/main/java/com/iflytop/digester/DigesterApplicationRunner.java
  5. 34
      src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java
  6. 4
      src/main/java/com/iflytop/digester/underframework/connection/UfConnectionManager.java
  7. 1
      src/main/resources/application-dev.yml

BIN
app.db

BIN
doc/MQTT-v2.pdf

16
doc/MQTT.md

@ -34,17 +34,18 @@ sequenceDiagram
{
"action": "StartNewDigestion",
"params": {
"taskId" : "00000000-0000-0000-0000-000000000000",
"name" : "流程测试",
"batchNo" : "TR-01",
"tubes" : [{"no":"TR-01-01"},{"no":"TR-01-02"}, ... ]
"tubes" : [
{"no":"TR-01-01", "volume":100},
{"no":"TR-01-02", "volume":100}
]
}
}
```
- `taskId` : 唯一
- `name` : 消解配方名称
- `batchNo` : 批次号
- `batchNo` : 批次号,试管架号
- `tubes` : 试管列表,依次对应试管架中 1-16个孔位 ,当试管 `no` 属性为空时表示该孔位试管不存在。
@ -60,7 +61,6 @@ sequenceDiagram
"src" : "stw-80a"
"action" : "TubeRackPutIn",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}
@ -76,7 +76,7 @@ sequenceDiagram
```json
{
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo" : "TR-01",
"action" : "TubeRackPutInDone",
"params" : {}
}
@ -95,7 +95,6 @@ sequenceDiagram
"src" : "stw-80a"
"action" : "TubeRackTakeOut",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}
@ -111,7 +110,7 @@ sequenceDiagram
```json
{
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo" : "TR-01",
"action" : "TubeRackTakeOutDone",
"params" : {}
}
@ -130,7 +129,6 @@ sequenceDiagram
"src" : "stw-80a"
"action" : "EmptyTubeRackPutIn",
"params" : {
"taskId" : "00000000-0000-0000-0000-000000000000",
"batchNo":"TR-01"
},
}

2
src/main/java/com/iflytop/digester/DigesterApplicationRunner.java

@ -1,5 +1,6 @@
package com.iflytop.digester;
import com.iflytop.digester.deviceinstance.Device;
import com.iflytop.digester.underframework.UfApplication;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -34,6 +35,7 @@ public class DigesterApplicationRunner implements ApplicationRunner {
LOG.info("[APP] loading : {}", this.pylonWrapperPath);
System.load(this.pylonWrapperPath);
UfApplication.getApp().connections.setup();
this.device.liquidAddition.setup();
DigestionTaskTheadManager.getInstance().setup();
}

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

@ -16,10 +16,9 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component
public class DigestionTaskTheadManager {
// logger
@ -52,7 +51,7 @@ public class DigestionTaskTheadManager {
public void setupMqttBroker() {
do {
String uri = UfMdbOption.getString("DigestionTaskMqttBrokerUri", "");
String clientId = UfMdbOption.getString("DigestionTaskMqttClientId", "");
String clientId = UUID.randomUUID().toString();
String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", "");
UfCommon.delay(1000);
@ -63,12 +62,21 @@ public class DigestionTaskTheadManager {
throw new RuntimeException(e);
}
this.client.setCallback(new MqttCallback() {
this.client.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean b, String s) {
try {
DigestionTaskTheadManager.this.client.subscribe(myTopic, 2);
LOG.info("[MQTT Server] : subscribed {}", myTopic);
} catch (MqttException e) {
throw new RuntimeException(e);
}
}
public void messageArrived(String topic, MqttMessage message) {
DigestionTaskTheadManager.this.handleOnMessageArrived(topic, message);
}
public void connectionLost(Throwable cause) {
UfMdbNotification.error("消解任务 MQTT 服务器断开连接");
// UfMdbNotification.error("消解任务 MQTT 服务器断开连接");
LOG.info("[MQTT Server] : connection lost {}", cause.getMessage());
}
public void deliveryComplete(IMqttDeliveryToken token) {}
@ -84,14 +92,6 @@ public class DigestionTaskTheadManager {
this.client = null;
continue;
}
try {
client.subscribe(myTopic, 2);
LOG.info("[MQTT Server] : subscribed {}", myTopic);
} catch (MqttException e) {
throw new RuntimeException(e);
}
break ;
} while ( true );
}
@ -125,7 +125,7 @@ public class DigestionTaskTheadManager {
}
}
String taskId = actionJsonTree.get("taskId").asText();
String taskId = actionJsonTree.get("batchNo").asText();
DigestionTaskThread task = null;
for ( var t : this.tasks ) {
if ( t.getOutTaskId().equals(taskId) ) {
@ -142,7 +142,7 @@ public class DigestionTaskTheadManager {
// start new digestion
private void startNewDigestion( JsonNode params ) {
String taskId = params.get("taskId").asText();
String taskId = params.get("batchNo").asText();
String name = params.get("name").asText();
String batchNo = params.get("batchNo").asText();
List<Map<String,Object>> tubes = new ArrayList<>();

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

@ -13,8 +13,8 @@ public class UfConnectionManager {
// connections
private Map<String, UfConnection> connections;
@PostConstruct
public void init() {
// connect to targets
public void setup() {
this.connections = new HashMap<>();
for ( var option : this.connectionOptionList.connections ) {
String key = (String)option.get("key");

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

@ -15,7 +15,6 @@ device:
enable : true
type : ZcancmderWebsocket
uri: ws://192.168.8.10:19005
# uri : ws://127.0.0.1:19005
- name : modbus
key : modbus
enable : true

Loading…
Cancel
Save