sige 2 years ago
parent
commit
64b7890b6f
  1. 2
      pom.xml
  2. 4
      src/main/java/com/dreamworks/boditech/BoditechApplication.java
  3. 9
      src/main/java/com/dreamworks/boditech/driver/Device.java
  4. 12
      src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java
  5. 3
      src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java
  6. 6
      src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java
  7. 21
      src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java
  8. 61
      src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java
  9. 17
      src/main/resources/application-dev.yml
  10. 17
      src/main/resources/application-test.yml
  11. 15
      src/main/resources/application.yml

2
pom.xml

@ -7,7 +7,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreamworks</groupId>
<artifactId>boditech</artifactId>
<version>0.0.12</version>
<version>0.0.13</version>
<name>boditech</name>
<description>boditech</description>

4
src/main/java/com/dreamworks/boditech/BoditechApplication.java

@ -1,12 +1,8 @@
package com.dreamworks.boditech;
import com.dreamworks.boditech.driver.connection.ComWebsocketClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import java.net.URI;
import java.net.URISyntaxException;
@SpringBootApplication
public class BoditechApplication {

9
src/main/java/com/dreamworks/boditech/driver/Device.java

@ -6,6 +6,7 @@ import com.dreamworks.boditech.driver.connection.ComWebsocket;
import com.dreamworks.boditech.driver.connection.ComLisClient;
import com.dreamworks.boditech.driver.consumable.*;
import com.dreamworks.boditech.driver.entity.DeviceLogEntry;
import com.dreamworks.boditech.entity.WebsocketServerMessageErrorEvent;
import com.dreamworks.boditech.mapper.DeviceLogMapper;
import com.dreamworks.boditech.service.*;
import com.dreamworks.boditech.utils.MyByteBuffer;
@ -44,6 +45,8 @@ public class Device {
public TestService testService;
@Resource
public ComLisClient lis;
@Resource
public WebsocketServerService websocketServerService;
// consumable : test cards
public final CsmTestCardManager testCards = new CsmTestCardManager(this);
@ -177,4 +180,10 @@ public class Device {
entry.createdAt = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
this.deviceLogMapper.insert(entry);
}
public void errorAlert(String code) {
WebsocketServerMessageErrorEvent event = new WebsocketServerMessageErrorEvent();
event.code = code;
this.websocketServerService.send(event);
}
}

12
src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorBase.java

@ -2,6 +2,7 @@ package com.dreamworks.boditech.driver.actuator;
import com.dreamworks.boditech.driver.DeviceCommand;
import com.dreamworks.boditech.driver.Device;
import com.dreamworks.boditech.service.RuntimeVariableService;
import com.dreamworks.boditech.utils.MyCommon;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@ -42,16 +43,13 @@ public class ActuatorBase implements Actuator {
protected void waitForFinish() {
Integer status = ActuatorModule.MODULE_STATUS_BUSY;
do {
try {
ByteBuffer response = this.call(DeviceCommand.CMD_MODULE_GET_STATUS);
if ( null == response ) {
continue ;
}
status = this.getIntegerFromResponse(response, 0);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
} catch ( RuntimeException e ) {
continue;
}
MyCommon.easySleep(100);
} while (!Objects.equals(status, ActuatorModule.MODULE_STATUS_IDLE));
}

3
src/main/java/com/dreamworks/boditech/driver/connection/ComWebsocketClient.java

@ -44,6 +44,7 @@ public class ComWebsocketClient extends WebSocketClient {
if ( requestItem.isResponseReceived ) {
return ;
}
LOG.info("device -- timeout");
requestItem.response = null;
requestItem.errorCode = ClientRequest.ERROR_CODE_TIMEOUT;
requestItem.notify();
@ -51,7 +52,7 @@ public class ComWebsocketClient extends WebSocketClient {
}
};
Timer timer = new Timer();
timer.schedule(timerTask, 1000);
timer.schedule(timerTask, 3000);
synchronized (requestItem) {
String cmd = MyByteBuffer.toHex(request.parameter);

6
src/main/java/com/dreamworks/boditech/entity/WebsocketServerMessageErrorEvent.java

@ -0,0 +1,6 @@
package com.dreamworks.boditech.entity;
public class WebsocketServerMessageErrorEvent {
public String type = "error";
public String code;
public String message;
}

21
src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java → src/main/java/com/dreamworks/boditech/service/WebsocketServerService.java

@ -1,15 +1,15 @@
package com.dreamworks.boditech.utils;
package com.dreamworks.boditech.service;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
import org.springframework.stereotype.Service;
@Service
@ServerEndpoint("/ws")
public class MyWebsocketServer {
private static final Logger LOG = LoggerFactory.getLogger(MyWebsocketServer.class);
public class WebsocketServerService {
private static final Logger LOG = LoggerFactory.getLogger(WebsocketServerService.class);
// only one session is all we need
private Session session;
@OnOpen
@ -32,4 +32,13 @@ public class MyWebsocketServer {
public void onError(Session session, Throwable error) {
LOG.info("ws server : on error");
}
// send message to client
public void send(Object message) {
try {
this.session.getBasicRemote().sendObject(message);
} catch (Exception e) {
LOG.error("ws server : send error", e);
}
}
}

61
src/main/java/com/dreamworks/boditech/utils/BoditechDeviceCmd.java

@ -1,61 +0,0 @@
package com.dreamworks.boditech.utils;
public class BoditechDeviceCmd {
public static final short[] MODULE_PING = {1, 0};
public static final short[] MODULE_STOP = {1, 1};
public static final short[] MODULE_BREAK = {1, 2};
public static final short[] MODULE_GET_LAST_EXEC_STATUS = {1, 3};
public static final short[] MODULE_GET_STATUS = {1, 4};
public static final short[] MODULE_SET_REG = {1, 5};
public static final short[] MODULE_GET_REG = {1, 6};
public static final short[] MODULE_READIO = {1, 7};
public static final short[] MODULE_WRITEIO = {1, 8};
public static final short[] MODULE_READ_ADC = {1, 9};
public static final short[] MODULE_GET_ERROR = {1, 10};
public static final short[] MODULE_CLEAR_ERROR = {1, 11};
public static final short[] MODULE_SET_INITED_FLAG = {1, 12};
public static final short[] MODULE_GET_INITED_FLAG = {1, 13};
public static final short[] MODULE_FACTORY_RESET = {1, 14};
public static final short[] MODULE_FLUSH_CFG = {1, 15};
public static final short[] MODULE_ACTIVE_CFG = {1, 16};
public static final short[] MODULE_READ_RAW = {1, 19};
public static final short[] MODULE_ENABLE = {1, 20};
public static final short[] MODULE_START = {1, 21};
public static final short[] MOTOR_ENABLE = {2, 1};
public static final short[] MOTOR_ROTATE = {2, 2};
public static final short[] MOTOR_MOVE_BY = {2, 3};
public static final short[] MOTOR_MOVE_TO = {2, 4};
public static final short[] MOTOR_ROTATE_ACCTIME = {2, 5};
public static final short[] MOTOR_MOVE_BY_ACCTIME = {2, 6};
public static final short[] MOTOR_MOVE_TO_ACCTIME = {2, 7};
public static final short[] MOTOR_ROTATE_WITH_TORQUE = {2, 8};
public static final short[] MOTOR_MOVE_TO_ZERO_FORWARD = {2, 9};
public static final short[] MOTOR_MOVE_TO_ZERO_BACKWARD = {2, 10};
public static final short[] MOTOR_READ_POS = {2, 11};
public static final short[] MOTOR_SET_CURRENT_POS_BY_CHANGE_SHIFT = {2, 12};
public static final short[] MOTOR_MOVE_TO_ZERO_FORWARD_AND_CALCULATED_SHIFT = {2, 13};
public static final short[] MOTOR_MOVE_TO_ZERO_BACKWARD_AND_CALCULATED_SHIFT = {2, 14};
public static final short[] MOTOR_MOVE_TO_TORQUE = {2, 15};
public static final short[] MOTOR_CALCULATED_POS_BY_MOVE_TO_ZERO = {2, 16};
public static final short[] MOTOR_EASY_ROTATE = {2, 17};
public static final short[] MOTOR_EASY_MOVE_BY = {2, 18};
public static final short[] MOTOR_EASY_MOVE_TO = {2, 19};
public static final short[] MOTOR_EASY_MOVE_TO_ZERO = {2, 20};
public static final short[] MOTOR_EASY_SET_CURRENT_POS = {2, 21};
public static final short[] XYMOTOR_ENABLE = {3, 1};
public static final short[] XYMOTOR_MOVE_BY = {3, 2};
public static final short[] XYMOTOR_MOVE_TO = {3, 3};
public static final short[] XYMOTOR_MOVE_TO_ZERO = {3, 4};
public static final short[] XYMOTOR_MOVE_TO_ZERO_AND_CALCULATED_SHIFT = {3, 5};
public static final short[] XYMOTOR_READ_POS = {3, 6};
public static final short[] XYMOTOR_CALCULATED_POS_BY_MOVE_TO_ZERO = {3, 7};
public static final short[] CODE_SCANER_START_SCAN = {4, 1};
public static final short[] CODE_SCANER_STOP_SCAN = {4, 2};
public static final short[] CODE_SCANER_READ_SCANER_RESULT = {4, 3};
public static final short[] PIPETTE_CTRL_INIT_DEVICE = {5, 1};
public static final short[] PIPETTE_CTRL_PUT_TIP = {5, 2};
public static final short[] PIPETTE_CTRL_MOVE_TO_UL = {5, 3};
}

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

@ -0,0 +1,17 @@
spring:
datasource:
url: jdbc:mysql://localhost:3306/boditech
username : root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
app:
device:
debug : true
connectionType : WebSocket # SerialPort, WebSocket
path : COM3
baudrate : 921600
wsuri : ws://192.168.8.10:19005
websocket:
port : 19006

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

@ -0,0 +1,17 @@
spring:
datasource:
url: jdbc:mysql://localhost:3306/boditech
username : root
password: o0SXPBiWbtIGXOb3lfpJ9sVcG8ELNcha
driver-class-name: com.mysql.cj.jdbc.Driver
app:
device:
debug : true
connectionType : WebSocket # SerialPort, WebSocket
path : COM3
baudrate : 921600
wsuri : ws://192.168.8.10:19005
websocket:
port : 19006

15
src/main/resources/application.yml

@ -1,14 +1,3 @@
spring:
datasource:
url: jdbc:mysql://localhost:3306/boditech
username : root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
app:
device:
debug : true
connectionType : WebSocket # SerialPort, WebSocket
path : COM3
baudrate : 921600
wsuri : ws://192.168.8.10:19005
profiles:
active: dev
Loading…
Cancel
Save