sige 1 year ago
parent
commit
cbd2b9c3ba
  1. BIN
      app.db
  2. BIN
      digester.zip
  3. 2
      pom.xml
  4. 24
      publish.ps1
  5. 1
      src/main/java/com/iflytop/digester/DigesterApplicationRunner.java
  6. 48
      src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java
  7. 78
      src/main/java/com/iflytop/digester/StartResetTaskThread.java
  8. 11
      src/main/resources/application-dev.yml
  9. 8
      src/main/resources/application-test.yml

BIN
app.db

BIN
digester.zip

2
pom.xml

@ -15,7 +15,7 @@
<groupId>com.my</groupId> <groupId>com.my</groupId>
<artifactId>digester</artifactId> <artifactId>digester</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.1</version>
<name>digester</name> <name>digester</name>
<description>digester</description> <description>digester</description>
<properties> <properties>

24
publish.ps1

@ -0,0 +1,24 @@
# update version in pom.xml
$pomData = [xml](Get-Content pom.xml)
$version = $pomData.project.version -split '\.'
$version[2] = [int]$version[2] + 1
$version = $version -join '.'
mvn versions:set -DnewVersion="$version"
git add pom.xml
git commit -m "update version to $version"
git push
# build
mvn clean package
Rename-Item -Path target/graphite_digester_bg-$version.jar -NewName "app-$version.jar"
# upload
scp target/app-$version.jar root@192.168.8.10:/app/
scp D:/device.db root@192.168.8.10:/app/device.db
# start
ssh root:zwsd@192.168.8.10 "killall java"
ssh root:zwsd@192.168.8.10 "rm /app/app.jar"
ssh root:zwsd@192.168.8.10 "ln -s /app/app-$version.jar /app/app.jar"
ssh root:zwsd@192.168.8.10 "nohup /app/java/jdk-18.0.2.1/bin/java -jar /app/app.jar --spring.profiles.active=test > /app/app.log 2>&1 &"
ssh root:zwsd@192.168.8.10 "tail -f /app/app.log"

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

@ -24,5 +24,6 @@ public class DigesterApplicationRunner implements ApplicationRunner {
System.load(this.pylonLibraryPath); System.load(this.pylonLibraryPath);
System.load(this.pylonWrapperPath); System.load(this.pylonWrapperPath);
this.device.liquidAddition.setup(); this.device.liquidAddition.setup();
DigestionTaskTheadManager.getInstance().setup();
} }
} }

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

@ -3,6 +3,9 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.iflytop.digester.model.MdbDigestionTask; import com.iflytop.digester.model.MdbDigestionTask;
import com.iflytop.digester.model.MdbRuntimeLog;
import com.iflytop.digester.underframework.dao.model.UfMdbNotification;
import com.iflytop.digester.underframework.dao.model.UfMdbOption;
import com.iflytop.digester.underframework.util.UfJsonHelper; import com.iflytop.digester.underframework.util.UfJsonHelper;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.*;
@ -22,19 +25,6 @@ public class DigestionTaskTheadManager {
// Mqtt client // Mqtt client
private MqttClient client; private MqttClient client;
@Value("${mqtt-broker.uri}")
private String mqttBrokerUri;
@Value("${mqtt-broker.username}")
private String mqttBrokerUsername;
@Value("${mqtt-broker.password}")
private String mqttBrokerPassword;
@Value("${mqtt-broker.clientId}")
private String mqttBrokerClientId;
@Value("${mqtt-broker.my-topic}")
private String mqttBrokerMyTopic;
@Value("${mqtt-broker.transbot-topic}")
private String mqttBrokerTransbotTopic;
// Get instance // Get instance
public static DigestionTaskTheadManager getInstance() { public static DigestionTaskTheadManager getInstance() {
return instance; return instance;
@ -44,39 +34,47 @@ public class DigestionTaskTheadManager {
public void init() { public void init() {
this.tasks = new ArrayList<>(); this.tasks = new ArrayList<>();
instance = this; instance = this;
}
// setup
public void setup() {
this.setupMqttBroker(); this.setupMqttBroker();
} }
// setup mqtt broker // setup mqtt broker
private void setupMqttBroker() { private void setupMqttBroker() {
String uri = UfMdbOption.getString("DigestionTaskMqttBrokerUri", "");
String clientId = UfMdbOption.getString("DigestionTaskMqttClientId", "");
String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", "");
this.client = null; this.client = null;
try { try {
this.client = new MqttClient(this.mqttBrokerUri, this.mqttBrokerClientId, new MemoryPersistence());
this.client = new MqttClient(uri, clientId, new MemoryPersistence());
} catch (MqttException e) { } catch (MqttException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
this.client.setCallback(new MqttCallback() { this.client.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {
System.out.println("connectionLost: " + cause.getMessage());
}
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) {
UfMdbNotification.error("消解任务 MQTT 服务器断开连接");
System.out.println("connectionLost: " + cause.getMessage());
}
public void deliveryComplete(IMqttDeliveryToken token) { public void deliveryComplete(IMqttDeliveryToken token) {
// nothing to do here
System.out.println("xxxx");
} }
}); });
try { try {
MqttConnectOptions options = new MqttConnectOptions(); MqttConnectOptions options = new MqttConnectOptions();
// options.setUserName(this.mqttBrokerUsername);
// options.setPassword(this.mqttBrokerPassword.toCharArray());
client.connect(options); client.connect(options);
} catch (MqttException e) { } catch (MqttException e) {
UfMdbNotification.error("消解任务 MQTT 服务器连接失败 : %s : %s", uri, e.getMessage());
throw new RuntimeException(e); throw new RuntimeException(e);
} }
try { try {
client.subscribe(this.mqttBrokerMyTopic, 2);
client.subscribe(myTopic, 2);
} catch (MqttException e) { } catch (MqttException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -84,6 +82,8 @@ public class DigestionTaskTheadManager {
// Handle on message arrived // Handle on message arrived
private void handleOnMessageArrived(String topic, MqttMessage message) { private void handleOnMessageArrived(String topic, MqttMessage message) {
MdbRuntimeLog.log("DigestionTaskMqttMessage", "Topic : %s; \nPayload : \n%s", topic, message.toString());
String content = new String(message.getPayload()); String content = new String(message.getPayload());
JsonNode actionJsonTree = null; JsonNode actionJsonTree = null;
try { try {
@ -120,16 +120,18 @@ public class DigestionTaskTheadManager {
// Send message to trans bot // Send message to trans bot
public void sendMessageToTransBot(String action, Map<String, Object> params) { public void sendMessageToTransBot(String action, Map<String, Object> params) {
String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", "");
String transTopic = UfMdbOption.getString("DigestionTaskMqttTransBotTopic", "");
try { try {
var message = Map.of( var message = Map.of(
"src", "stw-a80",
"src", myTopic,
"action", action, "action", action,
"params", params "params", params
); );
var messageJson = UfJsonHelper.objectToJson(message); var messageJson = UfJsonHelper.objectToJson(message);
MqttMessage mqttMessage = new MqttMessage(messageJson.getBytes()); MqttMessage mqttMessage = new MqttMessage(messageJson.getBytes());
mqttMessage.setQos(2); mqttMessage.setQos(2);
this.client.publish(this.mqttBrokerTransbotTopic, mqttMessage);
this.client.publish(transTopic, mqttMessage);
} catch (MqttException e) { } catch (MqttException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

78
src/main/java/com/iflytop/digester/StartResetTaskThread.java

@ -49,42 +49,6 @@ public class StartResetTaskThread extends Thread {
UfMdbRuntimeVariable.setString("设备已就绪","device.message"); UfMdbRuntimeVariable.setString("设备已就绪","device.message");
} }
// 设置蠕动泵
private void setupPeristalticPump() {
for ( int i=0; i<16; i++ ) {
this.setProgressMessage("设备初始化 : 初始化蠕动泵 " + (i+1) + "/16");
UfCmdSnippetExecutor.execute(String.format("PeristalticPumpEnable.%d",i));
}
Boolean enableSetup = UfMdbOption.getBoolean("LiquidPeristalticPumpPipeSetupEnable", false);
if ( !enableSetup ) {
return ;
}
this.setProgressMessage("设备初始化 : 初始化加液管路");
UfCmdSnippetExecutor.execute("DoorOpen");
UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankPutIn", new HashMap<>());
this.waitAction("TaskStartResetPumpPipeSetupTubeRankPutIn");
UfCmdSnippetExecutor.execute("DoorClose");
// 加液管充满
int liquidPipeVolume = UfMdbOption.getInteger("LiquidPeristalticPumpPipeVolume", 1);
Device device = Device.getInstance();
var tubes = List.of(0,4, 3,2, 15,11, 12,13, 1,5, 6,7, 14,10, 9,8);
for ( int i=0; i<8; i++ ) {
this.setProgressMessage("设备初始化 : 初始化加液管路 " + (i+1) + "/8");
var tubeList = tubes.subList(i*2, i*2+2);
var pumpList = List.of(2*i, 2*i+1);
device.liquidAddition.addLiquidToTubes(tubeList, pumpList, liquidPipeVolume);
}
// 加液管充满, 需要取出试管架
UfCmdSnippetExecutor.execute("DoorOpen");
UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankTakeOut", new HashMap<>());
this.waitAction("TaskStartResetPumpPipeSetupTubeRankTakeOut");
UfCmdSnippetExecutor.execute("DoorClose");
}
/** /**
* 清理试管架 * 清理试管架
* @issue : <a href="http://127.0.0.1:5566/issues/85">无法获取加液位置是否存在试管架</a> * @issue : <a href="http://127.0.0.1:5566/issues/85">无法获取加液位置是否存在试管架</a>
@ -179,4 +143,46 @@ public class StartResetTaskThread extends Thread {
private void setProgressMessage(String message) { private void setProgressMessage(String message) {
UfMdbRuntimeVariable.setString(message, "device.start.message"); UfMdbRuntimeVariable.setString(message, "device.start.message");
} }
// 设置蠕动泵
private void setupPeristalticPump() {
// 说是不要在开机的时候初始化蠕动泵了
boolean enable = System.currentTimeMillis() < 0;
if ( !enable ) {
return ;
}
for ( int i=0; i<16; i++ ) {
this.setProgressMessage("设备初始化 : 初始化蠕动泵 " + (i+1) + "/16");
UfCmdSnippetExecutor.execute(String.format("PeristalticPumpEnable.%d",i));
}
Boolean enableSetup = UfMdbOption.getBoolean("LiquidPeristalticPumpPipeSetupEnable", false);
if ( !enableSetup ) {
return ;
}
this.setProgressMessage("设备初始化 : 初始化加液管路");
UfCmdSnippetExecutor.execute("DoorOpen");
UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankPutIn", new HashMap<>());
this.waitAction("TaskStartResetPumpPipeSetupTubeRankPutIn");
UfCmdSnippetExecutor.execute("DoorClose");
// 加液管充满
int liquidPipeVolume = UfMdbOption.getInteger("LiquidPeristalticPumpPipeVolume", 1);
Device device = Device.getInstance();
var tubes = List.of(0,4, 3,2, 15,11, 12,13, 1,5, 6,7, 14,10, 9,8);
for ( int i=0; i<8; i++ ) {
this.setProgressMessage("设备初始化 : 初始化加液管路 " + (i+1) + "/8");
var tubeList = tubes.subList(i*2, i*2+2);
var pumpList = List.of(2*i, 2*i+1);
device.liquidAddition.addLiquidToTubes(tubeList, pumpList, liquidPipeVolume);
}
// 加液管充满, 需要取出试管架
UfCmdSnippetExecutor.execute("DoorOpen");
UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankTakeOut", new HashMap<>());
this.waitAction("TaskStartResetPumpPipeSetupTubeRankTakeOut");
UfCmdSnippetExecutor.execute("DoorClose");
}
} }

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

@ -14,8 +14,7 @@ device:
key : zcancmder key : zcancmder
enable : false enable : false
type : ZcancmderWebsocket type : ZcancmderWebsocket
# uri: ws://192.168.8.10:19005
uri : ws://127.0.0.1:19005
uri: ws://192.168.8.10:19005
- name : modbus - name : modbus
key : modbus key : modbus
enable : false enable : false
@ -23,14 +22,6 @@ device:
host: 192.168.8.10 host: 192.168.8.10
port: 20000 port: 20000
mqtt-broker:
uri: tcp://broker.emqx.io:1883
username: admin
password: public
clientId: digester
my-topic : "stw-a80"
transbot-topic : "transbot"
app : app :
errorSlotIndex : 4 errorSlotIndex : 4
liquidWaterBucketIndex : 2 liquidWaterBucketIndex : 2

8
src/main/resources/application-test.yml

@ -22,14 +22,6 @@ device:
host: 127.0.0.1 host: 127.0.0.1
port: 502 port: 502
mqtt-broker:
uri: tcp://broker.emqx.io:1883
username: admin
password: public
clientId: digester
my-topic : "stw-a80"
transbot-topic : "transbot"
app : app :
errorSlotIndex : 4 errorSlotIndex : 4
opencv-library-path: /userdata/rootfs_overlay/usr/lib/jni/libopencv_java420.so opencv-library-path: /userdata/rootfs_overlay/usr/lib/jni/libopencv_java420.so

Loading…
Cancel
Save