|
|
|
@ -23,15 +23,15 @@ public class GetReadOrder485 {
|
|
|
|
|
// 调用service
|
|
|
|
|
ApplicationContext context = SpringBeanUtil.getApplicationContext(); |
|
|
|
|
DeviceDisplayServiceImpl.GatewayManageService gatewayManageService = context.getBean(DeviceDisplayServiceImpl.GatewayManageService.class); |
|
|
|
|
DeviceInstallService deviceInstallService=context.getBean(DeviceInstallService.class); |
|
|
|
|
DeviceCodeParamService deviceCodeParamService=context.getBean(DeviceCodeParamService.class); |
|
|
|
|
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); |
|
|
|
|
DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class); |
|
|
|
|
|
|
|
|
|
// 电表
|
|
|
|
|
public static String createMeterOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String str=""; |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
if (deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
public static String createMeterOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String str = ""; |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
|
|
|
|
|
str = String.format("%012d", Long.parseLong(deviceAddr)); |
|
|
|
|
//转换位置
|
|
|
|
@ -44,21 +44,21 @@ public class GetReadOrder485 {
|
|
|
|
|
//检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str); |
|
|
|
|
str = "FEFEFE" + str + checkSum + "16"; |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
log.error("生成采集电表指令错误==>",e); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("生成采集电表指令错误==>", e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return str.toUpperCase(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 水表
|
|
|
|
|
public static String createWtMeterOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
if (brand==null || brand.equals("") || brand.equals("艾美柯")){ |
|
|
|
|
public static String createWtMeterOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
if (brand == null || brand.equals("") || brand.equals("艾美柯")) { |
|
|
|
|
// 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型
|
|
|
|
|
str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号
|
|
|
|
|
// 转换位置
|
|
|
|
@ -68,14 +68,14 @@ public class GetReadOrder485 {
|
|
|
|
|
// 检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str); |
|
|
|
|
str = "FEFEFE" + str + checkSum + "16"; |
|
|
|
|
}else if(brand.equals("脉冲")){ |
|
|
|
|
} else if (brand.equals("脉冲")) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
str=str+"0302020002";//读表累计值
|
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
str = str + "0302020002";//读表累计值
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
log.error("生成水表采集指令异常>>>>", e); |
|
|
|
|
} |
|
|
|
@ -84,222 +84,257 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 热泵,参数:功能码、品牌、数据、通讯表号、寄存器地址
|
|
|
|
|
public static String createPumpOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String funCode=orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue=orderParamModel.getDataValue(); |
|
|
|
|
String str=""; |
|
|
|
|
String param=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0) { |
|
|
|
|
try{ |
|
|
|
|
public static String createPumpOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String funCode = orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue = orderParamModel.getDataValue(); |
|
|
|
|
String str = ""; |
|
|
|
|
String param = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
// 0代表前面补充0,2代表长度为2,d代表参数为正数型
|
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
if (brand==null || brand.equals("") || brand.equals("美的")){ |
|
|
|
|
if (funCode==null || funCode.equals("") || funCode.equals("03")){ |
|
|
|
|
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")){ // 运行状态
|
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
if (brand == null || brand.equals("") || brand.equals("美的")) { |
|
|
|
|
if (funCode == null || funCode.equals("") || funCode.equals("03")) { |
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")) { // 运行状态
|
|
|
|
|
str = str + "0306410001"; |
|
|
|
|
param="运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0007")){ // 水温
|
|
|
|
|
param = "运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0007")) { // 水温
|
|
|
|
|
str = str + "0300070001"; |
|
|
|
|
param="实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000B")){ // 故障状态,100*N+11
|
|
|
|
|
param = "实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000B")) { // 故障状态,100*N+11
|
|
|
|
|
str = str + "03000B0001"; |
|
|
|
|
param="故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0642")){ // 读温度设定
|
|
|
|
|
param = "故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0642")) { // 读温度设定
|
|
|
|
|
str = str + "0306420001"; |
|
|
|
|
param="设定温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656")){ //读时段1
|
|
|
|
|
param = "设定温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656")) { //读时段1
|
|
|
|
|
str = str + "0306560004"; |
|
|
|
|
param="时段1"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("065A")){ //读时段2
|
|
|
|
|
param = "时段1"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("065A")) { //读时段2
|
|
|
|
|
str = str + "03065A0004"; |
|
|
|
|
param="时段2"; |
|
|
|
|
param = "时段2"; |
|
|
|
|
} |
|
|
|
|
}else{//10
|
|
|
|
|
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")){//温度设定,写
|
|
|
|
|
str = str + "100642000102"+ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)),4); //写,待测试
|
|
|
|
|
}else if(registerAddr.equalsIgnoreCase("0656")){//时段1
|
|
|
|
|
if(dataValue.length()==8){ |
|
|
|
|
String strData="00"+dataValue.substring(0,2)+"00"+dataValue.substring(2,4)+"00"+dataValue.substring(4,6)+"00"+dataValue.substring(6,8); |
|
|
|
|
str = str + "100656000408"+strData; //写
|
|
|
|
|
} else {//10
|
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写
|
|
|
|
|
str = str + "100642000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656")) {//时段1
|
|
|
|
|
if (dataValue.length() == 8) { |
|
|
|
|
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); |
|
|
|
|
str = str + "100656000408" + strData; //写
|
|
|
|
|
} |
|
|
|
|
}else if(registerAddr.equalsIgnoreCase("065A")){//时段2
|
|
|
|
|
if(dataValue.length()==8){ |
|
|
|
|
String strData="00"+dataValue.substring(0,2)+"00"+dataValue.substring(2,4)+"00"+dataValue.substring(4,6)+"00"+dataValue.substring(6,8); |
|
|
|
|
str = str + "10065A000408"+strData; //写
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("065A")) {//时段2
|
|
|
|
|
if (dataValue.length() == 8) { |
|
|
|
|
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); |
|
|
|
|
str = str + "10065A000408" + strData; //写
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}else if(brand.equals("美的2")){ |
|
|
|
|
if (funCode==null || funCode.equals("") || funCode.equals("03")){ |
|
|
|
|
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")){ // 运行状态
|
|
|
|
|
} else if (brand.equals("美的2")) { |
|
|
|
|
if (funCode == null || funCode.equals("") || funCode.equals("03")) { |
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态
|
|
|
|
|
str = str + "030BBD0001"; |
|
|
|
|
param="运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0064")){ // 水温
|
|
|
|
|
param = "运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0064")) { // 水温
|
|
|
|
|
str = str + "0300640001"; |
|
|
|
|
param="实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0BBB")){ // 故障状态
|
|
|
|
|
param = "实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0BBB")) { // 故障状态
|
|
|
|
|
str = str + "030BBB0001"; |
|
|
|
|
param="故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0003")){ // 读温度设定
|
|
|
|
|
param = "故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0003")) { // 读温度设定
|
|
|
|
|
str = str + "0300030001"; |
|
|
|
|
param="设定温度"; |
|
|
|
|
param = "设定温度"; |
|
|
|
|
} |
|
|
|
|
}else{//06
|
|
|
|
|
if (registerAddr==null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")){//温度设定,写
|
|
|
|
|
str = str + "060003"+ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)),4); //写,待测试
|
|
|
|
|
}else if(registerAddr.equals("0000")) {//开关机
|
|
|
|
|
if(dataValue.equals("0000")){ |
|
|
|
|
} else {//06
|
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写
|
|
|
|
|
str = str + "060003" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
|
|
|
|
|
} else if (registerAddr.equals("0000")) {//开关机
|
|
|
|
|
if (dataValue.equals("0000")) { |
|
|
|
|
str = str + "0600000000"; //关机
|
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
str = str + "0600000003"; //制热水,开机
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
} else if (brand.equals("瑞星")) { |
|
|
|
|
if (funCode == null || funCode.equals("") || funCode.equals("03")) { |
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0001")) { // 运行状态
|
|
|
|
|
str = str + "0300010001"; |
|
|
|
|
param = "运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0046")) { // 水温
|
|
|
|
|
str = str + "0300460001"; |
|
|
|
|
param = "实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0050")) { // 故障状态,100*N+11
|
|
|
|
|
str = str + "0300500001"; |
|
|
|
|
param = "故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000A")) { // 读温度设定
|
|
|
|
|
str = str + "03000A0001"; |
|
|
|
|
param = "设定温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0028")) { //读时段1
|
|
|
|
|
str = str + "0300280004"; |
|
|
|
|
param = "时段1"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("002C")) { //读时段2
|
|
|
|
|
str = str + "03002C0004"; |
|
|
|
|
param = "时段2"; |
|
|
|
|
} |
|
|
|
|
} else {//10
|
|
|
|
|
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写
|
|
|
|
|
str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0028")) {//时段1
|
|
|
|
|
if (dataValue.length() == 8) { |
|
|
|
|
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); |
|
|
|
|
str = str + "100028000408" + strData; //写
|
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("002C")) {//时段2
|
|
|
|
|
if (dataValue.length() == 8) { |
|
|
|
|
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); |
|
|
|
|
str = str + "10002C000408" + strData; //写
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
log.info("热泵"+param+"指令>>>>异常" + str, e); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.info("热泵" + param + "指令>>>>异常" + str, e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
log.info("热泵"+param+"指令>>>>" + str); |
|
|
|
|
log.info("热泵" + param + "指令>>>>" + str); |
|
|
|
|
return str.toUpperCase(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 水位开关(水位设定)
|
|
|
|
|
public static String createRelayOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String funCode=orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue=orderParamModel.getDataValue(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
if (brand==null || brand.equals("") || brand.equals("中凯")) |
|
|
|
|
{ |
|
|
|
|
public static String createRelayOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String funCode = orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue = orderParamModel.getDataValue(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
if (brand == null || brand.equals("") || brand.equals("中凯")) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读
|
|
|
|
|
str ="33"+ str + "1700000000"; //旧版继电器
|
|
|
|
|
}else if (funCode.equals("12")){//写
|
|
|
|
|
if (dataValue!=null && !dataValue.equals("")){ |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
if (funCode == null || funCode.equals("") || funCode.equals("17")) { //读
|
|
|
|
|
str = "33" + str + "1700000000"; //旧版继电器
|
|
|
|
|
} else if (funCode.equals("12")) {//写
|
|
|
|
|
if (dataValue != null && !dataValue.equals("")) { |
|
|
|
|
//0001(90%) 0002(80%) 0003(70%)...
|
|
|
|
|
if (dataValue.equals("100%")){ |
|
|
|
|
registerAddr="1300000000"; //全开
|
|
|
|
|
}else if (dataValue.equals("90%")){ |
|
|
|
|
registerAddr="1200000001"; |
|
|
|
|
}else if(dataValue.equals("80%")){ |
|
|
|
|
registerAddr="1200000002"; |
|
|
|
|
}else if(dataValue.equals("70%")){ |
|
|
|
|
registerAddr="1200000003"; |
|
|
|
|
}else if(dataValue.equals("60%")){ |
|
|
|
|
registerAddr="1200000004"; |
|
|
|
|
}else if(dataValue.equals("50%")){ |
|
|
|
|
registerAddr="1200000005"; |
|
|
|
|
}else if(dataValue.equals("40%")){ |
|
|
|
|
registerAddr="1200000006"; |
|
|
|
|
} |
|
|
|
|
str ="33"+ str+registerAddr; //示例:33011200000001
|
|
|
|
|
} |
|
|
|
|
}else if (funCode.equals("13")) {//写
|
|
|
|
|
str ="33"+ str + "1300000000"; //全开
|
|
|
|
|
}else { |
|
|
|
|
str ="33"+ str + "1400000000"; //全合
|
|
|
|
|
if (dataValue.equals("100%")) { |
|
|
|
|
registerAddr = "1300000000"; //全开
|
|
|
|
|
} else if (dataValue.equals("90%")) { |
|
|
|
|
registerAddr = "1200000001"; |
|
|
|
|
} else if (dataValue.equals("80%")) { |
|
|
|
|
registerAddr = "1200000002"; |
|
|
|
|
} else if (dataValue.equals("70%")) { |
|
|
|
|
registerAddr = "1200000003"; |
|
|
|
|
} else if (dataValue.equals("60%")) { |
|
|
|
|
registerAddr = "1200000004"; |
|
|
|
|
} else if (dataValue.equals("50%")) { |
|
|
|
|
registerAddr = "1200000005"; |
|
|
|
|
} else if (dataValue.equals("40%")) { |
|
|
|
|
registerAddr = "1200000006"; |
|
|
|
|
} |
|
|
|
|
str = "33" + str + registerAddr; //示例:33011200000001
|
|
|
|
|
} |
|
|
|
|
} else if (funCode.equals("13")) {//写
|
|
|
|
|
str = "33" + str + "1300000000"; //全开
|
|
|
|
|
} else { |
|
|
|
|
str = "33" + str + "1400000000"; //全合
|
|
|
|
|
} |
|
|
|
|
// 检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str); |
|
|
|
|
str = str + checkSum ; |
|
|
|
|
str = str + checkSum; |
|
|
|
|
|
|
|
|
|
} else if (brand.equals("远向")){ |
|
|
|
|
} else if (brand.equals("远向")) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
if (funCode==null || funCode.equals("") || funCode.equals("03")){//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0018")){ //读全部位置
|
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
if (funCode == null || funCode.equals("") || funCode.equals("03")) {//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置
|
|
|
|
|
str = str + "0300180008"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0010")){ //读全部DI
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI
|
|
|
|
|
str = str + "0300100008"; |
|
|
|
|
} |
|
|
|
|
}else if (funCode.equals("06")){ // 写
|
|
|
|
|
if (dataValue!=null && !dataValue.equals("")){ |
|
|
|
|
if (dataValue.equals("100%")){ |
|
|
|
|
registerAddr="10001800081000000000000000000000000000000000"; //全开
|
|
|
|
|
}else if (dataValue.equals("90%")){ |
|
|
|
|
registerAddr="0600180001"; |
|
|
|
|
}else if(dataValue.equals("80%")){ |
|
|
|
|
registerAddr="0600190001"; |
|
|
|
|
}else if(dataValue.equals("70%")){ |
|
|
|
|
registerAddr="06001A0001"; |
|
|
|
|
}else if(dataValue.equals("60%")){ |
|
|
|
|
registerAddr="06001B0001"; |
|
|
|
|
}else if(dataValue.equals("50%")){ |
|
|
|
|
registerAddr="06001C0001"; |
|
|
|
|
}else if(dataValue.equals("40%")){ |
|
|
|
|
registerAddr="06001D0001"; |
|
|
|
|
} else if (funCode.equals("06")) { // 写
|
|
|
|
|
if (dataValue != null && !dataValue.equals("")) { |
|
|
|
|
if (dataValue.equals("100%")) { |
|
|
|
|
registerAddr = "10001800081000000000000000000000000000000000"; //全开
|
|
|
|
|
} else if (dataValue.equals("90%")) { |
|
|
|
|
registerAddr = "0600180001"; |
|
|
|
|
} else if (dataValue.equals("80%")) { |
|
|
|
|
registerAddr = "0600190001"; |
|
|
|
|
} else if (dataValue.equals("70%")) { |
|
|
|
|
registerAddr = "06001A0001"; |
|
|
|
|
} else if (dataValue.equals("60%")) { |
|
|
|
|
registerAddr = "06001B0001"; |
|
|
|
|
} else if (dataValue.equals("50%")) { |
|
|
|
|
registerAddr = "06001C0001"; |
|
|
|
|
} else if (dataValue.equals("40%")) { |
|
|
|
|
registerAddr = "06001D0001"; |
|
|
|
|
} |
|
|
|
|
//0018(90%) 0019(80%) 001A(70%)...
|
|
|
|
|
str = str +registerAddr; //示例:010600180001
|
|
|
|
|
str = str + registerAddr; //示例:010600180001
|
|
|
|
|
} |
|
|
|
|
}else {//写
|
|
|
|
|
if (dataValue.equals("0000")){ |
|
|
|
|
} else {//写
|
|
|
|
|
if (dataValue.equals("0000")) { |
|
|
|
|
str = str + "10001800081000000000000000000000000000000000"; //全开
|
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
str = str + "10001800081000010001000100010001000100010001"; //全合
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}else if (brand.equals("顶威")){ |
|
|
|
|
} else if (brand.equals("顶威")) { |
|
|
|
|
str = String.format("%012d", Long.parseLong(deviceAddr)); |
|
|
|
|
//转换位置
|
|
|
|
|
str = ExchangeStringUtil.changePosition(str); //表号
|
|
|
|
|
String strData=""; |
|
|
|
|
if (funCode.equals("0407")){//写
|
|
|
|
|
str ="68"+str+"680407"; |
|
|
|
|
String mark="25C0"; //C025交换位置
|
|
|
|
|
String strData1="00000000"; //命令带密码4字节,权限密码默认为00000000
|
|
|
|
|
String strData2=""; |
|
|
|
|
if (dataValue.equals("100%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00000000"); |
|
|
|
|
}else if(dataValue.equals("90%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00000001"); |
|
|
|
|
}else if(dataValue.equals("85%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00000011"); |
|
|
|
|
}else if(dataValue.equals("80%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00000111"); |
|
|
|
|
}else if(dataValue.equals("75%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00001111"); |
|
|
|
|
}else if(dataValue.equals("70%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00011111"); |
|
|
|
|
}else if(dataValue.equals("65%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00111111"); |
|
|
|
|
}else if(dataValue.equals("60%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("01111111"); |
|
|
|
|
}else if(dataValue.equals("50%")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("11111111"); |
|
|
|
|
}else if(dataValue.equals("自动")){ |
|
|
|
|
strData2=ExchangeStringUtil.parseByte2HexStr("00100110"); |
|
|
|
|
} |
|
|
|
|
strData=mark+strData1+strData2; |
|
|
|
|
}else if (funCode.equals("0102")){ //读
|
|
|
|
|
str ="68"+str+"680102"; |
|
|
|
|
strData="25C0"; //标志
|
|
|
|
|
} |
|
|
|
|
strData=ExchangeStringUtil.addThree(strData); //加33
|
|
|
|
|
str=str+strData; |
|
|
|
|
String strData = ""; |
|
|
|
|
if (funCode.equals("0407")) {//写
|
|
|
|
|
str = "68" + str + "680407"; |
|
|
|
|
String mark = "25C0"; //C025交换位置
|
|
|
|
|
String strData1 = "00000000"; //命令带密码4字节,权限密码默认为00000000
|
|
|
|
|
String strData2 = ""; |
|
|
|
|
if (dataValue.equals("100%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00000000"); |
|
|
|
|
} else if (dataValue.equals("90%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00000001"); |
|
|
|
|
} else if (dataValue.equals("85%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00000011"); |
|
|
|
|
} else if (dataValue.equals("80%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00000111"); |
|
|
|
|
} else if (dataValue.equals("75%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00001111"); |
|
|
|
|
} else if (dataValue.equals("70%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00011111"); |
|
|
|
|
} else if (dataValue.equals("65%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00111111"); |
|
|
|
|
} else if (dataValue.equals("60%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("01111111"); |
|
|
|
|
} else if (dataValue.equals("50%")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("11111111"); |
|
|
|
|
} else if (dataValue.equals("自动")) { |
|
|
|
|
strData2 = ExchangeStringUtil.parseByte2HexStr("00100110"); |
|
|
|
|
} |
|
|
|
|
strData = mark + strData1 + strData2; |
|
|
|
|
} else if (funCode.equals("0102")) { //读
|
|
|
|
|
str = "68" + str + "680102"; |
|
|
|
|
strData = "25C0"; //标志
|
|
|
|
|
} |
|
|
|
|
strData = ExchangeStringUtil.addThree(strData); //加33
|
|
|
|
|
str = str + strData; |
|
|
|
|
//检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str);//校验
|
|
|
|
|
str = "FEFEFE" + str + checkSum + "16"; |
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
if(registerAddr.equals("0010")){ |
|
|
|
|
if (registerAddr.equals("0010")) { |
|
|
|
|
log.error("生成热泵状态指令出错!" + str); |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
log.error("生成水位开关指令出错!" + str); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -314,27 +349,26 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 热泵状态(8路开关)
|
|
|
|
|
public static String createPumpStateOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String funCode=orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
if (brand==null || brand.equals("") || brand.equals("中凯")) |
|
|
|
|
{ |
|
|
|
|
public static String createPumpStateOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String funCode = orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
if (brand == null || brand.equals("") || brand.equals("中凯")) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
//if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读
|
|
|
|
|
str ="33"+ str + "1700000000"; //旧版继电器
|
|
|
|
|
str = "33" + str + "1700000000"; //旧版继电器
|
|
|
|
|
//}
|
|
|
|
|
// 检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str); |
|
|
|
|
str = str + checkSum ; |
|
|
|
|
} else if (brand.equals("远向")){ |
|
|
|
|
str = str + checkSum; |
|
|
|
|
} else if (brand.equals("远向")) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str=ExchangeStringUtil.addZeroForNum(str,2); |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); |
|
|
|
|
//if (funCode==null || funCode.equals("") || funCode.equals("03")){//读
|
|
|
|
|
//if (registerAddr.equalsIgnoreCase("0018")){ //读全部DO
|
|
|
|
|
// str = str + "0300180008";
|
|
|
|
@ -342,24 +376,24 @@ public class GetReadOrder485 {
|
|
|
|
|
str = str + "0300100008"; |
|
|
|
|
//}
|
|
|
|
|
//}
|
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}else if (brand.equals("顶威")){ |
|
|
|
|
} else if (brand.equals("顶威")) { |
|
|
|
|
str = String.format("%012d", Long.parseLong(deviceAddr)); |
|
|
|
|
//转换位置
|
|
|
|
|
str = ExchangeStringUtil.changePosition(str); //表号
|
|
|
|
|
String strData=""; |
|
|
|
|
String strData = ""; |
|
|
|
|
// if (funCode.equals("0102")){ //读
|
|
|
|
|
str ="68"+str+"680102"; |
|
|
|
|
strData="25C0"; //标志
|
|
|
|
|
str = "68" + str + "680102"; |
|
|
|
|
strData = "25C0"; //标志
|
|
|
|
|
// }
|
|
|
|
|
strData=ExchangeStringUtil.addThree(strData); //加33
|
|
|
|
|
str=str+strData; |
|
|
|
|
strData = ExchangeStringUtil.addThree(strData); //加33
|
|
|
|
|
str = str + strData; |
|
|
|
|
//检验和
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str);//校验
|
|
|
|
|
str = "FEFEFE" + str + checkSum + "16"; |
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
log.error("生成热泵状态指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
@ -369,12 +403,12 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//状态检测
|
|
|
|
|
public static String createStateOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
public static String createStateOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
// 0代表前面补充0,12代表长度为12,d代表参数为正数型.12位通讯地址,以0补位
|
|
|
|
|
str = String.format("%012d", Long.parseLong(deviceAddr)); |
|
|
|
|
// 转换位置
|
|
|
|
@ -388,33 +422,33 @@ public class GetReadOrder485 {
|
|
|
|
|
String checkSum = ExchangeStringUtil.makeChecksum(str); |
|
|
|
|
str = "FEFEFE" + str + checkSum + "16"; |
|
|
|
|
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
log.error("生成状态检测指令出错!" + str,e); |
|
|
|
|
log.error("生成状态检测指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return str.toUpperCase(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 压变
|
|
|
|
|
public static String createPressureOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
public static String createPressureOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制
|
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
|
|
|
|
|
if (brand==null || brand.equals("")){ |
|
|
|
|
if (brand == null || brand.equals("")) { |
|
|
|
|
str = str + "0300000002"; // 压力变送器(新的协议)
|
|
|
|
|
}else if (brand.equals("澳升")){ |
|
|
|
|
} else if (brand.equals("澳升")) { |
|
|
|
|
str = str + "0300040001"; // 新款压力变送器
|
|
|
|
|
}else if (brand.equals("汝翊")){ |
|
|
|
|
} else if (brand.equals("汝翊")) { |
|
|
|
|
str = str + "0300040001"; |
|
|
|
|
} |
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.info("生成压变指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -422,12 +456,12 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 温控
|
|
|
|
|
public static String createTempOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
public static String createTempOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
|
|
|
|
|
// if(registerAddr.equals("")){
|
|
|
|
@ -435,10 +469,10 @@ public class GetReadOrder485 {
|
|
|
|
|
// }else if(registerAddr.equals("")){
|
|
|
|
|
// str=str+"0300000002";
|
|
|
|
|
// }
|
|
|
|
|
str=str+"0300000002"; |
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + "0300000002"; |
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
log.error("生成温控指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
@ -447,18 +481,18 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 温度变送器
|
|
|
|
|
public static String createMulTempOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
try{ |
|
|
|
|
public static String createMulTempOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
try { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
|
|
|
|
|
str=str+"0300280008"; //读8路温度
|
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + "0300280008"; //读8路温度
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.info("生成多路温度变送器指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -466,34 +500,34 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//时控设置,registerAddr 0009(L1)、000D(L2)、0011(L3) 读:010300090004、写:01100009000408+dataValue
|
|
|
|
|
public static String createTimeSetOrder(DeviceCodeParamEntity orderParamModel){ |
|
|
|
|
String deviceAddr=orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand=orderParamModel.getBrand(); |
|
|
|
|
String funCode=orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr=orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue=orderParamModel.getDataValue(); |
|
|
|
|
String str=""; |
|
|
|
|
if(deviceAddr!=null && deviceAddr.length()>0){ |
|
|
|
|
public static String createTimeSetOrder(DeviceCodeParamEntity orderParamModel) { |
|
|
|
|
String deviceAddr = orderParamModel.getDeviceAddr(); |
|
|
|
|
String brand = orderParamModel.getBrand(); |
|
|
|
|
String funCode = orderParamModel.getFunCode(); |
|
|
|
|
String registerAddr = orderParamModel.getRegisterAddr(); |
|
|
|
|
String dataValue = orderParamModel.getDataValue(); |
|
|
|
|
String str = ""; |
|
|
|
|
if (deviceAddr != null && deviceAddr.length() > 0) { |
|
|
|
|
str = ExchangeStringUtil.decToHex(deviceAddr); |
|
|
|
|
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
|
|
|
|
|
try{ |
|
|
|
|
try { |
|
|
|
|
// if (!brand.equals("")){ //品牌
|
|
|
|
|
if (!funCode.equals("") && !registerAddr.equals("")){ |
|
|
|
|
registerAddr=ExchangeStringUtil.addZeroForNum(registerAddr,4); //寄存器地址
|
|
|
|
|
funCode=ExchangeStringUtil.addZeroForNum(funCode,2); // 功能码
|
|
|
|
|
if (!funCode.equals("") && !registerAddr.equals("")) { |
|
|
|
|
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址
|
|
|
|
|
funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码
|
|
|
|
|
|
|
|
|
|
if (funCode.equals("03")){ //功能码,读
|
|
|
|
|
str = str + "03"+registerAddr +"0004"; |
|
|
|
|
}else if (funCode.equals("10")){//写
|
|
|
|
|
if (!dataValue.equals("")){ |
|
|
|
|
str = str + "10"+registerAddr +"000408"+dataValue; |
|
|
|
|
if (funCode.equals("03")) { //功能码,读
|
|
|
|
|
str = str + "03" + registerAddr + "0004"; |
|
|
|
|
} else if (funCode.equals("10")) {//写
|
|
|
|
|
if (!dataValue.equals("")) { |
|
|
|
|
str = str + "10" + registerAddr + "000408" + dataValue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String checkWord=ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
|
// }
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("生成时控指令出错!" + str, e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -501,30 +535,30 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 冷量计
|
|
|
|
|
public static String createCloudOrder(String IP,String port, String dataCom,String cloudNum, String cloudType){ |
|
|
|
|
public static String createCloudOrder(String IP, String port, String dataCom, String cloudNum, String cloudType) { |
|
|
|
|
IP = ExchangeStringUtil.ipToHex(IP); |
|
|
|
|
port = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(port),4); |
|
|
|
|
dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(ExchangeStringUtil.getNumFromString(dataCom)),2); |
|
|
|
|
port = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(port), 4); |
|
|
|
|
dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(ExchangeStringUtil.getNumFromString(dataCom)), 2); |
|
|
|
|
String str1 = IP + port + dataCom; |
|
|
|
|
// 0 代表前面补充0,2 代表长度为2,d 代表参数为正数型
|
|
|
|
|
String str = ExchangeStringUtil.decToHex(cloudNum); |
|
|
|
|
str = String.format("%02d", Long.parseLong(str)); |
|
|
|
|
if (cloudType.equalsIgnoreCase("4")){ //温控设备,地址为十六进制
|
|
|
|
|
if (cloudType.equalsIgnoreCase("4")) { //温控设备,地址为十六进制
|
|
|
|
|
str = str + "0300000002"; |
|
|
|
|
} else if (cloudType.equalsIgnoreCase("31")){ //流量计冷冻水量
|
|
|
|
|
} else if (cloudType.equalsIgnoreCase("31")) { //流量计冷冻水量
|
|
|
|
|
str = str + "0300080002"; |
|
|
|
|
} else if (cloudType.equalsIgnoreCase("32")){ // 流量计出水温度
|
|
|
|
|
} else if (cloudType.equalsIgnoreCase("32")) { // 流量计出水温度
|
|
|
|
|
str = str + "0300490002"; |
|
|
|
|
} else if (cloudType.equalsIgnoreCase("33")){ // 流量计回水温度
|
|
|
|
|
} else if (cloudType.equalsIgnoreCase("33")) { // 流量计回水温度
|
|
|
|
|
str = str + "03004B0002"; |
|
|
|
|
} else if (cloudType.equalsIgnoreCase("34")){ // 流量计冷量累积量
|
|
|
|
|
} else if (cloudType.equalsIgnoreCase("34")) { // 流量计冷量累积量
|
|
|
|
|
str = str + "0300500002"; |
|
|
|
|
} |
|
|
|
|
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str); |
|
|
|
|
int checkNum = CRC16.CRC16_MODBUS(strOrder); |
|
|
|
|
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); |
|
|
|
|
checkWord = ExchangeStringUtil.addZeroForNum(checkWord,4); |
|
|
|
|
checkWord = checkWord.substring(2,4) + checkWord.substring(0,2); |
|
|
|
|
checkWord = ExchangeStringUtil.addZeroForNum(checkWord, 4); |
|
|
|
|
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); |
|
|
|
|
str = str + checkWord; |
|
|
|
|
// 拼接字符
|
|
|
|
|
str = str1 + str; |
|
|
|
@ -534,6 +568,7 @@ public class GetReadOrder485 {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* // 冷水机组 指令:IP+端口+COM口+数据+modeBus校验
|
|
|
|
|
* |
|
|
|
|
* @param chillersEntity |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
@ -548,11 +583,11 @@ public class GetReadOrder485 {
|
|
|
|
|
// 获取端口号,转16进制
|
|
|
|
|
int port = chillersEntity.getPort(); |
|
|
|
|
String portStr = ExchangeStringUtil.decToHex(String.valueOf(port)); |
|
|
|
|
portStr = ExchangeStringUtil.addZeroForNum(portStr,4); |
|
|
|
|
portStr = ExchangeStringUtil.addZeroForNum(portStr, 4); |
|
|
|
|
str += portStr; |
|
|
|
|
// 获取COM口
|
|
|
|
|
String com = ExchangeStringUtil.getNumFromString(chillersEntity.getDataCom()); |
|
|
|
|
String dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(com),2); |
|
|
|
|
String dataCom = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(com), 2); |
|
|
|
|
str += dataCom; |
|
|
|
|
// 获取冷水机组地址
|
|
|
|
|
String chillerAddr = chillersEntity.getCollectionNum(); |
|
|
|
@ -560,16 +595,16 @@ public class GetReadOrder485 {
|
|
|
|
|
String str1 = ExchangeStringUtil.addZeroForNum(chillerAddr, 2); |
|
|
|
|
// 获取功能码
|
|
|
|
|
String funCode = chillersEntity.getFunCode(); |
|
|
|
|
str1 = str1 + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(funCode),2); |
|
|
|
|
str1 = str1 + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(funCode), 2); |
|
|
|
|
// 寄存器地址
|
|
|
|
|
String registerAddr = chillersEntity.getRegisterAddress(); |
|
|
|
|
str1 = str1 + ExchangeStringUtil.addZeroForNum(registerAddr,4) + "0001"; |
|
|
|
|
str1 = str1 + ExchangeStringUtil.addZeroForNum(registerAddr, 4) + "0001"; |
|
|
|
|
log.info(str1); |
|
|
|
|
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(str1); |
|
|
|
|
int checkNum = CRC16.CRC16_MODBUS(strOrder); |
|
|
|
|
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); |
|
|
|
|
checkWord = ExchangeStringUtil.addZeroForNum(checkWord,4); |
|
|
|
|
checkWord = checkWord.substring(2,4) + checkWord.substring(0,2); |
|
|
|
|
checkWord = ExchangeStringUtil.addZeroForNum(checkWord, 4); |
|
|
|
|
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); |
|
|
|
|
str1 = str1 + checkWord; |
|
|
|
|
// 拼接新的采集报文
|
|
|
|
|
str = str + str1; |
|
|
|
@ -599,17 +634,17 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 生成对设备操作指令参数
|
|
|
|
|
public void createOrderParam(){ |
|
|
|
|
public void createOrderParam() { |
|
|
|
|
|
|
|
|
|
List<DeviceInstallEntity> deviceList1; |
|
|
|
|
deviceCodeParamService.selectInsertDeviceCodeParam(); //查询插入设备采集参数,包括压变、温控、温度变送器、热泵状态
|
|
|
|
|
deviceList1=deviceInstallService.selectDeviceParams();//查找多个采集参数的设备,包括热泵
|
|
|
|
|
deviceList1 = deviceInstallService.selectDeviceParams();//查找多个采集参数的设备,包括热泵
|
|
|
|
|
System.out.println(deviceList1); |
|
|
|
|
|
|
|
|
|
for (DeviceInstallEntity devices:deviceList1) { |
|
|
|
|
for (DeviceInstallEntity devices : deviceList1) { |
|
|
|
|
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); |
|
|
|
|
if (devices.getDeviceType().equals("热泵")){ |
|
|
|
|
if (devices.getBrand().equals("美的")){ |
|
|
|
|
if (devices.getDeviceType().equals("热泵")) { |
|
|
|
|
if (devices.getBrand().equals("美的")) { |
|
|
|
|
|
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity3.setRegisterAddr("0007");//水温
|
|
|
|
@ -624,7 +659,7 @@ public class GetReadOrder485 {
|
|
|
|
|
deviceCodeParamEntity3.setParity(devices.getParity()); |
|
|
|
|
deviceCodeParamEntityList.add(deviceCodeParamEntity3); |
|
|
|
|
|
|
|
|
|
}else if (devices.getBrand().equals("美的2")){ |
|
|
|
|
} else if (devices.getBrand().equals("美的2")) { |
|
|
|
|
|
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity3 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity3.setRegisterAddr("0064");//水温
|
|
|
|
@ -645,13 +680,13 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 生成对设备操作指令参数
|
|
|
|
|
public void createOrderParam2(){ |
|
|
|
|
public void createOrderParam2() { |
|
|
|
|
List<DeviceInstallEntity> deviceList1; |
|
|
|
|
deviceCodeParamService.selectInsertDeviceCodeParam2(); //查询插入设备采集参数,包括水、电表、状态检测
|
|
|
|
|
deviceList1=deviceInstallService.selectDeviceParams(); //查找多个采集参数的设备,包括热泵
|
|
|
|
|
deviceList1 = deviceInstallService.selectDeviceParams(); //查找多个采集参数的设备,包括热泵
|
|
|
|
|
System.out.println(deviceList1); |
|
|
|
|
|
|
|
|
|
for (DeviceInstallEntity devices:deviceList1) { |
|
|
|
|
for (DeviceInstallEntity devices : deviceList1) { |
|
|
|
|
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); |
|
|
|
|
if (devices.getDeviceType().equals("热泵")) { |
|
|
|
|
if (devices.getBrand().equals("美的")) { |
|
|
|
@ -687,16 +722,16 @@ public class GetReadOrder485 {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 生成对设备操作指令参数
|
|
|
|
|
public void createOrderParam3(){ |
|
|
|
|
public void createOrderParam3() { |
|
|
|
|
List<DeviceInstallEntity> deviceList1; |
|
|
|
|
// deviceCodeParamService.selectInsertDeviceCodeParam3(); //查询插入设备采集参数-水位开关
|
|
|
|
|
deviceList1=deviceInstallService.selectDeviceParams2(); //查找多个采集参数的设备,包括热泵、水位开关
|
|
|
|
|
deviceList1 = deviceInstallService.selectDeviceParams2(); //查找多个采集参数的设备,包括热泵、水位开关
|
|
|
|
|
System.out.println(deviceList1); |
|
|
|
|
|
|
|
|
|
for (DeviceInstallEntity devices:deviceList1) { |
|
|
|
|
for (DeviceInstallEntity devices : deviceList1) { |
|
|
|
|
List<DeviceCodeParamEntity> deviceCodeParamEntityList = new ArrayList<>(); |
|
|
|
|
if (devices.getDeviceType().equals("热泵")){ |
|
|
|
|
if (devices.getBrand().equals("美的")){ |
|
|
|
|
if (devices.getDeviceType().equals("热泵")) { |
|
|
|
|
if (devices.getBrand().equals("美的")) { |
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity2.setRegisterAddr("0642");//设定温度
|
|
|
|
|
deviceCodeParamEntity2.setFunCode("03"); |
|
|
|
@ -723,7 +758,7 @@ public class GetReadOrder485 {
|
|
|
|
|
deviceCodeParamEntity4.setParity(devices.getParity()); |
|
|
|
|
deviceCodeParamEntityList.add(deviceCodeParamEntity4); |
|
|
|
|
|
|
|
|
|
}else if (devices.getBrand().equals("美的2")){ |
|
|
|
|
} else if (devices.getBrand().equals("美的2")) { |
|
|
|
|
|
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity2.setRegisterAddr("0003");//设定温度
|
|
|
|
@ -751,8 +786,9 @@ public class GetReadOrder485 {
|
|
|
|
|
deviceCodeParamEntity4.setParity(devices.getParity()); |
|
|
|
|
deviceCodeParamEntityList.add(deviceCodeParamEntity4); |
|
|
|
|
} |
|
|
|
|
} if (devices.getDeviceType().equals("水位开关")){ |
|
|
|
|
if (devices.getBrand().equals("远向")){ |
|
|
|
|
} |
|
|
|
|
if (devices.getDeviceType().equals("水位开关")) { |
|
|
|
|
if (devices.getBrand().equals("远向")) { |
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity2.setRegisterAddr("0018");//读水位设定
|
|
|
|
|
deviceCodeParamEntity2.setFunCode("03"); |
|
|
|
@ -778,7 +814,7 @@ public class GetReadOrder485 {
|
|
|
|
|
deviceCodeParamEntity4.setBuildingId(devices.getBuildingId()); |
|
|
|
|
deviceCodeParamEntity4.setParity(devices.getParity()); |
|
|
|
|
deviceCodeParamEntityList.add(deviceCodeParamEntity4); |
|
|
|
|
}else if (devices.getBrand().equals("中凯")){ |
|
|
|
|
} else if (devices.getBrand().equals("中凯")) { |
|
|
|
|
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity(); |
|
|
|
|
deviceCodeParamEntity2.setRegisterAddr("0017");//读水位设定
|
|
|
|
|
deviceCodeParamEntity2.setFunCode("03"); |
|
|
|
|