diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java
index 221aca5..4ac26bf 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java
@@ -157,7 +157,7 @@ public class ScssPersistenceHandler extends AbstractPersistenceHandler {
ScssPersistenceHandler.this.setValue(ps, newRow, 34, "flowVoltageMinValue", Types.DECIMAL);
ScssPersistenceHandler.this.setValue(ps, newRow, 35, "flowVoltageMaxValue", Types.DECIMAL);
ScssPersistenceHandler.this.setValue(ps, newRow, 36, "continuousSamplingIntervalDuration", Types.INTEGER);
- ScssPersistenceHandler.this.setValue(ps, newRow, 37, "sensorSignalEffectiveLevel", Types.INTEGER);
+ ScssPersistenceHandler.this.setValue(ps, newRow, 37, "sensorSignalEffectiveLevel", Types.DECIMAL);
ScssPersistenceHandler.this.setValue(ps, newRow, 38, "pressureCompensationPolarityFlag", Types.INTEGER);
ScssPersistenceHandler.this.setValue(ps, newRow, 39, "pressureCompensationValueSetting", Types.INTEGER);
ScssPersistenceHandler.this.setValue(ps, newRow, 40, "oilPressureCompensationPolarityFlag", Types.INTEGER);
diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/Command.java b/src/main/java/com/isu/gaswellwatch/vo/command/Command.java
index 8c0dda2..c4b1f1a 100644
--- a/src/main/java/com/isu/gaswellwatch/vo/command/Command.java
+++ b/src/main/java/com/isu/gaswellwatch/vo/command/Command.java
@@ -84,6 +84,12 @@ public abstract class Command implements Serializable {
public static final String SCSS_CONTROL_MODE = "SCSS.CONTROL_MODE";
public static final String SCSS_SIMPLE_LOGIC_MODE = "SCSS.SIMPLE_LOGIC_MODE";
public static final String SCSS_PLUNGER_LOGIC_MODE = "SCSS.PLUNGER_LOGIC_MODE";
+ /* 时间模式 */
+ public static final String SCSS_TIME_MODE = "SCSS.TIME_MODE";
+ /* 套压模式 */
+ public static final String SCSS_CASING_MODE = "SCSS.CASING_MODE";
+ /* 采样间隔 */
+ public static final String SCSS_SAMPLING_INTERVAL_MODE = "SCSS.SAMPLING_INTERVAL";
/* 点表类型:SCSS end */
diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java
new file mode 100644
index 0000000..1edaffc
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java
@@ -0,0 +1,58 @@
+package com.isu.gaswellwatch.vo.command.scss;
+
+import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto;
+import com.isu.gaswellwatch.vo.command.Command;
+import com.isu.gaswellwatch.vo.command.Timing;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serial;
+import java.math.BigDecimal;
+import java.util.Collection;
+
+/**
+ * 套压模式
+ *
+ * @author 王仕龙
+ * 2024/12/10 17:01
+ */
+@Getter
+@Setter
+@SuperBuilder
+public class CasingMode extends Command implements Timing {
+ @Serial
+ private static final long serialVersionUID = -6609483152571838191L;
+ /**
+ * 开井套压
+ */
+ @NotNull(message = "开井套压不能为空")
+ private BigDecimal wellOpenPressureValue = BigDecimal.ZERO;
+ /**
+ * 关井套压
+ */
+ @NotNull(message = "关井套压不能为空")
+ private BigDecimal wellClosePressureValue = BigDecimal.ZERO;
+ /**
+ * 最小关井时间
+ */
+ @NotBlank(message = "最小关井时间不能为空,格式:HH:mm:ss")
+ private String minWellCloseTimeDuration;
+ /**
+ * 最大关井时间
+ */
+ @NotBlank(message = "最大关井时间不能为空,格式:HH:mm:ss")
+ private String maxWellCloseTimeDuration;
+
+ public CasingMode() {
+ this.setCode("SCSS.CASING_MODE");
+ }
+
+
+ @Override
+ protected Collection builderModbusCommand() {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java
index a0e6c78..f65cb67 100644
--- a/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java
+++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java
@@ -118,7 +118,8 @@ public class ControlMode extends Command {
/**
* 到达传感器有效电平
*/
- private int sensorSignalEffectiveLevel;
+ @NotNull(message = "到达传感器有效电平不能为空")
+ private BigDecimal sensorSignalEffectiveLevel;
/**
* 套压补偿极性
*/
@@ -160,7 +161,7 @@ public class ControlMode extends Command {
protected Collection builderModbusCommand() {
StringBuilder command = new StringBuilder(250);
// 地址码 功能码 起始地址 连续长度 连续字长
- // 01 10 0032 0036 6C
+ // 01 10 0054 0036 6C
command.append("0110003200366C");
command.append(StringUtils.leftPad(Integer.toHexString(this.ctlModel), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.minPressure.multiply(ONE_HUNDRED).intValue()), 8, "0"));
@@ -180,7 +181,7 @@ public class ControlMode extends Command {
command.append(StringUtils.leftPad(Integer.toHexString(this.flowVoltageMinValue.multiply(ONE_HUNDRED).intValue()), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.flowVoltageMaxValue.multiply(ONE_HUNDRED).intValue()), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.continuousSamplingIntervalDuration), 8, "0"));
- command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel), 8, "0"));
+ command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel.multiply(ONE_HUNDRED).intValue()), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.pressureCompensationPolarityFlag), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.pressureCompensationValueSetting), 8, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.oilPressureCompensationPolarityFlag), 8, "0"));
@@ -191,4 +192,5 @@ public class ControlMode extends Command {
command.append(StringUtils.leftPad(Integer.toHexString(this.flowCompensationValueSetting), 8, "0"));
return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build());
}
+
}
diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java
new file mode 100644
index 0000000..205b296
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java
@@ -0,0 +1,59 @@
+package com.isu.gaswellwatch.vo.command.scss;
+
+import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto;
+import com.isu.gaswellwatch.vo.command.Command;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serial;
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 采样间隔
+ *
+ * @author 王仕龙
+ * 2024/12/10 17:24
+ */
+@Getter
+@Setter
+@SuperBuilder
+public class SamplingInterval extends Command {
+
+ @Serial
+ private static final long serialVersionUID = -649748614798682095L;
+
+ /**
+ * 连续采样间隔
+ */
+ private int continuousSamplingIntervalDuration;
+ /**
+ * 到达传感器有效电平
+ */
+ private BigDecimal sensorSignalEffectiveLevel;
+
+ public SamplingInterval() {
+ this.setCode("SCSS.SAMPLING_INTERVAL");
+ }
+
+ @Override
+ public boolean validate() {
+ return super.validate()
+ && this.continuousSamplingIntervalDuration > 0
+ && this.sensorSignalEffectiveLevel.compareTo(BigDecimal.ZERO) > 0;
+ }
+
+ @Override
+ protected Collection builderModbusCommand() {
+ StringBuilder command = new StringBuilder(250);
+ // 地址码 功能码 起始地址 连续长度 连续字长
+ // 01 10 0055 0004 08
+ command.append("01100055000408");
+ command.append(StringUtils.leftPad(Integer.toHexString(this.continuousSamplingIntervalDuration), 8, "0"));
+ command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel.multiply(ONE_HUNDRED).intValue()), 8, "0"));
+ return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build());
+ }
+}
diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java
new file mode 100644
index 0000000..b9b7d47
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java
@@ -0,0 +1,96 @@
+package com.isu.gaswellwatch.vo.command.scss;
+
+import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto;
+import com.isu.gaswellwatch.vo.command.Command;
+import com.isu.gaswellwatch.vo.command.Timing;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serial;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 时间模式
+ *
+ * @author 王仕龙
+ * 2024/12/10 16:57
+ */
+@Getter
+@Setter
+@SuperBuilder
+public class TimeMode extends Command implements Timing {
+
+ @Serial
+ private static final long serialVersionUID = -8623186068280286623L;
+
+ /**
+ * 开井时间,以秒为单位的时间
+ * 150 2
+ */
+ @NotBlank(message = "开井时间不能为空,格式:HH:mm:ss")
+ private String wellOpenTimeTimestamp;
+
+ /**
+ * 关井时间
+ * 158 2
+ */
+ @NotBlank(message = "关井时间不能为空,格式:HH:mm:ss")
+ private String wellCloseTimeTimestamp;
+
+ /**
+ * 柱塞延迟时间
+ * 200 2
+ */
+ @NotBlank(message = "柱塞延迟时间不能为空,格式:HH:mm:ss")
+ private String plungerDelayDuration;
+
+ public TimeMode() {
+ this.setCode("SCSS.TIME_MODE");
+ }
+
+ @Override
+ public boolean validate() {
+ return super.validate()
+ && StringUtils.isNotBlank(this.wellOpenTimeTimestamp)
+ && StringUtils.isNotBlank(this.wellCloseTimeTimestamp)
+ && StringUtils.isNotBlank(this.plungerDelayDuration);
+ }
+
+ @Override
+ protected Collection builderModbusCommand() {
+ List resultList = new ArrayList(3);
+ StringBuilder command = new StringBuilder(250);
+ // 地址码 功能码 起始地址 连续长度 连续字长
+ // 01 10 0096 0002 04
+ command.append("01100096000204");
+ command.append(StringUtils.leftPad(Long.toHexString(this.toSeconds(this.wellOpenTimeTimestamp)), 8, "0"));
+ resultList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build());
+
+ command.setLength(0);
+ // 地址码 功能码 起始地址 连续长度 连续字长
+ // 01 10 0096 0002 04
+ command.append("01100096000204");
+ command.append(StringUtils.leftPad(Long.toHexString(this.toSeconds(this.wellOpenTimeTimestamp)), 8, "0"));
+ resultList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build());
+
+ return resultList;
+ }
+
+ public void setWellOpenTimeTimestamp(String wellOpenTimeTimestamp) {
+ this.wellOpenTimeTimestamp = this.timingValidate(wellOpenTimeTimestamp, "wellOpenTimeTimestamp");
+ }
+
+ public void setWellCloseTimeTimestamp(String wellCloseTimeTimestamp) {
+ this.wellCloseTimeTimestamp = this.timingValidate(wellCloseTimeTimestamp, "wellCloseTimeTimestamp");
+ }
+
+ public void setPlungerDelayDuration(String plungerDelayDuration) {
+ this.plungerDelayDuration = this.timingValidate(plungerDelayDuration, "plungerDelayDuration");
+ }
+
+}
diff --git a/src/main/resources/sql/CREATE_SCSS.sql b/src/main/resources/sql/CREATE_SCSS.sql
index bb4a0db..0d96fde 100644
--- a/src/main/resources/sql/CREATE_SCSS.sql
+++ b/src/main/resources/sql/CREATE_SCSS.sql
@@ -37,7 +37,7 @@ CREATE TABLE `$TableName$`
`flow_voltage_min_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '流量最小电压',
`flow_voltage_max_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '流量最大电压',
`continuous_sampling_interval_duration` int NULL DEFAULT NULL COMMENT '连续采样间隔',
- `sensor_signal_effective_level` int NULL DEFAULT NULL COMMENT '到达传感器有效电平',
+ `sensor_signal_effective_level` decimal(10, 2) NULL DEFAULT NULL COMMENT '到达传感器有效电平',
`pressure_compensation_polarity_flag` int NULL DEFAULT NULL COMMENT '套压补偿极性',
`pressure_compensation_value_setting` int NULL DEFAULT NULL COMMENT '套压补偿值',
`oil_pressure_compensation_polarity_flag` int NULL DEFAULT NULL COMMENT '油压补偿极性',