ControlSpace.Simulation
0.1.0
dotnet add package ControlSpace.Simulation --version 0.1.0
NuGet\Install-Package ControlSpace.Simulation -Version 0.1.0
<PackageReference Include="ControlSpace.Simulation" Version="0.1.0" />
<PackageVersion Include="ControlSpace.Simulation" Version="0.1.0" />
<PackageReference Include="ControlSpace.Simulation" />
paket add ControlSpace.Simulation --version 0.1.0
#r "nuget: ControlSpace.Simulation, 0.1.0"
#:package ControlSpace.Simulation@0.1.0
#addin nuget:?package=ControlSpace.Simulation&version=0.1.0
#tool nuget:?package=ControlSpace.Simulation&version=0.1.0
ControlSpace
An independent automation-engineering workspace for desktop and browser
Open the Uno application · Workbench guide · Builds and verification
ControlSpace implements a TIA Portal-style engineering workflow using C# / .NET 10, Uno Platform 6.7, and shared Skia rendering. The engineering model, compiler, virtual controller, persistence, rendering, controls and workbench are eight reusable libraries.
Status: 0.1.0 development preview. This is not an exact, feature-complete or qualified replacement for Siemens TIA Portal. All controller execution is simulation. The Pages root serves the compiled Uno WebAssembly application; the independent JavaScript interaction prototype remains under /prototype/.
Project-view workbench
The shared Uno shell has compact menus and toolbars, a hierarchical project tree and details view, central editors, independent right-side task cards, a bottom Properties/Info/Diagnostics inspector, a closable editor bar and a status line. Portal view groups actions by project, device, programming, visualization and diagnostic tasks.
Pane splitters support pointer and keyboard resizing. Maximize/restore preserves the normal window layout. User preferences are saved separately from project files; compact windows use project/task drawers. Project search keeps matching ancestors, and editor sessions preserve SCL drafts/caret positions and LAD zoom/scroll. See behavior, shortcuts and remaining boundaries.
This preview is generated by the compiled Uno browser workflow. JavaScript prototype screenshots are separately labelled in docs/images/.
Editable PLC tag tables
The Uno tag editor now has a compact, virtualized grid with inline editing, rectangular clipboard paste, validation, undo/redo, reference-safe renaming, filtering, sorting, column resizing/reordering, optional monitoring, and add/duplicate/delete commands. See the tag-table guide and compatibility limits.
Program authoring
Create, organize and duplicate LAD/SCL blocks from the project tree or block directory. Edit network titles/comments, contacts, flat parallel branches and typed operands through dialogs, context menus and keyboard commands. Collapsible networks, two-axis scrolling and packaged renderer fonts keep long rungs readable. See the program-editing guide for commands, reuse and model boundaries.
Engineering workflows
| Area | Implemented scope |
|---|---|
| PLC tags | BOOL, INT, DINT, REAL and TIME; %I, %Q, %M addressing; overlap/value validation, comments and retain metadata |
| Ladder | Series contacts and parallel paths; NO/NC and edges; comparisons; assignment/set/reset coils; TON/TOF/TP, CTU and constant MOVE |
| SCL subset | Typed assignments, IF/THEN/ELSE/END_IF, arithmetic, comparisons, Boolean expressions, comments and a bounded parser; no eval |
| Virtual PLC | Run/stop/reset/single-scan, input image, virtual forcing, scan-order execution, rollback on faults and bounded trace history |
| Hardware editor | Generic controller, panel and remote-I/O views; editable addresses, modules and topology metadata; no hardware transport |
| HMI | Labels, lamps, buttons, numeric displays, tanks and gauges; per-screen navigation, tag bindings, dragging and virtual-input buttons |
| Persistence | Versioned ControlSpace JSON, duplicate-key rejection, import limits, CSV tag interchange, draft recovery and an atomic-save helper |
| Transactions | Validation before commit, undo/redo, compilation invalidation and token-aware symbol renaming |
The capability matrix distinguishes supported subsets from unimplemented areas. FBD/STL/GRAPH, full SCL, native Siemens project files, PLC code generation, S7/PROFINET communication, WinCC compatibility, safety, drives, motion and enterprise services remain unsupported.
Download
Every release ships a self-contained, single-file desktop app — no .NET install needed:
| OS | x64 | Arm64 |
|---|---|---|
| Windows | ControlSpace-<version>-win-x64.zip |
ControlSpace-<version>-win-arm64.zip |
| macOS | ControlSpace-<version>-osx-x64.tar.gz |
ControlSpace-<version>-osx-arm64.tar.gz |
| Linux | ControlSpace-<version>-linux-x64.tar.gz |
ControlSpace-<version>-linux-arm64.tar.gz |
Extract and run ControlSpace (ControlSpace.exe on Windows). Builds are not code-signed yet: on macOS clear the quarantine flag with xattr -d com.apple.quarantine ControlSpace; on Windows choose More info → Run anyway in SmartScreen. Verify downloads against SHA256SUMS.
The libraries below are published to NuGet.org, e.g. dotnet add package ControlSpace.Core.
Reusable libraries
| Library | Responsibility |
|---|---|
ControlSpace.Core |
Typed model, validation and detached snapshots |
ControlSpace.Languages |
Bounded SCL parser, LAD compiler and typed intermediate representation |
ControlSpace.Simulation |
Deterministic virtual scans, inputs, forcing and trace |
ControlSpace.Storage |
JSON, CSV and atomic filesystem persistence |
ControlSpace.Engineering |
Editing transactions, references, WorkbenchLayout and EditorSession |
ControlSpace.Rendering.Skia |
Shared vector drawing and hit regions |
ControlSpace.Controls.Uno |
Canvas, table, project tree, theme, pane chrome, splitters and editor bar |
ControlSpace.Workbench.Uno |
Composable workbench, IProjectFiles and optional IWorkbenchPreferences |
ControlSpace.App supplies entry points and platform storage/file pickers. The first six libraries do not depend on the app shell. The two Uno libraries (desktop and browser targets) can be consumed by another Uno host. Version tags publish all eight packages, with symbols, to NuGet.org; the JavaScript prototype is not published to npm.
using ControlSpace.Core;
using ControlSpace.Languages;
using ControlSpace.Simulation;
var compilation = ProjectCompiler.Compile(DemoProject.Create());
if (!compilation.Success)
throw new InvalidOperationException(string.Join("\n", compilation.Diagnostics));
var plc = new VirtualPlc(compilation.Program!);
plc.SetInput("Start_PB", 1);
plc.Run();
plc.Step(TimeSpan.FromMilliseconds(100));
Console.WriteLine(plc.Read("Motor_Run")); // 1 in the sample simulation
plc.Stop();
Build and test
Use .NET 10 and the native platform prerequisites required by Uno. global.json selects Uno.Sdk 6.7.30, with SkiaSharp 3.119.2 matched to its graphics integration. This is a compatible host-rendering choice, not a universal fastest-backend claim.
# Platform-neutral engines and workbench state.
dotnet run --project tests/ControlSpace.Tests -c Release -- --fixtures tests/fixtures
dotnet run --project tests/ControlSpace.Workbench.Tests -c Release
# Desktop: Windows, Linux or macOS.
dotnet run --project src/ControlSpace.App -c Release \
-f net10.0-desktop -p:ControlSpaceTargetFrameworks=net10.0-desktop
# Browser, including the GitHub Pages subpath.
dotnet workload install wasm-tools
dotnet publish src/ControlSpace.App -c Release -f net10.0-browserwasm \
-p:ControlSpaceTargetFrameworks=net10.0-browserwasm \
-p:WasmShellWebAppBasePath=/ControlSpace/ -o artifacts/browser
python3 tools/prepare-pages.py artifacts/browser artifacts/site
# Independent JavaScript prototype.
npm test
python3 tools/bundle-prototype.py
The Pages workflow executes pointer/keyboard scenarios against the actual compiled Uno app, captures workspace/Portal/compact screenshots and checks deployed source identity. The read-only test probe requires ?verify=1 and is disabled on ordinary visits. See verification scope and evidence.
| Workflow | Purpose |
|---|---|
build.yml |
C# engine/workbench and JavaScript tests; Windows/Linux/macOS compile matrix; prototype browser tests; portable packages |
pages.yml |
Uno WASM publish, real UI workflows, Uno packages, screenshots, Pages deployment and live-commit verification |
release.yml |
Self-contained single-file desktop apps (Windows/macOS/Linux, x64 and arm64), browser/source archives, eight NuGet libraries with symbols and a SHA-256 manifest; tags create a GitHub Release and publish packages to NuGet.org via Trusted Publishing from the protected nuget environment, manual runs are dry runs that only upload workflow artifacts |
PR builds cannot deploy Pages. No release tag is created by ordinary builds. Deployment instructions cover the pipeline.
Rendering and performance
The Uno editor draws into the host canvas through SKCanvasElement, avoiding a separate application-owned CPU bitmap upload path. Actual GPU acceleration depends on the host configuration; there is no independent direct WebGPU backend in the C# renderer. The separate prototype uses WebGPU geometry when available and Canvas 2D text/fallback.
The renderer culls offscreen LAD networks and retains drawing resources. Parser, undo and trace storage are bounded. Project-tree reconstruction is skipped when the project snapshot is unchanged; layout writes are debounced. None of these mechanisms establishes physical-GPU performance, hard-real-time timing or production-scale qualification.
Safety and licensing
Simulation only. Never use ControlSpace to operate or commission real machinery. There is no controller transport, certified safety function, hard-real-time scheduler or manufacturer qualification. The sample Stop_PB is a simulated process input, not an emergency stop.
ControlSpace is an original independent implementation, not affiliated with Siemens. TIA Portal is the workflow reference. No Siemens logos, databases, firmware, device catalogs or proprietary assets are distributed. Full/pixel-exact UI compatibility remains an objective, not a completed claim.
MIT license · Dependency notices · Contributing · Security boundaries
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- ControlSpace.Core (>= 0.1.0)
- ControlSpace.Languages (>= 0.1.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on ControlSpace.Simulation:
| Package | Downloads |
|---|---|
|
ControlSpace.Engineering
ControlSpace engineering transactions: validated edits, undo/redo, reference-safe renaming, program editing, workbench layout and editor sessions. |
|
|
ControlSpace.Rendering.Skia
ControlSpace shared SkiaSharp vector rendering for ladder networks, hardware and HMI views, with hit regions and culling. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 27 | 9/29/2026 |