Skip to content

Commit

Permalink
feat(104): added descriptions to ti numbers (#1378)
Browse files Browse the repository at this point in the history
* feat(104): added descriptions to ti numbers

Signed-off-by: Stef3st <steffen.van.den.driest@alliander.com>

* chore: add ti description on fixed ti option

Signed-off-by: Stef3st <steffen.van.den.driest@alliander.com>

---------

Signed-off-by: Stef3st <steffen.van.den.driest@alliander.com>
  • Loading branch information
Stef3st authored Dec 6, 2023
1 parent c316ffb commit 0e74294
Show file tree
Hide file tree
Showing 7 changed files with 204 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { get } from 'lit-translate';

export function getSignalName(tiNumber: string): string {
switch (tiNumber) {
case '1':
return get('protocol104.values.signalNames.tiNumber1');
case '3':
return get('protocol104.values.signalNames.tiNumber3');
case '5':
return get('protocol104.values.signalNames.tiNumber5');
case '7':
return get('protocol104.values.signalNames.tiNumber7');
case '9':
return get('protocol104.values.signalNames.tiNumber9');
case '11':
return get('protocol104.values.signalNames.tiNumber11');
case '13':
return get('protocol104.values.signalNames.tiNumber13');
case '15':
return get('protocol104.values.signalNames.tiNumber15');
case '20':
return get('protocol104.values.signalNames.tiNumber20');
case '21':
return get('protocol104.values.signalNames.tiNumber21');
case '30':
return get('protocol104.values.signalNames.tiNumber30');
case '31':
return get('protocol104.values.signalNames.tiNumber31');
case '32':
return get('protocol104.values.signalNames.tiNumber32');
case '33':
return get('protocol104.values.signalNames.tiNumber33');
case '34':
return get('protocol104.values.signalNames.tiNumber34');
case '35':
return get('protocol104.values.signalNames.tiNumber35');
case '36':
return get('protocol104.values.signalNames.tiNumber36');
case '37':
return get('protocol104.values.signalNames.tiNumber37');
case '38':
return get('protocol104.values.signalNames.tiNumber38');
case '39':
return get('protocol104.values.signalNames.tiNumber39');
case '40':
return get('protocol104.values.signalNames.tiNumber40');
case '45':
return get('protocol104.values.signalNames.tiNumber45');
case '46':
return get('protocol104.values.signalNames.tiNumber46');
case '47':
return get('protocol104.values.signalNames.tiNumber47');
case '48':
return get('protocol104.values.signalNames.tiNumber48');
case '49':
return get('protocol104.values.signalNames.tiNumber49');
case '50':
return get('protocol104.values.signalNames.tiNumber50');
case '51':
return get('protocol104.values.signalNames.tiNumber51');
case '60':
return get('protocol104.values.signalNames.tiNumber60');
case '61':
return get('protocol104.values.signalNames.tiNumber61');
case '62':
return get('protocol104.values.signalNames.tiNumber62');
case '63':
return get('protocol104.values.signalNames.tiNumber63');
case '64':
return get('protocol104.values.signalNames.tiNumber64');
default:
return get('protocol104.values.signalNames.default');
}
}
23 changes: 17 additions & 6 deletions packages/open-scd/src/editors/protocol104/wizards/address.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
getFullPath,
} from '../foundation/foundation.js';
import { hasScaleFields, hasUnitMultiplierField } from '../foundation/cdc.js';
import { getSignalName } from '../foundation/signalNames.js';

const allowedMultipliers = [
'm',
Expand Down Expand Up @@ -107,16 +108,21 @@ export function editAddressWizard(

let casdu = addressElement.getAttribute('casdu') ?? '';

function validateIOA(this: WizardInputElement, value: string): Partial<ValidityState> {
const existingAddress = iedElement.querySelector(`Address[casdu="${casdu}"][ioa="${value}"]`);
if(existingAddress){
function validateIOA(
this: WizardInputElement,
value: string
): Partial<ValidityState> {
const existingAddress = iedElement.querySelector(
`Address[casdu="${casdu}"][ioa="${value}"]`
);
if (existingAddress) {
this.validationMessage = get('protocol104.wizard.error.ioaConflict');
return {
valid: false,
customError: true,
}
};
}
return {}
return {};
}

// Add the basic fields to the list.
Expand Down Expand Up @@ -166,7 +172,12 @@ export function editAddressWizard(
required
>
</wizard-textfield>`,
html`<wizard-textfield label="ti" .maybeValue=${ti} disabled readonly>
html`<wizard-textfield
label="ti"
.maybeValue=${ti + ' (' + getSignalName(ti) + ')'}
disabled
readonly
>
</wizard-textfield>`,
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import {
TiInformation,
} from '../foundation/cdc.js';
import { createActions, createCheckActions } from '../foundation/actions.js';
import { getSignalName } from '../foundation/signalNames.js';

function getSwitchValue(wizard: Element, name: string): boolean {
const switchElement = wizard.shadowRoot?.querySelector<Switch>(
Expand Down Expand Up @@ -64,7 +65,8 @@ export function createAddressesAction(

// Create all Monitor Addresses
const selectedMonitorTi =
getValue(inputs.find(i => i.label === 'monitorTi')!) ?? '';
getValue(inputs.find(i => i.label === 'monitorTi')!)?.split(' (')[0] ??
'';
const monitorInverted = getSwitchValue(wizard, 'monitorInverted');
const tiInformation = cdcProcessing.monitor[selectedMonitorTi];
if (tiInformation) {
Expand Down Expand Up @@ -229,7 +231,9 @@ export function createAddressesWizard(
${monitorTis.map(
monitorTi =>
html` <mwc-list-item value="${monitorTi}">
<span>${monitorTi}</span>
<span
>${monitorTi + ' (' + getSignalName(monitorTi) + ')'}</span
>
</mwc-list-item>`
)}
</wizard-select>`
Expand All @@ -238,7 +242,9 @@ export function createAddressesWizard(
fields.push(
html`<wizard-textfield
label="monitorTi"
.maybeValue=${monitorTis[0] ? monitorTis[0] : ''}
.maybeValue=${monitorTis[0]
? monitorTis[0] + ' (' + getSignalName(monitorTis[0]) + ')'
: ''}
disabled
>
</wizard-textfield>`
Expand Down
46 changes: 46 additions & 0 deletions packages/open-scd/src/translations/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,52 @@ export const de: Translations = {
'{{ nrOfAddresses }} Addressen von DOI "{{ name }}" entfernt',
addedAddress:
'104-Addressen zu DO "{{ name }}" in LN(0) "{{ lnName }}" hinzugefügt',
signalNames: {
tiNumber1: 'Einzelwertinformation',
tiNumber3: 'Zweipunktinformation',
tiNumber5: 'Stufenpositionsinformation',
tiNumber7: 'Bit string von 32 Bit',
tiNumber9: 'Gemessener Wert, normalisierter Wert',
tiNumber11: 'Gemessener Wert, skalierte Wert',
tiNumber13: 'Gemessener Wert, Kurz-Gleitkommazahl',
tiNumber15: 'Integrierte Summen',
tiNumber20:
'Verpackte Einzelwertinformation mit Statusänderungserkennung',
tiNumber21:
'Gemessener Wert, normalisierter Wert ohne Qualitätsbeschreibung',
tiNumber30: 'Einzelwertinformation mit Zeitstempel CP56Time2a',
tiNumber31: 'Zweipunktinformation mit Zeitstempel CP56Time2a',
tiNumber32: 'Stufenpositionsinformation mit Zeitstempel CP56Time2a',
tiNumber33: 'Bit string von 32 Bit mit Zeitstempel CP56Time2a',
tiNumber34:
'Gemessener Wert, normalisierter Wert mit Zeitstempel CP56Time2a',
tiNumber35:
'Gemessener Wert, skalierte Wert mit Zeitstempel CP56Time2a',
tiNumber36:
'Gemessener Wert, Kurz-Gleitkommazahl mit Zeitstempel CP56Time2a',
tiNumber37: 'Integrierte Summen mit Zeitstempel CP56Time2a',
tiNumber38: 'Ereignis von Schutzeinrichtung mit Zeitstempel CP56Time2a',
tiNumber39:
'Verpackte Startereignisse von Schutzeinrichtung mit Zeitstempel CP56Time2a',
tiNumber40:
'Verpackte Ausgangsschaltkreisinformationen von Schutzeinrichtung mit Zeitstempel CP56Time2a',
tiNumber45: 'Einzelbefehl',
tiNumber46: 'Doppelbefehl',
tiNumber47: 'Regelungsschritt-Befehl',
tiNumber48: 'Sollwertbefehl, normalisierter Wert',
tiNumber49: 'Sollwertbefehl, skalierte Wert',
tiNumber50: 'Sollwertbefehl, Kurz-Gleitkommazahl',
tiNumber51: 'Bit string von 32 Bit Befehl',
tiNumber60: 'Regelungsschritt-Befehl mit Zeitstempel CP56Time2a',
tiNumber61:
'Gemessener Wert, normalisierter Wert Befehl mit Zeitstempel CP56Time2a',
tiNumber62:
'Gemessener Wert, skalierte Wert Befehl mit Zeitstempel CP56Time2a',
tiNumber63:
'Gemessener Wert, Kurz-Gleitkommazahl Befehl mit Zeitstempel CP56Time2a',
tiNumber64: 'Bit string von 32 Bit Befehl mit Zeitstempel CP56Time2a',
default: 'Keine Beschreibung verfügbar',
},
},
network: {
connectedAp: {
Expand Down
44 changes: 44 additions & 0 deletions packages/open-scd/src/translations/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,50 @@ export const en = {
'Removed Addresses from DOI "{{ name }}" ({{ nrOfAddresses }})',
addedAddress:
'Added 104 Address(es) to DO "{{ name }}" on LN(0) "{{ lnName }}"',
signalNames: {
tiNumber1: 'Single-point information',
tiNumber3: 'Double-point information',
tiNumber5: 'Step position information',
tiNumber7: 'Bit string of 32 bit',
tiNumber9: 'Measured value, normalized value',
tiNumber11: 'Measured value, scaled value',
tiNumber13: 'Measured value, short floating point number',
tiNumber15: 'Integrated totals',
tiNumber20:
'Packed single point information with status change detection',
tiNumber21:
'Measured value, normalized value without quality descriptor',
tiNumber30: 'Single-point information with time tag CP56Time2a',
tiNumber31: 'Double-point information with time tag CP56Time2a',
tiNumber32: 'Step position information with time tag CP56Time2a',
tiNumber33: 'Bit string of 32 bit with time tag CP56Time2a',
tiNumber34: 'Measured value, normalized value with time tag CP56Time2a',
tiNumber35: 'Measured value, scaled value with time tag CP56Time2a',
tiNumber36:
'Measured value, short floating point number with time tag CP56Time2a',
tiNumber37: 'Integrated totals with time tag CP56Time2a',
tiNumber38: 'Event of protection equipment with time tag CP56Time2a',
tiNumber39:
'Packed start events of protection equipment with time tag CP56Time2a',
tiNumber40:
'Packed output circuit information of protection equipment with time tag CP56Time2a',
tiNumber45: 'Single command',
tiNumber46: 'Double command',
tiNumber47: 'Regulating step command',
tiNumber48: 'Set-point Command, normalized value',
tiNumber49: 'Set-point Command, scaled value',
tiNumber50: 'Set-point Command, short floating point number',
tiNumber51: 'Bit string 32 bit command',
tiNumber60: 'Regulating step command with time tag CP56Time2a',
tiNumber61:
'Measured value, normalized value command with time tag CP56Time2a',
tiNumber62:
'Measured value, scaled value command with time tag CP56Time2a',
tiNumber63:
'Measured value, short floating point number command with time tag CP56Time2a',
tiNumber64: 'Bit string of 32 bit command with time tag CP56Time2a',
default: 'No description available',
},
},
network: {
connectedAp: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ snapshots["Wizards for preparing 104 Address Creation show prepare 104 Address c
value="30"
>
<span>
30
30 ([protocol104.values.signalNames.tiNumber30])
</span>
</mwc-list-item>
<mwc-list-item
Expand All @@ -130,7 +130,7 @@ snapshots["Wizards for preparing 104 Address Creation show prepare 104 Address c
value="39"
>
<span>
39
39 ([protocol104.values.signalNames.tiNumber39])
</span>
</mwc-list-item>
</wizard-select>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,13 @@ describe('Wizards for preparing 104 Address Creation', () => {
});

describe('show prepare 104 Address creation (multi monitor TI only)', () => {
const newTiValue = '39';
beforeEach(async () => {
await prepareWizard('IED[name="B1"] LN[lnType="SE_GAPC_SET_V001"]', 'Op');
});

it('when processing the request, the expected Create Actions are returned', () => {
inputs[3].value = '39';
it('when processing the request, the expected Create Actions are returned', async () => {
inputs[3].value = newTiValue;

const actions = createAddressesAction(
lnElement,
Expand All @@ -104,6 +105,15 @@ describe('Wizards for preparing 104 Address Creation', () => {
expectCreateActions(actions, 1);
});

it('TI contains description', async () => {
const tiDescription = element.wizardUI.dialog!.querySelector(
`wizard-select[label="monitorTi"] > mwc-list-item[value='${newTiValue}']`
)!;
expect(tiDescription.textContent?.trim()).to.equal(
`${newTiValue} ([protocol104.values.signalNames.tiNumber${newTiValue}])`
);
});

it('looks like the latest snapshot', async () => {
await expect(element.wizardUI.dialog).dom.to.equalSnapshot();
});
Expand Down

0 comments on commit 0e74294

Please sign in to comment.