C# Openness implementation of PLC software engineering.
Scanned 5/27/2026
Install via CLI
openskills install Czarnak/totally-integrated-claude---
name: tia-plc-operations
description: C# Openness implementation of PLC software engineering.
---
# tia-plc-operations
## Scope
PLC software engineering — full C# Openness implementation.
When the roadmap routes here, the entire solution is C#.
Do not mix with Python wrapper calls.
Always load `tia-csharp-common` first (done by roadmap).
---
## Reference files
Load ONLY the reference file(s) relevant to the task. Do not load all files at once.
| Reference file | Load when the task involves |
| --- | --- |
| `references/online-status.md` | Going online/offline, reading PLC state, configuring connection parameters, `OnlineProvider`, `OnlineState`, `ConnectionConfiguration` |
| `references/compare.md` | Comparing PLC software or hardware, `CompareResult`, `CompareResultState`, `CompareToOnline`, `UpdateProgram` |
| `references/blocks.md` | Program blocks, system blocks, `PlcSoftware` root, know-how/write protection, block groups, ProDiag-FB, DataBlock snapshots, compile individual block/UDT, fingerprints, webserver pages, OB priority, loadable file |
| `references/external-sources.md` | PLC external source files, importing/generating blocks from sources, `PlcExternalSource`, `PlcExternalSourceGroup` |
| `references/tags-types.md` | PLC tag tables, tags, user constants, system constants, UDTs, PLC types, UDT group navigation |
| `references/software-units.md` | Software units (`PlcUnit`), `PlcUnitProvider`, unit relations, unit access/publish, namespaces, name value type documents |
| `references/safety-unit.md` | Fail-safe unit (`PlcSafetyUnit`), SafetyUnit access, safety relations, publish safety blocks |
| `references/safety-administration.md` | Global safety settings, `SafetyAdministration`, safety signature, safety system version, safety runtime groups, safety validation assistant |
| `references/alarms.md` | PLC alarms, alarm classes, alarm text lists, `PlcAlarmTextProvider` |
| `references/technological-objects.md` | Technological Objects (TOs), motion control, axes, encoders, TO mapping, hardware connections |
| `references/watch-force-tables.md` | Watch tables, force tables, `PlcWatchTable`, `PlcForceTable`, watch entries |
| `references/opc-ua.md` | OPC UA server interfaces, OPC UA communication groups, access control, role mapping |
| `references/supervision.md` | Supervision settings, supervision provider, supervision export/import |
For tasks spanning multiple areas, load all relevant reference files before generating code.
---
## Stub behaviour
If a task targets a partial reference file, do not invent API calls.
State clearly which sections are missing. The only remaining stub is import/export
signatures in `compile-import-export.md` — all other files are complete.
---
## Execution pattern
1. Access `PlcSoftware` via device's `SoftwareContainer`
2. Identify which reference file(s) cover the task — load them
3. Navigate Openness object model per reference file patterns
4. For online work: use `OnlineProvider` service on the CPU `DeviceItem` (see `online-status.md`)
5. For compare: use `CompareTo` / `CompareToOnline` on `PlcSoftware` or `Device` (see `compare.md`)
6. For software units: access via `PlcUnitProvider` service on `PlcSoftware` (see `software-units.md`)
7. For safety unit: access via `PlcUnitProvider.UnitGroup.SafetyUnits` (see `safety-unit.md`)
## Access pattern (always needed)
```csharp
using Siemens.Engineering.HW.Features;
using Siemens.Engineering.SW;
// From a DeviceItem (CPU)
SoftwareContainer sc = deviceItem.GetService<SoftwareContainer>();
PlcSoftware plcSoftware = sc?.Software as PlcSoftware;
```
No comments yet. Be the first to comment!