浏览代码

lora水表解析电子号

lin 4 年之前
父节点
当前提交
0373f1c0ba

+ 8 - 7
smart-city-intf/src/main/java/com/zcxk/smartcity/data/access/protocol/model/complex/188水表.xml

@@ -1,28 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <protocol length="27" format="hex" unit="byte" factory="华旭" model="智能水表" series="LoraWAN水表">
-	<dataNode from="13" to="25" unit="byte">
+	<dataNode from="4" to="25" unit="byte">
 		<measurings>
-			<measuring code="WSV" name="用水量" from="3" to="7" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value))*0.01,2)" measuringUnit="t"/>
-			<measuring code="VOL" name="电压" from="10" to="11" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),16)*15.37,2)" measuringUnit="mV"/>
-			<measuring code="FORCED" name="正反转" from="8" to="9" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(3,4)">
+			<measuring code="METER_NO" name="电子号" from="0" to="7" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value)"/>
+			<measuring code="WSV" name="用水量" from="12" to="16" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value))*0.01,2)" measuringUnit="t"/>
+			<measuring code="VOL" name="电压" from="19" to="20" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),16)*15.37,2)" measuringUnit="mV"/>
+			<measuring code="FORCED" name="正反转" from="17" to="18" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(3,4)">
 				<validators>
 					<validator code="0" name="正常"/>
 					<validator code="1" name="反转"/>
 				</validators>
 			</measuring>
-			<measuring code="DISTURB" name="强磁干扰" from="8" to="9" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(4,5)">
+			<measuring code="DISTURB" name="强磁干扰" from="17" to="18" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(4,5)">
 				<validators>
 					<validator code="0" name="正常"/>
 					<validator code="1" name="透支"/>
 				</validators>
 			</measuring>
-			<measuring code="VOL_STATUS" name="电压状态" from="8" to="9" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(5,6)">
+			<measuring code="VOL_STATUS" name="电压状态" from="17" to="18" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(5,6)">
 				<validators>
 					<validator code="0" name="正常"/>
 					<validator code="1" name="欠压"/>
 				</validators>
 			</measuring>
-			<measuring code="VALVE" name="阀门状态" from="8" to="9" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(6,8)">
+			<measuring code="VALVE" name="阀门状态" from="17" to="18" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(6,8)">
 				<validators>
 					<validator code="00" name="开"/>
 					<validator code="01" name="关"/>

+ 1 - 0
smart-city-intf/src/main/java/com/zcxk/smartcity/data/access/protocol/model/complex/ComplexProtocol.java

@@ -37,6 +37,7 @@ public class ComplexProtocol  extends AbstractProtocol{
 	
 	@Override
 	public ProtocolData parser(String dataStr) {
+		System.out.println(dataStr.length());
 		ProtocolData data  = new ProtocolData();
 		if(ParserCommon.ATTR_FORMAT_HEX.equals(this.format)) {
 			if(ParserCommon.ATTR_UNIT_BYTE.equals(this.unit)  ) { // 按Byte进行解析,16进制数据2个字符等于一个Byte

+ 44 - 43
smart-city-intf/src/main/java/com/zcxk/smartcity/data/access/protocol/model/complex/水表.xml

@@ -1,46 +1,47 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <protocol length="28" format="hex" unit="byte" factory="华旭" model="智能水表" series="LoraWAN水表">
-	<dataNode from="18" to="28" unit="byte">
-		<measurings>
-			<measuring code="WSV" name="用水量" from="0" to="4" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'33333333'))*0.01,2)" measuringUnit="t"/>
-			<measuring code="VOL" name="电压" from="6" to="7" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hex2decimal(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubtractHex(#value,'33')))*15.37,0)" measuringUnit="mV"/>
-			<measuring code="FORCED" name="正反转" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(9,10)">
-				<validators>
-					<validator code="0" name="正常"/>
-					<validator code="1" name="反转"/>
-				</validators>
-			</measuring>
-			<measuring code="DISTURB" name="强磁干扰" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(10,11)">
-				<validators>
-					<validator code="0" name="正常"/>
-					<validator code="1" name="透支"/>
-				</validators>
-			</measuring>
-			<measuring code="OVERDRAFT" name="透支状态" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(11,12)">
-				<validators>
-					<validator code="0" name="正常"/>
-					<validator code="1" name="透支"/>
-				</validators>
-			</measuring>
-			<measuring code="ALARM" name="报警状态" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(12,13)">
-				<validators>
-					<validator code="0" name="正常"/>
-					<validator code="1" name="报警"/>
-				</validators>
-			</measuring>
-			<measuring code="VOL_STATUS" name="电压状态" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(13,14)">
-				<validators>
-					<validator code="0" name="正常"/>
-					<validator code="1" name="欠压"/>
-				</validators>
-			</measuring>
-			<measuring code="VALVE" name="阀门状态" from="4" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(14,16)">
-				<validators>
-					<validator code="00" name="开"/>
-					<validator code="01" name="关"/>
-					<validator code="11" name="异常"/>
-				</validators>
-			</measuring>
-		</measurings>
-	</dataNode>
+    <dataNode from="5" to="28" unit="byte">
+        <measurings>
+            <measuring code="METER_NO" name="电子号" from="0" to="6" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value)" />
+            <measuring code="WSV" name="用水量" from="13" to="17" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'33333333'))*0.01,2)" measuringUnit="t"/>
+            <measuring code="VOL" name="电压" from="19" to="20" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hex2decimal(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubtractHex(#value,'33')))*15.37,0)" measuringUnit="mV"/>
+            <measuring code="FORCED" name="正反转" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(9,10)">
+                <validators>
+                    <validator code="0" name="正常"/>
+                    <validator code="1" name="反转"/>
+                </validators>
+            </measuring>
+            <measuring code="DISTURB" name="强磁干扰" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(10,11)">
+                <validators>
+                    <validator code="0" name="正常"/>
+                    <validator code="1" name="透支"/>
+                </validators>
+            </measuring>
+            <measuring code="OVERDRAFT" name="透支状态" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(11,12)">
+                <validators>
+                    <validator code="0" name="正常"/>
+                    <validator code="1" name="透支"/>
+                </validators>
+            </measuring>
+            <measuring code="ALARM" name="报警状态" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(12,13)">
+                <validators>
+                    <validator code="0" name="正常"/>
+                    <validator code="1" name="报警"/>
+                </validators>
+            </measuring>
+            <measuring code="VOL_STATUS" name="电压状态" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(13,14)">
+                <validators>
+                    <validator code="0" name="正常"/>
+                    <validator code="1" name="欠压"/>
+                </validators>
+            </measuring>
+            <measuring code="VALVE" name="阀门状态" from="17" to="19" unit="byte" expression="T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(14,16)">
+                <validators>
+                    <validator code="00" name="开"/>
+                    <validator code="01" name="关"/>
+                    <validator code="11" name="异常"/>
+                </validators>
+            </measuring>
+        </measurings>
+    </dataNode>
 </protocol>

+ 84 - 83
smart-city-intf/src/main/java/com/zcxk/smartcity/data/access/util/JAXBUtil.java

@@ -441,52 +441,53 @@ public class JAXBUtil {
     	
     }
     public void ShuiBiaoTest() {
-    	String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
-    			"<protocol length=\"28\" format=\"hex\" unit=\"byte\" factory=\"华旭\" model=\"智能水表\" series=\"LoraWAN水表\">\r\n" + 
-    			"	<dataNode from=\"18\" to=\"28\" unit=\"byte\">\r\n" + 
-    			"		<measurings>\r\n" + 
-    			"			<measuring code=\"WSV\" name=\"用水量\" from=\"0\" to=\"4\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'33333333'))*0.01,2)\" measuringUnit=\"t\"/>\r\n" + 
-    			"			<measuring code=\"VOL\" name=\"电压\" from=\"6\" to=\"7\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hex2decimal(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubtractHex(#value,'33')))*15.37,0)\" measuringUnit=\"mV\"/>\r\n" + 
-    			"			<measuring code=\"FORCED\" name=\"正反转\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(9,10)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"反转\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"DISTURB\" name=\"强磁干扰\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(10,11)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"透支\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"OVERDRAFT\" name=\"透支状态\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(11,12)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"透支\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"ALARM\" name=\"报警状态\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(12,13)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"报警\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"VOL_STATUS\" name=\"电压状态\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(13,14)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"欠压\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"VALVE\" name=\"阀门状态\" from=\"4\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(14,16)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"00\" name=\"开\"/>\r\n" + 
-    			"					<validator code=\"01\" name=\"关\"/>\r\n" + 
-    			"					<validator code=\"11\" name=\"异常\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"		</measurings>\r\n" + 
-    			"	</dataNode>\r\n" + 
-    			"</protocol>";
+    	String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+				"<protocol length=\"28\" format=\"hex\" unit=\"byte\" factory=\"华旭\" model=\"智能水表\" series=\"LoraWAN水表\">\n" +
+				"\t<dataNode from=\"5\" to=\"28\" unit=\"byte\">\n" +
+				"\t\t<measurings>\n" +
+				"\t\t\t<measuring code=\"waterNo\" name=\"电子号\" from=\"0\" to=\"6\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value)\" />\n" +
+				"\t\t\t<measuring code=\"WSV\" name=\"用水量\" from=\"13\" to=\"17\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'33333333'))*0.01,2)\" measuringUnit=\"t\"/>\n" +
+				"\t\t\t<measuring code=\"VOL\" name=\"电压\" from=\"19\" to=\"20\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hex2decimal(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubtractHex(#value,'33')))*15.37,0)\" measuringUnit=\"mV\"/>\n" +
+				"\t\t\t<measuring code=\"FORCED\" name=\"正反转\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(9,10)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"0\" name=\"正常\"/>\n" +
+				"\t\t\t\t\t<validator code=\"1\" name=\"反转\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t\t<measuring code=\"DISTURB\" name=\"强磁干扰\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(10,11)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"0\" name=\"正常\"/>\n" +
+				"\t\t\t\t\t<validator code=\"1\" name=\"透支\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t\t<measuring code=\"OVERDRAFT\" name=\"透支状态\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(11,12)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"0\" name=\"正常\"/>\n" +
+				"\t\t\t\t\t<validator code=\"1\" name=\"透支\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t\t<measuring code=\"ALARM\" name=\"报警状态\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(12,13)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"0\" name=\"正常\"/>\n" +
+				"\t\t\t\t\t<validator code=\"1\" name=\"报警\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t\t<measuring code=\"VOL_STATUS\" name=\"电压状态\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(13,14)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"0\" name=\"正常\"/>\n" +
+				"\t\t\t\t\t<validator code=\"1\" name=\"欠压\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t\t<measuring code=\"VALVE\" name=\"阀门状态\" from=\"17\" to=\"19\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(T(com.zcxk.smartcity.data.access.util.HexUtil).padLeft(T(com.zcxk.smartcity.data.access.util.HexUtil).hexSubHex(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),'3333'),4)).substring(14,16)\">\n" +
+				"\t\t\t\t<validators>\n" +
+				"\t\t\t\t\t<validator code=\"00\" name=\"开\"/>\n" +
+				"\t\t\t\t\t<validator code=\"01\" name=\"关\"/>\n" +
+				"\t\t\t\t\t<validator code=\"11\" name=\"异常\"/>\n" +
+				"\t\t\t\t</validators>\n" +
+				"\t\t\t</measuring>\n" +
+				"\t\t</measurings>\n" +
+				"\t</dataNode>\n" +
+				"</protocol>";
     	Object object = JAXBUtil.fromXML(xml, "com.zcxk.smartcity.data.access.protocol.model.complex.ComplexProtocol");
 		Protocol protocol = (Protocol) object;
 //		System.out.println(GenericProtocol.class.getName());
@@ -602,41 +603,41 @@ public class JAXBUtil {
 		System.out.println(JSON.toJSONString(protocol.parser("22175f000068")));
     }
     public void v188Test() {
-    	String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
-    			"<protocol length=\"27\" format=\"hex\" unit=\"byte\" factory=\"华旭\" model=\"智能水表\" series=\"LoraWAN水表\">\r\n" + 
-    			"	<dataNode from=\"13\" to=\"25\" unit=\"byte\">\r\n" + 
-    			"		<measurings>\r\n" + 
-    			"			<measuring code=\"WSV\" name=\"用水量\" from=\"3\" to=\"7\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value))*0.01,2)\" measuringUnit=\"t\"/>\r\n" + 
-    			"			<measuring code=\"VOL\" name=\"电压\" from=\"10\" to=\"11\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),16)*15.37,2)\" measuringUnit=\"mV\"/>\r\n" + 
-    			"			<measuring code=\"FORCED\" name=\"正反转\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(3,4)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"反转\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"DISTURB\" name=\"强磁干扰\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(4,5)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"透支\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"VOL_STATUS\" name=\"电压状态\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(5,6)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"0\" name=\"正常\"/>\r\n" + 
-    			"					<validator code=\"1\" name=\"欠压\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"			<measuring code=\"VALVE\" name=\"阀门状态\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(6,8)\">\r\n" + 
-    			"				<validators>\r\n" + 
-    			"					<validator code=\"00\" name=\"开\"/>\r\n" + 
-    			"					<validator code=\"01\" name=\"关\"/>\r\n" + 
-    			"					<validator code=\"11\" name=\"异常\"/>\r\n" + 
-    			"					<validator code=\"10\" name=\"无阀门\"/>\r\n" + 
-    			"				</validators>\r\n" + 
-    			"			</measuring>\r\n" + 
-    			"		</measurings>\r\n" + 
-    			"	</dataNode>\r\n" + 
-    			"</protocol>" ; 
+    	String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" +
+    			"<protocol length=\"27\" format=\"hex\" unit=\"byte\" factory=\"华旭\" model=\"智能水表\" series=\"LoraWAN水表\">\r\n" +
+    			"	<dataNode from=\"13\" to=\"25\" unit=\"byte\">\r\n" +
+    			"		<measurings>\r\n" +
+    			"			<measuring code=\"WSV\" name=\"用水量\" from=\"3\" to=\"7\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value))*0.01,2)\" measuringUnit=\"t\"/>\r\n" +
+    			"			<measuring code=\"VOL\" name=\"电压\" from=\"10\" to=\"11\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).reserveDecimal(T(Integer).parseInt(T(com.zcxk.smartcity.data.access.util.HexUtil).hexTransfer(#value),16)*15.37,2)\" measuringUnit=\"mV\"/>\r\n" +
+    			"			<measuring code=\"FORCED\" name=\"正反转\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(3,4)\">\r\n" +
+    			"				<validators>\r\n" +
+    			"					<validator code=\"0\" name=\"正常\"/>\r\n" +
+    			"					<validator code=\"1\" name=\"反转\"/>\r\n" +
+    			"				</validators>\r\n" +
+    			"			</measuring>\r\n" +
+    			"			<measuring code=\"DISTURB\" name=\"强磁干扰\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(4,5)\">\r\n" +
+    			"				<validators>\r\n" +
+    			"					<validator code=\"0\" name=\"正常\"/>\r\n" +
+    			"					<validator code=\"1\" name=\"透支\"/>\r\n" +
+    			"				</validators>\r\n" +
+    			"			</measuring>\r\n" +
+    			"			<measuring code=\"VOL_STATUS\" name=\"电压状态\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(5,6)\">\r\n" +
+    			"				<validators>\r\n" +
+    			"					<validator code=\"0\" name=\"正常\"/>\r\n" +
+    			"					<validator code=\"1\" name=\"欠压\"/>\r\n" +
+    			"				</validators>\r\n" +
+    			"			</measuring>\r\n" +
+    			"			<measuring code=\"VALVE\" name=\"阀门状态\" from=\"8\" to=\"9\" unit=\"byte\" expression=\"T(com.zcxk.smartcity.data.access.util.HexUtil).hexString2binaryString(#value).substring(6,8)\">\r\n" +
+    			"				<validators>\r\n" +
+    			"					<validator code=\"00\" name=\"开\"/>\r\n" +
+    			"					<validator code=\"01\" name=\"关\"/>\r\n" +
+    			"					<validator code=\"11\" name=\"异常\"/>\r\n" +
+    			"					<validator code=\"10\" name=\"无阀门\"/>\r\n" +
+    			"				</validators>\r\n" +
+    			"			</measuring>\r\n" +
+    			"		</measurings>\r\n" +
+    			"	</dataNode>\r\n" +
+    			"</protocol>" ;
     	Object object = JAXBUtil.fromXML(xml, "com.zcxk.smartcity.data.access.protocol.model.complex.ComplexProtocol");
 		Protocol protocol = (Protocol) object;
 		Map<String, Object> map = (Map<String, Object>) MapTransformUtils.objectToMap(protocol);
@@ -727,13 +728,13 @@ public class JAXBUtil {
 //		util.ButtonTest();
 //		util.JingGaiTest();
 //		util.DianBiaoTest();
-//		util.ShuiBiaoTest();
+		util.ShuiBiaoTest();
 //		util.CardTest();
 //		util.BLETest();
 //		util.SMOKETest();
 //		util.flowMeter();
 //		util.DMTest();
-		util.v188Test();
+//		util.v188Test();
 //		util.FireTest();
 //		util.AlarmTest();
 	}