From 4982b9614516dde101c3e44c60a612b3bfd8d6fe Mon Sep 17 00:00:00 2001 From: DELL <DELL@WIN-3EOIPEE9ML1> Date: 星期三, 21 二月 2024 16:26:06 +0800 Subject: [PATCH] 新增IEDScout调试工具功能 --- iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/FcModelNode.java | 500 +++++++++++++++++++++++++++--------------------------- 1 files changed, 250 insertions(+), 250 deletions(-) diff --git a/iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/FcModelNode.java b/iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/FcModelNode.java index b7b81c6..f034d70 100644 --- a/iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/FcModelNode.java +++ b/iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/FcModelNode.java @@ -1,250 +1,250 @@ -/* - * Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.openmuc.openiec61850; - -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccess; -import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection; -import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection.SelectAccess; -import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection.SelectAccess.Component; -import org.openmuc.openiec61850.internal.mms.asn1.BasicIdentifier; -import org.openmuc.openiec61850.internal.mms.asn1.Identifier; -import org.openmuc.openiec61850.internal.mms.asn1.ObjectName; -import org.openmuc.openiec61850.internal.mms.asn1.Unsigned32; -import org.openmuc.openiec61850.internal.mms.asn1.VariableDefs; -import org.openmuc.openiec61850.internal.mms.asn1.VariableSpecification; - -public abstract class FcModelNode extends ModelNode { - - private VariableDefs.SEQUENCE variableDef = null; - Fc fc; - private ServerAssociation selected = null; - private TimerTask task = null; - - public Fc getFc() { - return fc; - } - - boolean select(ServerAssociation association, Timer timer) { - if (selected != null) { - if (selected != association) { - return false; - } - } - else { - selected = association; - association.selects.add(this); - } - - ModelNode sboTimeoutNode = association.serverModel.findModelNode(objectReference, Fc.CF).getChild("sboTimeout"); - - if (sboTimeoutNode == null) { - return true; - } - - long sboTimeout = ((BdaInt32U) sboTimeoutNode).getValue(); - - if (sboTimeout == 0) { - return true; - } - - class SelectResetTask extends TimerTask { - ServerAssociation association; - - SelectResetTask(ServerAssociation association) { - this.association = association; - } - - @Override - public void run() { - synchronized (association.serverModel) { - if (task == this) { - task = null; - deselectAndRemove(association); - } - } - } - } - - if (task != null) { - task.cancel(); - } - - task = new SelectResetTask(association); - timer.schedule(task, sboTimeout); - - return true; - - } - - void deselectAndRemove(ServerAssociation association) { - selected = null; - if (task != null) { - task.cancel(); - task = null; - } - association.selects.remove(this); - } - - void deselect() { - selected = null; - if (task != null) { - task.cancel(); - task = null; - } - } - - boolean isSelected() { - if (selected == null) { - return false; - } - return true; - } - - boolean isSelectedBy(ServerAssociation association) { - if (selected == association) { - return true; - } - return false; - } - - VariableDefs.SEQUENCE getMmsVariableDef() { - - if (variableDef != null) { - return variableDef; - } - - AlternateAccess alternateAccess = null; - - StringBuilder preArrayIndexItemId = new StringBuilder(objectReference.get(1)); - preArrayIndexItemId.append("$"); - preArrayIndexItemId.append(fc); - - int arrayIndexPosition = objectReference.getArrayIndexPosition(); - if (arrayIndexPosition != -1) { - - for (int i = 2; i < arrayIndexPosition; i++) { - preArrayIndexItemId.append("$"); - preArrayIndexItemId.append(objectReference.get(i)); - } - - alternateAccess = new AlternateAccess(); - List<AlternateAccess.CHOICE> subSeqOfAlternateAccess = alternateAccess.getCHOICE(); - Unsigned32 indexBerInteger = new Unsigned32(Integer.parseInt(objectReference.get(arrayIndexPosition))); - - if (arrayIndexPosition < (objectReference.size() - 1)) { - // this reference points to a sub-node of an array element - - StringBuilder postArrayIndexItemId = new StringBuilder(objectReference.get(arrayIndexPosition + 1)); - - for (int i = (arrayIndexPosition + 2); i < objectReference.size(); i++) { - postArrayIndexItemId.append("$"); - postArrayIndexItemId.append(objectReference.get(i)); - } - - BasicIdentifier subIndexReference = new BasicIdentifier(postArrayIndexItemId.toString().getBytes()); - - AlternateAccessSelection.SelectAccess subIndexReferenceSelectAccess = new AlternateAccessSelection.SelectAccess(); - Component component = new Component(); - component.setBasic(subIndexReference); - subIndexReferenceSelectAccess.setComponent(component); - - AlternateAccessSelection subIndexReferenceAlternateAccessSelection = new AlternateAccessSelection(); - subIndexReferenceAlternateAccessSelection.setSelectAccess(subIndexReferenceSelectAccess); - - AlternateAccess.CHOICE subIndexReferenceAlternateAccessSubChoice = new AlternateAccess.CHOICE(); - subIndexReferenceAlternateAccessSubChoice.setUnnamed(subIndexReferenceAlternateAccessSelection); - - AlternateAccess subIndexReferenceAlternateAccess = new AlternateAccess(); - - List<AlternateAccess.CHOICE> subIndexReferenceAlternateAccessSubSeqOf = subIndexReferenceAlternateAccess - .getCHOICE(); - subIndexReferenceAlternateAccessSubSeqOf.add(subIndexReferenceAlternateAccessSubChoice); - - // set array index: - - AlternateAccessSelection.SelectAlternateAccess.AccessSelection indexAccessSelectionChoice = new AlternateAccessSelection.SelectAlternateAccess.AccessSelection(); - indexAccessSelectionChoice.setIndex(indexBerInteger); - - AlternateAccessSelection.SelectAlternateAccess indexAndLowerReferenceSelectAlternateAccess = new AlternateAccessSelection.SelectAlternateAccess(); - indexAndLowerReferenceSelectAlternateAccess.setAccessSelection(indexAccessSelectionChoice); - indexAndLowerReferenceSelectAlternateAccess.setAlternateAccess(subIndexReferenceAlternateAccess); - - AlternateAccessSelection indexAndLowerReferenceAlternateAccessSelection = new AlternateAccessSelection(); - indexAndLowerReferenceAlternateAccessSelection - .setSelectAlternateAccess(indexAndLowerReferenceSelectAlternateAccess); - - AlternateAccess.CHOICE indexAndLowerReferenceAlternateAccessChoice = new AlternateAccess.CHOICE(); - indexAndLowerReferenceAlternateAccessChoice.setUnnamed(indexAndLowerReferenceAlternateAccessSelection); - - subSeqOfAlternateAccess.add(indexAndLowerReferenceAlternateAccessChoice); - - } - else { - SelectAccess selectAccess = new SelectAccess(); - selectAccess.setIndex(indexBerInteger); - - AlternateAccessSelection alternateAccessSelection = new AlternateAccessSelection(); - alternateAccessSelection.setSelectAccess(selectAccess); - - AlternateAccess.CHOICE alternateAccessChoice = new AlternateAccess.CHOICE(); - alternateAccessChoice.setUnnamed(alternateAccessSelection); - - subSeqOfAlternateAccess.add(alternateAccessChoice); - } - - } - else { - - for (int i = 2; i < objectReference.size(); i++) { - preArrayIndexItemId.append("$"); - preArrayIndexItemId.append(objectReference.get(i)); - } - } - - ObjectName.DomainSpecific domainSpecificObjectName = new ObjectName.DomainSpecific(); - domainSpecificObjectName.setDomainID(new Identifier(objectReference.get(0).getBytes())); - domainSpecificObjectName.setItemID(new Identifier(preArrayIndexItemId.toString().getBytes())); - - ObjectName objectName = new ObjectName(); - objectName.setDomainSpecific(domainSpecificObjectName); - - VariableSpecification varSpec = new VariableSpecification(); - varSpec.setName(objectName); - - variableDef = new VariableDefs.SEQUENCE(); - variableDef.setAlternateAccess(alternateAccess); - variableDef.setVariableSpecification(varSpec); - - return variableDef; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(getReference().toString()).append(" [").append(fc).append("]"); - for (ModelNode childNode : children.values()) { - sb.append("\n"); - sb.append(childNode.toString()); - } - return sb.toString(); - } - -} +/* + * Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.openmuc.openiec61850; + +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccess; +import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection; +import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection.SelectAccess; +import org.openmuc.openiec61850.internal.mms.asn1.AlternateAccessSelection.SelectAccess.Component; +import org.openmuc.openiec61850.internal.mms.asn1.BasicIdentifier; +import org.openmuc.openiec61850.internal.mms.asn1.Identifier; +import org.openmuc.openiec61850.internal.mms.asn1.ObjectName; +import org.openmuc.openiec61850.internal.mms.asn1.Unsigned32; +import org.openmuc.openiec61850.internal.mms.asn1.VariableDefs; +import org.openmuc.openiec61850.internal.mms.asn1.VariableSpecification; + +public abstract class FcModelNode extends ModelNode { + + private VariableDefs.SEQUENCE variableDef = null; + Fc fc; + private ServerAssociation selected = null; + private TimerTask task = null; + + public Fc getFc() { + return fc; + } + + boolean select(ServerAssociation association, Timer timer) { + if (selected != null) { + if (selected != association) { + return false; + } + } + else { + selected = association; + association.selects.add(this); + } + + ModelNode sboTimeoutNode = association.serverModel.findModelNode(objectReference, Fc.CF).getChild("sboTimeout"); + + if (sboTimeoutNode == null) { + return true; + } + + long sboTimeout = ((BdaInt32U) sboTimeoutNode).getValue(); + + if (sboTimeout == 0) { + return true; + } + + class SelectResetTask extends TimerTask { + ServerAssociation association; + + SelectResetTask(ServerAssociation association) { + this.association = association; + } + + @Override + public void run() { + synchronized (association.serverModel) { + if (task == this) { + task = null; + deselectAndRemove(association); + } + } + } + } + + if (task != null) { + task.cancel(); + } + + task = new SelectResetTask(association); + timer.schedule(task, sboTimeout); + + return true; + + } + + void deselectAndRemove(ServerAssociation association) { + selected = null; + if (task != null) { + task.cancel(); + task = null; + } + association.selects.remove(this); + } + + void deselect() { + selected = null; + if (task != null) { + task.cancel(); + task = null; + } + } + + boolean isSelected() { + if (selected == null) { + return false; + } + return true; + } + + boolean isSelectedBy(ServerAssociation association) { + if (selected == association) { + return true; + } + return false; + } + + VariableDefs.SEQUENCE getMmsVariableDef() { + + if (variableDef != null) { + return variableDef; + } + + AlternateAccess alternateAccess = null; + + StringBuilder preArrayIndexItemId = new StringBuilder(objectReference.get(1)); + preArrayIndexItemId.append("$"); + preArrayIndexItemId.append(fc); + + int arrayIndexPosition = objectReference.getArrayIndexPosition(); + if (arrayIndexPosition != -1) { + + for (int i = 2; i < arrayIndexPosition; i++) { + preArrayIndexItemId.append("$"); + preArrayIndexItemId.append(objectReference.get(i)); + } + + alternateAccess = new AlternateAccess(); + List<AlternateAccess.CHOICE> subSeqOfAlternateAccess = alternateAccess.getCHOICE(); + Unsigned32 indexBerInteger = new Unsigned32(Integer.parseInt(objectReference.get(arrayIndexPosition))); + + if (arrayIndexPosition < (objectReference.size() - 1)) { + // this reference points to a sub-node of an array element + + StringBuilder postArrayIndexItemId = new StringBuilder(objectReference.get(arrayIndexPosition + 1)); + + for (int i = (arrayIndexPosition + 2); i < objectReference.size(); i++) { + postArrayIndexItemId.append("$"); + postArrayIndexItemId.append(objectReference.get(i)); + } + + BasicIdentifier subIndexReference = new BasicIdentifier(postArrayIndexItemId.toString().getBytes()); + + AlternateAccessSelection.SelectAccess subIndexReferenceSelectAccess = new AlternateAccessSelection.SelectAccess(); + Component component = new Component(); + component.setBasic(subIndexReference); + subIndexReferenceSelectAccess.setComponent(component); + + AlternateAccessSelection subIndexReferenceAlternateAccessSelection = new AlternateAccessSelection(); + subIndexReferenceAlternateAccessSelection.setSelectAccess(subIndexReferenceSelectAccess); + + AlternateAccess.CHOICE subIndexReferenceAlternateAccessSubChoice = new AlternateAccess.CHOICE(); + subIndexReferenceAlternateAccessSubChoice.setUnnamed(subIndexReferenceAlternateAccessSelection); + + AlternateAccess subIndexReferenceAlternateAccess = new AlternateAccess(); + + List<AlternateAccess.CHOICE> subIndexReferenceAlternateAccessSubSeqOf = subIndexReferenceAlternateAccess + .getCHOICE(); + subIndexReferenceAlternateAccessSubSeqOf.add(subIndexReferenceAlternateAccessSubChoice); + + // set array index: + + AlternateAccessSelection.SelectAlternateAccess.AccessSelection indexAccessSelectionChoice = new AlternateAccessSelection.SelectAlternateAccess.AccessSelection(); + indexAccessSelectionChoice.setIndex(indexBerInteger); + + AlternateAccessSelection.SelectAlternateAccess indexAndLowerReferenceSelectAlternateAccess = new AlternateAccessSelection.SelectAlternateAccess(); + indexAndLowerReferenceSelectAlternateAccess.setAccessSelection(indexAccessSelectionChoice); + indexAndLowerReferenceSelectAlternateAccess.setAlternateAccess(subIndexReferenceAlternateAccess); + + AlternateAccessSelection indexAndLowerReferenceAlternateAccessSelection = new AlternateAccessSelection(); + indexAndLowerReferenceAlternateAccessSelection + .setSelectAlternateAccess(indexAndLowerReferenceSelectAlternateAccess); + + AlternateAccess.CHOICE indexAndLowerReferenceAlternateAccessChoice = new AlternateAccess.CHOICE(); + indexAndLowerReferenceAlternateAccessChoice.setUnnamed(indexAndLowerReferenceAlternateAccessSelection); + + subSeqOfAlternateAccess.add(indexAndLowerReferenceAlternateAccessChoice); + + } + else { + SelectAccess selectAccess = new SelectAccess(); + selectAccess.setIndex(indexBerInteger); + + AlternateAccessSelection alternateAccessSelection = new AlternateAccessSelection(); + alternateAccessSelection.setSelectAccess(selectAccess); + + AlternateAccess.CHOICE alternateAccessChoice = new AlternateAccess.CHOICE(); + alternateAccessChoice.setUnnamed(alternateAccessSelection); + + subSeqOfAlternateAccess.add(alternateAccessChoice); + } + + } + else { + + for (int i = 2; i < objectReference.size(); i++) { + preArrayIndexItemId.append("$"); + preArrayIndexItemId.append(objectReference.get(i)); + } + } + + ObjectName.DomainSpecific domainSpecificObjectName = new ObjectName.DomainSpecific(); + domainSpecificObjectName.setDomainID(new Identifier(objectReference.get(0).getBytes())); + domainSpecificObjectName.setItemID(new Identifier(preArrayIndexItemId.toString().getBytes())); + + ObjectName objectName = new ObjectName(); + objectName.setDomainSpecific(domainSpecificObjectName); + + VariableSpecification varSpec = new VariableSpecification(); + varSpec.setName(objectName); + + variableDef = new VariableDefs.SEQUENCE(); + variableDef.setAlternateAccess(alternateAccess); + variableDef.setVariableSpecification(varSpec); + + return variableDef; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getReference().toString()).append(" [").append(fc).append("]"); + for (ModelNode childNode : children.values()) { + sb.append("\n"); + sb.append(childNode.toString()); + } + return sb.toString(); + } + +} -- Gitblit v1.9.1