From d8eb22351c6d0bfe0c9f233edfd593538e6838c9 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期四, 24 四月 2025 13:58:49 +0800 Subject: [PATCH] 1、表阀一体机协议开阀类型变化; 2、表阀一体机协议开关阀报中增加水价数据; --- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java | 361 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 361 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java new file mode 100644 index 0000000..df919a9 --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java @@ -0,0 +1,361 @@ +package com.dy.common.mw.protocol.p206V202404.parse.global; + +import com.dy.common.mw.protocol.p206V202404.CommonV202404; +import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404; +import com.dy.common.mw.protocol.p206V202404.upVos.*; +import com.dy.common.util.ByteUtil; +import com.dy.common.util.ByteUtilUnsigned; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class GlParse { + + private static final Logger log = LogManager.getLogger(GlParse.class); + + /** + * 鍒嗘瀽涓婅鏁版嵁涓殑鏃堕挓 + * @param bs 涓婅瀛楄妭鏁扮粍 + * @param index 鍚浣� + * @return 鎺у埗鍣ㄥ湴鍧� + * @throws Exception 寮傚父 + */ + public static String parseRtuDt(byte[] bs, int index)throws Exception{ + String ss = ByteUtil.BCD2String_BE(bs, index, index) ; + index++ ; + String MM = ByteUtil.BCD2String_BE(bs, index, index) ; + index++ ; + String HH = ByteUtil.BCD2String_BE(bs, index, index) ; + index++ ; + String dd = ByteUtil.BCD2String_BE(bs, index, index) ; + index++ ; + String mm = ByteUtil.BCD2String_BE(bs, index, index) ; + index++ ; + String yy = ByteUtil.BCD2String_BE(bs, index, index) ; + return "20" + yy + "-" + mm + "-" + dd + " " + HH + ":" + MM + ":" + ss ; + } + /** + * 鍒嗘瀽IC鍗$紪鍙� + * @param bs 涓婅瀛楄妭鏁扮粍 + * @param index 鍚浣� + * @param len1 绗竴閮ㄥ垎瀛楄妭鏁� + * @param len2 绗簩閮ㄥ垎瀛楄妭鏁� + * @return 鎺у埗鍣ㄥ湴鍧� + * @throws Exception 寮傚父 + */ + public static String parseIcCardNo(byte[] bs, int index, int len1, int len2)throws Exception{ + String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, index, index + len1 - 1) ; + String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_LE(bs, index + len1) ; + while(rtuAddrStr.length() < 5){ + rtuAddrStr = "0" + rtuAddrStr ; + } + return rtuAddrBCD + rtuAddrStr ; + } + + + /** + * 鍒嗘瀽鐘舵�佷笌鎶ヨ + * @param bs 涓婃姤鏁版嵁鐨勫瓧鑺傛暟缁� + * @param index 褰撳墠瑙f瀽鏁扮粍涓嬫爣浣嶇疆 + * @return + */ + public static void parseAlarmAndState(byte[] bs, int index, AlarmVo vo){ + byte b = bs[index] ; + vo.statePump = (byte)(b & 0x1) ; + vo.alarmWaterRemain = (byte)((b >> 1) & 1) ; + vo.alarm0WaterRemain = (byte)((b >> 2) & 1) ; + vo.alarmExceedYear = (byte)((b >> 3) & 1) ; + vo.alarmWaterMeterFault = (byte)((b >> 4) & 1) ; + vo.alarmSteal = (byte)((b >> 5) & 1) ; + vo.alarmWaterMeterBreak = (byte)((b >> 6) & 1) ; + vo.alarmEleMeterFault = (byte)((b >> 7) & 1) ; + + b = bs[index + 1] ; + vo.alarm0MoneyRemain = (byte)(b & 0x1) ; + vo.alarmDoor = (byte)((b >> 1) & 1) ; + vo.alarmBatteryVolt = (byte)((b >> 2) & 1) ; + vo.alarmEleMiss = (byte)((b >> 3) & 1) ; + vo.alarmEleExceed = (byte)((b >> 4) & 1) ; + vo.alarmEleLowVolt = (byte)((b >> 5) & 1) ; + vo.stateIcEnable = (byte)((b >> 6) & 1) ; + vo.stateOpClValve = (byte)((b >> 7) & 1) ; + + b = bs[index + 2] ; + vo.alarmBlockValve = (byte)(b & 0x1) ; + } + + public static String parseTp(byte[] bs, short index){ + String dt = "" ; + try{ + dt = dt + ByteUtil.BCD2String_BE(bs, index, index) ;//绉� + index++ ; + dt = ByteUtil.BCD2String_BE(bs, index, index) + ":" + dt ;//鍒� + index++ ; + dt = ByteUtil.BCD2String_BE(bs, index, index) + ":" + dt ;//鏃� + index++ ; + dt = ByteUtil.BCD2String_BE(bs, index, index) + " " + dt ;//鏃� + index++ ; + bs[index] = (byte)(bs[index] & 0x1F); + dt = ByteUtil.BCD2String_BE(bs, index, index) + "-" + dt ;//鏈� + index++ ; + dt = "20" + ByteUtil.BCD2String_BE(bs, index, index) + "-" + dt ;//骞� + }catch (Exception e){ + log.error("瑙f瀽鎺у埗鍣ㄦ椂閽熸椂寮傚父锛�" + e.getMessage(), e); + } + return dt ; + } + + /** + * 鍒嗘瀽鍔熻兘80鍜�5B鏁版嵁 + * @param bs + * @param cdData + * @throws Exception + */ + public static void parseCd80And5B(byte[] bs, DataCd80_5BVo cdData) throws Exception{ + int index = ProtocolConstantV206V202404.dataIndex ; + cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; + + index++ ; + cdData.projectNo = (int)bs[index]; + + index++ ; + cdData.useWaterType = bs[index]; + + index++ ; + cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ; + + index += 8 ; + cdData.icCardAddr = ByteUtil.bytes2Hex(bs, false, index, 4) ; + + index += 4 ; + cdData.icCardNo = GlParse.parseIcCardNo(bs, index, 6, 2) ; + + index += 8 ; + cdData.rtuDt = GlParse.parseRtuDt(bs, index) ; + + index += 6 ; + Long waterLevel = ByteUtil.BCD2Long_LE(bs, index, index + 3) ; + cdData.waterLevel = waterLevel/1000.0D; + + index += 4 ; + int waterPress = ByteUtil.BCD2Int_LE(bs, index, index + 2) ; + cdData.waterPress = waterPress/100.0D; + + index += 3 ; + Long waterInstant = ByteUtil.BCD2Long_LE(bs, index, index + 3) ; + cdData.waterInstant = waterInstant/100.0D; + + index += 4 ; + Long waterTotal = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; + cdData.waterTotal = waterTotal/100.0D; + + index += 5 ; + Long eleTotal = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; + cdData.eleTotal = eleTotal/100.0D; + + index += 5 ; + Long moneyRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; + cdData.moneyRemain = moneyRemain/10000.0D; + + index += 5 ; + Long waterRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; + cdData.waterRemain = waterRemain/100.0D; + + index += 5 ; + int thisEle = ByteUtil.BCD2Int_LE(bs, index, index + 3) ; + cdData.thisEle = thisEle/100.0D; + + index += 4 ; + int thisWater = ByteUtil.BCD2Int_LE(bs, index, index + 3) ; + cdData.thisWater = thisWater/100.0D; + + index += 4 ; + int thisMoney = ByteUtil.BCD2Int_LE(bs, index, index + 3) ; + cdData.thisMoney = thisMoney/10000.0D; + + index += 4 ; + cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + + index += 2 ; + int waterPrice = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.waterPrice = waterPrice/100.0D; + + index += 2 ; + int elePrice = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.elePrice = elePrice/100.0D; + + index += 2 ; + GlParse.parseAlarmAndState(bs, index, cdData) ;//鍥涗釜瀛楄妭 + + index += 4 ; + int aVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.aVolt = aVolt/10.0D; + + index += 2 ; + int bVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.bVolt = bVolt/10.0D; + + index += 2 ; + int cVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.cVolt = cVolt/10.0D; + + index += 2 ; + int aCurrent = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.aCurrent = aCurrent/10.0D; + + index += 2 ; + int bCurrent = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.bCurrent = bCurrent/10.0D; + + index += 2 ; + int cCurrent = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.cCurrent = cCurrent/10.0D; + + index += 2 ; + int batteryVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.batteryVolt = batteryVolt/100.0D; + + index += 2 ; + int waterMeterTransVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.waterMeterTransVolt = waterMeterTransVolt/100.0D; + + index += 2 ; + int waterMeterWorkVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + cdData.waterMeterWorkVolt = waterMeterWorkVolt/100.0D; + + index += 2 ; + cdData.csq = ByteUtil.BCD2Int_LE(bs, index, index) ; + + } + + + /** + * 鍒嗘瀽鍔熻兘85鏁版嵁 + * @param bs + * @param cdData + * @throws Exception + */ + public static void parseCd85(byte[] bs, DataCd85Vo cdData) throws Exception { + int index = ProtocolConstantV206V202404.dataIndex ; + cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; + + index++ ; + cdData.projectNo = (int)bs[index]; + + index ++ ; + cdData.clType = bs[index]; + //杩涜鍏煎杞崲 + cdData.clType = CommonV202404.closeType2P206V1(cdData.clType) ; + + index++ ; + cdData.icCardAddr = ByteUtil.bytes2Hex(bs, false, index, 4) ; + + index += 4 ; + cdData.icCardNo = GlParse.parseIcCardNo(bs, index, 6, 2) ; + + index += 8 ; + cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ; + + index += 8 ; + cdData.startDt = GlParse.parseRtuDt(bs, index) ; + + index += 6 ; + cdData.endDt = GlParse.parseRtuDt(bs, index) ; + + index += 6 ; + cdData.waterTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.eleTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.moneyRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/10000.0D ; + + index += 5 ; + cdData.waterRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.thisEle = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ; + + index += 4 ; + cdData.thisWater = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ; + + index += 4 ; + cdData.thisMoney = ByteUtil.BCD2Long_LE(bs, index, index + 3)/10000.0D ; + + index += 4 ; + cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + + index += 2 ; + GlParse.parseAlarmAndState(bs, index, cdData) ;//鍥涗釜瀛楄妭 + + index += 4 ; + cdData.price = ByteUtil.BCD2Int_LE(bs, index, index + 1)/100.0 ; + + } + /** + * 鍒嗘瀽鍔熻兘93銆丄3鏁版嵁 + * @param bs + * @param cdData + * @throws Exception + */ + public static void parseCd93A3(byte[] bs, DataCd93_A3Vo cdData) throws Exception { + int index = ProtocolConstantV206V202404.dataIndex ; + cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; + + index++ ; + cdData.projectNo = (int)bs[index]; + + index ++ ; + cdData.clResult = bs[index]; + + index ++ ; + cdData.clType = bs[index]; + + index++ ; + cdData.icCardAddr = ByteUtil.bytes2Hex(bs, false, index, 4) ; + + index += 4 ; + cdData.icCardNo = GlParse.parseIcCardNo(bs, index, 6, 2) ; + + index += 8 ; + cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ; + + index += 8 ; + cdData.startDt = GlParse.parseRtuDt(bs, index) ; + + if(cdData.clResult == (byte)0x81){ + //澶辫触浜嗭紝涓嬮潰灏辨病鏈夋暟鎹簡 + return ; + } + + index += 6 ; + cdData.endDt = GlParse.parseRtuDt(bs, index) ; + + index += 6 ; + cdData.waterTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.eleTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.moneyRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.waterRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; + + index += 5 ; + cdData.thisEle = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ; + + index += 4 ; + cdData.thisWater = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ; + + index += 4 ; + cdData.thisMoney = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ; + + index += 4 ; + cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; + + index += 2 ; + GlParse.parseAlarmAndState(bs, index, cdData) ;//鍥涗釜瀛楄妭 + } +} -- Gitblit v1.8.0