Drop an SCD, CID, ICD, IID, SSD or SED file on the box above. The viewer reads it in your browser and lays out what is inside: the IEDs, the logical devices, every GOOSE and sampled value publisher with its MAC address and APPID, who subscribes to what, and the data sets behind each control block.
The file never leaves your machine. There is no upload, no server, no copy kept anywhere. Close the tab and it is gone. That matters, because an SCD is a map of a live substation.
The file is read by your browser. Nothing is uploaded, nothing leaves this device.
Or paste the XML instead
Work out which file you are holding
The extension tells you what stage of the engineering the file came from. IEC 61850-6 defines six of them, and mixing them up wastes a lot of time on site.
| Extension | Name | What it holds | Who produces it |
|---|---|---|---|
.ssd | System specification description | Single line, voltage levels, bays, logical nodes bound to primary equipment. No IEDs | Specification tool, at design stage |
.icd | IED capability description | One IED template, everything the device can do, no project addresses | Device vendor |
.iid | Instantiated IED description | One IED as configured by its own vendor tool, ready to go back into the system tool | IED configurator |
.scd | Substation configuration description | The whole station: every IED, the Communication section, subscriptions | System configurator |
.cid | Configured IED description | One IED as it will be loaded, with its addresses and its subscriptions | System configurator |
.sed | System exchange description | A slice of one project handed to another project, for interfaces between them | System configurator |
The viewer does not trust the extension. It looks at the content and tells you what it found: how many IEDs, whether a Substation section exists, whether the Communication section carries addresses. A .cid exported from some tools turns out to be a full station file with one IED name changed, and that shows up immediately.
The six views
Overview gives you the header first. The id, version and revision in <Header> are the only place the file states which revision it is, and the History items tell you who touched it last and why. If the version has not moved since 2019 and the bay was extended last month, you already know something.
IEDs opens the tree: IED, access point, logical device, logical nodes. Each logical device lists its data sets, its report control blocks, its GOOSE and SV blocks, and its bound inputs.
Communication is the address book. IP, subnet and gateway per access point, then the multicast parameters for every control block.
GOOSE and SV is one flat table across the whole file. This is the view most people came for.
Subscriptions resolves every ExtRef back to the control block it came from, so you get publisher to subscriber in one place.
Data sets expands each data set to its FCDA members, in order.
Reading the GOOSE table
Each row is one publisher. The columns are the things that decide whether the message actually arrives and gets accepted.
MAC and APPID come from the Communication section, not from the IED section. Two publishers on the same APPID is a hard fault: the subscriber filters on APPID before it looks at anything else, so it will accept frames from the wrong device and drop into the wrong state. The viewer flags it as an error.
confRev is the number the subscriber compares against its own copy. If someone adds a member to the data set and leaves confRev alone, subscribers keep accepting a message whose contents no longer match what they expect. Raise it every time the data set changes.
Items is the number of FCDA entries in the referenced data set. A long data set is not free. Any single member changing re-sends the whole message, so a 60-entry data set carrying both trip signals and cyclic measurements will flood the bus every time a measurement moves.
MinTime and MaxTime are the retransmission times in milliseconds. MinTime is the gap after an event before the first repeat, typically 4 ms. MaxTime is the stable-state heartbeat, typically 1000 to 5000 ms. The subscriber’s time allowed to live comes from MaxTime, so a long MaxTime means a slow detection of a dead publisher.
Subs counts how many inputs in the file bind to that block. Zero on a trip GOOSE means either a spare block or a missing binding, and it is worth knowing which before the commissioning test.
One point that trips people up: the appID attribute on <GSEControl> and the APPID in the Communication section are two different things. The attribute is a text identifier that ends up as GoID in the message. The Communication APPID is the 16-bit Ethernet application identifier the subscriber filters on. The viewer shows both, in separate columns.
The subscription cross-reference
Edition 2 puts subscriptions in the file. Every <ExtRef> inside an <Inputs> element says which IED, which logical device, which data attribute, and — when the tool wrote it — which source control block.
The cross-reference reads them all and groups them by publisher. You get a list like this:
PROT_Q01/LD0/gcbTrip
CTRL_Q01 LD0 LLN0 TRIP_IN LD0/PTOC1.Op.general GOOSE
CTRL_Q01 LD0 LLN0 CB_POS LD0/XCBR1.Pos.stVal GOOSE
That is the answer to “what breaks if I take this relay out”, and it is faster than searching the XML by hand.
Inputs with no srcCBName are listed separately. They are legal — the binding is at data level and the tool resolves the control block itself — but they are also where silent mistakes hide, because nothing in the file states which stream carries the signal.
What the checks tab looks for
The checks are the ones that cost time on site. They are grouped by how much trouble they cause.
| Check | Level | What it means in the field |
|---|---|---|
| Duplicate APPID | Error | Two streams a subscriber cannot tell apart |
| Duplicate multicast MAC | Error | Same destination address on two publishers |
| Duplicate IP or IED name | Error | Ambiguous references through the whole file |
| Control block with no address | Error | The block exists in the IED but has no Communication entry, so it never gets on the wire |
| Data set not found | Error | datSet points at a name that is not defined in that logical device |
| Subscription to an unknown IED or control block | Error | A binding left behind after a rename |
| APPID outside the reserved band | Warning | 0x0000 to 0x3FFF is GOOSE, 0x4000 to 0x7FFF is sampled values |
| MAC outside the reserved block | Warning | 01-0C-CD-01 for GOOSE, 01-0C-CD-04 for sampled values |
| confRev zero or missing | Warning | Subscribers cannot detect a data set change |
| Empty data set | Warning | The block publishes nothing |
| Address without a control block | Warning | Left over from a deleted block |
| Internal address bound twice | Warning | Two external signals landing on the same internal point |
| No DataTypeTemplates | Warning | Most tools will not import the file as configured |
| GOOSE with no subscriber | Note | Spare block, or a binding never made |
| Missing VLAN priority or retransmission times | Note | The publisher falls back to its own defaults |
These are consistency checks against the content of one file. They are not a schema validation. A file can pass every check here and still fail an XSD validation against the 61850-6 schema, and it can fail a check here while being perfectly valid XML. Use both.
Limits worth knowing
Tables stop at 400 rows and tell you when they do. A station SCD with 40 IEDs can carry thousands of FCDA entries, and rendering all of them would lock the page. The filter box narrows any view by IED name, control block name or signal path.
Private-namespace elements are ignored. Vendor tools put engineering data in their own namespaces, and none of it is read here.
The viewer is read only. It does not write, repair or convert anything. If you need to change a binding, that belongs in the system configurator, and the SCD it produces is the file that goes back into the relays.
FAQ
Is my file uploaded anywhere? No. The file is read with the browser’s own file reader and parsed in the page. There is no network request. You can check it yourself: open the developer tools, go to the network tab, and load a file.
Can I open a file straight from a relay? Yes, if you can export it. Most vendor tools export a .cid or .iid per device. Those open the same way as a station file, just with one IED in them.
Why does my CID show no subscriptions? Some tools strip the Inputs elements when they export a configured IED, on the grounds that the device only needs to know what to publish and what to listen for at data level. If the subscriptions matter to you, look at the SCD instead.
What is the difference between the appID attribute and the APPID in the address? The appID on the GSEControl element is a text identifier that becomes the GoID in the published message. The APPID under the GSE address is the 16-bit value in the Ethernet frame that subscribers filter on. Different fields, different purposes, similar names.
Does it check the data types? No. It counts the entries in DataTypeTemplates and warns when the section is missing, but it does not walk every DO and DA to confirm each FCDA resolves to a real attribute.
Can I use this to compare two versions of an SCD? Not directly. Load each one, download the summary text file, and run a diff on the two. The summary lists publishers, subscriptions and findings in a stable order, which makes the diff readable.
Does it read Edition 1 files? Yes. Anything with an <SCL> root parses. Edition 1 files have no Inputs elements, so the subscription view will be empty, and that is expected rather than a fault.
My browser struggles with a very large file. Everything is parsed into memory at once. A file over roughly 50 MB will be slow on a laptop and may fail on a phone. Split the station file, or use a desktop tool for the very large ones.
