Files
UA-.NETStandard/samples/GeneratorServer/Model/Opc.Ua.Machinery.NodeSet2.csv
T
Marc Schier ca89ac85a7 Add a Generators companion-spec sample and compose servers at a site level (#4180)
# Description

Adds a **Generators companion-specification sample** alongside the
existing pump sample, and a **`SiteCompositionServer`** that composes
several device servers into one OpenUSD scene at a supervisory level —
demonstrating that servers can be aggregated without mirroring their
address spaces.

Three things, in dependency order:

### 1. `GeneratorServer`

A self-contained server realising the draft Generators spec
(`http://opcfoundation.org/UA/Generators/`) end to end: N simulated
generating sets, DI + Machinery integration, a twelve-state operating
state machine, four protection alarms per set, six control methods, and
a per-set OpenUSD twin.

The organising idea is that **load fraction is the only independent
variable**. Everything else is a function of it:

```
V̇_f(x) = 3.67 + 100·x                fuel rate      [L/h]
η(x)   = P(x) / (V̇_f(x) · ρ · LHV)   efficiency
S = P / PF     I = S / (√3·V_LL)     f = N·p / 120
```

This is not stylistic. When each measurement is an independent
oscillator — as the pump sample's simulation once was — a server happily
publishes a duty point no real machine could occupy, and no test can
catch it because there is nothing for the values to be inconsistent
*with*. Deriving them from one variable means `P = √3·V·I·PF` and `η =
P/(V̇·ρ·LHV)` hold at every tick by construction. The published
`DATASHEET.md`, the engineering ranges, the trip points and the
simulation all read the same constants in `GeneratorDatasheet.cs`, so
the document and the server cannot describe different machines.

The machine is a fictitious **SimGen Systems GenX-500** (400 kW prime /
440 kW standby, 400/230 V, 50 Hz, four-pole). Figures are representative
of a real industrial genset class; no vendor is named anywhere in the
code or docs.

### 2. Cross-server composition in the connector

`RemoteSessionFactory` already existed in the client library but the
connector CLI never set it, so cross-server composition was unreachable.
`--federate` wires it up: the connector opens a session to each server
named by a component binding, discovers its representations and drives
its bindings into the same stage.

It is **opt-in** because the endpoint the connector dials comes from the
server being rendered rather than from the operator, which makes
honouring it a trust decision. Federation is best-effort per component —
a subordinate that is down is logged and skipped, and the rest of the
scene still renders — which is the only `src/` change in this PR.

### 3. `SiteCompositionServer`

Owns no devices. It publishes a site stage plus one cross-server
component binding per subordinate, carrying that server's
`ComponentServerUri` and `ComponentEndpointUrl`. Nothing is mirrored, so
there is no cache to invalidate and no second copy of the truth.

## Notes for reviewers

**Everything interesting in this PR was found by running the servers,
not by reading the code.** Six defects, none of which looked wrong in
review:

- `IsShutdown` and `SubsystemName` are *optional* on
`GeneratorProtectionAlarmType`, so the generated factory does not
materialise them. `CreateOrReplace` alone produces a child that exists,
appears in `GetChildren` and holds the right value — but carries **no
`ReferenceTypeId`**, so no browse can reach it. Every alarm was
publishing its trip without saying whether the trip stops the machine or
which subsystem to go to. `AddXxx(context)` first is what gives the
child its `HasProperty` reference.
- **The protections could never fire.** Every trip point sits outside
the band the datasheet curves produce — that is what a datasheet *means*
— so all four alarms, the shutdown class, `ResetFaults` and the whole
`Fault` branch of the state machine were unreachable while the README
documented them as observable. Overload was worse: the load clamp
ceiling was set to exactly the trip point, making a
strictly-greater-than comparison unsatisfiable. Faults are now
injectable, and the first set — the one the hero camera frames —
develops one on a slow rotation.
- **A shutdown trip removes the condition that caused it**, because oil
pressure and coolant temperature are only supervised while the engine
turns. Each alarm went active for one tick and cleared, leaving an
operator with a stopped machine and no indication of why. Shutdown-class
alarms now latch until the set leaves the shutdown state. Every unit
test that checked the *condition* passed throughout — the defect only
appears when the trip and the supervision interact over time.
- **`Synchronizing` and `Paralleled` were declared, drawn in the README
and never entered.** The first set now energises a dead bus and closes
onto it while every other set synchronises to a live one — both how a
real plant parallels, and what makes the two states observable.
- **The tick raced client method calls.** The simulation tick runs on a
thread-pool thread while method calls arrive on request threads, and
both transition sets and write the same nodes. A tick moving a set to
`Cooldown` and a concurrent `EmergencyStop` could interleave the paired
`CurrentState` / `CurrentState.Id` writes and leave a client with a
state *name* from one transition and a state *node* from the other — the
exact failure the paired write exists to prevent, reintroduced by the
threading model. Both paths now take one gate.
- Low oil pressure supervised from raw speed **tripped every set during
cranking**, because pressure has not built yet. Now gated on
`IsSpinning`, which is what a real start-up bypass does.

Smaller fixes: shutdown trips are applied after the whole evaluation
pass (stopping mid-loop made the remaining conditions read healthy,
collapsing simultaneous trips to whichever came first in the table);
`ResetFaults` reports its clears as events (a client learns of condition
state changes only through events, so a silent clear leaves an
alarm-list client showing it forever); the start counter moved into the
transition so commanded starts are counted; the federated connector
closes the remote session if the connector constructor throws between
taking ownership and registering it; and `prepare_machinery_nodeset.py`
now *asserts* the IA namespace is last before removing it rather than
only claiming so in its docstring — removing any earlier entry would
silently renumber every namespace after it and rebind their NodeIds.

**A model limitation is left visible rather than papered over.**
`GeneratorStateMachineType` declares an emergency stop only out of
`Running`, `Loaded` and `Paralleled`, so the sample refuses
`EmergencyStop` from `Starting` and `Warmup`. A real panel stops from
anywhere. That is the specification's shape, not this sample's choice,
so it is pinned by a test and named in the docs.

**`Model/` vendors a reduced Machinery nodeset**, derived mechanically
by whitelist. The full official nodeset does not survive the model
source generator (`MODELGEN003`) and drags in IA through a single
optional `Stacklight` member a generating set does not have. Deriving it
by script keeps the provenance checkable; the whitelist is the only
thing to edit when more types are needed. **Never hand-edit the
generated output.**

**The federated scene renders end to end.** Getting there surfaced three
more defects, all of which produced a plausible-looking scene with
nothing in it: the generator sample's plant aggregation was created
under an already-registered `DeviceSet` and so was invisible to every
client (it had *never* rendered geometry, standalone or federated); the
connector's asset fetch ran on the primary session only, so composition
referenced layers that were never downloaded; and both generator colour
bindings wrote `primvars:displayColor` to prims that did not declare it,
so the renderer rejected every update while the file still looked
correct. Cross-server components compose under the subordinate's own
root, so the site layer now *places* `/Plant` and `/Powerhouse` rather
than leaving them stacked on the origin.

**`OpenUsdRepresentation` is now mounted with `HasAddIn`, not
`HasComponent`** (review feedback). The nodeset says so explicitly —
*"Mounted with HasAddIn"* — but every server in the tree used plain
`HasComponent`. It survived because `HasAddIn` is a *subtype* of
`HasComponent`: the representation still browses, still aggregates and
still drives a twin, so every functional test passed before the fix and
after it, and only a conformance checker could tell. Seven mount sites
corrected. `PumpDeviceIntegrationServer` and `MinimalRobotServer` had
hand-rolled the mount instead of calling the shared
`CreateRepresentation` helper, which is exactly how they drifted from
it. Both sample E2E suites now assert the reference type across
**every** discovered representation — a narrower check would have missed
the plant-level representation that arrived later from master still
carrying `HasComponent`.

**Live colour is not achievable in the current OpenUSD viewer, and that
is now documented rather than worked around.** Proven with a standalone
probe: `primvars:displayColor` resolves as `color3f[]` from the
`UsdGeomGprim` schema whatever the layer declares, and the `OpenUsd
0.4.0-alpha` managed API has no writer for that type. Bound
`UsdPreviewSurface` materials are not shaded either, so geometry renders
grey unless it also carries an explicit `displayColor` primvar. The
**visibility** bindings carry no such caveat and are what the samples
rely on to show state. Filed upstream as
[openusd-dotnet#2](https://github.com/marcschier/openusd-dotnet/issues/2),
[#3](https://github.com/marcschier/openusd-dotnet/issues/3) and
[#4](https://github.com/marcschier/openusd-dotnet/issues/4), and linked
from `docs/OpenUsd.md` so a reader can check whether they have since
been fixed.

## Related Issues

No tracking issue — this is additive sample and documentation work with
a single small, self-contained change to `src/` (per-component error
isolation and session-ownership hardening in
`OpenUsdConnector.Composition.cs`). Happy to open one if maintainers
would prefer it tracked.

## Checklist

- [x] I have signed the
[CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf)
and read the
[CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md)
doc.
- [x] I have added tests that prove my fix is effective or that my
feature works and increased code coverage.
- [x] I have added all necessary documentation.
- [x] I have verified that my changes do not introduce (new) build or
analyzer warnings.
- [x] I ran **all** tests locally using the **UA.slnx** solution against
at least .net **framework** and .net **10**, and all passed.
- [ ] I fixed **all** failing and flaky tests in the CI pipelines and
**all** CodeQL warnings.
- [ ] I have addressed **all** PR feedback received.

### Testing

The generator fixtures live in `tests/Opc.Ua.OpenUsd.Tests/Generator` —
**82 tests**, no new project. `Opc.Ua.Di.Tests` would have been the
natural home next to the pump fixtures, but both device samples
source-generate their own reduced `Opc.Ua.Machinery` model and expose it
via `InternalsVisibleTo`, so referencing both from one assembly makes
every Machinery type ambiguous (CS0433); `Opc.Ua.OpenUsd.Tests`
references no other sample and already hosts `RobotAssetContractTests`.
The suite runs **870** on net10.0 and net48 (784 existing + 86) and
**788** on net472, where the sample does not exist and only the
framework-independent asset-contract tests run — forgetting exactly that
exclusion broke CI on the sibling pump PR.

The tests target the things in this sample that fail *quietly*:

- **Datasheet conformance** holds the model to its own claim — rated
speed is `120·f/p`, rated current follows from the rating, the fuel
curve reproduces the published table, and `η = P/(V̇·ρ·LHV)` reconciles
at every load. Efficiency is swept across the whole simulated range to
show it stays inside (0,100) and rises monotonically; a fit that goes
negative somewhere in its range is a coincidence that happens to look
right at the duty point, not a model. A further test reads
`DATASHEET.md` and checks the document quotes the figures the server
actually serves.
- **Drift between the two descriptions of the state machine** — the
physics' `IsLegalTransition` and the model's `GeneratorStateMap` — is
checked in *both* directions. A transition the physics permits but the
map lacks moves a machine without telling a client; one the map holds
but the physics refuses is dead weight that looks supported.
- **Reachability at run time**, not just in the declared table — the
test that catches states the model declares and nothing ever enters.
- **That every protection can actually fire**, which is the half of the
alarm contract that "a healthy set annunciates nothing" does not cover.

A **hosted end-to-end fixture** connects a real client and asserts what
the address space actually exposes — the aggregation at
`/Powerhouse/Generators`, its component binding, and every per-set twin.
That is the only kind of test that catches the registration defect
above: the node object had the right browse name, binding and asset
reference, so every test that inspected objects passed while no client
could see it.

**Every state-machine and protection fix was checked by mutation.**
Restoring the clamp ceiling, the direct `Running → Loaded` path, the old
start-counter placement, or removing the alarm opt-in each makes the
corresponding test fail, naming the specific defect. A test that has
never been seen to fail has not been shown to work.

Verified against a running plant: `Synchronizing`, `Paralleled` and
`Fault` all observed on a two-set server, with
`HighCoolantTemperatureAlarm` seen active on the fault subject. Method
behaviour verified separately — per-set distinct `CurrentState` nodes,
`EmergencyStop` → `EmergencyStopped` with `Start` then refused as
`BadInvalidState`, `ResetFaults` → `Off`, `SetOperatingMode(9999)`
refused with the mode unchanged, and the other sets untouched
throughout. Also verified as a three-server federated stage.

0 warnings on a clean Release rebuild of both samples, the client
library, the connector and the tests, across every TFM.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: fe608993-f3c9-4779-a6b9-9a9eabfc24ba
2026-08-07 10:48:02 +02:00

12 KiB

1Machines1001Object
2MachineryItemState_StateMachineType1002ObjectType
3IMachineryItemVendorNameplateType1003ObjectType
4MachineryItemIdentificationType1004ObjectType
5MachineryComponentIdentificationType1005ObjectType
6MachineComponentsType1006ObjectType
7IMachineryEquipmentType1007ObjectType
8MachineryOperationModeStateMachineType1008ObjectType
9MachineryOperationCounterType1009ObjectType
10IMachineVendorNameplateType1010ObjectType
11IMachineTagNameplateType1011ObjectType
12MachineIdentificationType1012ObjectType
13MachineryEquipmentFolderType1013ObjectType
14MonitoringType1014ObjectType
15MachineryLifetimeCounterType1015ObjectType
16NotificationsType1017ObjectType
17Server_Namespaces_http___opcfoundation_org_UA_Machinery_5001Object
18MachineComponentsType_Component5002Object
19MachineComponentsType_Component_Identification5003Object
20MachineryItemState_StateMachineType_OutOfService5004Object
21MachineryItemState_StateMachineType_NotAvailable5005Object
22MachineryItemState_StateMachineType_Executing5006Object
23MachineryItemState_StateMachineType_NotExecuting5007Object
24MachineryItemState_StateMachineType_FromNotAvailableToOutOfService5008Object
25MachineryItemState_StateMachineType_FromNotAvailableToNotExecuting5009Object
26MachineryItemState_StateMachineType_FromNotAvailableToExecuting5010Object
27MachineryItemState_StateMachineType_FromNotAvailableToNotAvailable5011Object
28MachineryItemState_StateMachineType_FromOutOfServiceToNotAvailable5012Object
29MachineryItemState_StateMachineType_FromOutOfServiceToNotExecuting5013Object
30MachineryItemState_StateMachineType_FromOutOfServiceToExecuting5014Object
31MachineryItemState_StateMachineType_FromOutOfServiceToOutOfService5015Object
32MachineryItemState_StateMachineType_FromNotExecutingToNotAvailable5016Object
33MachineryItemState_StateMachineType_FromNotExecutingToOutOfService5017Object
34MachineryItemState_StateMachineType_FromNotExecutingToExecuting5018Object
35MachineryItemState_StateMachineType_FromNotExecutingToNotExecuting5019Object
36MachineryItemState_StateMachineType_FromExecutingToNotAvailable5020Object
37MachineryItemState_StateMachineType_FromExecutingToOutOfService5021Object
38MachineryItemState_StateMachineType_FromExecutingToNotExecuting5022Object
39MachineryItemState_StateMachineType_FromExecutingToExecuting5023Object
40MachineryOperationModeStateMachineType_None5024Object
41MachineryOperationModeStateMachineType_Maintenance5025Object
42MachineryOperationModeStateMachineType_Processing5026Object
43MachineryOperationModeStateMachineType_Setup5027Object
44MachineryOperationModeStateMachineType_FromNoneToMaintenance5028Object
45MachineryOperationModeStateMachineType_FromNoneToSetup5029Object
46MachineryOperationModeStateMachineType_FromNoneToProcessing5030Object
47MachineryOperationModeStateMachineType_FromNoneToNone5031Object
48MachineryOperationModeStateMachineType_FromMaintenanceToNone5032Object
49MachineryOperationModeStateMachineType_FromMaintenanceToSetup5033Object
50MachineryOperationModeStateMachineType_FromMaintenanceToProcessing5034Object
51MachineryOperationModeStateMachineType_FromMaintenanceToMaintenance5035Object
52MachineryOperationModeStateMachineType_FromSetupToNone5036Object
53MachineryOperationModeStateMachineType_FromSetupToMaintenance5037Object
54MachineryOperationModeStateMachineType_FromSetupToProcessing5038Object
55MachineryOperationModeStateMachineType_FromSetupToSetup5039Object
56MachineryOperationModeStateMachineType_FromProcessingToNone5040Object
57MachineryOperationModeStateMachineType_FromProcessingToMaintenance5041Object
58MachineryOperationModeStateMachineType_FromProcessingToSetup5042Object
59MachineryOperationModeStateMachineType_FromProcessingToProcessing5043Object
60MonitoringType_Status5044Object
61MonitoringType_Health5045Object
62MonitoringType_Process5046Object
63MonitoringType_Consumption5047Object
64MonitoringType_Status_MachineryItemState5048Object
65MonitoringType_Status_MachineryOperationMode5049Object
66MonitoringType_Status_Stacklight5050Object
67MonitoringType_Health_DeviceHealthAlarms5051Object
68MachineryEquipmentFolderType_MachineryEquipment5052Object
69MachineryItemIdentificationType_ProductInstanceUri6001Variable
70MachineryItemIdentificationType_Manufacturer6002Variable
71MachineryItemIdentificationType_SerialNumber6003Variable
72MachineryItemIdentificationType_YearOfConstruction6004Variable
73MachineryItemIdentificationType_MonthOfConstruction6005Variable
74MachineryItemIdentificationType_InitialOperationDate6006Variable
75MachineryItemIdentificationType_ManufacturerUri6007Variable
76MachineryItemIdentificationType_Model6008Variable
77MachineryItemIdentificationType_ProductCode6009Variable
78MachineryItemIdentificationType_HardwareRevision6010Variable
79MachineryItemIdentificationType_SoftwareRevision6011Variable
80MachineryItemIdentificationType_DeviceClass6012Variable
81MachineryItemIdentificationType_AssetId6013Variable
82MachineryItemIdentificationType_ComponentName6014Variable
83MachineIdentificationType_ProductInstanceUri6015Variable
84MachineryComponentIdentificationType_DefaultInstanceBrowseName6016Variable
85MachineryComponentIdentificationType_DeviceRevision6017Variable
86MachineComponentsType_DefaultInstanceBrowseName6018Variable
87MachineComponentsType_Component_Identification_Manufacturer6019Variable
88MachineComponentsType_Component_Identification_SerialNumber6020Variable
89MachineryItemState_StateMachineType_DefaultInstanceBrowseName6021Variable
90IMachineryItemVendorNameplateType_Manufacturer6022Variable
91IMachineVendorNameplateType_ProductInstanceUri6023Variable
92IMachineryItemVendorNameplateType_SerialNumber6024Variable
93IMachineryItemVendorNameplateType_YearOfConstruction6025Variable
94IMachineryItemVendorNameplateType_MonthOfConstruction6026Variable
95IMachineryItemVendorNameplateType_InitialOperationDate6027Variable
96IMachineTagNameplateType_Location6028Variable
97MachineIdentificationType_Location6029Variable
98MachineIdentificationType_DefaultInstanceBrowseName6030Variable
99Server_Namespaces_http___opcfoundation_org_UA_Machinery__IsNamespaceSubset6031Variable
100Server_Namespaces_http___opcfoundation_org_UA_Machinery__NamespacePublicationDate6032Variable
101Server_Namespaces_http___opcfoundation_org_UA_Machinery__NamespaceUri6033Variable
102Server_Namespaces_http___opcfoundation_org_UA_Machinery__NamespaceVersion6034Variable
103Server_Namespaces_http___opcfoundation_org_UA_Machinery__StaticNodeIdTypes6035Variable
104Server_Namespaces_http___opcfoundation_org_UA_Machinery__StaticNumericNodeIdRange6036Variable
105Server_Namespaces_http___opcfoundation_org_UA_Machinery__StaticStringNodeIdPattern6037Variable
106MachineryItemState_StateMachineType_OutOfService_StateNumber6038Variable
107MachineryItemState_StateMachineType_NotAvailable_StateNumber6039Variable
108MachineryItemState_StateMachineType_Executing_StateNumber6040Variable
109MachineryItemState_StateMachineType_NotExecuting_StateNumber6041Variable
110MachineryItemState_StateMachineType_FromNotAvailableToOutOfService_TransitionNumber6042Variable
111MachineryItemState_StateMachineType_FromNotAvailableToNotExecuting_TransitionNumber6043Variable
112MachineryItemState_StateMachineType_FromNotAvailableToExecuting_TransitionNumber6044Variable
113MachineryItemState_StateMachineType_FromNotAvailableToNotAvailable_TransitionNumber6045Variable
114MachineryItemState_StateMachineType_FromOutOfServiceToNotAvailable_TransitionNumber6046Variable
115MachineryItemState_StateMachineType_FromOutOfServiceToNotExecuting_TransitionNumber6047Variable
116MachineryItemState_StateMachineType_FromOutOfServiceToExecuting_TransitionNumber6048Variable
117MachineryItemState_StateMachineType_FromOutOfServiceToOutOfService_TransitionNumber6049Variable
118MachineryItemState_StateMachineType_FromNotExecutingToNotAvailable_TransitionNumber6050Variable
119MachineryItemState_StateMachineType_FromNotExecutingToOutOfService_TransitionNumber6051Variable
120MachineryItemState_StateMachineType_FromNotExecutingToExecuting_TransitionNumber6052Variable
121MachineryItemState_StateMachineType_FromNotExecutingToNotExecuting_TransitionNumber6053Variable
122MachineryItemState_StateMachineType_FromExecutingToNotAvailable_TransitionNumber6054Variable
123MachineryItemState_StateMachineType_FromExecutingToOutOfService_TransitionNumber6055Variable
124MachineryItemState_StateMachineType_FromExecutingToNotExecuting_TransitionNumber6056Variable
125MachineryItemState_StateMachineType_FromExecutingToExecuting_TransitionNumber6057Variable
126MachineryOperationModeStateMachineType_DefaultInstanceBrowseName6058Variable
127MachineryOperationModeStateMachineType_None_StateNumber6059Variable
128MachineryOperationModeStateMachineType_Maintenance_StateNumber6060Variable
129MachineryOperationModeStateMachineType_Processing_StateNumber6061Variable
130MachineryOperationModeStateMachineType_Setup_StateNumber6062Variable
131MachineryOperationModeStateMachineType_FromNoneToMaintenance_TransitionNumber6063Variable
132MachineryOperationModeStateMachineType_FromNoneToSetup_TransitionNumber6064Variable
133MachineryOperationModeStateMachineType_FromNoneToProcessing_TransitionNumber6065Variable
134MachineryOperationModeStateMachineType_FromNoneToNone_TransitionNumber6066Variable
135MachineryOperationModeStateMachineType_FromMaintenanceToNone_TransitionNumber6067Variable
136MachineryOperationModeStateMachineType_FromMaintenanceToSetup_TransitionNumber6068Variable
137MachineryOperationModeStateMachineType_FromMaintenanceToProcessing_TransitionNumber6069Variable
138MachineryOperationModeStateMachineType_FromMaintenanceToMaintenance_TransitionNumber6070Variable
139MachineryOperationModeStateMachineType_FromSetupToNone_TransitionNumber6071Variable
140MachineryOperationModeStateMachineType_FromSetupToMaintenance_TransitionNumber6072Variable
141MachineryOperationModeStateMachineType_FromSetupToProcessing_TransitionNumber6073Variable
142MachineryOperationModeStateMachineType_FromSetupToSetup_TransitionNumber6074Variable
143MachineryOperationModeStateMachineType_FromProcessingToNone_TransitionNumber6075Variable
144MachineryOperationModeStateMachineType_FromProcessingToMaintenance_TransitionNumber6076Variable
145MachineryOperationModeStateMachineType_FromProcessingToSetup_TransitionNumber6077Variable
146MachineryOperationModeStateMachineType_FromProcessingToProcessing_TransitionNumber6078Variable
147MachineryOperationCounterType_PowerOnDuration6079Variable
148MachineryOperationCounterType_OperationDuration6080Variable
149MachineryOperationCounterType_OperationCycleCounter6081Variable
150MachineryOperationCounterType_DefaultInstanceBrowseName6082Variable
151MachineryLifetimeCounterType_LifetimeVariable6083Variable
152MachineryLifetimeCounterType_LifetimeVariable_LimitValue6084Variable
153MachineryLifetimeCounterType_LifetimeVariable_StartValue6085Variable
154MachineryLifetimeCounterType_LifetimeVariable_EngineeringUnits6086Variable
155MachineryLifetimeCounterType_DefaultInstanceBrowseName6087Variable
156MachineryItemIdentificationType_DefaultInstanceBrowseName6088Variable
157MonitoringType_DefaultInstanceBrowseName6089Variable
158MonitoringType_Status_MachineryItemState_CurrentState6090Variable
159MonitoringType_Status_MachineryItemState_CurrentState_Id6091Variable
160MonitoringType_Status_MachineryOperationMode_CurrentState6092Variable
161MonitoringType_Status_MachineryOperationMode_CurrentState_Id6093Variable
162MonitoringType_Status_Stacklight_StacklightMode6094Variable
163MonitoringType_Health_DeviceHealth6095Variable
164MachineryEquipmentFolderType_MachineryEquipment_AssetId6096Variable
165MachineryEquipmentFolderType_MachineryEquipment_ComponentName6097Variable
166MachineryEquipmentFolderType_MachineryEquipment_Description6098Variable
167MachineryEquipmentFolderType_MachineryEquipment_DeviceClass6099Variable
168MachineryEquipmentFolderType_MachineryEquipment_Location6100Variable
169MachineryEquipmentFolderType_MachineryEquipment_MachineryEquipmentTypeId6101Variable
170MachineryEquipmentFolderType_MachineryEquipment_ManufacturerUri6102Variable
171MachineryEquipmentFolderType_MachineryEquipment_Model6103Variable
172MachineryEquipmentFolderType_MachineryEquipment_SerialNumber6104Variable
173MachineryEquipmentFolderType_DefaultInstanceBrowseName6105Variable
174NotificationsType_DefaultInstanceBrowseName6106Variable
175IMachineryEquipmentType_Description6107Variable
176IMachineryEquipmentType_MachineryEquipmentTypeId6108Variable
177IMachineryEquipmentType_EquipmentLife6109Variable
178IMachineryEquipmentType_EquipmentLife_LimitValue6110Variable
179IMachineryEquipmentType_EquipmentLife_StartValue6111Variable
180IMachineryEquipmentType_EquipmentLife_EngineeringUnits6112Variable