# Tia Hmi Operations

> C# Openness implementation of HMI engineering.

- Skill: `czarnak/tia-hmi-operations` (Agent Skill, multi-file: 20 files)
- Install (CLI): `npx skillmds@latest add czarnak/tia-hmi-operations`
- Raw SKILL.md: https://api.skillmd.com/api/skills/czarnak/tia-hmi-operations/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: czarnak (https://skillmd.com/u/czarnak)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/czarnak/tia-hmi-operations

---


# tia-hmi-operations

## Scope

HMI 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.

### Classic WinCC (WinCC.dll — `HmiTarget`)

| Reference file | When to use |
|---|---|
| `references/hmi-target.md` | **Initialize/Compile:** Getting the `HmiTarget` from a device; compiling HMI; HMI object model overview; namespace-to-composition mapping. |
| `references/screens.md` | **Screens:** Creating and managing screen folders; deleting screens, screen templates, or entire folder contents. |
| `references/hmi-composition-hierarchy.md` | **Screen Items & Alarms:** Complete screen composition tree (popups, slideins, templates, global elements); screen item attributes; Alarms, Recipes, and Reports API. |
| `references/tags.md` | **Tags:** Creating HMI tag table folders; enumerating tags; deleting individual tags or tag tables. |
| `references/scripts-cycles-connections.md` | **Services:** Managing VB scripts and folders; cycles, connections, text lists, and graphic lists. |

### WinCC Unified (WinCCUnified.dll — `HmiSoftware`)

| Reference file | When to use |
|---|---|
| `references/unified-overview.md` | **Initialize/Overview:** Getting `HmiSoftware` entry point; full composition map; required namespaces. |
| `references/unified-tags-alarms.md` | **Tags & Alarms:** Unified tags, tag tables, groups; alarm classes, discrete/analog alarms; audit classes. |
| `references/unified-screens.md` | **Screens:** Unified screen hierarchy, groups, folders; ScreenBase, ScreenGroup, and ScreenWindow navigation. |
| `references/unified-elements.md` | **Screen Items:** Creating/finding shapes (circles, lines) and widgets (buttons, IO fields, gauges). |
| `references/unified-parts.md` | **UI Components:** Complex parts like DataGrids, AlarmViews, TrendAreas, and ControlBar elements. |
| `references/unified-dynamization.md` | **Dynamization:** Scripting, Tag/Expression dynamization; MappingTables; flashing conditions. |
| `references/unified-events.md` | **Event Handlers:** Subscribing to UI events (OnClick, OnChange) for all screen item types. |
| `references/unified-features.md` | **Features:** UI feature interfaces (IHmiArcFeature, IHmiWindowFeature, IHmiScaleFeature). |
| `references/unified-logging.md` | **Logging:** Data logs, alarm logs, audit trails, and logging tags. |
| `references/unified-connections.md` | **Connections:** HMI connections and driver properties. |
| `references/unified-runtime-settings.md` | **Runtime:** Reporting, Telemetry, OpcUaServer, and UI Runtime resource settings. |
| `references/unified-plant-model.md` | **Plant Model:** Plant Objects, Views, Interfaces, and CPM services. |
| `references/unified-system-services.md` | **Services:** JavaScript modules/scripts; Text and Graphic lists. |
| `references/unified-enums.md` | **Enums:** Comprehensive list of HMI-specific enums (AggregationMode, FillPattern, FontName, etc.). |

---

## Execution pattern

1. Resolve the HMI device by exact selectors supplied by the caller; fail on zero or multiple matches
2. Determine Classic vs Unified:
   - **Classic:** `HmiTarget hmi = sc?.Software as HmiTarget` (namespace: `Siemens.Engineering.Hmi`)
   - **Unified:** `HmiSoftware hmi = sc?.Software as HmiSoftware` (namespace: `Siemens.Engineering.HmiUnified`)
3. Classify the task: tags, screens, alarms, scripts, logging, import/export, compile
4. Load the relevant reference file (Classic or Unified) and navigate the composition
5. Recursively traverse nested `DeviceItem.DeviceItems`; HMI software is not guaranteed to be on a top-level item
6. Use an Openness transaction when the operation supports one, compile after changes, inspect all errors, and commit only after verification
7. Do not save: call `project.Save()` only when persistence was explicitly requested

## Safety and model boundary

- Classic WinCC and WinCC Unified are separate object models. Do not cast a Unified `HmiSoftware` to classic `HmiTarget` or infer the model from order-dependent device discovery.
- Create, import, overwrite, rename, reconnect, or delete only after explicit authorization for the exact selected object and operation.
- Treat imported XML, JavaScript, VBScript, driver settings, addresses, and object names as untrusted engineering input. Validate paths and target-specific values before applying them.
- For bulk or destructive work, inventory dependent screens, tags, alarms, scripts, logs, and connections first. Fail closed when identity or dependency evidence is incomplete.
- `Compile()` and Unified `Validate()` results are gates, not logging aids: inspect result state and nested diagnostics; do not commit or save on errors.

