指令调整,与点表一致

This commit is contained in:
wangshilong 2024-11-27 20:09:02 +08:00
parent 5b7c3a10f9
commit 65c40fab6f
5 changed files with 97 additions and 159 deletions

View File

@ -32,16 +32,16 @@ public class PlungerMode extends ChangeRunMode implements Timing {
* false关井
*/
@Builder.Default
private boolean enable = false;
private int plugInitStatus = 0;
/**
* 柱塞模式续流时长[0-999]:[0-59]:[0-59]
*/
private String sustainTiming;
private String plugSustainTime;
/**
* 柱塞模式关井时长[0-999]:[0-59]:[0-59]
*/
private String closeTiming;
private String plugCloseTime;
public PlungerMode() {
@ -51,8 +51,10 @@ public class PlungerMode extends ChangeRunMode implements Timing {
@Override
public boolean validate() {
return super.validate() && StringUtils.isNotBlank(this.sustainTiming)
&& StringUtils.isNotBlank(this.closeTiming);
return super.validate()
&& StringUtils.isNotBlank(this.plugCloseTime)
&& StringUtils.isNotBlank(this.plugSustainTime)
&& this.plugInitStatus >= 0 && this.plugInitStatus <= 1;
}
@Override
@ -62,17 +64,17 @@ public class PlungerMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 015C 0007 0E
command.append("0110015C00070E");
command.append("000").append(this.enable ? "1" : "0");
command.append(this.toHexString(this.sustainTiming)).append(this.toHexString(this.closeTiming));
command.append("000").append(this.plugInitStatus);
command.append(this.toHexString(this.plugSustainTime)).append(this.toHexString(this.plugCloseTime));
return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build());
}
public void setSustainTiming(String sustainTiming) {
this.sustainTiming = this.timingValidate(sustainTiming, "sustainTiming");
public void setPlugSustainTime(String plugSustainTime) {
this.plugSustainTime = this.timingValidate(plugSustainTime, "plugSustainTime");
}
public void setCloseTiming(String closeTiming) {
this.closeTiming = this.timingValidate(closeTiming, "closeTiming");
public void setPlugCloseTime(String plugCloseTime) {
this.plugCloseTime = this.timingValidate(plugCloseTime, "plugCloseTime");
}
}

View File

@ -14,7 +14,6 @@ import java.io.Serial;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
/**
* 压力模式存在3个不同的地址段需要发发送4条命令
@ -34,12 +33,12 @@ public class PressureMode extends ChangeRunMode implements Timing {
* 压力源
*/
@Builder.Default
private PresourceEnum presource = PresourceEnum.OIL;
private int presource = 0;
/**
* 压力触发类型
*/
@Builder.Default
private TriggerTypeEnum triggerType = TriggerTypeEnum.L0;
private int triggerType = 0;
/**
* 开井压力单位Mpa*100[0~9999]
@ -83,12 +82,12 @@ public class PressureMode extends ChangeRunMode implements Timing {
* 开井压力保护使能
*/
@Builder.Default
private boolean presproTect = false;
private int presproTect = 0;
/**
* 开井压力保护源
*/
@Builder.Default
private PresourceEnum presproSource = PresourceEnum.OIL;
private int presproSource = 0;
/**
* 开井压力限制上限[0-9999]
*/
@ -109,13 +108,14 @@ public class PressureMode extends ChangeRunMode implements Timing {
@Override
public boolean validate() {
return super.validate()
&& Objects.nonNull(this.presource)
&& Objects.nonNull(this.triggerType)
&& Objects.nonNull(this.presproSource)
&& StringUtils.isNotBlank(this.maxOpenWell)
&& StringUtils.isNotBlank(this.minOpenWell)
&& StringUtils.isNotBlank(this.maxCloseWell)
&& StringUtils.isNotBlank(this.minCloseWell)
&& this.presource >= 0 && this.presource <= 3
&& this.presproTect >= 0 && this.presproTect <= 1
&& this.triggerType >= 0 && this.triggerType <= 3
&& this.presproSource >= 0 && this.presproSource <= 3
&& this.pressureOpen >= 0 && this.pressureOpen <= 9999
&& this.pressureClose >= 0 && this.pressureClose <= 9999
&& this.openWellLimitMax >= 0 && this.openWellLimitMax <= 9999
@ -131,10 +131,10 @@ public class PressureMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 00A0 0005 0A
command.append("011000A000050A");
command.append(StringUtils.leftPad(Integer.toHexString(this.presource.getCode()), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.presource), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.pressureOpen), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.pressureClose), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.triggerType.getCode()), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.triggerType), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.stabilityTime), 4, "0"));
commandList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build());
@ -154,8 +154,8 @@ public class PressureMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 0140 0004 08
command.append("01100140000408");
command.append("000").append(this.presproTect ? "1" : "0");
command.append(StringUtils.leftPad(Integer.toHexString(this.presproSource.getCode()), 4, "0"));
command.append("000").append(this.presproTect);
command.append(StringUtils.leftPad(Integer.toHexString(this.presproSource), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.openWellLimitMax), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.openWellLimitMin), 4, "0"));
commandList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build());
@ -179,48 +179,4 @@ public class PressureMode extends ChangeRunMode implements Timing {
this.minCloseWell = this.timingValidate(minCloseWell, "minCloseWell");
}
/**
* 触发压力源
* 0油压
* 1套压
* 2输压
* 3差压
*/
@Getter
public enum PresourceEnum {
OIL(0, "油压"), CAS(1, "套压"), PRE(2, "输压"), DIFF(3, "差压");
private final int code;
private final String name;
PresourceEnum(int code, String name) {
this.code = code;
this.name = name;
}
}
/**
* 压力触发类型
* 0大于开井压力开井小于关井压力关井
* 1大于开井压力开井大于关井压力关井
* 2小于开井压力开井小于关井压力关井
* 3小于开井压力开井大于关井压力关井
*/
@Getter
public enum TriggerTypeEnum {
L0(0, "大于开井压力开井、小于关井压力关井"),
L1(1, "大于开井压力开井、大于关井压力关井"),
L2(2, "小于开井压力开井、小于关井压力关井"),
L3(3, "小于开井压力开井、大于关井压力关井");
private final int code;
private final String name;
TriggerTypeEnum(int code, String name) {
this.code = code;
this.name = name;
}
}
}

View File

@ -13,7 +13,6 @@ import org.apache.commons.lang3.StringUtils;
import java.io.Serial;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
/**
* @author <a href="mailto:scwsl@foxmail.com">王仕龙</a>
@ -30,12 +29,12 @@ public class TimePressureMode extends ChangeRunMode implements Timing {
* 时压模式初始气井状态
*/
@Builder.Default
private boolean tpInitStatus = false;
private int tpInitStatus = 0;
/**
* 时压模式开井源
*/
@Builder.Default
private TimePressureOpenSouceEnum tpOpenSource = TimePressureOpenSouceEnum.OIL;
private int tpOpenSource = 0;
/**
* 时压模式开井压力触发模式
* 0大于压力触发
@ -57,7 +56,7 @@ public class TimePressureMode extends ChangeRunMode implements Timing {
* 时压模式关井源
*/
@Builder.Default
private TimePressureOpenSouceEnum tpCloseSource = TimePressureOpenSouceEnum.OIL;
private int tpCloseSource = 0;
/**
* 时压模式关井触发
* 0大于压力触发
@ -89,11 +88,12 @@ public class TimePressureMode extends ChangeRunMode implements Timing {
@Override
public boolean validate() {
return super.validate()
&& Objects.nonNull(this.tpOpenSource)
&& Objects.nonNull(this.tpCloseSource)
&& StringUtils.isNotBlank(this.tpOpenTiming)
&& StringUtils.isNotBlank(this.tpCloseTiming)
&& this.tpInitStatus >= 0 && this.tpInitStatus <= 1
&& this.tpOpenSource >= 0 && this.tpOpenSource <= 4
&& this.tpOpenTrigger >= 0 && this.tpOpenTrigger <= 1
&& this.tpCloseSource >= 0 && this.tpCloseSource <= 4
&& this.tpCloseTrigger >= 0 && this.tpCloseTrigger <= 1
&& this.tpOpenPressure >= 0 && this.tpOpenPressure <= 9999
&& this.tpClosePressure >= 0 && this.tpClosePressure <= 9999
@ -107,12 +107,12 @@ public class TimePressureMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 0177 000E 1C
command.append("01100177000E1C");
command.append("000").append(this.tpInitStatus ? "1" : "0");
command.append(StringUtils.leftPad(Integer.toHexString(this.tpOpenSource.getCode()), 4, "0"));
command.append("000").append(this.tpInitStatus);
command.append(StringUtils.leftPad(Integer.toHexString(this.tpOpenSource), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpOpenTrigger), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpOpenPressure), 4, "0"));
command.append(this.toHexString(this.tpOpenTiming));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpCloseSource.getCode()), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpCloseSource), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpCloseTrigger), 4, "0"));
command.append(StringUtils.leftPad(Integer.toHexString(this.tpClosePressure), 4, "0"));
command.append(this.toHexString(this.tpCloseTiming));
@ -128,30 +128,4 @@ public class TimePressureMode extends ChangeRunMode implements Timing {
this.tpCloseTiming = this.timingValidate(tpCloseTiming, "tpCloseTiming");
}
/**
* 时压模式开井源
* 0油压
* 1套压
* 2输压
* 3差压
* <p>
* 4时间
*/
@Getter
public enum TimePressureOpenSouceEnum {
OIL(0, "油压"),
CAS(1, "套压"),
PRE(2, "输压"),
DIFF(3, "差压"),
TIME(4, "时间");
private final int code;
private final String name;
TimePressureOpenSouceEnum(int code, String name) {
this.code = code;
this.name = name;
}
}
}

View File

@ -31,66 +31,66 @@ public class TimerMode extends ChangeRunMode implements Timing {
* 定时器1使能开关
*/
@Builder.Default
private boolean enable1 = false;
private int timer1 = 0;
/**
* 定时器2使能开关
*/
@Builder.Default
private boolean enable2 = false;
private int timer2 = 0;
/**
* 定时器3使能开关
*/
@Builder.Default
private boolean enable3 = false;
private int timer3 = 0;
/**
* 定时器4使能开关
*/
@Builder.Default
private boolean enable4 = false;
private int timer4 = 0;
/**
* 定时器1开井时间
*/
@Builder.Default
private LocalTime openTimer1 = LocalTime.MIN;
private LocalTime timer1Open = LocalTime.MIN;
/**
* 定时器1关井时间
*/
@Builder.Default
private LocalTime closeTimer1 = LocalTime.MIN;
private LocalTime timer1Close = LocalTime.MIN;
/**
* 定时器2开井时间
*/
@Builder.Default
private LocalTime openTimer2 = LocalTime.MIN;
private LocalTime timer2Open = LocalTime.MIN;
/**
* 定时器2关井时间
*/
@Builder.Default
private LocalTime closeTimer2 = LocalTime.MIN;
private LocalTime timer2Close = LocalTime.MIN;
/**
* 定时器3开井时间
*/
@Builder.Default
private LocalTime openTimer3 = LocalTime.MIN;
private LocalTime timer3Open = LocalTime.MIN;
/**
* 定时器3关井时间
*/
@Builder.Default
private LocalTime closeTimer3 = LocalTime.MIN;
private LocalTime timer3Close = LocalTime.MIN;
/**
* 定时器4开井时间
*/
@Builder.Default
private LocalTime openTimer4 = LocalTime.MIN;
private LocalTime timer4Open = LocalTime.MIN;
/**
* 定时器4关井时间
*/
@Builder.Default
private LocalTime closeTimer4 = LocalTime.MIN;
private LocalTime timer4Close = LocalTime.MIN;
public TimerMode() {
super(1);
@ -99,43 +99,47 @@ public class TimerMode extends ChangeRunMode implements Timing {
@Override
public boolean validate() {
if (!this.enable1) {
if (Objects.isNull(this.openTimer1)) {
this.openTimer1 = LocalTime.MIN;
if (this.timer1 != 1) {
if (Objects.isNull(this.timer1Open)) {
this.timer1Open = LocalTime.MIN;
}
if (Objects.isNull(this.closeTimer1)) {
this.closeTimer1 = LocalTime.MIN;
if (Objects.isNull(this.timer1Close)) {
this.timer1Close = LocalTime.MIN;
}
}
if (!this.enable2) {
if (Objects.isNull(this.openTimer2)) {
this.openTimer2 = LocalTime.MIN;
if (this.timer2 != 1) {
if (Objects.isNull(this.timer2Open)) {
this.timer2Open = LocalTime.MIN;
}
if (Objects.isNull(this.closeTimer2)) {
this.closeTimer2 = LocalTime.MIN;
if (Objects.isNull(this.timer2Close)) {
this.timer2Close = LocalTime.MIN;
}
}
if (!this.enable3) {
if (Objects.isNull(this.openTimer3)) {
this.openTimer3 = LocalTime.MIN;
if (this.timer3 != 1) {
if (Objects.isNull(this.timer3Open)) {
this.timer3Open = LocalTime.MIN;
}
if (Objects.isNull(this.closeTimer3)) {
this.closeTimer3 = LocalTime.MIN;
if (Objects.isNull(this.timer3Close)) {
this.timer3Close = LocalTime.MIN;
}
}
if (!this.enable4) {
if (Objects.isNull(this.openTimer4)) {
this.openTimer4 = LocalTime.MIN;
if (this.timer4 != 1) {
if (Objects.isNull(this.timer4Open)) {
this.timer4Open = LocalTime.MIN;
}
if (Objects.isNull(this.closeTimer4)) {
this.closeTimer4 = LocalTime.MIN;
if (Objects.isNull(this.timer4Close)) {
this.timer4Close = LocalTime.MIN;
}
}
return super.validate()
&& Objects.nonNull(this.openTimer1) && Objects.nonNull(this.closeTimer1)
&& Objects.nonNull(this.openTimer2) && Objects.nonNull(this.closeTimer2)
&& Objects.nonNull(this.openTimer3) && Objects.nonNull(this.closeTimer3)
&& Objects.nonNull(this.openTimer4) && Objects.nonNull(this.closeTimer4);
&& this.timer1 >= 0 && this.timer1 <= 1
&& this.timer2 >= 0 && this.timer2 <= 1
&& this.timer3 >= 0 && this.timer3 <= 1
&& this.timer4 >= 0 && this.timer4 <= 1
&& Objects.nonNull(this.timer1Open) && Objects.nonNull(this.timer1Close)
&& Objects.nonNull(this.timer2Open) && Objects.nonNull(this.timer2Close)
&& Objects.nonNull(this.timer3Open) && Objects.nonNull(this.timer3Close)
&& Objects.nonNull(this.timer4Open) && Objects.nonNull(this.timer4Close);
}
@Override
@ -145,14 +149,14 @@ public class TimerMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 006E 001C 38
command.append("0110006E001C38");
command.append("000").append(this.enable1 ? "1" : "0");
command.append("000").append(this.enable2 ? "1" : "0");
command.append("000").append(this.enable3 ? "1" : "0");
command.append("000").append(this.enable4 ? "1" : "0");
command.append(this.toHexString(this.openTimer1)).append(this.toHexString(this.closeTimer1))
.append(this.toHexString(this.openTimer2)).append(this.toHexString(this.closeTimer2))
.append(this.toHexString(this.openTimer3)).append(this.toHexString(this.closeTimer3))
.append(this.toHexString(this.openTimer4)).append(this.toHexString(this.closeTimer4));
command.append("000").append(this.timer1);
command.append("000").append(this.timer2);
command.append("000").append(this.timer3);
command.append("000").append(this.timer4);
command.append(this.toHexString(this.timer1Open)).append(this.toHexString(this.timer1Close))
.append(this.toHexString(this.timer2Open)).append(this.toHexString(this.timer2Close))
.append(this.toHexString(this.timer3Open)).append(this.toHexString(this.timer3Close))
.append(this.toHexString(this.timer4Open)).append(this.toHexString(this.timer4Close));
return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build());
}

View File

@ -30,17 +30,17 @@ public class TimingMode extends ChangeRunMode implements Timing {
* 计时器开井时长[0-999]:[0-59]:[0-59]
*/
@Builder.Default
private String openTiming = "00:00:00";
private String timingOpen = "00:00:00";
/**
* 计时器关井时长[0-999]:[0-59]:[0-59]
*/
@Builder.Default
private String closeTiming = "00:00:00";
private String timingClose = "00:00:00";
/**
* 计时器延时时长[0-999]:[0-59]:[0-59]
*/
@Builder.Default
private String delayTiming = "00:00:00";
private String timingCelay = "00:00:00";
public TimingMode() {
super(2);
@ -50,19 +50,21 @@ public class TimingMode extends ChangeRunMode implements Timing {
@Override
public boolean validate() {
return super.validate()
&& StringUtils.isNotBlank(this.openTiming) && StringUtils.isNotBlank(this.closeTiming) && StringUtils.isNotBlank(this.delayTiming);
&& StringUtils.isNotBlank(this.timingOpen)
&& StringUtils.isNotBlank(this.timingClose)
&& StringUtils.isNotBlank(this.timingCelay);
}
public void setOpenTiming(String openTiming) {
this.openTiming = this.timingValidate(openTiming, "openTiming");
public void setTimingOpen(String timingOpen) {
this.timingOpen = this.timingValidate(timingOpen, "timingOpen");
}
public void setCloseTiming(String closeTiming) {
this.closeTiming = this.timingValidate(closeTiming, "closeTiming");
public void setTimingClose(String timingClose) {
this.timingClose = this.timingValidate(timingClose, "timingClose");
}
public void setDelayTiming(String delayTiming) {
this.delayTiming = this.timingValidate(delayTiming, "delayTiming");
public void setTimingCelay(String timingCelay) {
this.timingCelay = this.timingValidate(timingCelay, "timingCelay");
}
@Override
@ -72,10 +74,10 @@ public class TimingMode extends ChangeRunMode implements Timing {
// 地址码 功能码 起始地址 连续长度 连续字长
// 01 10 0096 000A 14
command.append("01100096000A14")
.append(this.toHexString(this.openTiming))
.append(this.toHexString(this.closeTiming))
.append(this.toHexString(this.timingOpen))
.append(this.toHexString(this.timingClose))
.append("0000") // 地址位0156值为空
.append(this.toHexString(this.delayTiming));
.append(this.toHexString(this.timingCelay));
return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build());
}