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

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

@ -1,5 +1,6 @@
package com.iflytop.digester; package com.iflytop.digester;
import com.iflytop.digester.deviceinstance.Device; import com.iflytop.digester.deviceinstance.Device;
import com.iflytop.digester.underframework.UfApplication;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -34,6 +35,7 @@ public class DigesterApplicationRunner implements ApplicationRunner {
LOG.info("[APP] loading : {}", this.pylonWrapperPath); LOG.info("[APP] loading : {}", this.pylonWrapperPath);
System.load(this.pylonWrapperPath); System.load(this.pylonWrapperPath);
UfApplication.getApp().connections.setup();
this.device.liquidAddition.setup(); this.device.liquidAddition.setup();
DigestionTaskTheadManager.getInstance().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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; 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 @Component
public class DigestionTaskTheadManager { public class DigestionTaskTheadManager {
// logger // logger
@ -52,7 +51,7 @@ public class DigestionTaskTheadManager {
public void setupMqttBroker() { public void setupMqttBroker() {
do { do {
String uri = UfMdbOption.getString("DigestionTaskMqttBrokerUri", ""); String uri = UfMdbOption.getString("DigestionTaskMqttBrokerUri", "");
String clientId = UfMdbOption.getString("DigestionTaskMqttClientId", "");
String clientId = UUID.randomUUID().toString();
String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", ""); String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", "");
UfCommon.delay(1000); UfCommon.delay(1000);
@ -63,12 +62,21 @@ public class DigestionTaskTheadManager {
throw new RuntimeException(e); 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) { public void messageArrived(String topic, MqttMessage message) {
DigestionTaskTheadManager.this.handleOnMessageArrived(topic, message); DigestionTaskTheadManager.this.handleOnMessageArrived(topic, message);
} }
public void connectionLost(Throwable cause) { public void connectionLost(Throwable cause) {
UfMdbNotification.error("消解任务 MQTT 服务器断开连接");
// UfMdbNotification.error("消解任务 MQTT 服务器断开连接");
LOG.info("[MQTT Server] : connection lost {}", cause.getMessage()); LOG.info("[MQTT Server] : connection lost {}", cause.getMessage());
} }
public void deliveryComplete(IMqttDeliveryToken token) {} public void deliveryComplete(IMqttDeliveryToken token) {}
@ -84,14 +92,6 @@ public class DigestionTaskTheadManager {
this.client = null; this.client = null;
continue; continue;
} }
try {
client.subscribe(myTopic, 2);
LOG.info("[MQTT Server] : subscribed {}", myTopic);
} catch (MqttException e) {
throw new RuntimeException(e);
}
break ; break ;
} while ( true ); } while ( true );
} }
@ -125,7 +125,7 @@ public class DigestionTaskTheadManager {
} }
} }
String taskId = actionJsonTree.get("taskId").asText();
String taskId = actionJsonTree.get("batchNo").asText();
DigestionTaskThread task = null; DigestionTaskThread task = null;
for ( var t : this.tasks ) { for ( var t : this.tasks ) {
if ( t.getOutTaskId().equals(taskId) ) { if ( t.getOutTaskId().equals(taskId) ) {
@ -142,7 +142,7 @@ public class DigestionTaskTheadManager {
// start new digestion // start new digestion
private void startNewDigestion( JsonNode params ) { private void startNewDigestion( JsonNode params ) {
String taskId = params.get("taskId").asText();
String taskId = params.get("batchNo").asText();
String name = params.get("name").asText(); String name = params.get("name").asText();
String batchNo = params.get("batchNo").asText(); String batchNo = params.get("batchNo").asText();
List<Map<String,Object>> tubes = new ArrayList<>(); 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 // connections
private Map<String, UfConnection> connections; private Map<String, UfConnection> connections;
@PostConstruct
public void init() {
// connect to targets
public void setup() {
this.connections = new HashMap<>(); this.connections = new HashMap<>();
for ( var option : this.connectionOptionList.connections ) { for ( var option : this.connectionOptionList.connections ) {
String key = (String)option.get("key"); String key = (String)option.get("key");

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

@ -15,7 +15,6 @@ device:
enable : true enable : true
type : ZcancmderWebsocket 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 - name : modbus
key : modbus key : modbus
enable : true enable : true

Loading…
Cancel
Save