【实例简介】电网104规约解包java代码
项目是围绕电网规约101规约(DL/T634.5101-2002)和104规约(DL/T634.5104-2009),项目基于Java语言。 可以完成规约的内容解析工作和组装工作。可用于实际场景的把发送报文的生成等工作。
【文件目录】
101_104规约解析
├── LICENSE
├── README.md
├── docs
│ ├── 附件1:广东电网配网自动化101规约实施细则(试行).docx
│ ├── 附件2:广东电网配网自动化104规约实施细则(试行).docx
│ └── 附件3:规约解析细则.xlsx
├── iec.iml
├── iec_analysis
│ ├── iec_analysis.iml
│ ├── pom.xml
│ ├── src
│ │ ├── main
│ │ │ └── java
│ │ │ └── com
│ │ │ └── iec
│ │ │ ├── analysis
│ │ │ │ ├── common
│ │ │ │ │ ├── BalancedLinkCode.java
│ │ │ │ │ ├── TransferReason.java
│ │ │ │ │ └── TypeIdentifier.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── CsCheckException.java
│ │ │ │ │ ├── CustomException.java
│ │ │ │ │ ├── IllegalFormatException.java
│ │ │ │ │ ├── LengthException.java
│ │ │ │ │ ├── UnknownLinkCodeException.java
│ │ │ │ │ ├── UnknownTransferReasonException.java
│ │ │ │ │ └── UnknownTypeIdentifierException.java
│ │ │ │ ├── protocol101
│ │ │ │ │ ├── ASDU.java
│ │ │ │ │ ├── Analysis.java
│ │ │ │ │ ├── Control.java
│ │ │ │ │ └── InformationBody
│ │ │ │ │ ├── InfoElement.java
│ │ │ │ │ ├── ParamePreset.java
│ │ │ │ │ ├── SystemCommand.java
│ │ │ │ │ ├── Telecontrol.java
│ │ │ │ │ ├── Telemetry.java
│ │ │ │ │ └── Telesignalling.java
│ │ │ │ └── protocol104
│ │ │ │ ├── ASDU.java
│ │ │ │ ├── Analysis.java
│ │ │ │ ├── ParamePreset104.java
│ │ │ │ ├── Telecontrol104.java
│ │ │ │ ├── Telemetry104.java
│ │ │ │ └── Telesignalling104.java
│ │ │ ├── assemble101
│ │ │ │ ├── ContinuousAddressBuilder.java
│ │ │ │ ├── UnContinuousAddressBuilder.java
│ │ │ │ └── VariableLengthPacket.java
│ │ │ ├── assemble104
│ │ │ │ ├── ContinuousAddressBuilder.java
│ │ │ │ ├── UnContinuousAddressBuilder.java
│ │ │ │ └── VaribleLengthPacket.java
│ │ │ └── utils
│ │ │ └── Util.java
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── iec
│ │ └── test
│ │ ├── Analysis101Test.java
│ │ └── Analysis104Test.java
│ └── target
│ ├── classes
│ │ └── com
│ │ └── iec
│ │ ├── analysis
│ │ │ ├── common
│ │ │ │ ├── BalancedLinkCode.class
│ │ │ │ ├── TransferReason.class
│ │ │ │ └── TypeIdentifier.class
│ │ │ ├── exception
│ │ │ │ ├── CsCheckException.class
│ │ │ │ ├── CustomException.class
│ │ │ │ ├── IllegalFormatException.class
│ │ │ │ ├── LengthException.class
│ │ │ │ ├── UnknownLinkCodeException.class
│ │ │ │ ├── UnknownTransferReasonException.class
│ │ │ │ └── UnknownTypeIdentifierException.class
│ │ │ ├── protocol101
│ │ │ │ ├── ASDU.class
│ │ │ │ ├── Analysis.class
│ │ │ │ ├── Control.class
│ │ │ │ └── InformationBody
│ │ │ │ ├── InfoElement.class
│ │ │ │ ├── ParamePreset.class
│ │ │ │ ├── SystemCommand.class
│ │ │ │ ├── Telecontrol.class
│ │ │ │ ├── Telemetry.class
│ │ │ │ └── Telesignalling.class
│ │ │ └── protocol104
│ │ │ ├── ASDU.class
│ │ │ ├── Analysis.class
│ │ │ ├── ParamePreset104.class
│ │ │ ├── Telecontrol104.class
│ │ │ ├── Telemetry104.class
│ │ │ └── Telesignalling104.class
│ │ ├── assemble101
│ │ │ ├── ContinuousAddressBuilder.class
│ │ │ ├── UnContinuousAddressBuilder.class
│ │ │ └── VariableLengthPacket.class
│ │ ├── assemble104
│ │ │ ├── ContinuousAddressBuilder.class
│ │ │ ├── UnContinuousAddressBuilder.class
│ │ │ └── VaribleLengthPacket.class
│ │ └── utils
│ │ └── Util.class
│ ├── generated-sources
│ │ └── annotations
│ ├── generated-test-sources
│ │ └── test-annotations
│ └── test-classes
│ └── com
│ └── iec
│ └── test
│ ├── Analysis101Test.class
│ └── Analysis104Test.class
├── iec_interaction
│ ├── iec_interaction.iml
│ └── pom.xml
└── pom.xml
43 directories, 79 files
【核心代码】
Apdu apdu = new Apdu(new DataInputStream(is));
if (apdu.getApciType() == Apdu.ApciType.I_FORMAT) {
Asdu asdu = apdu.getAsdu();
//处理I命令
handleData(asdu.getTypeId(), asdu.getInformationObjects());
//返回S确认命令
int receiveSeqNum = apdu.getSendSeqNumber() 1;
byte[] recNum = new byte[2];
recNum[0] = (byte) (receiveSeqNum << 1);
recNum[1] = (byte) (receiveSeqNum >> 7);
String recStr = ChangeUtils.toHexString(recNum);
os.write(ChangeUtils.hexStringToBytes("" recStr));