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, external sources, know-how/write protection, block groups, ProDiag-FB, DataBlock snapshots, compile individual block/UDT, fingerprints, webserver pages, OB priority, loadable file |
references/tags-types.md |
PLC tag tables, tags, user constants, system constants, UDT group navigation |
references/software-units.md |
Software units (PlcUnit), PlcUnitProvider, unit relations, unit access/publish, external sources in units, units as mastercopies, namespaces, name value type documents, loadable file for units |
references/safety-unit.md |
Fail-safe unit (PlcSafetyUnit), SafetyUnit access, safety relations, publish safety blocks, 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
- Access
PlcSoftware via device's SoftwareContainer
- Identify which reference file(s) cover the task — load them
- Navigate Openness object model per reference file patterns
- For online work: use
OnlineProvider service on the CPU DeviceItem (see online-status.md)
- For compare: use
CompareTo / CompareToOnline on PlcSoftware or Device (see compare.md)
- For software units: access via
PlcUnitProvider service on PlcSoftware (see software-units.md)
- For safety unit: access via
PlcUnitProvider.UnitGroup.SafetyUnits (see safety-unit.md)
Access pattern (always needed)
using Siemens.Engineering.HW.Features;
using Siemens.Engineering.SW;
// From a DeviceItem (CPU)
SoftwareContainer sc = deviceItem.GetService<SoftwareContainer>();
PlcSoftware plcSoftware = sc?.Software as PlcSoftware;
1---2name: tia-plc-operations3description: Routed by tia-openness-roadmap. C# Openness implementation of PLC software engineering: program blocks, system blocks, PLC tags and tag tables, user data types, external sources, watch and force tables, technology objects, software units, know-how protection, SafetyAdministration, PLC online/offline control, download, upload, compare-to-online, PLC compile, PLC import/export, master secret, and certificate/security services.4---5
6# tia-plc-operations
7
8## Scope
9PLC software engineering — full C# Openness implementation.
10
11When the roadmap routes here, the entire solution is C#.
12Do not mix with Python wrapper calls.
13Always load `tia-csharp-common` first (done by roadmap).
14
15---
16
17## Reference files
18
19Load ONLY the reference file(s) relevant to the task. Do not load all files at once.
20
21| Reference file | Load when the task involves |
22| --- | --- |
23| `references/online-status.md` | Going online/offline, reading PLC state, configuring connection parameters, `OnlineProvider`, `OnlineState`, `ConnectionConfiguration` |
24| `references/compare.md` | Comparing PLC software or hardware, `CompareResult`, `CompareResultState`, `CompareToOnline`, `UpdateProgram` |
25| `references/blocks.md` | Program blocks, system blocks, external sources, know-how/write protection, block groups, ProDiag-FB, DataBlock snapshots, compile individual block/UDT, fingerprints, webserver pages, OB priority, loadable file |
26| `references/tags-types.md` | PLC tag tables, tags, user constants, system constants, UDT group navigation |
27| `references/software-units.md` | Software units (`PlcUnit`), `PlcUnitProvider`, unit relations, unit access/publish, external sources in units, units as mastercopies, namespaces, name value type documents, loadable file for units |
28| `references/safety-unit.md` | Fail-safe unit (`PlcSafetyUnit`), SafetyUnit access, safety relations, publish safety blocks, supervision export/import |
29
30For tasks spanning multiple areas, load all relevant reference files before generating code.
31
32---
33
34## Stub behaviour
35
36If a task targets a partial reference file, do not invent API calls.
37State clearly which sections are missing. The only remaining stub is import/export
38signatures in `compile-import-export.md` — all other files are complete.
39
40---
41
42## Execution pattern
43
441. Access `PlcSoftware` via device's `SoftwareContainer`
452. Identify which reference file(s) cover the task — load them
463. Navigate Openness object model per reference file patterns
474. For online work: use `OnlineProvider` service on the CPU `DeviceItem` (see `online-status.md`)
485. For compare: use `CompareTo` / `CompareToOnline` on `PlcSoftware` or `Device` (see `compare.md`)
496. For software units: access via `PlcUnitProvider` service on `PlcSoftware` (see `software-units.md`)
507. For safety unit: access via `PlcUnitProvider.UnitGroup.SafetyUnits` (see `safety-unit.md`)
51
52## Access pattern (always needed)
53
54```csharp
55using Siemens.Engineering.HW.Features;
56using Siemens.Engineering.SW;
57
58// From a DeviceItem (CPU)
59SoftwareContainer sc = deviceItem.GetService<SoftwareContainer>();
60PlcSoftware plcSoftware = sc?.Software as PlcSoftware;
61```