diff --git a/app.db b/app.db index 21b66d0..2c686bb 100644 Binary files a/app.db and b/app.db differ diff --git a/doc/MQTT-v2.pdf b/doc/MQTT-v2.pdf new file mode 100644 index 0000000..12ce2d9 Binary files /dev/null and b/doc/MQTT-v2.pdf differ diff --git a/doc/MQTT.md b/doc/MQTT.md index 8f83f5b..c2bdbb4 100644 --- a/doc/MQTT.md +++ b/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" }, } diff --git a/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java b/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java index 6fb0d51..632467b 100644 --- a/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java +++ b/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(); } diff --git a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java b/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java index 991699e..8693e7c 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java +++ b/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> tubes = new ArrayList<>(); diff --git a/src/main/java/com/iflytop/digester/underframework/connection/UfConnectionManager.java b/src/main/java/com/iflytop/digester/underframework/connection/UfConnectionManager.java index bff3f63..baf8b7d 100644 --- a/src/main/java/com/iflytop/digester/underframework/connection/UfConnectionManager.java +++ b/src/main/java/com/iflytop/digester/underframework/connection/UfConnectionManager.java @@ -13,8 +13,8 @@ public class UfConnectionManager { // connections private Map 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"); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ce538da..a0a2a34 100644 --- a/src/main/resources/application-dev.yml +++ b/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