Files
Copilot d525bc3f28 Bound reconnect cleanup and organize samples by domain (#4276)
# Description

This PR fixes bounded ManagedSession reconnect cleanup and reorganizes
the sample applications into domain-focused folders.

## Reconnect cleanup

- Bounds reconnect integration cleanup with independent 30-second close
and dispose limits.
- Sends `CloseSession` through the awaited transport request path during
`Session.DisposeAsync`.
- Preserves explicit `Session.CloseAsync` behavior that waits for or
cancels outstanding publish requests.
- Covers the disposal request path with a regression test.

## Sample organization

- `samples/OpenUsd`: `GeneratorServer`, `SiteCompositionServer`
- `samples/Redundancy`: `RedundantClient`, `RedundantServer`,
`RedundantPubSub`
- `samples/Isa95`: `MinimalIsa95Server`
- `samples/MinimalApi`: `MinimalBoilerServer`, `MinimalCalcServer`,
`MinimalClient`
- `samples/DI`: `PumpDeviceIntegrationServer`
- `samples/Lds`: `ConsoleLdsServer`
- `samples/Reference`: `ConsoleReferenceClient`,
`ConsoleReferenceServer`
- `samples/PubSub`: `ConsoleReferencePubSubClient`

`UA.slnx` now exposes the same requested domain groups. Project
references, tests, runtime sample probes, CI workflows, Dockerfiles,
Compose files, helper scripts, and documentation were updated to the new
paths. `samples/Robotics/MinimalRobotServer` remains under `Robotics`.

## Validation

- `dotnet build UA.slnx`
- 3 Redundancy short-haul sample tests
- 70 DI sample tests
- 914 OpenUSD tests
- 1 WotCon model-materialization test
- 137 AOT tests
- `docker compose config` for all 6 moved Redundancy Compose files

## Related Issues

- Fixes #4273

## Checklist

- [ ] 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 built the complete `UA.slnx` solution locally.
- [ ] I ran all tests locally against at least .NET Framework and .NET
10.
- [ ] I fixed all failing and flaky tests in the CI pipelines and all
CodeQL warnings.
- [x] I have addressed all PR feedback received.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: marcschier <11168470+marcschier@users.noreply.github.com>
Co-authored-by: Marc Schier <mschier@microsoft.com>
Co-authored-by: Marc Schier <marcschier@users.noreply.github.com>
Copilot-Session: a2c2838f-74ae-4997-a1d4-50574d9e0636
2026-08-21 04:35:47 +00:00

13 KiB
Raw Permalink Blame History

PumpX-2000 — Product Datasheet

SimPump Corp
Single-stage end-suction centrifugal process pump
Document no. SPC-DS-PX2000
Revision 3  ·  Issue date 2025-04-17
Supersedes revision 2 (2024-11-05)

Simulated device. The PumpX-2000 is a fictitious product used by the PumpDeviceIntegrationServer sample of the OPC UA .NET Standard stack. It does not exist as hardware. Every figure in this datasheet is reproduced by the sample server's simulation and is asserted by tests/Opc.Ua.Di.Tests/PumpDatasheetConformanceTests.cs, so this document and the running address space cannot drift apart.


1 Product description

The PumpX-2000 is a single-stage, end-suction, radially split centrifugal pump for clean and lightly contaminated liquids in utility and process-water duty. The hydraulic end is close-coupled to a foot-mounted asynchronous motor; the bearing bracket carries a temperature probe and the discharge nozzle carries a combined pressure/flow transmitter assembly.

The pump is instrumented as an OPC UA asset. It exposes its nameplate, its process values and its supervision states through the OPC 40223 Pumps companion specification, layered on OPC 40001-1 Machinery and OPC 10000-100 Device Integration.

Item Value
Type designation PumpX-2000
Product code PX2000-32-160
Construction Single-stage, end-suction, radially split
Impeller Closed, 160 mm nominal diameter
Service Clean and lightly contaminated liquids, pH 5–10
Mounting Horizontal, foot-mounted baseplate
Companion specification OPC 40223 PumpType

2 Nameplate and identification data

Every nameplate field is published as a property of the pump's Identification functional group. Browse names are listed with their namespace; the namespace prefixes below map to http://opcfoundation.org/UA/DI/ (DI), http://opcfoundation.org/UA/Machinery/ (Machinery) and http://opcfoundation.org/UA/Pumps/ (Pumps).

Property Namespace DataType Unit SN-001 Unit SN-002
Manufacturer DI LocalizedText SimPump Corp SimPump Corp
ManufacturerUri DI String https://simpump.example https://simpump.example
Model DI LocalizedText PumpX-2000 PumpX-2000
ProductCode DI String PX2000-32-160 PX2000-32-160
DeviceClass DI String Pump Pump
HardwareRevision DI String 1.4 1.4
SoftwareRevision DI String 2.5.3 2.5.3
SerialNumber DI String SN-001 SN-002
ProductInstanceUri DI String urn:simdevice:SimPump:PumpX-2000:SN-001 urn:simdevice:SimPump:PumpX-2000:SN-002
AssetId DI String PMP-1001 PMP-1002
ComponentName DI LocalizedText Feed Pump A Feed Pump B
Location Machinery String Plant 1 / Utility Skid / Bay 3 Plant 1 / Utility Skid / Bay 4
YearOfConstruction Machinery UInt16 2025 2025
MonthOfConstruction Machinery Byte 4 4
DayOfConstruction Pumps Int32 17 17
ArticleNumber Pumps String PX2000-32-160-CI PX2000-32-160-CI
OrderProductCode Pumps String PX2000-32-160-CI-M30 PX2000-32-160-CI-M30
TypeOfProduct Pumps String Centrifugal pump, end-suction Centrifugal pump, end-suction
Supplier Pumps String SimPump Corp SimPump Corp
CountryOfOrigin Pumps String DE DE
FabricationNumber Pumps String F-2025-0001 F-2025-0002

Both units are the same product; they differ only in serial number, fabrication number, asset identifier, component name and installation bay. The sample server materialises two units by default and derives the same per-unit fields for any further unit when started with --pumps N (SN-00n, PMP-100n, Feed Pump A/B/…, F-2025-000n, Bay n+2).


3 Hydraulic performance

3.1 Design point

Reference liquid: water at 20 °C, density ρ = 998 kg/m³, ν = 1.0 mm²/s.

Quantity Symbol Value
Rated flow (best efficiency point) QBEP 25.0 m³/h (6.93 kg/s)
Rated head HBEP 25.5 m
Rated differential pressure ΔpBEP 249.7 kPa (2.50 bar)
Rated efficiency ηBEP 72.0 %
Hydraulic power Phyd 1.73 kW
Rated shaft power P2 2.41 kW
Shut-off head H0 32.0 m
NPSH required at BEP NPSHR 2.4 m
Rated speed n 2900 min-1

3.2 Characteristic curves

The pump is characterised by a quadratic head curve and a parabolic efficiency curve about the best efficiency point (Q in m³/h):

H(Q)  = 32.0 − 0.0104 · Q²                     [m]
η(Q)  = 72.0 · (1 − 0.6 · ((Q − 25) / 25)²)    [%]
Δp(Q) = ρ · g · H(Q)                           [Pa]
ṁ(Q)  = ρ · Q / 3600                           [kg/s]
P₂(Q) = ρ · g · (Q / 3600) · H(Q) / (η(Q)/100) [W]

3.3 Performance table

Flow Q [m³/h] Mass flow ṁ [kg/s] Head H [m] Δp [kPa] Efficiency η [%] Shaft power P₂ [kW]
10 2.77 30.96 303.1 56.4 1.49
15 4.16 29.66 290.4 65.1 1.86
20 5.54 27.84 272.6 70.3 2.15
25 6.93 25.50 249.7 72.0 2.41
30 8.32 22.64 221.7 70.3 2.63
35 9.70 19.26 188.6 65.1 2.82

Permissible continuous operating window: 0.5 · QBEP … 1.3 · QBEP (12.5 … 32.5 m³/h).

3.4 Process schematic and instrument tags

flowchart LR
    V[("Suction vessel<br/>V-101")]
    LT(["LT-101<br/>Level"])
    S1[/"Suction nozzle<br/>DN 50"/]
    P(["P-101<br/>PumpX-2000"])
    M["M-101<br/>3.0 kW motor"]
    TT(["TT-102<br/>Bearing temp."])
    TT1(["TT-101<br/>Fluid temp."])
    PT(["PDT-101<br/>Differential pressure"])
    FT(["FT-101<br/>Mass flow"])
    JE(["JE-101<br/>Power / efficiency"])
    D[/"Discharge nozzle<br/>DN 32"/]
    H[("Process header")]

    V --> LT --> S1 --> P --> D --> FT --> H
    M -.drive.-> P
    TT -.bearing bracket.-> P
    TT1 -.suction line.-> S1
    PT -.suction vs. discharge.-> D
    JE -.motor terminals.-> M

    classDef sensor fill:#eef6ff,stroke:#4a76a8,stroke-width:1px;
    class LT,TT,TT1,PT,FT,JE sensor;
Tag Measurand OPC UA browse path (relative to the pump) Unit
PDT-101 Differential pressure Operational/Measurements/DifferentialPressure Pa
TT-101 Fluid temperature Operational/Measurements/FluidTemperature K
TT-102 Bearing temperature Operational/Measurements/BearingTemperature K
JE-101 Shaft power input Operational/Measurements/PumpPowerInput W
FT-101 Mass flow Operational/Measurements/MassFlow kg/s
JE-101 Pump efficiency Operational/Measurements/PumpEfficiency %
LT-101 Suction vessel level Operational/Measurements/Level m
— Start counter Operational/Measurements/NumberOfStarts –

4 Operating limits

Each limit is published as the EURange property of the corresponding measurement variable, and each measurement carries the EngineeringUnits property with the UNECE unit code shown below.

Measurement Engineering unit EURange low EURange high Nominal
Differential pressure Pa (Pascal) 0 400 000 249 655
Fluid temperature K (Kelvin) 263.15 (−10 °C) 393.15 (120 °C) 313.15 (40 °C)
Bearing temperature K (Kelvin) 273.15 (0 °C) 423.15 (150 °C) 333.15 (60 °C)
Shaft power input W (Watt) 0 4 000 2 408
Mass flow kg/s 0 10 6.93
Pump efficiency % 0 100 72
Suction vessel level m (Metre) 0 5 2.5
Additional limit Value
Maximum casing working pressure 10 bar
Maximum permissible starts per hour 15
Minimum continuous flow 12.5 m³/h
Permissible ambient temperature −10 … 40 °C
Sound pressure level at 1 m ≤ 72 dB(A)

5 Motor and electrical data

Item Value
Rated power 3.0 kW
Supply 400 V, 3~, 50 Hz
Rated speed 2900 min-1
Rated current 6.1 A
Efficiency class IE3
Insulation / protection Class F / IP55
Duty type S1 (continuous)

6 Materials and connections

Component Material
Casing Cast iron EN-GJL-250
Impeller Bronze CuSn10
Shaft Stainless steel 1.4021
Shaft seal Mechanical seal, SiC/carbon/EPDM
Bearings Grease-lubricated deep-groove ball bearings
Connection Size Standard
Suction nozzle DN 50, PN 16 EN 1092-2
Discharge nozzle DN 32, PN 16 EN 1092-2
Dimension Value
Length × width × height 620 × 240 × 380 mm
Mass (pump with motor) 68 kg

7 Monitoring, supervision and alarms

7.1 Trip points

The bearing-temperature chain is monitored by a NonExclusiveLimitAlarmType instance published at Events/OverTempAlarm. Its SourceNode is the BearingTemperature variable and its limits are the datasheet trip points:

Limit Value Equivalent Action
HighHighLimit 373.15 K 100 °C Trip — stop the pump
HighLimit 363.15 K 90 °C Alarm — reduce load, check cooling
LowLimit 283.15 K 10 °C Warning — lubricant below operating viscosity
LowLowLimit 278.15 K 5 °C Warning — risk of freezing

The alarm is acknowledgeable; the sample accepts every acknowledge request.

7.2 Supervision states (NAMUR-style)

Supervision variable Browse path Set condition Reset condition
Motor overheat Events/SupervisionPumpOperation/MotorOverheat Bearing temperature ≥ 363.15 K (90 °C) Bearing temperature < 361.15 K (88 °C)
Cavitation Events/SupervisionProcessFluid/Cavitation Suction level < 2.10 m (NPSHA < NPSHR) Suction level > 2.20 m

MotorOverheat drives the activation of OverTempAlarm; the resulting condition events are delivered through the HasNotifier chain from the pump to the Server object.


8 Simulation profile

The sample server reproduces the datasheet with a deterministic model driven by a single independent variable — volumetric flow. Every other published value is derived from the characteristic curves in section 3.2, so the published values are mutually consistent at all times. The simulation advances on one shared 250 ms tick; each pump uses a fixed phase offset of 17 ticks per instance so the units never move in lockstep.

Signal Model Simulated range
Flow Q(t) = 25 · (1 + 0.30 · sin(0.03 · t)) 17.50 … 32.50 m³/h
Differential pressure ρ · g · H(Q) 205.7 … 282.1 kPa
Mass flow ρ · Q / 3600 4.85 … 9.01 kg/s
Efficiency η(Q) 68.1 … 72.0 %
Shaft power ρ · g · (Q/3600) · H(Q) / η 2.01 … 2.73 kW
Bearing temperature 323.15 + 10 · (P₂/P₂,BEP) + cooling-fault excursion 331.5 … 378.2 K (58.4 … 105.1 °C)
Fluid temperature 313.15 + 5 · sin(0.01 · t) 308.15 … 318.15 K (35 … 45 °C)
Suction level 2.5 + 0.5 · sin(0.02 · t) 2.00 … 3.00 m
Start counter one start per 15 simulated minutes monotonic

Cooling-fault excursion: every 64 ticks (16 s) the simulated bearing-cooling water is interrupted for the last 8 ticks (2 s), ramping the bearing temperature linearly by up to +43.75 K. The excursion crosses both the HighLimit and the HighHighLimit trip points, so a full alarm activate/clear cycle — including the MotorOverheat supervision transition — is observable roughly every 16 seconds.

Cavitation: the suction level sine dips below the 2.10 m NPSH threshold once per level cycle (≈ 78 s). Because the state only clears again above 2.20 m, the Cavitation supervision state is held for approximately 19.6 s (78 ticks) per cycle.


9 Standards and references

Reference Title
OPC 40223 OPC UA for Pumps and Vacuum Pumps — Part 1: Pumps
OPC 40001-1 OPC UA for Machinery — Part 1: Basic Building Blocks
OPC 10000-100 OPC UA Part 100: Devices
EN ISO 9906 Rotodynamic pumps — Hydraulic performance acceptance tests, grade 2B
EN 1092-2 Flanges and their joints — Cast iron flanges
IEC 60034-30-1 Rotating electrical machines — Efficiency classes (IE3)

10 Document history

Revision Date Change
3 2025-04-17 Bearing-temperature trip points aligned with IE3 motor package; simulation profile section added.
2 2024-11-05 NPSHR corrected to 2.4 m at BEP.
1 2024-03-12 First issue.

Disclaimer — SimPump Corp, the PumpX-2000 and all identifiers in this document are fictitious and exist only to give the PumpDeviceIntegrationServer sample a realistic asset to publish. Do not use these figures for engineering purposes.