Skip to content

Commit ef2db36

Browse files
ca-dJakob Vogelsang
andauthored
refactor: add finder-pane for tree nagivation (#248)
* Initial Home page * Created DataTypeTemplate editor (markdown) * Updated DataTypeTemplate editor (markdown) * Updated DataTypeTemplate editor (markdown) * Updated DataTypeTemplate editor (markdown) * Updated DataTypeTemplate editor (markdown) * Created Guess substation structure (markdown) * Updated Guess substation structure (markdown) * Created Importing IEDs (markdown) * Created _Sidebar (markdown) * Destroyed _Sidebar (markdown) * Created Update GOOSE subscriber info in SCL (markdown) * Created _Sidebar (markdown) * Created Connect Report Control Blocks with ClientLN (markdown) * Updated Connect Report Control Blocks with ClientLN (markdown) * Updated Connect Report Control Blocks with ClientLN (markdown) * Created Merge functionality (markdown) * Created How to install OpenSCD offline (markdown) * Updated How to install OpenSCD offline (markdown) * Updated How to install OpenSCD offline (markdown) * Created Manage save project (markdown) * refactor: remove home screen trick * feat: add home page with table of content * fix: ass missing link in table of content * refactor: add finder-pane for tree nagivation * typo * Updated _Sidebar (markdown) * Add TOC * Restructure TOC * refactor(finder-pane): eliminate dead code * test(finder-pane): add unit tests Co-authored-by: Jakob Vogelsang <[email protected]>
1 parent 72d0160 commit ef2db36

15 files changed

+592
-1
lines changed

__snapshots__/finder-pane.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# `finder-pane`
2+
3+
#### `displays nothing with default properties`
4+
5+
```html
6+
<div>
7+
</div>
8+
9+
```
10+
11+
## `given a path and a getChildren method`
12+
13+
#### `displays one list of children per path entry`
14+
15+
```html
16+
<div>
17+
<section>
18+
<p>
19+
e2
20+
</p>
21+
<mwc-list>
22+
<mwc-list-item
23+
aria-disabled="false"
24+
mwc-list-item=""
25+
tabindex="0"
26+
>
27+
e3
28+
</mwc-list-item>
29+
<mwc-list-item
30+
activated=""
31+
aria-disabled="false"
32+
mwc-list-item=""
33+
tabindex="-1"
34+
>
35+
e1
36+
</mwc-list-item>
37+
</mwc-list>
38+
</section>
39+
<section>
40+
<p>
41+
e1
42+
</p>
43+
<mwc-list>
44+
<mwc-list-item
45+
aria-disabled="false"
46+
mwc-list-item=""
47+
tabindex="0"
48+
>
49+
e2
50+
</mwc-list-item>
51+
<mwc-list-item
52+
aria-disabled="false"
53+
mwc-list-item=""
54+
tabindex="-1"
55+
>
56+
e3
57+
</mwc-list-item>
58+
<mwc-list-item
59+
activated=""
60+
aria-disabled="false"
61+
mwc-list-item=""
62+
tabindex="-1"
63+
>
64+
e4
65+
</mwc-list-item>
66+
</mwc-list>
67+
</section>
68+
<section>
69+
<p>
70+
e4
71+
</p>
72+
<filtered-list searchfieldlabel="e4">
73+
<mwc-list-item
74+
aria-disabled="false"
75+
mwc-list-item=""
76+
tabindex="0"
77+
>
78+
e2
79+
</mwc-list-item>
80+
<mwc-list-item
81+
aria-disabled="false"
82+
mwc-list-item=""
83+
tabindex="-1"
84+
>
85+
e3
86+
</mwc-list-item>
87+
</filtered-list>
88+
</section>
89+
</div>
90+
91+
```
92+
93+
## `when an entry in the last column is selected`
94+
95+
#### `appends a new column with the chosen entry's children`
96+
97+
```html
98+
<div>
99+
<section>
100+
<p>
101+
e2
102+
</p>
103+
<mwc-list>
104+
<mwc-list-item mwc-list-item="">
105+
e3
106+
</mwc-list-item>
107+
<mwc-list-item
108+
activated=""
109+
mwc-list-item=""
110+
>
111+
e1
112+
</mwc-list-item>
113+
</mwc-list>
114+
</section>
115+
<section>
116+
<p>
117+
e1
118+
</p>
119+
<mwc-list>
120+
<mwc-list-item mwc-list-item="">
121+
e2
122+
</mwc-list-item>
123+
<mwc-list-item mwc-list-item="">
124+
e3
125+
</mwc-list-item>
126+
<mwc-list-item
127+
activated=""
128+
mwc-list-item=""
129+
>
130+
e4
131+
</mwc-list-item>
132+
</mwc-list>
133+
</section>
134+
<section>
135+
<p>
136+
e4
137+
</p>
138+
<mwc-list>
139+
<mwc-list-item mwc-list-item="">
140+
e2
141+
</mwc-list-item>
142+
<mwc-list-item
143+
activated=""
144+
mwc-list-item=""
145+
>
146+
e3
147+
</mwc-list-item>
148+
</mwc-list>
149+
</section>
150+
<section>
151+
<p>
152+
e3
153+
</p>
154+
</section>
155+
</div>
156+
157+
```
158+
159+
## `when an entry in the first column is selected`
160+
161+
#### `replaces all but the first column with a new column`
162+
163+
```html
164+
<div>
165+
<section>
166+
<p>
167+
e2
168+
</p>
169+
<mwc-list>
170+
<mwc-list-item
171+
activated=""
172+
mwc-list-item=""
173+
>
174+
e3
175+
</mwc-list-item>
176+
<mwc-list-item mwc-list-item="">
177+
e1
178+
</mwc-list-item>
179+
</mwc-list>
180+
</section>
181+
<section>
182+
<p>
183+
e3
184+
</p>
185+
</section>
186+
</div>
187+
188+
```
189+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
A `ClientLN` is one of 3 elements that are describing connections between IEDs in a SCL file.
2+
3+
### HowTo connect Report with ClientLNs
4+
OpenSCD allows you to connect Report Control Blocks via `ClientLN`. The starting point is the so-called
5+
- communication mapping wizard (`Menu->Communication Mapping`). Here you can find a button (`+ CONNECT REPORT`).
6+
- Select one or multiple source IEDs (left hand side) and then click on the sink IED on the right hand side.
7+
- Select one or more Report Control Blocks you want connect on the left hand side and the logical nodes on the right hand side.
8+
- Click on `CONNECT`
9+
10+
### HowTo disconnect Report Control Blocks - delete ClientLN's
11+
The starting point is the so-called
12+
- communication mapping wizard (`Menu->Communication Mapping`). The wizard shows all connections in the SCL files including GOOSE and SampledValues connections. Each line represents all connections per control block. The number on the right hand side shows the number of connections per control bock and sink IED. (A control block can have additional connection to other IEDs).
13+
- click in the connection you want to disconnect. This opens another page with more detail. The icons in this page indicate the type of connection (ClientLN or ExtRef).
14+
- Select the connections and then in `DISCONNECT`
15+
16+
### Tipps:
17+
You can filter for several terms at same time. The space between terms is acting as a logical AND.
18+
19+
### Connection based on `ClientLN`
20+
It is very common to describe Report connections in a SCL file with `ClientLN`s. A `ClientLN` a child element of the report control block and allows to specify which is controlling the report and which functionality (logical node) shall be connected to the report control block. It is very common to connect logical node of the class IHMI, ITCI to report control blocks but any other logical node even those reside in servers can be connected to the report control block.
21+
22+
### Connections based on `ExtRef`
23+
An external reference is an element that is in the sink IED and pointing to data in the source IED. In addition to that it can reference to the internal address and with Edition there is a pointer or reference to the control block carrying the information. With Edition 2.1 there is even a possibility to define restriction for the external reference.
24+
This connection is primarily used by `GOOSE` and `SampledValues`.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Add a `CSWI` functionality logical node template (`LNodeType`) to an empty project
2+
3+
* click the DataTypeTemplate editor tab
4+
* click the "add LNodeType" button
5+
* choose "CSWI" from the "lnType" dropdown menu
6+
* choose possible values for your "ENS" behavior `Beh` enumeration (default all, i.e. `on`, `on-blocked`, `test`, `test-blocked`, `off`)
7+
> Enumerations may be assumed zero-indexed unless otherwise noted.
8+
9+
* choose data attributes for optional substitution services (`subEna`, `subVal`, `subQ`, `subID`, `blkEna`)
10+
* choose additional optional data attributes (default none of `d`, `dU`, `cdcName="ENS"`*) *fixed value if selected
11+
* choose possible values for your "ENC" mode `Mod` enumeration (default all, i.e. `on`, `on-blocked`, `test`, `test-blocked`, `off`)
12+
* choose possible values for your "ctlModel" enumeration (default all, i.e. `status-only`, `direct-with-normal-security`, `direct-with-enhanced-security`, `sbo-with-normal-security`, `sbo-with-enhanced-security`)
13+
* choose possible originator categories (default all, i.e. `not-supported`, `bay-control`, `station-control`, `remote-control`, `automatic-bay`, `automatic-station`, `automatic-remote`, `maintenance`, `process`)
14+
* choose data attributes for control services (`sboTimeout`, `sboClass`, `operTimeout`, `stSeld`, `ctlNum`)
15+
* choose data attributes for optional substitution services (`subEna`, `subVal`, `subQ`, `subID`, `blkEna`)
16+
* choose remaining optional data attributes (`opRcvd`, `opOk`, `tOpOk`, `d`, `dU`, `cdcName="ENC"`*) *fixed value if selected
17+
* choose optional data attributes for the "LPL" name plate (`paramRev`, `valRev`, `d`, `dU`, `configRev`, `cdcName="LPL"`*)
18+
* choose possible values for your "ENS" health `Health` enumeration (default all, i.e. 1. `ok`, 2. `warning`, 3. `alarm`)
19+
* choose data attributes for optional substitution services (`subEna`, `subVal`, `subQ`, `subID`, `blkEna`)
20+
* choose additional optional data attributes (default none of `d`, `dU`, `cdcName="ENS"`*) *fixed value if selected
21+
* add a "DPC" position `Pos` double point controllable
22+
* choose main data attributes (`ctlModel`, `origin`, `ctlNum`, `stSeld`, `opRcvd`, `opOk`, `tOpOk`, `sboTimeout`, `sboClass`, `operTimeout`, `pulseConfig`)
23+
* choose data attributes for optional substitution services (`subEna`, `subVal`, `subQ`, `subID`, `blkEna`)
24+
* choose additional optional data attributes (default none of `d`, `dU`, `cdcName="DPC"`*) *fixed value if selected
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# What
2+
The `Substation` is an optional element and therefore is often missing in so-called bottom-up projects. With `OpenSCD` you can add the `Substation` element in the aftermath.
3+
For exactly this purpose the `guess` function has been introduced to `OpenSCD` to either speed up this task or to give pure beginner an impression what to do.
4+
5+
Disclaimer: A guess will never be perfect as it is based on assumptions (see below) that not necessary fit to the IEDs you have in the `SCL`-file. However, you can give it a try and `undo`.
6+
7+
# How to use
8+
The `Substation` is an optional element and therefore is often missing in so-called bottom-up projects. With `OpenSCD` you can add the `Substation` element in the aftermath.
9+
For exactly this purpose the `guess` function has been introduced to `OpenSCD`. This is how you can use the function:
10+
- Open `SCL`-file with missing substation or delete all `Substation`-elements
11+
- Click on the fab button `+Add Substation`
12+
- In the dialog `Add Substation` check the box `Guess content`
13+
- Choose the `Control model (ctlModel)` that identify your switch gear in the IED
14+
- Start `GUESS CONTENT`
15+
16+
17+
# Basic assumption
18+
The biggest challenge with the guess function is to identify the amount of voltage levels (`VoltageLevel`), bays (`Bay`) and so-called conducting equipment or primary equipment(`ConductingEquipment`):
19+
- assumes only one voltage level
20+
- bays are identified with the logical node `CSWI`. That means, if there is at least a logical node `CSWI` and the mandatory data object `Pos` matches the chosen control model (ctlModel) a bay is created for this particular IED.
21+
- each of the logical nodes `CSWI` with matching `ctlModel ` represents a conducting equipment. If a `XCBR` is connected to it (same `prefix` and `inst` in the same `LDevice`), the conducting equipement `type` is `CBR` in every other case `DIS`.
22+
- logical node connections `LNode` are automatically assigned to the conducting equipment. Ideally this is the `CSWI`, a `XCRB` or `XSWI` and `CILO`
23+
24+
# Tips
25+
- Especially the assumption that there is only one voltage level does not match big files with lots of IEDs. Use the `move` function to allocate bay to other voltage levels.
26+
27+

public/md/Home.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
This is the OpenSCD help. It could be a source for information on topics around IEC 61850-6. You are welcome to share your knowledge with the rest of the world.
2+
3+
# Table of Contents
4+
5+
## OpenSCD related Topics
6+
7+
- [How to install OpenSCD offline](https://github.com/openscd/open-scd/wiki/How-to-install-OpenSCD-offline)
8+
- [Manage save project](https://github.com/openscd/open-scd/wiki/Manage-save-project)
9+
10+
## OpenSCD and the IEC 61850-6
11+
12+
### Substation
13+
14+
- [Guess substation structure](https://github.com/openscd/open-scd/wiki/Guess-substation-structure)
15+
16+
### Communication
17+
18+
### IED section
19+
20+
- [Connect Report Control Blocks with ClientLN](https://github.com/openscd/open-scd/wiki/Connect-Report-Control-Blocks-with-ClientLN)
21+
- [Importing IEDs](https://github.com/openscd/open-scd/wiki/Importing-IEDs)
22+
- [Update GOOSE subscriber info in SCL](https://github.com/openscd/open-scd/wiki/Update-GOOSE-subscriber-info-in-SCL)
23+
24+
### DataTypeTemplates
25+
26+
- [DataTypeTemplate editor](https://github.com/openscd/open-scd/wiki/DataTypeTemplate-editor)
27+
28+
### Other goodies
29+
30+
- [Merge functionality](https://github.com/openscd/open-scd/wiki/Merge-functionality)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
OpenSCD can be installed on computers with no World Wide Web connection. There are two approaches to do that.
2+
3+
***
4+
5+
1. You still have access to a local network (intranet):
6+
Ask your IT colleagues and ask them to configure a web server in the intranet and load the version you want to e.g. [version 0.2.0](https://github.com/openscd/open-scd/releases/tag/v0.2.0) -> `open-scd.zip`
7+
8+
***
9+
10+
11+
2. You have no access to any network:
12+
You have to install a software that allows you to run a web server locally on your machine e.g [Web Server for Chrome](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb)
13+
For `Web Server for Chrome`
14+
* Download a [version](https://github.com/openscd/open-scd/releases) of OpenSCD. To be more precise, the `open-scd.zip`.
15+
* Extract `open-scd.zip`
16+
* Start the web server
17+
* Click on `CHOOSE FOLDER`
18+
* Navigate to the extracted `open-scd` folder (You see folders .git, doc, public and other).
19+
* Click on the web server URL within `Web Server for Chrome`
20+
* ![WebServer](https://user-images.githubusercontent.com/66802940/121010207-685e5800-c795-11eb-8805-ca59e1a2d98b.png)
21+
22+
23+
* If you use `Chrome` or `Edge` you can install OpenSCD
24+
* ![InstallOpenSCD](https://user-images.githubusercontent.com/66802940/121010699-0520f580-c796-11eb-9e9e-4ec8a314be4c.png)
25+
26+
27+

public/md/Importing-IEDs.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Importing IEDs
2+
Importing IEDs is a key feature for any system configurator, regardless if is follows the so-called `bottom-up` or `top-down` approach.
3+
This feature must deal with conflicts in the `DataTypeTemplate` on importing IEDs. To be more precise the `id`'s within `LNodeType`, `DOType`, `DAType` and `EnumType` must be unique in the project. There are two possible ways to deal with those conflicts:
4+
5+
## Make id's unique
6+
When importing IEDs with connections to data in `DataTypeTemplates` with `id`'s already present in the project the `id` and the `type` attribute can be unified. As the IED name must be unique in the project OpenSCD is attaching this variable to the `id` and `type` attributes in the `DataTypeTemplates`.
7+
8+
## Use iedType attribute
9+
`LNodeType`, `DOType`, `DAType` and `EnumType` all have a attribute `iedType` that points to the attribute `type` in the IED section. With this attribute data can clearly be connected with a IED. **OpenSCD is not using this approach, yet!**
10+
11+
12+
### For further reading
13+
[Tissue 366](https://iec61850.tissue-db.com/tissue/366)

public/md/Manage-save-project.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
One of the things that user might be different in OpenSCD compared to a desktop application is `Save project`. As OpenSCD runs in the browser we use the browser standard behavior to save files and in most browsers this means that the file is downloaded in the download folder on your machinedirectly.
2+
3+
HOWEVER, you can change this standard behavior. In Chrome and Chromium, this setting is called `Ask where to save each file before downloading`.

public/md/Merge-functionality.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Merge is a basic functionality that allows to import information from other files or to update existing elements with information from other files. When merging three different scenarios can occur.
2+
3+
1. Add: An element is present in the existing file but not in imported file (delete icon)
4+
2. Delete: An element is missing in the existing file but not in the imported file (edit icon)
5+
3. Merge: An element in the existing file and the imported file are equal but have children with differences. (merge icon)
6+
7+
In OpenSCD you can merge two files together. The merge is a step by step procedure where the software guide you through the process. It starts with children of the SCL root element moving deeper with each step.
8+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
A `GOOSE` is a service defined in `IEC 61850-8-1`. This services can be configured in a SCL file. Both the sending end and the receiving end can be configured.
2+
3+
## Send end configuration
4+
Sending end configuration means creating a GOOSE control block `GSEControl` and connect this to a `DataSet` with the attribute `datSet`.
5+
The `DataSet` contains all the data (functional constrained data attributes `FCDA`) send with the GOOSE.
6+
7+
8+
## Receiving end
9+
The receiving end - or subscriber - is defined with the SCL elements `ExtRef` (external reference) and `IEDName`.
10+
11+
#### 1) `IEDName`
12+
The `IEDName` element is located in the sending end IED and contains a reference to the subscriber IED(s). It is optional and that is why not all tools have implemented it.
13+
14+
#### 2) `ExtRef`
15+
The element `ExtRef` is located in the subscriber IED and is containing the reference to the data attribute that is used (subscriber on) but with Edition1 not the reference to the service that is carrying this data (e.g the GOOSE control block). This means that it is tricky to find if and when yes which IED is subscribing on a GOOSE.
16+
17+
### Update the receiving end configuration with OpenSCD
18+
OpenSCD can help you here by updating the the subscriber information by adding the missing `IEDName` elements into the project:
19+
1. Open the project you want to update
20+
2. Navigate to Menu -> `Update subscriber info`
21+
3. Check the log to see how many `IEDName` element(s) are added to the project.
22+
23+

0 commit comments

Comments
 (0)