@@ -18,9 +18,10 @@ import {
18
18
identity ,
19
19
newActionEvent ,
20
20
Replace ,
21
+ getSclSchemaVersion ,
21
22
} from '../../../foundation.js' ;
22
23
23
- import { styles , updateExtRefElement } from '../foundation.js' ;
24
+ import { styles , updateExtRefElement , serviceTypes } from '../foundation.js' ;
24
25
import { FcdaSelectEvent , getFcdaTitleValue } from './foundation.js' ;
25
26
26
27
/**
@@ -31,9 +32,11 @@ import { FcdaSelectEvent, getFcdaTitleValue } from './foundation.js';
31
32
export class ExtRefLaterBindingList extends LitElement {
32
33
@property ( { attribute : false } )
33
34
doc ! : XMLDocument ;
35
+ @property ( )
36
+ controlTag ! : 'SampledValueControl' | 'GSEControl' ;
34
37
35
38
@state ( )
36
- currentSelectedSvcElement : Element | undefined ;
39
+ currentSelectedControlElement : Element | undefined ;
37
40
@state ( )
38
41
currentSelectedFcdaElement : Element | undefined ;
39
42
@state ( )
@@ -77,7 +80,7 @@ export class ExtRefLaterBindingList extends LitElement {
77
80
}
78
81
79
82
private async onFcdaSelectEvent ( event : FcdaSelectEvent ) {
80
- this . currentSelectedSvcElement = event . detail . svc ;
83
+ this . currentSelectedControlElement = event . detail . controlElement ;
81
84
this . currentSelectedFcdaElement = event . detail . fcda ;
82
85
83
86
// Retrieve the IED Element to which the FCDA belongs.
@@ -97,6 +100,33 @@ export class ExtRefLaterBindingList extends LitElement {
97
100
) ;
98
101
}
99
102
103
+ private checkEditionSpecificRequirements ( extRefElement : Element ) : boolean {
104
+ if ( getSclSchemaVersion ( extRefElement . ownerDocument ) === '2003' )
105
+ return true ;
106
+ return (
107
+ extRefElement . getAttribute ( 'serviceType' ) ===
108
+ serviceTypes [ this . controlTag ] &&
109
+ extRefElement . getAttribute ( 'srcLDInst' ) ===
110
+ this . currentSelectedControlElement
111
+ ?. closest ( 'LDevice' )
112
+ ?. getAttribute ( 'inst' ) &&
113
+ ( extRefElement . getAttribute ( 'scrPrefix' ) || '' ) ===
114
+ ( this . currentSelectedControlElement
115
+ ?. closest ( 'LN0' )
116
+ ?. getAttribute ( 'prefix' ) || '' ) &&
117
+ extRefElement . getAttribute ( 'srcLNClass' ) ===
118
+ this . currentSelectedControlElement
119
+ ?. closest ( 'LN0' )
120
+ ?. getAttribute ( 'lnClass' ) &&
121
+ ( extRefElement . getAttribute ( 'srcLNInst' ) || '' ) ===
122
+ this . currentSelectedControlElement
123
+ ?. closest ( 'LN0' )
124
+ ?. getAttribute ( 'inst' ) &&
125
+ extRefElement . getAttribute ( 'srcCBName' ) ===
126
+ this . currentSelectedControlElement ?. getAttribute ( 'name' )
127
+ ) ;
128
+ }
129
+
100
130
/**
101
131
* Check if specific attributes from the ExtRef Element are the same as the ones from the FCDA Element
102
132
* and also if the IED Name is the same. If that is the case this ExtRef subscribes to the selected FCDA
@@ -113,7 +143,8 @@ export class ExtRefLaterBindingList extends LitElement {
113
143
this . sameAttributeValue ( extRefElement , 'lnClass' ) &&
114
144
this . sameAttributeValue ( extRefElement , 'lnInst' ) &&
115
145
this . sameAttributeValue ( extRefElement , 'doName' ) &&
116
- this . sameAttributeValue ( extRefElement , 'daName' )
146
+ this . sameAttributeValue ( extRefElement , 'daName' ) &&
147
+ this . checkEditionSpecificRequirements ( extRefElement )
117
148
) ;
118
149
}
119
150
@@ -187,7 +218,7 @@ export class ExtRefLaterBindingList extends LitElement {
187
218
if (
188
219
! this . currentIedElement ||
189
220
! this . currentSelectedFcdaElement ||
190
- ! this . currentSelectedSvcElement !
221
+ ! this . currentSelectedControlElement !
191
222
) {
192
223
return null ;
193
224
}
@@ -197,16 +228,16 @@ export class ExtRefLaterBindingList extends LitElement {
197
228
new : {
198
229
element : updateExtRefElement (
199
230
extRefElement ,
200
- this . currentSelectedSvcElement ,
231
+ this . currentSelectedControlElement ,
201
232
this . currentSelectedFcdaElement
202
233
) ,
203
234
} ,
204
235
} ;
205
236
}
206
237
207
238
private renderTitle ( ) : TemplateResult {
208
- const svcName = this . currentSelectedSvcElement
209
- ? getNameAttribute ( this . currentSelectedSvcElement )
239
+ const controlElementName = this . currentSelectedControlElement
240
+ ? getNameAttribute ( this . currentSelectedControlElement )
210
241
: undefined ;
211
242
const fcdaName = this . currentSelectedFcdaElement
212
243
? getFcdaTitleValue ( this . currentSelectedFcdaElement )
@@ -216,7 +247,8 @@ export class ExtRefLaterBindingList extends LitElement {
216
247
${ translate (
217
248
'subscription.laterBinding.extRefList.SampledValueControl.title' ,
218
249
{
219
- svcName : svcName ?? '-' ,
250
+ controlTag : this . controlTag ,
251
+ controlElementName : controlElementName ?? '-' ,
220
252
fcdaName : fcdaName ?? '-' ,
221
253
}
222
254
) }
@@ -323,7 +355,7 @@ export class ExtRefLaterBindingList extends LitElement {
323
355
324
356
render ( ) : TemplateResult {
325
357
return html ` <section tabindex= "0" >
326
- ${ this . currentSelectedSvcElement && this . currentSelectedFcdaElement
358
+ ${ this . currentSelectedControlElement && this . currentSelectedFcdaElement
327
359
? html `
328
360
${ this . renderTitle ( ) }
329
361
<filtered- lis t>
0 commit comments