# Tia Networks

> C# Openness implementation of topology and low-level network engineering.

- Skill: `czarnak/tia-networks` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add czarnak/tia-networks`
- Raw SKILL.md: https://api.skillmd.com/api/skills/czarnak/tia-networks/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-networks

---


# tia-networks

## Scope

Topology and low-level network 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/subnets-and-nodes.md` | Reading/writing subnet attributes (name, type, PROFIBUS bus params, isochronous settings); accessing node attributes (IP address, PROFINET device name, node type); SubnetOwner service |
| `references/io-systems.md` | PROFINET IO system attributes; DP master system (IoSystem) attributes; TransferArea creation/deletion on PN or DP interfaces |
| `references/addresses-and-channels.md` | Address objects (StartAddress, IoType, Length, IsochronousMode, ProcessImage); channel access (ChannelType, ChannelIoType); AddressController service |
| `references/io-timing.md` | IoConnector timing/watchdog attributes (PnUpdateTime, PnWatchdogFactor, RtClass, SyncRole); IO device interface isochronous settings (PnSendClock, IsochronousTi, IsochronousTo) |
| `references/communication-connections.md` | Configuring and inspecting S7, FDL, ISO, ISO-on-TCP, TCP, UDP, PTP, and HMI communication connections through `CommunicationManagement.Connections` |
| `references/online-connection-configuration.md` | Choosing/inspecting online connection paths with `ConnectionConfiguration`: modes, PC interfaces, target interfaces, subnets, gateways, accessible devices, and `ApplyConfiguration` |

For tasks spanning multiple areas, load all relevant reference files before generating code.

---

## Safety and dependency gate

- Resolve project, device, recursive device-item path, interface/node, subnet, IO system,
  and connection with exact selectors. A name alone is insufficient when the same name can
  occur in another group or interface.
- Obtain explicit authorization for the exact topology, address, timing, connection, or
  online-path mutation. Read-only discovery and static validation are not authorization.
- Before delete, disconnect, reconnect, readdress, or subnet replacement, inventory every
  dependent node, IO system, communication connection, assigned PLC tag/address, and online
  route that the change can affect.
- Bind that dependency inventory to the proposed change. If any connection endpoint or
  selector cannot be identified completely, return `dependency_evidence_incomplete` and
  refuse the mutation.
- Use `ExclusiveAccess` and a transaction where the operation supports them, then compile
  the affected hardware/software. Do not save after ambiguous selection, partial mutation,
  incomplete dependency evidence, or compile/consistency failure.
- Applying an online connection configuration, enumerating accessible devices, or going
  online is a live operation. Keep it separate from offline topology edits and require the
  exact target and PC interface to be authorized.

---

## Execution pattern

1. Access devices and device items from `Project.Devices`
2. Navigate network interfaces and nodes via Openness HW namespace
3. Use `GetService<SubnetOwner>()` to access subnets owned by a device item
4. Use `GetService<NetworkInterface>()` to access the network interface
5. Resolve exact endpoints and complete dependency evidence before creating or modifying IO systems, subnets, nodes, or connections
6. Modify addresses or channel timing via `deviceItem.Addresses` / `deviceItem.Channels`
7. Use `GetService<CommunicationManagement>()` for configured communication connections
8. Use `OnlineProvider.Configuration` only for online connection-path selection, not for
   project topology creation
9. Compile hardware after changes, inspect the complete result, and save only on success (see `tia-project-general/references/compile.md`)

