- Java Tools: Add support to handle Services.ReportSettings@owner attribute

pull/265/head
Michael Zillgith 5 years ago
parent bafe27a0e8
commit bef1ad21b4

@ -42,7 +42,7 @@
<ReadWrite />
<GetCBValues />
<ConfLNs fixPrefix="true" fixLnInst="true" />
<ReportSettings cbName="Conf" datSet="Dyn" rptID="Dyn" optFields="Dyn" bufTime="Dyn" trgOps="Dyn" intgPd="Dyn" />
<ReportSettings cbName="Conf" datSet="Dyn" rptID="Dyn" optFields="Dyn" bufTime="Dyn" trgOps="Dyn" intgPd="Dyn" owner="true" />
<GOOSE max="5" />
<GSSE max="5" />
<FileHandling />

@ -20,7 +20,7 @@ extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3;
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO1$stVal",
"GGIO1$ST$SPCSO1$stVal",
-1,
NULL,
NULL,
@ -30,7 +30,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO2$stVal",
"GGIO1$ST$SPCSO2$stVal",
-1,
NULL,
NULL,
@ -40,7 +40,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO3$stVal",
"GGIO1$ST$SPCSO3$stVal",
-1,
NULL,
NULL,
@ -50,7 +50,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO4$stVal",
"GGIO1$ST$SPCSO4$stVal",
-1,
NULL,
NULL,
@ -73,7 +73,7 @@ extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3;
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO1",
"GGIO1$ST$SPCSO1",
-1,
NULL,
NULL,
@ -83,7 +83,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO2",
"GGIO1$ST$SPCSO2",
-1,
NULL,
NULL,
@ -93,7 +93,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO3",
"GGIO1$ST$SPCSO3",
-1,
NULL,
NULL,
@ -103,7 +103,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO4",
"GGIO1$ST$SPCSO4",
-1,
NULL,
NULL,
@ -130,7 +130,7 @@ extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7;
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0 = {
"GenericIO",
false,
"GGIO1$MX$AnIn1$mag$f",
"GGIO1$MX$AnIn1$mag$f",
-1,
NULL,
NULL,
@ -140,7 +140,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1 = {
"GenericIO",
false,
"GGIO1$MX$AnIn1$q",
"GGIO1$MX$AnIn1$q",
-1,
NULL,
NULL,
@ -150,7 +150,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2 = {
"GenericIO",
false,
"GGIO1$MX$AnIn2$mag$f",
"GGIO1$MX$AnIn2$mag$f",
-1,
NULL,
NULL,
@ -160,7 +160,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3 = {
"GenericIO",
false,
"GGIO1$MX$AnIn2$q",
"GGIO1$MX$AnIn2$q",
-1,
NULL,
NULL,
@ -170,7 +170,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4 = {
"GenericIO",
false,
"GGIO1$MX$AnIn3$mag$f",
"GGIO1$MX$AnIn3$mag$f",
-1,
NULL,
NULL,
@ -180,7 +180,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5 = {
"GenericIO",
false,
"GGIO1$MX$AnIn3$q",
"GGIO1$MX$AnIn3$q",
-1,
NULL,
NULL,
@ -190,7 +190,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6 = {
"GenericIO",
false,
"GGIO1$MX$AnIn4$mag$f",
"GGIO1$MX$AnIn4$mag$f",
-1,
NULL,
NULL,
@ -200,7 +200,7 @@ DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7 = {
"GenericIO",
false,
"GGIO1$MX$AnIn4$q",
"GGIO1$MX$AnIn4$q",
-1,
NULL,
NULL,
@ -2012,16 +2012,16 @@ extern ReportControlBlock iedModel_GenericIO_LLN0_report7;
extern ReportControlBlock iedModel_GenericIO_LLN0_report8;
extern ReportControlBlock iedModel_GenericIO_LLN0_report9;
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report1};
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsRCBPreConf01", "Events1", false, "Events", 1, 24, 175, 50, 1000, {0x4, 0xc0, 0xa8, 0x2, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report2};
ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsBRCB01", "Events2", true, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report3};
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsBRCBPreConf01", "Events2", true, "Events", 1, 24, 175, 50, 1000, {0x4, 0xc0, 0xa8, 0x2, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report4};
ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report5};
ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report6};
ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report7};
ReportControlBlock iedModel_GenericIO_LLN0_report7 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report8};
ReportControlBlock iedModel_GenericIO_LLN0_report8 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report9};
ReportControlBlock iedModel_GenericIO_LLN0_report9 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, NULL};
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 88, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report1};
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsRCBPreConf01", "Events1", false, "Events", 1, 88, 175, 50, 1000, {0x4, 0xc0, 0xa8, 0x2, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report2};
ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsBRCB01", "Events2", true, "Events", 1, 88, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report3};
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsBRCBPreConf01", "Events2", true, "Events", 1, 88, 175, 50, 1000, {0x4, 0xc0, 0xa8, 0x2, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report4};
ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 88, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report5};
ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 88, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report6};
ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 88, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report7};
ReportControlBlock iedModel_GenericIO_LLN0_report7 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 80, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report8};
ReportControlBlock iedModel_GenericIO_LLN0_report8 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 80, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report9};
ReportControlBlock iedModel_GenericIO_LLN0_report9 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 80, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, NULL};

@ -34,11 +34,14 @@ public class IED {
private String name;
private List<AccessPoint> accessPoints;
private TypeDeclarations typeDeclarations;
private Node self;
public IED(Node iedNode, TypeDeclarations typeDeclarations)
throws SclParserException {
this.name = ParserUtils.parseAttribute(iedNode, "name");
self = iedNode;
List<Node> accessPointNodes = ParserUtils.getChildNodesWithTag(iedNode, "AccessPoint");
this.accessPoints = new LinkedList<AccessPoint>();
@ -76,4 +79,13 @@ public class IED {
return accessPoints.get(0);
}
public Services getServices() {
Node servicesNode = ParserUtils.getChildNodeWithTag(self, "Services");
if (servicesNode != null) {
return new Services(servicesNode);
}
else
return null;
}
}

@ -0,0 +1,51 @@
package com.libiec61850.scl.model;
/*
* Copyright 2013-2020 Michael Zillgith
*
* This file is part of libIEC61850.
*
* libIEC61850 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* libIEC61850 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
*
* See COPYING file for the complete license text.
*/
import org.w3c.dom.Node;
import com.libiec61850.scl.ParserUtils;
import com.libiec61850.scl.SclParserException;
public class ReportSettings {
private Node self;
public ReportSettings(Node reportSettingsNode)
{
self = reportSettingsNode;
}
public boolean hasOwner()
{
try {
Boolean ownerValue = ParserUtils.parseBooleanAttribute(self, "owner");
if (ownerValue != null)
return ownerValue.booleanValue();
else
return false;
} catch (SclParserException e) {
return false;
}
}
}

@ -0,0 +1,44 @@
package com.libiec61850.scl.model;
/*
* Copyright 2013-2020 Michael Zillgith
*
* This file is part of libIEC61850.
*
* libIEC61850 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* libIEC61850 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
*
* See COPYING file for the complete license text.
*/
import org.w3c.dom.Node;
import com.libiec61850.scl.ParserUtils;
public class Services {
private Node self;
public Services(Node servicesNode) {
self = servicesNode;
}
public ReportSettings getReportSettings()
{
Node reportSettingsNode = ParserUtils.getChildNodeWithTag(self, "ReportSettings");
if (reportSettingsNode != null)
return new ReportSettings(reportSettingsNode);
return null;
}
}

@ -50,12 +50,15 @@ import com.libiec61850.scl.model.LogControl;
import com.libiec61850.scl.model.LogicalDevice;
import com.libiec61850.scl.model.LogicalNode;
import com.libiec61850.scl.model.ReportControlBlock;
import com.libiec61850.scl.model.ReportSettings;
import com.libiec61850.scl.model.Services;
import com.libiec61850.scl.model.SettingControl;
public class DynamicModelGenerator {
private ConnectedAP connectedAP;
private IED ied = null;
private boolean hasOwner = false;
public DynamicModelGenerator(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName)
throws SclParserException {
@ -69,7 +72,17 @@ public class DynamicModelGenerator {
if (ied == null)
throw new SclParserException("No data model present in SCL file! Exit.");
Services services = ied.getServices();
if (services != null) {
ReportSettings rptSettings = services.getReportSettings();
if (rptSettings != null) {
hasOwner = rptSettings.hasOwner();
}
}
AccessPoint accessPoint = null;
if (accessPointName != null)
@ -257,7 +270,13 @@ public class DynamicModelGenerator {
output.print("- ");
output.print(rcb.getConfRef() + " ");
output.print(rcb.getTriggerOptions().getIntValue() + " ");
int triggerOptions = rcb.getTriggerOptions().getIntValue();
if (hasOwner)
triggerOptions += 64;
output.print(triggerOptions + " ");
output.print(rcb.getOptionFields().getIntValue() + " ");

@ -60,9 +60,11 @@ import com.libiec61850.scl.model.LogControl;
import com.libiec61850.scl.model.LogicalDevice;
import com.libiec61850.scl.model.LogicalNode;
import com.libiec61850.scl.model.ReportControlBlock;
import com.libiec61850.scl.model.ReportSettings;
import com.libiec61850.scl.model.RptEnabled;
import com.libiec61850.scl.model.SampledValueControl;
import com.libiec61850.scl.model.Server;
import com.libiec61850.scl.model.Services;
import com.libiec61850.scl.model.SettingControl;
import com.libiec61850.scl.model.TriggerOptions;
@ -113,6 +115,8 @@ public class StaticModelGenerator {
private boolean initializeOnce;
private SclParser sclParser;
private boolean hasOwner = false;
public StaticModelGenerator(InputStream stream, String icdFile, PrintStream cOut, PrintStream hOut,
String outputFileName, String iedName, String accessPointName, String modelPrefix,
@ -162,6 +166,16 @@ public class StaticModelGenerator {
if (ied == null)
System.out.println("IED model not found in SCL file! Exit.");
Services services = ied.getServices();
if (services != null) {
ReportSettings rptSettings = services.getReportSettings();
if (rptSettings != null) {
hasOwner = rptSettings.hasOwner();
}
}
accessPoint = null;
@ -1422,6 +1436,9 @@ public class StaticModelGenerator {
if (rcb.getTriggerOptions() != null)
triggerOps = rcb.getTriggerOptions().getIntValue();
if (hasOwner)
triggerOps += 64;
rcbString += triggerOps + ", ";

Loading…
Cancel
Save