diff --git a/examples/server_example3/static_model.c b/examples/server_example3/static_model.c index f0428e1..d302aeb 100644 --- a/examples/server_example3/static_model.c +++ b/examples/server_example3/static_model.c @@ -3,194 +3,51 @@ * * automatically generated from simpleIO_direct_control.icd */ -#include -#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, diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 6a85ad7..717c721 100644 Binary files a/tools/model_generator/genmodel.jar and b/tools/model_generator/genmodel.jar differ diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index 4a52edf..c35b839 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -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 [-ied ] [-ap ]"); + System.out.println("Usage: genmodel [-ied ] [-ap ] [-out ] [-modelprefix ]"); 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 "); - 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 "); 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() + "\",");