- added support for multiple data models in static model generator

This commit is contained in:
Michael Zillgith 2015-04-10 15:37:26 +02:00
parent 90c9484e8d
commit 5547adf853
3 changed files with 139 additions and 237 deletions

View file

@ -3,194 +3,51 @@
*
* automatically generated from simpleIO_direct_control.icd
*/
#include <stdlib.h>
#include "iec61850_model.h"
#include "static_model.h"
extern IedModel iedModel;
static void initializeValues();
extern LogicalDevice iedModel_GenericIO;
extern LogicalNode iedModel_GenericIO_LLN0;
extern DataObject iedModel_GenericIO_LLN0_Mod;
extern DataAttribute iedModel_GenericIO_LLN0_Mod_stVal;
extern DataAttribute iedModel_GenericIO_LLN0_Mod_q;
extern DataAttribute iedModel_GenericIO_LLN0_Mod_t;
extern DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel;
extern DataObject iedModel_GenericIO_LLN0_Beh;
extern DataAttribute iedModel_GenericIO_LLN0_Beh_stVal;
extern DataAttribute iedModel_GenericIO_LLN0_Beh_q;
extern DataAttribute iedModel_GenericIO_LLN0_Beh_t;
extern DataObject iedModel_GenericIO_LLN0_Health;
extern DataAttribute iedModel_GenericIO_LLN0_Health_stVal;
extern DataAttribute iedModel_GenericIO_LLN0_Health_q;
extern DataAttribute iedModel_GenericIO_LLN0_Health_t;
extern DataObject iedModel_GenericIO_LLN0_NamPlt;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_d;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs;
extern LogicalNode iedModel_GenericIO_LPHD1;
extern DataObject iedModel_GenericIO_LPHD1_PhyNam;
extern DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor;
extern DataObject iedModel_GenericIO_LPHD1_PhyHealth;
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal;
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q;
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t;
extern DataObject iedModel_GenericIO_LPHD1_Proxy;
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal;
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_q;
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_t;
extern LogicalNode iedModel_GenericIO_GGIO1;
extern DataObject iedModel_GenericIO_GGIO1_Mod;
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_t;
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel;
extern DataObject iedModel_GenericIO_GGIO1_Beh;
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_t;
extern DataObject iedModel_GenericIO_GGIO1_Health;
extern DataAttribute iedModel_GenericIO_GGIO1_Health_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Health_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Health_t;
extern DataObject iedModel_GenericIO_GGIO1_NamPlt;
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor;
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev;
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d;
extern DataObject iedModel_GenericIO_GGIO1_AnIn1;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t;
extern DataObject iedModel_GenericIO_GGIO1_AnIn2;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t;
extern DataObject iedModel_GenericIO_GGIO1_AnIn3;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t;
extern DataObject iedModel_GenericIO_GGIO1_AnIn4;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q;
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t;
extern DataObject iedModel_GenericIO_GGIO1_SPCSO1;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t;
extern DataObject iedModel_GenericIO_GGIO1_SPCSO2;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t;
extern DataObject iedModel_GenericIO_GGIO1_SPCSO3;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t;
extern DataObject iedModel_GenericIO_GGIO1_SPCSO4;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel;
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t;
extern DataObject iedModel_GenericIO_GGIO1_Ind1;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_t;
extern DataObject iedModel_GenericIO_GGIO1_Ind2;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_t;
extern DataObject iedModel_GenericIO_GGIO1_Ind3;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_t;
extern DataObject iedModel_GenericIO_GGIO1_Ind4;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
extern DataSet ds_GenericIO_LLN0_Events;
extern DataSet ds_GenericIO_LLN0_Events2;
extern DataSet ds_GenericIO_LLN0_Measurements;
extern DataSet iedModelds_GenericIO_LLN0_Events;
extern DataSet iedModelds_GenericIO_LLN0_Events2;
extern DataSet iedModelds_GenericIO_LLN0_Measurements;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda1;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda2;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda3;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3;
DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO1$stVal",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events_fcda1
&iedModelds_GenericIO_LLN0_Events_fcda1
};
DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO2$stVal",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events_fcda2
&iedModelds_GenericIO_LLN0_Events_fcda2
};
DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO3$stVal",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events_fcda3
&iedModelds_GenericIO_LLN0_Events_fcda3
};
DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO4$stVal",
@ -200,50 +57,50 @@ DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = {
NULL
};
DataSet ds_GenericIO_LLN0_Events = {
DataSet iedModelds_GenericIO_LLN0_Events = {
"GenericIO",
"LLN0$Events",
4,
&ds_GenericIO_LLN0_Events_fcda0,
&ds_GenericIO_LLN0_Events2
&iedModelds_GenericIO_LLN0_Events_fcda0,
&iedModelds_GenericIO_LLN0_Events2
};
extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda0;
extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda1;
extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda2;
extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda3;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2;
extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3;
DataSetEntry ds_GenericIO_LLN0_Events2_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO1",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events2_fcda1
&iedModelds_GenericIO_LLN0_Events2_fcda1
};
DataSetEntry ds_GenericIO_LLN0_Events2_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO2",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events2_fcda2
&iedModelds_GenericIO_LLN0_Events2_fcda2
};
DataSetEntry ds_GenericIO_LLN0_Events2_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO3",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Events2_fcda3
&iedModelds_GenericIO_LLN0_Events2_fcda3
};
DataSetEntry ds_GenericIO_LLN0_Events2_fcda3 = {
DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3 = {
"GenericIO",
false,
"GGIO1$ST$SPCSO4",
@ -253,94 +110,94 @@ DataSetEntry ds_GenericIO_LLN0_Events2_fcda3 = {
NULL
};
DataSet ds_GenericIO_LLN0_Events2 = {
DataSet iedModelds_GenericIO_LLN0_Events2 = {
"GenericIO",
"LLN0$Events2",
4,
&ds_GenericIO_LLN0_Events2_fcda0,
&ds_GenericIO_LLN0_Measurements
&iedModelds_GenericIO_LLN0_Events2_fcda0,
&iedModelds_GenericIO_LLN0_Measurements
};
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda0;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda1;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda2;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda3;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda4;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda5;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda6;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda7;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6;
extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7;
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda0 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0 = {
"GenericIO",
false,
"GGIO1$MX$AnIn1$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda1
&iedModelds_GenericIO_LLN0_Measurements_fcda1
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda1 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1 = {
"GenericIO",
false,
"GGIO1$MX$AnIn1$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda2
&iedModelds_GenericIO_LLN0_Measurements_fcda2
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda2 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2 = {
"GenericIO",
false,
"GGIO1$MX$AnIn2$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda3
&iedModelds_GenericIO_LLN0_Measurements_fcda3
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda3 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3 = {
"GenericIO",
false,
"GGIO1$MX$AnIn2$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda4
&iedModelds_GenericIO_LLN0_Measurements_fcda4
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda4 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4 = {
"GenericIO",
false,
"GGIO1$MX$AnIn3$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda5
&iedModelds_GenericIO_LLN0_Measurements_fcda5
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda5 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5 = {
"GenericIO",
false,
"GGIO1$MX$AnIn3$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda6
&iedModelds_GenericIO_LLN0_Measurements_fcda6
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda6 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6 = {
"GenericIO",
false,
"GGIO1$MX$AnIn4$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda7
&iedModelds_GenericIO_LLN0_Measurements_fcda7
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda7 = {
DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7 = {
"GenericIO",
false,
"GGIO1$MX$AnIn4$q",
@ -350,11 +207,11 @@ DataSetEntry ds_GenericIO_LLN0_Measurements_fcda7 = {
NULL
};
DataSet ds_GenericIO_LLN0_Measurements = {
DataSet iedModelds_GenericIO_LLN0_Measurements = {
"GenericIO",
"LLN0$Measurements",
8,
&ds_GenericIO_LLN0_Measurements_fcda0,
&iedModelds_GenericIO_LLN0_Measurements_fcda0,
NULL
};
@ -2101,7 +1958,7 @@ ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0,
IedModel iedModel = {
"simpleIO",
&iedModel_GenericIO,
&ds_GenericIO_LLN0_Events,
&iedModelds_GenericIO_LLN0_Events,
&iedModel_GenericIO_LLN0_report0,
NULL,
NULL,

Binary file not shown.

View file

@ -84,8 +84,14 @@ public class StaticModelGenerator {
private IED ied;
private AccessPoint accessPoint;
private String outputFileName;
private String hDefineName;
private String modelPrefix;
private boolean initializeOnce;
public StaticModelGenerator(InputStream stream, String icdFile, PrintStream cOut, PrintStream hOut,
String iedName, String accessPointName) throws SclParserException
String outputFileName, String iedName, String accessPointName, String modelPrefix,
boolean initializeOnce) throws SclParserException
{
this.cOut = cOut;
this.hOut = hOut;
@ -100,6 +106,16 @@ public class StaticModelGenerator {
SclParser sclParser = new SclParser(stream);
this.outputFileName = outputFileName;
this.hDefineName = outputFileName.toUpperCase().replace( '.', '_' ).replace( '-', '_' ) + "_H_";
this.modelPrefix = modelPrefix;
this.initializeOnce = initializeOnce;
if( hDefineName.lastIndexOf( '/' ) >= 0 )
{
hDefineName = hDefineName.substring( hDefineName.lastIndexOf( '/' ) + 1 );
}
ied = null;
if (iedName == null)
@ -147,17 +163,18 @@ public class StaticModelGenerator {
public static void main(String[] args) throws FileNotFoundException {
if (args.length < 1) {
System.out.println("Usage: genmodel <ICD file> [-ied <ied-name>] [-ap <access-point-name>]");
System.out.println("Usage: genmodel <ICD file> [-ied <ied-name>] [-ap <access-point-name>] [-out <output-name>] [-modelprefix <model-prefix>]");
System.exit(1);
}
String icdFile = args[0];
String defaultCFileName = "static_model.c";
String defaultHFileName = "static_model.h";
String outputFileName = "static_model";
String accessPointName = null;
String iedName = null;
String modelPrefix = "iedModel";
boolean initializeOnce = false;
if (args.length > 1) {
for (int i = 1; i < args.length; i++) {
@ -175,6 +192,28 @@ public class StaticModelGenerator {
i++;
}
else if (args[i].equals("-out")) {
outputFileName = args[i+1];
System.out.println("Select Output File " + outputFileName);
i++;
}
else if (args[i].equals("-modelprefix")) {
modelPrefix = args[i+1];
System.out.println("Select Model Prefix " + modelPrefix);
i++;
}
else if (args[i].equals("-initializeonce")) {
initializeOnce = true;
System.out.println("Select Initialize Once");
}
else {
System.out.println("Unknown option: \"" + args[i] + "\"");
@ -183,13 +222,14 @@ public class StaticModelGenerator {
}
PrintStream cOutStream = new PrintStream(new FileOutputStream(new File(defaultCFileName)));
PrintStream hOutStream = new PrintStream(new FileOutputStream(new File(defaultHFileName)));
PrintStream cOutStream = new PrintStream(new FileOutputStream(new File(outputFileName + ".c")));
PrintStream hOutStream = new PrintStream(new FileOutputStream(new File(outputFileName + ".h")));
System.out.println("Select ICD File " + icdFile);
InputStream stream = new FileInputStream(icdFile);
try {
new StaticModelGenerator(stream, icdFile, cOutStream, hOutStream, iedName, accessPointName);
new StaticModelGenerator(stream, icdFile, cOutStream, hOutStream, outputFileName, iedName, accessPointName, modelPrefix, initializeOnce);
} catch (SclParserException e) {
System.err.println("ERROR: " + e.getMessage());
}
@ -199,8 +239,8 @@ public class StaticModelGenerator {
hOut.println("\n\n");
for (String variableName : variablesList) {
String name = variableName.substring(8);
hOut.println("#define IEDMODEL" + name + " (&" + variableName + ")");
String name = modelPrefix.toUpperCase() + variableName.substring( modelPrefix.length() );
hOut.println("#define " + name + " (&" + variableName + ")");
}
}
@ -233,7 +273,7 @@ public class StaticModelGenerator {
LogicalDevice logicalDevice = logicalDevices.get(i);
String ldName = "iedModel_" + logicalDevice.getInst();
String ldName = modelPrefix + "_" + logicalDevice.getInst();
variablesList.add(ldName);
@ -245,10 +285,10 @@ public class StaticModelGenerator {
cOut.println(" \"" + logicalDeviceName + "\",");
cOut.println(" (ModelNode*) &iedModel,");
cOut.println(" (ModelNode*) &" + modelPrefix + ",");
if (i < (logicalDevices.size() - 1))
cOut.println(" (ModelNode*) &iedModel_" + logicalDevices.get(i + 1).getInst() + ",");
cOut.println(" (ModelNode*) &" + modelPrefix + "_" + logicalDevices.get(i + 1).getInst() + ",");
else
cOut.println(" NULL,");
@ -279,9 +319,9 @@ public class StaticModelGenerator {
cOut.println(settingGroupControlBlocks);
String firstLogicalDeviceName = logicalDevices.get(0).getInst();
cOut.println("\nIedModel iedModel = {");
cOut.println("\nIedModel " + modelPrefix + " = {");
cOut.println(" \"" + ied.getName() + "\",");
cOut.println(" &iedModel_" + firstLogicalDeviceName + ",");
cOut.println(" &" + modelPrefix + "_" + firstLogicalDeviceName + ",");
if (dataSetNames.size() > 0)
cOut.println(" &" + dataSetNames.get(0) + ",");
@ -318,7 +358,7 @@ public class StaticModelGenerator {
int gseCount = 0;
for (GSEControl gse : goCBs) {
String gcbVariableName = "iedModel_" + ldName + "_" + ln.getName() + "_gse" + gseCount;
String gcbVariableName = modelPrefix + "_" + ldName + "_" + ln.getName() + "_gse" + gseCount;
gseVariableNames.add(gcbVariableName);
gseCount++;
}
@ -346,7 +386,7 @@ public class StaticModelGenerator {
maxInstances = rcb.getRptEna().getMaxInstances();
for (int i = 0; i < maxInstances; i++) {
String rcbVariableName = "iedModel_" + ldName + "_" + ln.getName() + "_report" + rcbCount;
String rcbVariableName = modelPrefix + "_" + ldName + "_" + ln.getName() + "_report" + rcbCount;
rcbVariableNames.add(rcbVariableName);
rcbCount++;
}
@ -367,7 +407,7 @@ public class StaticModelGenerator {
for (SettingControl sgcb : sgcbs) {
String sgcbVariableName = "iedModel_" + ldName + "_" + ln.getName() + "_sgcb";
String sgcbVariableName = modelPrefix + "_" + ldName + "_" + ln.getName() + "_sgcb";
sgcbVariableNames.add(sgcbVariableName);
@ -467,7 +507,7 @@ public class StaticModelGenerator {
if (dataAttribute.getFc() == FunctionalConstraint.SE) {
if (daName.startsWith("iedModel_SE_") == false)
if (daName.startsWith(modelPrefix + "_SE_") == false)
daName = daName.substring(0, 9) + "SE_" + daName.substring(9);
}
@ -484,7 +524,7 @@ public class StaticModelGenerator {
String siblingDoName = doName;
if (sibling.getFc() == FunctionalConstraint.SE) {
if (siblingDoName.startsWith("iedModel_SE_") == false)
if (siblingDoName.startsWith(modelPrefix + "_SE_") == false)
siblingDoName = siblingDoName.substring(0, 9) + "SE_" + siblingDoName.substring(9);
}
@ -564,6 +604,12 @@ public class StaticModelGenerator {
StringBuffer buffer = this.initializerBuffer;
buffer.append("\n");
if( initializeOnce )
{
buffer.append("if (!");
buffer.append(daName);
buffer.append(".mmsValue)\n");
}
buffer.append(daName);
buffer.append(".mmsValue = ");
@ -612,20 +658,17 @@ public class StaticModelGenerator {
private void printForwardDeclarations(Server server) {
cOut.println("extern IedModel iedModel;");
cOut.println("static void initializeValues();");
hOut.println("extern IedModel iedModel;");
hOut.println("extern IedModel " + modelPrefix + ";");
for (LogicalDevice logicalDevice : server.getLogicalDevices()) {
String ldName = "iedModel_" + logicalDevice.getInst();
String ldName = modelPrefix + "_" + logicalDevice.getInst();
cOut.println("extern LogicalDevice " + ldName + ";");
hOut.println("extern LogicalDevice " + ldName + ";");
for (LogicalNode logicalNode : logicalDevice.getLogicalNodes()) {
String lnName = ldName + "_" + logicalNode.getName();
cOut.println("extern LogicalNode " + lnName + ";");
hOut.println("extern LogicalNode " + lnName + ";");
printDataObjectForwardDeclarations(lnName, logicalNode.getDataObjects());
@ -638,7 +681,6 @@ public class StaticModelGenerator {
for (DataObject dataObject : dataObjects) {
String doName = prefix + "_" + dataObject.getName();
cOut.println("extern DataObject " + doName + ";");
hOut.println("extern DataObject " + doName + ";");
if (dataObject.getSubDataObjects() != null) {
@ -655,11 +697,10 @@ public class StaticModelGenerator {
if (dataAttribute.getFc() == FunctionalConstraint.SE) {
if (daName.startsWith("iedModel_SE_") == false)
if (daName.startsWith(modelPrefix + "_SE_") == false)
daName = daName.substring(0, 9) + "SE_" + daName.substring(9);
}
cOut.println("extern DataAttribute " + daName + ";");
hOut.println("extern DataAttribute " + daName + ";");
if (dataAttribute.getSubDataAttributes() != null)
@ -669,24 +710,28 @@ public class StaticModelGenerator {
private void printCFileHeader(String filename) {
String include = outputFileName + ".h\"";
if( include.lastIndexOf( '/' ) >= 0 ) {
include = include.substring( include.lastIndexOf( '/' ) + 1 );
}
cOut.println("/*");
cOut.println(" * static_model.c");
cOut.println(" * " + outputFileName + ".c");
cOut.println(" *");
cOut.println(" * automatically generated from " + filename);
cOut.println(" */");
cOut.println("#include <stdlib.h>");
cOut.println("#include \"iec61850_model.h\"");
cOut.println("#include \"" + include);
cOut.println();
}
private void printHeaderFileHeader(String filename) {
hOut.println("/*");
hOut.println(" * static_model.h");
hOut.println(" * " + outputFileName + ".h");
hOut.println(" *");
hOut.println(" * automatically generated from " + filename);
hOut.println(" */\n");
hOut.println("#ifndef STATIC_MODEL_H_");
hOut.println("#define STATIC_MODEL_H_\n");
hOut.println("#ifndef " + hDefineName);
hOut.println("#define " + hDefineName + "\n");
hOut.println("#include <stdlib.h>");
hOut.println("#include \"iec61850_model.h\"");
hOut.println();
@ -694,7 +739,7 @@ public class StaticModelGenerator {
private void printHeaderFileFooter() {
hOut.println();
hOut.println("#endif /* STATIC_MODEL_H_ */\n");
hOut.println("#endif /* " + hDefineName + " */\n");
}
private void printGSEControlBlocks(String ldName, String lnPrefix, LogicalNode logicalNode) {
@ -940,7 +985,7 @@ public class StaticModelGenerator {
for (DataSet dataSet : dataSets) {
String dataSetVariableName = "ds_" + logicalDevice.getInst() + "_" + logicalNode.getName() + "_" + dataSet.getName();
String dataSetVariableName = modelPrefix + "ds_" + logicalDevice.getInst() + "_" + logicalNode.getName() + "_" + dataSet.getName();
dataSetNames.add(dataSetVariableName);
}
@ -1033,7 +1078,7 @@ public class StaticModelGenerator {
cOut.println("DataSet " + dataSetVariableName + " = {");
String lnVariableName = "iedModel_" + logicalDevice.getInst() + "_" + logicalNode.getName();
String lnVariableName = modelPrefix + "_" + logicalDevice.getInst() + "_" + logicalNode.getName();
cOut.println(" \"" + logicalDevice.getInst() + "\",");
cOut.println(" \"" + logicalNode.getName() + "$" + dataSet.getName() + "\",");