Pārlūkot izejas kodu

cherry pick from master f6c1478196

xiuwei 2 gadi atpakaļ
vecāks
revīzija
fd8dcb8f8b

+ 82 - 0
protocol-iec104/src/main/java/wei/yigulu/iec104/asdudataframe/PulseTotalSummonType.java

@@ -0,0 +1,82 @@
+package wei.yigulu.iec104.asdudataframe;
+
+
+import io.netty.buffer.ByteBuf;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import wei.yigulu.iec104.apdumodel.Apdu;
+import wei.yigulu.iec104.apdumodel.Asdu;
+import wei.yigulu.iec104.apdumodel.Vsq;
+import wei.yigulu.iec104.asdudataframe.typemodel.InformationBodyAddress;
+import wei.yigulu.iec104.exception.Iec104Exception;
+import wei.yigulu.iec104.nettyconfig.TechnicalTerm;
+
+import java.util.List;
+
+/**
+ * 电度总召唤帧
+ *
+ * @author 修唯xiuwei
+ * @version 3.0
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class PulseTotalSummonType extends AbstractDataFrameType {
+
+	/**
+	 * TYPEID
+	 */
+	public static final int TYPEID = TechnicalTerm.PULSE_TOTAL_SUMMONTYPE_TYPE;
+
+	private InformationBodyAddress address = new InformationBodyAddress(0);
+
+	private int value=69;
+
+
+	@Override
+	public void encode(List<Byte> buffer) {
+		address.encode(buffer);
+		buffer.add((byte) value);
+	}
+
+	@Override
+	public Asdu generateBack() {
+		Asdu asdu = new Asdu();
+		asdu.setTypeId(TYPEID);
+		asdu.setDataFrame(this);
+		asdu.getVsq().setNum(1);
+		asdu.getVsq().setSq(0);
+		asdu.getCot().setNot(7);
+		asdu.setOriginatorAddress(0);
+		asdu.setCommonAddress(1);
+		return asdu;
+	}
+
+
+	@Override
+	public void loadByteBuf(ByteBuf is, Vsq vsq) {
+		try {
+			this.address = new InformationBodyAddress(is);
+			this.value = (is.readByte() & 0xff);
+		} catch (Iec104Exception e) {
+			if (e.getCode() == 3301) {
+				return;
+			}
+		}
+	}
+
+	@Override
+	public byte[][] handleAndAnswer(Apdu apdu) throws Exception {
+		return null;
+	}
+
+
+	@Override
+	public String toString() {
+		String s = address.toString();
+		return "电度总召唤令;" + s + "\n召唤值:" + value + "\n";
+	}
+
+}

+ 3 - 3
protocol-iec104/src/main/java/wei/yigulu/iec104/asdudataframe/typemodel/IeProofreadTime.java

@@ -25,7 +25,7 @@ public class IeProofreadTime {
 
 	private DateTime time = new DateTime();
 
-	private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss:SSS");
+	private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
 
 	/**
 	 * Ie proofread time
@@ -44,8 +44,8 @@ public class IeProofreadTime {
 		int day = btime[4] & 0x1f;
 		int month = btime[5] & 0x0f;
 		int year = btime[6] & 0x7f;
-		String s = "20" + String.format("%02d", year) + "-" + String.format("%02d", month) + "-" + String.format("%02d", day) + " "
-				+ String.format("%02d", hour) + ":" + String.format("%02d", minute) + ":" + String.format("%02d", milliSecond / 1000) + ":" +
+		String s = (year>=70?"19":"20") + String.format("%02d", year) + "-" + String.format("%02d", month) + "-" + String.format("%02d", day) + " "
+				+ String.format("%02d", hour) + ":" + String.format("%02d", minute) + ":" + String.format("%02d", milliSecond / 1000) + "." +
 				String.format("%02d", milliSecond % 1000);
 		time = FORMATTER.parseDateTime(s);
 	}

+ 32 - 1
protocol-iec104/src/main/java/wei/yigulu/iec104/nettyconfig/TechnicalTerm.java

@@ -107,7 +107,6 @@ public class TechnicalTerm {
 	 * 测量值,短浮点数
 	 */
 	public static final Integer SHORT_FLOAT_TYPE = 13;
-
 	/**
 	 * 测量值,标度化值 带时标
 	 */
@@ -119,6 +118,7 @@ public class TechnicalTerm {
 	public static final Integer SHORT_FLOAT_TYPE_TIME = 36;
 
 
+
 	/**
 	 * 测量值,无品质位规一化值
 	 */
@@ -132,6 +132,37 @@ public class TechnicalTerm {
 
 
 	/**
+	 * 电度总召唤
+	 */
+	public static final Integer PULSE_TOTAL_SUMMONTYPE_TYPE = 0x65;
+
+
+	/**
+	 * 设置短浮点命令
+	 */
+	public static final Integer SHORT_FLOAT_COMMAND_TYPE = 0x32;
+
+
+	/**
+	 * 单点遥控命令
+	 */
+	public static final Integer SINGLE_BOOLEAN_COMMAND_TYPE = 0x2D;
+
+
+
+	/**
+	 * 归一化值遥调命令
+	 */
+	public static final Integer NORMALIZATION_COMMAND_TYPE = 0x30;
+
+
+	/**
+	 * 双点遥控命令
+	 */
+	public static final Integer DOUBLE_BOOLEAN_COMMAND_TYPE = 0x2E;
+
+
+	/**
 	 * 对时帧
 	 */
 	public static final Integer DATESYNCHRONIZATION_TYPE = 0x67;

+ 17 - 0
protocol-iec104/src/test/java/TestClient.java

@@ -0,0 +1,17 @@
+import wei.yigulu.iec104.apdumodel.Apdu;
+import wei.yigulu.iec104.apdumodel.Asdu;
+import wei.yigulu.iec104.asdudataframe.PulseTotalSummonType;
+import wei.yigulu.iec104.nettyconfig.Iec104MasterBuilder;
+
+public class TestClient {
+    public static void main(String[] args) throws Exception {
+        Iec104MasterBuilder i=new Iec104MasterBuilder("127.0.0.1",2404);
+        i.createByUnBlock();
+        Thread.sleep(3000L);
+        PulseTotalSummonType pulseTotalSummonType =new PulseTotalSummonType();
+        Asdu asdu = pulseTotalSummonType.generateBack();
+        Apdu apdu=new Apdu();
+        apdu.setAsdu(asdu);
+        i.sendFrameToOpposite(apdu.encode());
+    }
+}