Skip to content

Commit 4727a38

Browse files
Merge pull request #513 from com-pas/feat/512-RSR-1242-ldepf-configuration-processing-ln-rbdr-with-prefix-a
feat: added aRBDR for Analog Channel instead of aRADR, closes #512, RSR-1242
2 parents cb36862 + d355ae0 commit 4727a38

File tree

7 files changed

+245
-89
lines changed

7 files changed

+245
-89
lines changed

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ private void updateLDEPFDos(LDeviceAdapter lDeviceAdapter, TExtRef extRef, TChan
356356
//analog
357357
lDeviceAdapter.findLnAdapter(LN_RADR, setting.getChannelNum(), null)
358358
.ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName, extRef, setting)));
359-
lDeviceAdapter.findLnAdapter(LN_RADR, setting.getChannelNum(), LN_PREFIX_A)
359+
lDeviceAdapter.findLnAdapter(LN_RBDR, setting.getChannelNum(), LN_PREFIX_A)
360360
.ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName, extRef, setting)));
361361
}
362362
}

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

Lines changed: 128 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ void manageBindingForLDEPF_when_manyIedSourceFound_should_return_reportMassages(
234234
}
235235

236236
@Test
237-
void manageBindingForLDEPF_when_extRefMatchFlowKindInternalOrExternal_should_update_successfully_the_ExtRef_And_DAI_In_RBDR_bRBDR_LNodes_with_no_report() {
237+
void manageBindingForLDEPF_when_extRefMatchFlowKindInternalOrExternal_forAnalaogChannel_should_update_successfully_the_ExtRef_And_DAI_In_RADR_aRBDR_LNodes_with_no_report() {
238238
//Given
239239
SCL scd = SclTestMarshaller.getSCLFromFile("/scd-ldepf/scd_ldepf_dataTypeTemplateValid.xml");
240240

@@ -290,42 +290,63 @@ void manageBindingForLDEPF_when_extRefMatchFlowKindInternalOrExternal_should_upd
290290
List<SclReportItem> sclReportItems = extRefEditorService.manageBindingForLDEPF(scd, epf);
291291
// Then
292292
assertThat(sclReportItems).isEmpty();
293-
SclTestMarshaller.assertIsMarshallable(scd);
294-
TExtRef extRefBindInternally = findExtRef(scd, "IED_NAME1", "LDEPF", "DYN_LDEPF_ANALOG CHANNEL 1_1_AnalogueValue_1_instMag_1");
295-
assertThat(extRefBindInternally.getIedName()).isEqualTo("IED_NAME1");
296-
assertExtRefIsBoundAccordingTOLDEPF(extRefBindInternally, analogueChannel1WithBayInternalScope);
297-
298-
AbstractLNAdapter<?> lnRadr = findLn(scd, "IED_NAME1", "LDEPF", "RADR", "1", "");
299-
assertThat(getDaiValue(lnRadr, CHNUM1_DO_NAME, DU_DA_NAME))
300-
.isNotEqualTo("dU_old_val")
301-
.isEqualTo("V0");
302-
assertThat(getDaiValue(lnRadr, LEVMOD_DO_NAME, SETVAL_DA_NAME))
303-
.isNotEqualTo("setVal_old_val")
304-
.isEqualTo("Positive or Rising");
305-
assertThat(getDaiValue(lnRadr, MOD_DO_NAME, STVAL_DA_NAME))
306-
.isNotEqualTo("off")
307-
.isEqualTo("on");
308-
assertThat(getDaiValue(lnRadr, SRCREF_DO_NAME, SETSRCREF_DA_NAME))
309-
.isNotEqualTo("setSrcRef_old_val")
310-
.isEqualTo("IED_NAME1LDTM1/U01ATVTR11.VolSv.instMag");
311-
312-
AbstractLNAdapter<?> lnAradr = findLn(scd, "IED_NAME1", "LDEPF", "RADR", "1", "a");
313-
assertThat(getDaiValue(lnAradr, CHNUM1_DO_NAME, DU_DA_NAME))
314-
.isNotEqualTo("dU_old_val")
315-
.isEqualTo("V0");
316-
assertThat(getDaiValue(lnAradr, LEVMOD_DO_NAME, SETVAL_DA_NAME))
317-
.isNotEqualTo("setVal_old_val")
318-
.isEqualTo("Other");
319-
assertThat(getDaiValue(lnAradr, MOD_DO_NAME, STVAL_DA_NAME))
320-
.isNotEqualTo("off")
321-
.isEqualTo("on");
322-
assertThat(getDaiValue(lnAradr, SRCREF_DO_NAME, SETSRCREF_DA_NAME))
323-
.isNotEqualTo("setSrcRef_old_val")
324-
.isEqualTo("IED_NAME1LDTM1/U01ATVTR11.VolSv.q");
325-
326-
TExtRef extRefBindExternally = findExtRef(scd, "IED_NAME1", "LDEPF", "DYN_LDEPF_ANALOG CHANNEL 10_1_AnalogueValue_1_cVal_1");
327-
assertThat(extRefBindExternally.getIedName()).isEqualTo("IED_NAME2");
328-
assertExtRefIsBoundAccordingTOLDEPF(extRefBindExternally, analogueChannel10WithBayExternalBayScope);
293+
assertThat(scd.getIED())
294+
.filteredOn(tied -> tied.getName().equals("IED_NAME1"))
295+
.flatExtracting(TIED::getAccessPoint)
296+
.extracting(TAccessPoint::getServer)
297+
.flatExtracting(TServer::getLDevice)
298+
.filteredOn(tlDevice -> tlDevice.getInst().equals(LDEVICE_LDEPF))
299+
.allSatisfy(tlDevice -> {
300+
// Binding properties should be set including Service Type
301+
assertThat(tlDevice.getLN0().getInputs().getExtRef())
302+
.filteredOn(tExtRef -> tExtRef.getDesc().contains("ANALOG"))
303+
.extracting(TExtRef::getIedName, TExtRef::getLdInst, TExtRef::getLnClass, TExtRef::getLnInst, TExtRef::getDoName, TExtRef::getServiceType)
304+
.containsExactlyInAnyOrder(tuple("IED_NAME1", "LDTM1", List.of("TVTR"), "11", "VolSv", null),
305+
tuple("IED_NAME2", "LDPHAS1", List.of("MMXU"), "101", "PhV", TServiceType.SMV));
306+
//LN class RADR
307+
assertThat(tlDevice.getLN())
308+
.filteredOn(tln -> tln.getLnClass().contains("RADR") && tln.getInst().equals("1") && !tln.isSetPrefix())
309+
.allSatisfy(tln -> {
310+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("V0");
311+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
312+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo("Positive or Rising");
313+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDTM1/U01ATVTR11.VolSv.instMag");
314+
});
315+
// for Analog channel aRADR should not be configured, instead configuring aRBDR
316+
assertThat(tlDevice.getLN())
317+
.filteredOn(tln -> tln.getLnClass().contains("RADR") && tln.getInst().equals("1") && tln.getPrefix().equals("a"))
318+
.allSatisfy(tln -> {
319+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("dU_old_val");
320+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("off");
321+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo("setVal_old_val");
322+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("setSrcRef_old_val");
323+
});
324+
//LN class RBDR
325+
assertThat(tlDevice.getLN())
326+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && !tln.isSetPrefix())
327+
.allSatisfy(tln -> {
328+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("dU_old_val");
329+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("off");
330+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo("setVal_old_val");
331+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("setSrcRef_old_val");
332+
});
333+
assertThat(tlDevice.getLN())
334+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("a"))
335+
.allSatisfy(tln -> {
336+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("V0");
337+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
338+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo("Other");
339+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDTM1/U01ATVTR11.VolSv.q");
340+
});
341+
assertThat(tlDevice.getLN())
342+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("b"))
343+
.allSatisfy(tln -> {
344+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("dU_old_val");
345+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("off");
346+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo("setVal_old_val");
347+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("setSrcRef_old_val");
348+
});
349+
});
329350
}
330351

331352
private void assertExtRefIsBoundAccordingTOLDEPF(TExtRef extRef, TChannel setting) {
@@ -837,6 +858,41 @@ void manageBindingForLDEPF_should_update_binding_properties_when_internal_bindin
837858
.filteredOn(tExtRef -> tExtRef.getDesc().contains("ANALOG"))
838859
.extracting(TExtRef::getIedName, TExtRef::getLdInst, TExtRef::getLnClass, TExtRef::getLnInst, TExtRef::getDoName, TExtRef::isSetServiceType)
839860
.containsExactlyInAnyOrder(tuple("IED_NAME1", "LDPX", List.of("PTRC"), "0", "Str", false));
861+
862+
//ANALOG: configure LN RADR and aRBDR
863+
assertThat(tlDevice.getLN())
864+
.filteredOn(tln -> tln.getLnClass().contains("RADR") && tln.getInst().equals("1") && !tln.isSetPrefix())
865+
.allSatisfy(tln -> {
866+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
867+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
868+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.POSITIVE_OR_RISING.value());
869+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDPX/PTRC0.Str.general");
870+
});
871+
assertThat(tlDevice.getLN())
872+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("a"))
873+
.allSatisfy(tln -> {
874+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
875+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
876+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.OTHER.value());
877+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDPX/PTRC0.Str.q");
878+
});
879+
//DIGITAL: configure LN RBDR and bRBDR
880+
assertThat(tlDevice.getLN())
881+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && !tln.isSetPrefix())
882+
.allSatisfy(tln -> {
883+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
884+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
885+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.POSITIVE_OR_RISING.value());
886+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDPX/PTRC0.Str.general");
887+
});
888+
assertThat(tlDevice.getLN())
889+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("b"))
890+
.allSatisfy(tln -> {
891+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
892+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
893+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.OTHER.value());
894+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME1LDPX/PTRC0.Str.q");
895+
});
840896
});
841897
}
842898

@@ -902,6 +958,41 @@ void manageBindingForLDEPF_should_update_binding_properties_when_external_bindin
902958
.filteredOn(tExtRef -> tExtRef.getDesc().contains("ANALOG"))
903959
.extracting(TExtRef::getIedName, TExtRef::getLdInst, TExtRef::getLnClass, TExtRef::getLnInst, TExtRef::getDoName, TExtRef::getServiceType)
904960
.containsExactlyInAnyOrder(tuple("IED_NAME2", "LDPX", List.of("PTRC"), "0", "Str", TServiceType.SMV));
961+
962+
//ANALOG: configure LN RADR and aRBDR
963+
assertThat(tlDevice.getLN())
964+
.filteredOn(tln -> tln.getLnClass().contains("RADR") && tln.getInst().equals("1") && !tln.isSetPrefix())
965+
.allSatisfy(tln -> {
966+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
967+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
968+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.POSITIVE_OR_RISING.value());
969+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME2LDPX/PTRC0.Str.general");
970+
});
971+
assertThat(tlDevice.getLN())
972+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("a"))
973+
.allSatisfy(tln -> {
974+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
975+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
976+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.OTHER.value());
977+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME2LDPX/PTRC0.Str.q");
978+
});
979+
//DIGITAL: configure LN RBDR and bRBDR
980+
assertThat(tlDevice.getLN())
981+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && !tln.isSetPrefix())
982+
.allSatisfy(tln -> {
983+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
984+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
985+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.POSITIVE_OR_RISING.value());
986+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME2LDPX/PTRC0.Str.general");
987+
});
988+
assertThat(tlDevice.getLN())
989+
.filteredOn(tln -> tln.getLnClass().contains("RBDR") && tln.getInst().equals("1") && tln.getPrefix().equals("b"))
990+
.allSatisfy(tln -> {
991+
assertThat(getDaiValue(tln, CHNUM1_DO_NAME, DU_DA_NAME)).isEqualTo("MR.PX1");
992+
assertThat(getDaiValue(tln, MOD_DO_NAME, STVAL_DA_NAME)).isEqualTo("on");
993+
assertThat(getDaiValue(tln, LEVMOD_DO_NAME, SETVAL_DA_NAME)).isEqualTo(TChannelLevMod.OTHER.value());
994+
assertThat(getDaiValue(tln, SRCREF_DO_NAME, SETSRCREF_DA_NAME)).isEqualTo("IED_NAME2LDPX/PTRC0.Str.q");
995+
});
905996
});
906997
}
907998

0 commit comments

Comments
 (0)