Skip to content

Commit ce73bd0

Browse files
authored
Merge pull request #553 from com-pas/develop
Release 0.2.49
2 parents f140964 + 3f3916d commit ce73bd0

File tree

7 files changed

+188
-26
lines changed

7 files changed

+188
-26
lines changed

RELEASE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!--
2+
SPDX-FileCopyrightText: 2025 RTE FRANCE
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
-->
6+
# Release
7+
8+
See the official [contributing guide](https://com-pas.github.io/contributing/) on how to [release](https://com-pas.github.io/contributing/RELEASES.html).

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/InputsAdapter.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ private Optional<SclReportItem> updateSourceDataSetsAndControlBlocks(TExtRef ext
162162

163163
try {
164164
sourceDas.forEach(sourceDa -> {
165-
String datasetSuffix = generateDataSetSuffix(extRef, sourceDa, isBayInternal);
165+
String datasetSuffix = generateDataSetSuffix(extRef, sourceDa, allowedFcdas, isBayInternal);
166166
String dataSetName = DATASET_NAME_PREFIX + datasetSuffix;
167167
String cbName = CONTROLBLOCK_NAME_PREFIX + datasetSuffix;
168168
createDataSetWithFCDA(extRef, sourceLDevice, sourceDa, dataSetName);
@@ -210,10 +210,16 @@ private void setExtRefSrcAttributes(TExtRef extRef, String cbName) {
210210
extRef.unsetSrcLNClass();
211211
}
212212

213-
private static String generateDataSetSuffix(TExtRef extRef, DataAttributeRef sourceDa, boolean isBayInternal) {
213+
private String generateDataSetSuffix(TExtRef extRef, DataAttributeRef sourceDa, List<TFCDA> allowedFcdas, boolean isBayInternal) {
214214
return extRef.getLdInst().toUpperCase(Locale.ENGLISH) + ATTRIBUTE_VALUE_SEPARATOR
215215
+ switch (extRef.getServiceType()) {
216-
case GOOSE -> "G" + ((sourceDa.getFc() == TFCEnum.ST) ? "S" : "M");
216+
case GOOSE -> {
217+
// Dans le cas d'un GOOSE, on récupère le FCDA correspondant dans le fichier de configuration DA_COMM afin de connaître le gooseType
218+
TFCDA allowedFcda = findFcdaInDaComm(sourceDa, allowedFcdas)
219+
.orElseThrow(() -> new ScdException("FCDA lnClass=%s doName=%s daName=%s fc=%s introuvable dans le fichier DA_COMM"
220+
.formatted(sourceDa.getLnClass(), sourceDa.getDoName(), sourceDa.getDaName(), sourceDa.getFc())));
221+
yield allowedFcda.getGooseType().value();
222+
}
217223
case SMV -> "SV";
218224
case REPORT -> (sourceDa.getFc() == TFCEnum.ST) ? "DQC" : "CYC";
219225
case POLL -> throw new IllegalArgumentException(MESSAGE_POLL_SERVICE_TYPE_NOT_SUPPORTED);
@@ -234,17 +240,23 @@ private Optional<SclReportItem> removeFilteredSourceDas(TExtRef extRef, final Se
234240
}
235241

236242
private boolean isFcdaAllowed(DataAttributeRef dataAttributeRef, List<TFCDA> allowedFcdas) {
243+
return findFcdaInDaComm(dataAttributeRef, allowedFcdas).isPresent();
244+
}
245+
246+
private Optional<TFCDA> findFcdaInDaComm(DataAttributeRef dataAttributeRef, List<TFCDA> allowedFcdas) {
237247
String lnClass = dataAttributeRef.getLnClass();
238248
String doName = dataAttributeRef.getDoName().toStringWithoutInst();
239249
String daName = dataAttributeRef.getDaName().toString();
240250
String fc = dataAttributeRef.getFc().value();
241251
if (StringUtils.isBlank(lnClass) || StringUtils.isBlank(doName) || StringUtils.isBlank(daName) || StringUtils.isBlank(fc)) {
242252
throw new IllegalArgumentException("parameters must not be blank");
243253
}
244-
return allowedFcdas.stream().anyMatch(tfcda -> tfcda.getDoName().equals(doName)
245-
&& tfcda.getDaName().equals(daName)
246-
&& tfcda.getLnClass().equals(lnClass)
247-
&& tfcda.getFc().value().equals(fc));
254+
255+
return allowedFcdas.stream().filter(tfcda -> tfcda.getDoName().equals(doName)
256+
&& tfcda.getDaName().equals(daName)
257+
&& tfcda.getLnClass().equals(lnClass)
258+
&& tfcda.getFc().value().equals(fc))
259+
.findFirst();
248260
}
249261

250262
private Optional<SclReportItem> removeFilterSourceDaForReport(TExtRef extRef, Set<DataAttributeRef> sourceDas) {

sct-commons/src/main/resources/xsd/CB_COMM_V1.xsd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ SPDX-License-Identifier: Apache-2.0
5757
<xs:attribute name="doName" type="xs:string" use="required"/>
5858
<xs:attribute name="daName" type="xs:string" use="required"/>
5959
<xs:attribute name="fc" type="tfc" use="required"/>
60+
<xs:attribute name="gooseType" type="tgooseType" use="required"/>
6061
</xs:complexType>
6162

6263
<xs:simpleType name="tfc">
@@ -66,4 +67,10 @@ SPDX-License-Identifier: Apache-2.0
6667
</xs:restriction>
6768
</xs:simpleType>
6869

70+
<xs:simpleType name="tgooseType">
71+
<xs:restriction base="xs:string">
72+
<xs:enumeration value="GS"/>
73+
<xs:enumeration value="GM"/>
74+
</xs:restriction>
75+
</xs:simpleType>
6976
</xs:schema>

sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ControlBlockEditorServiceTest.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
import static org.assertj.core.api.Assertions.assertThat;
4040
import static org.junit.jupiter.api.Named.named;
41+
import static org.lfenergy.compas.scl2007b4.model.TFCEnum.MX;
4142
import static org.lfenergy.compas.scl2007b4.model.TFCEnum.ST;
4243
import static org.lfenergy.compas.sct.commons.testhelpers.SclHelper.*;
4344
import static org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller.assertIsMarshallable;
@@ -137,17 +138,17 @@ void createDataSetAndControlBlocks_should_create_DataSet() {
137138
// Check dataSet names
138139
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_CYCI");
139140
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_DQCI");
140-
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_GMI");
141-
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_SVI");
142-
findDataSet(scd, "IED_NAME3", "LD_INST31", "DS_LD_INST31_GSE");
143141
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_GSI");
142+
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_SVI");
143+
findDataSet(scd, "IED_NAME3", "LD_INST31", "DS_LD_INST31_GME");
144+
findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_GMI");
144145

145146
// Check one DataSet content
146147
DataSetAdapter aDataSet = findDataSet(scd, "IED_NAME2", "LD_INST21", "DS_LD_INST21_GSI");
147148
assertThat(aDataSet.getCurrentElem().getFCDA()).hasSize(4);
148149
assertThat(aDataSet.getCurrentElem().getFCDA().stream().map(FCDARecord::toFCDARecord))
149150
.containsExactly(
150-
new FCDARecord("LD_INST21", "ANCR", "1", "", "DoName", "daNameST", ST),
151+
new FCDARecord("LD_INST21", "ANCR", "1", "", "DoName", "daNameMX", MX),
151152
new FCDARecord("LD_INST21", "ANCR", "1", "", "DoWithInst1", "daNameST", ST),
152153
new FCDARecord("LD_INST21", "ANCR", "1", "", "DoWithInst2.subDo", "daNameST", ST),
153154
new FCDARecord("LD_INST21", "ANCR", "1", "", "OtherDoName", "daNameST", ST)
@@ -170,7 +171,7 @@ void createDataSetAndControlBlocks_should_create_ControlBlocks() {
170171
assertControlBlockExists(scd, "IED_NAME2", "LD_INST21", "CB_LD_INST21_DQCI", "DS_LD_INST21_DQCI", "BFF9CA40F6C426", REPORT);
171172
assertControlBlockExists(scd, "IED_NAME2", "LD_INST21", "CB_LD_INST21_GMI", "DS_LD_INST21_GMI", "D2927E49982E88", GSE);
172173
assertControlBlockExists(scd, "IED_NAME2", "LD_INST21", "CB_LD_INST21_SVI", "DS_LD_INST21_SVI", "74C94A5A8C06B8", SAMPLED_VALUE);
173-
assertControlBlockExists(scd, "IED_NAME3", "LD_INST31", "CB_LD_INST31_GSE", "DS_LD_INST31_GSE", "08FF9C43689DD3", GSE);
174+
assertControlBlockExists(scd, "IED_NAME3", "LD_INST31", "CB_LD_INST31_GME", "DS_LD_INST31_GME", "DA38617C628017", GSE);
174175
assertControlBlockExists(scd, "IED_NAME2", "LD_INST21", "CB_LD_INST21_GSI", "DS_LD_INST21_GSI", "2FB2C6E1C5955E", GSE);
175176

176177
// Check one ControlBlock content (ReportControl with sourceDA.fc=MX)
@@ -205,10 +206,10 @@ void createDataSetAndControlBlocks_should_set_ExtRef_srcXXX_attributes() {
205206
// check some ExtRef
206207
assertThat(findExtRef(scd, "IED_NAME1", "LD_INST11", "test bay internal"))
207208
.extracting(TExtRef::getSrcCBName, TExtRef::getSrcLDInst)
208-
.containsExactly("CB_LD_INST21_GSI", "LD_INST21");
209+
.containsExactly("CB_LD_INST21_GMI", "LD_INST21");
209210
assertThat(findExtRef(scd, "IED_NAME1", "LD_INST11", "test bay external"))
210211
.extracting(TExtRef::getSrcCBName, TExtRef::getSrcLDInst)
211-
.containsExactly("CB_LD_INST31_GSE", "LD_INST31");
212+
.containsExactly("CB_LD_INST31_GME", "LD_INST31");
212213
assertThat(findExtRef(scd, "IED_NAME1", "LD_INST11", "test ServiceType is SMV, no daName and DO contains ST and MX, but only ST is FCDA candidate"))
213214
.extracting(TExtRef::getSrcCBName, TExtRef::getSrcLDInst)
214215
.containsExactly("CB_LD_INST21_SVI", "LD_INST21");

sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ied/InputsAdapterTest.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.junit.jupiter.api.Test;
99
import org.junit.jupiter.params.ParameterizedTest;
1010
import org.junit.jupiter.params.provider.Arguments;
11+
import org.junit.jupiter.params.provider.CsvSource;
1112
import org.junit.jupiter.params.provider.MethodSource;
1213
import org.lfenergy.compas.scl2007b4.model.*;
1314
import org.lfenergy.compas.sct.commons.dto.SclReportItem;
@@ -153,16 +154,16 @@ void updateAllSourceDataSetsAndControlBlocks_should_create_dataset_and_fcda_for_
153154
public static Stream<Arguments> provideCreateFCDA() {
154155
return Stream.of(
155156
Arguments.of(named("should include signal internal to a Bay",
156-
"test bay internal"), "IED_NAME2/LD_INST21/DS_LD_INST21_GSI",
157+
"test bay internal"), "IED_NAME2/LD_INST21/DS_LD_INST21_GMI",
157158
List.of(new FCDARecord("LD_INST21", "ANCR", "1", "", "DoName", "daNameST", TFCEnum.ST))),
158159
Arguments.of(named("should include signal external to a Bay",
159-
"test bay external"), "IED_NAME3/LD_INST31/DS_LD_INST31_GSE",
160+
"test bay external"), "IED_NAME3/LD_INST31/DS_LD_INST31_GME",
160161
List.of(new FCDARecord("LD_INST31", "ANCR", "1", "", "DoName", "daNameST", TFCEnum.ST))),
161162
Arguments.of(named("keep source DA with fc = ST",
162-
"test daName ST"), "IED_NAME2/LD_INST21/DS_LD_INST21_GSI",
163+
"test daName ST"), "IED_NAME2/LD_INST21/DS_LD_INST21_GMI",
163164
List.of(new FCDARecord("LD_INST21", "ANCR", "1", "", "DoName", "daNameST", TFCEnum.ST))),
164165
Arguments.of(named("keep source DA with fc = MX",
165-
"test daName MX"), "IED_NAME2/LD_INST21/DS_LD_INST21_GMI",
166+
"test daName MX"), "IED_NAME2/LD_INST21/DS_LD_INST21_GSI",
166167
List.of(new FCDARecord("LD_INST21", "ANCR", "1", "", "DoName", "daNameMX", TFCEnum.MX))),
167168
Arguments.of(named("for GOOSE, should keep only valid fcda candidates",
168169
"test ServiceType is GOOSE, no daName and DO contains ST and MX, but only ST is FCDA candidate"), "IED_NAME2/LD_INST21/DS_LD_INST21_GSI",
@@ -289,4 +290,23 @@ void filterDuplicatedExtRefs_should_not_remove_not_duplicated_extrefs() {
289290
.hasSize(6);
290291
}
291292

293+
@ParameterizedTest(name = "updateAllSourceDataSetsAndControlBlocks should use gooseType for extRef={0}")
294+
@CsvSource({
295+
"test daName ST, DS_LD_INST21_GMI",
296+
"test daName MX, DS_LD_INST21_GSI"
297+
})
298+
void updateAllSourceDataSetsAndControlBlocks_should_use_goose_type(String extRef, String expectedDataSetName) {
299+
// Given
300+
SCL scd = SclTestMarshaller.getSCLFromFile("/scd-extref-create-dataset-and-controlblocks/scd_create_dataset_and_controlblocks_success_test_goose_type.xml");
301+
DACOMM dacomm = DaComTestMarshallerHelper.getDACOMMFromFile("/cb_comm/Template_DA_COMM_v1.xml");
302+
SclRootAdapter sclRootAdapter = new SclRootAdapter(scd);
303+
InputsAdapter inputsAdapter = keepOnlyThisExtRef(sclRootAdapter, extRef);
304+
// When
305+
List<SclReportItem> sclReportItems = inputsAdapter.updateAllSourceDataSetsAndControlBlocks(dacomm.getFCDAs().getFCDA());
306+
// Then
307+
assertThat(sclReportItems).isEmpty();
308+
DataSetAdapter dataSet = findDataSet(scd, "IED_NAME2", "LD_INST21", expectedDataSetName);
309+
assertThat(dataSet).isNotNull();
310+
}
311+
292312
}

sct-commons/src/test/resources/cb_comm/Template_DA_COMM_v1.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
<SystemVersion MainSystemVersion="01.00"></SystemVersion>
1111
</Version>
1212
<FCDAs>
13-
<FCDA lnClass="ANCR" doName="DoName" daName="daNameST" fc="ST"></FCDA>
14-
<FCDA lnClass="ANCR" doName="DoName" daName="daNameMX" fc="MX"></FCDA>
15-
<FCDA lnClass="ANCR" doName="OtherDoName" daName="daNameST" fc="ST"></FCDA>
16-
<FCDA lnClass="ANCR" doName="DoWithInst" daName="daNameST" fc="ST"></FCDA>
17-
<FCDA lnClass="ANCR" doName="DoWithInst.subDo" daName="daNameST" fc="ST"></FCDA>
18-
<FCDA lnClass="ANCR" doName="FirstDo" daName="daNameST" fc="ST"></FCDA>
19-
<FCDA lnClass="ANCR" doName="SecondDo" daName="daNameST" fc="ST"></FCDA>
20-
<FCDA lnClass="ANCR" doName="ThirdDo" daName="daNameST" fc="ST"></FCDA>
13+
<FCDA lnClass="ANCR" doName="DoName" daName="daNameST" fc="ST" gooseType="GM"></FCDA>
14+
<FCDA lnClass="ANCR" doName="DoName" daName="daNameMX" fc="MX" gooseType="GS"></FCDA>
15+
<FCDA lnClass="ANCR" doName="OtherDoName" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
16+
<FCDA lnClass="ANCR" doName="DoWithInst" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
17+
<FCDA lnClass="ANCR" doName="DoWithInst.subDo" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
18+
<FCDA lnClass="ANCR" doName="FirstDo" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
19+
<FCDA lnClass="ANCR" doName="SecondDo" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
20+
<FCDA lnClass="ANCR" doName="ThirdDo" daName="daNameST" fc="ST" gooseType="GS"></FCDA>
2121
</FCDAs>
2222
</DACOMM>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<!-- SPDX-FileCopyrightText: 2022 2023 2024 RTE FRANCE -->
3+
<!-- -->
4+
<!-- SPDX-License-Identifier: Apache-2.0 -->
5+
6+
<SCL version="2007" revision="B" release="4" xmlns="http://www.iec.ch/61850/2003/SCL" xmlns:compas="https://www.lfenergy.org/compas/extension/v1">
7+
<Header id="hId" version="2007" revision="B" toolID="COMPAS"/>
8+
<IED name="IED_NAME1">
9+
<Private type="COMPAS-ICDHeader">
10+
<compas:ICDHeader IEDType="BCU" IEDSubstationinstance="11" IEDSystemVersioninstance="1" BayLabel="3THEIX2"
11+
IEDName="IED_NAME1" ICDSystemVersionUUID="System_Version_IED_NAME1" VendorName="SCLE SFE"
12+
IEDredundancy="A" IEDmodel="ARKENS-SV1120-HGAAA-EB5" hwRev="0.0.2." swRev="1.0a"
13+
headerId="ARKENS-SV1120-HGAAA-EB5_SCU" headerVersion="1.2a" headerRevision="412995"/>
14+
</Private>
15+
<Private type="COMPAS-Bay">
16+
<compas:Bay UUID="UuidBay1" BayCodif="CB00001101" NumBay="1" BayCount="1" MainShortLabel="aa"/>
17+
</Private>
18+
<AccessPoint name="AP_NAME">
19+
<Server>
20+
<Authentication/>
21+
<LDevice inst="LD_INST11" ldName="IED_NAME1LD_INST11">
22+
<LN0 lnClass="LLN0" inst="" lnType="LNEX1">
23+
<DOI name="Mod">
24+
<DAI name="stVal">
25+
<Val>on</Val>
26+
</DAI>
27+
</DOI>
28+
<Inputs>
29+
<!-- daName => fc ST -->
30+
<ExtRef desc="test daName ST" iedName="IED_NAME2" ldInst="LD_INST21" lnClass="ANCR" lnInst="1" doName="DoName" daName="daNameST" serviceType="GOOSE" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113"/>
31+
<!-- daName => fc MX -->
32+
<ExtRef desc="test daName MX" iedName="IED_NAME2" ldInst="LD_INST21" lnClass="ANCR" lnInst="1" doName="DoName" daName="daNameMX" serviceType="GOOSE" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113"/>
33+
</Inputs>
34+
</LN0>
35+
</LDevice>
36+
</Server>
37+
</AccessPoint>
38+
</IED>
39+
<IED name="IED_NAME2">
40+
<Private type="COMPAS-ICDHeader">
41+
<compas:ICDHeader IEDType="BCU" IEDSubstationinstance="22" IEDSystemVersioninstance="1" BayLabel="3THEIX2"
42+
IEDName="IED_NAME2" ICDSystemVersionUUID="System_Version_IED_NAME2" VendorName="SCLE SFE"
43+
IEDredundancy="A" IEDmodel="ARKENS-SV1120-HGAAA-EB5" hwRev="0.0.2." swRev="1.0a"
44+
headerId="ARKENS-SV1120-HGAAA-EB5_SCU" headerVersion="1.2a" headerRevision="412995"/>
45+
</Private>
46+
<Private type="COMPAS-Bay">
47+
<compas:Bay UUID="UuidBay1" BayCodif="CB00001101" NumBay="1" BayCount="1" MainShortLabel="aa"/>
48+
</Private>
49+
<AccessPoint name="AP_NAME">
50+
<Server>
51+
<Authentication/>
52+
<LDevice inst="LD_INST21" ldName="IED_NAME2LD_INST21">
53+
<LN0 lnClass="LLN0" inst="" lnType="LNEX1">
54+
<DOI name="Mod">
55+
<DAI name="stVal">
56+
<Val>on</Val>
57+
</DAI>
58+
</DOI>
59+
</LN0>
60+
<LN lnClass="ANCR" inst="1" lnType="lnType"/>
61+
<LN lnClass="ANCR" inst="2" lnType="lnType2"/>
62+
</LDevice>
63+
</Server>
64+
<Services>
65+
<GSESettings datSet="Conf" cbName="Conf"/>
66+
<SMVSettings datSet="Conf" cbName="Conf">
67+
<SamplesPerSec>5</SamplesPerSec>
68+
</SMVSettings>
69+
<ReportSettings datSet="Conf" cbName="Conf"/>
70+
</Services>
71+
</AccessPoint>
72+
</IED>
73+
<DataTypeTemplates>
74+
<LNodeType lnClass="LLN0" id="LNEX1">
75+
<DO name="Mod" type="Do0"/>
76+
</LNodeType>
77+
<LNodeType lnClass="ANCR" id="lnType">
78+
<DO name="DoName" type="Do1"/>
79+
</LNodeType>
80+
<LNodeType lnClass="ANCR" id="lnType2">
81+
<DO name="PotAlm" type="Do3"/>
82+
<DO name="ColPosA" type="Do4"/>
83+
</LNodeType>
84+
<DOType cdc="ENC" id="Do0">
85+
<DA fc="ST" name="stVal" bType="Enum" type="BehaviourModeKind"/>
86+
</DOType>
87+
<DOType cdc="ENC" id="Do1">
88+
<DA fc="ST" name="daNameST" bType="BOOLEAN"/>
89+
<DA fc="MX" name="daNameMX" bType="BOOLEAN"/>
90+
<DA fc="BL" name="daNameBL" bType="BOOLEAN"/>
91+
<DA fc="ST" name="daReportST" bType="BOOLEAN"/>
92+
<DA fc="MX" name="daReportMX" bType="BOOLEAN"/>
93+
</DOType>
94+
<DOType cdc="ENC" id="Do2">
95+
<SDO name="subDo" type="Do1"/>
96+
</DOType>
97+
<DOType cdc="ENC" id="Do3">
98+
<DA fc="ST" name="stVal" bType="BOOLEAN"/>
99+
<DA fc="ST" name="q" bType="BOOLEAN"/>
100+
<DA fc="ST" name="t" bType="BOOLEAN"/>
101+
</DOType>
102+
<DOType cdc="ENC" id="Do4">
103+
<DA fc="MX" name="instMag" bType="Struct" type="bda1"/>
104+
</DOType>
105+
<DAType id="bda1">
106+
<BDA name="i" bType="BOOLEAN"/>
107+
</DAType>
108+
<EnumType id="BehaviourModeKind">
109+
<EnumVal ord="1">on</EnumVal>
110+
<EnumVal ord="2">off</EnumVal>
111+
<EnumVal ord="3">test</EnumVal>
112+
</EnumType>
113+
</DataTypeTemplates>
114+
</SCL>

0 commit comments

Comments
 (0)