Kostenlose DevOps-Analyse
Zurück zum Blog
SPS / PLC · C# · INDUSTRIAL DEVOPS·12. Mai 2026·15 min Lesezeit

SPS mit C#
programmieren.
Wann, wie, wo nicht.

Mit C# greifen Sie auf Siemens, Beckhoff und Rockwell zu, über S7.NET, TwinCAT ADS und libplctag. Mit lauffähigem Code, Datentypen, den Grenzen der Echtzeit und dem Weg in die CI/CD-Pipeline.

Andreas Schönfeld

Andreas Schönfeld

Geschäftsführer & DevOps-Berater, Comquent GmbH

20 Jahre CI/CD- und Industrial-DevOps-Beratung, Schwerpunkt SPS/PLC-Versionierung, IT/OT-Brücke und Embedded-Toolchains.

Veröffentlicht: 12. Mai 2026Zuletzt aktualisiert: 27. Oktober 2026
// Direkte Antwort

Mit C# greifen Sie auf eine SPS zu, programmiert wird sie weiter nach IEC 61131-3. Die C#-Anwendung läuft auf einem PC, Industrie-PC oder Edge-Device neben der Steuerung und liest und schreibt deren Variablen: S7.NET für Siemens S7, Beckhoff.TwinCAT.Ads für die TwinCAT-Runtime und libplctag für Rockwell, herstellerneutral dazu OPC UA und Modbus TCP. Für HMI, Gateways, MES-Anbindung und Test-Automation ist das der pragmatischere Weg, weil Git, CI/CD und Unit-Tests normale IT-Werkzeuge bleiben. Harte Echtzeit bleibt auf der Steuerung.

Stand: Oktober 2026 · .NET 10 LTS · S7.NetPlus 0.20 · Beckhoff.TwinCAT.Ads 7.0 · libplctag 1.5 · TwinCAT 3 · TIA Portal V21
// Kurz gefragt1 Klick, anonym

Ist SPS mit C# bei Ihnen gerade ein Thema?

Wir fragen kurz, wie dringend das Thema bei Ihnen gerade ist. Je nach Antwort zeigen wir Ihnen direkt den passenden nächsten Schritt — ganz ohne Formular.

01
// 01Drei Pfade

Wie programmiert man
eine SPS mit C#?

Auf der Steuerung selbst läuft in aller Regel kein C#. Sie schreiben eine C#-Anwendung, die auf einem PC oder Edge-Device läuft und über eine Bibliothek mit der SPS spricht: bei Siemens S7.NET, bei Beckhoff TwinCAT.NET mit ADS, bei Rockwell libplctag. Die Steuerungs-IDE ersetzt keiner dieser Wege. Gestellt wird die Frage meist, wenn das erste MES-Projekt ansteht und die Steuerungstechnik zum ersten Mal mit den Kollegen aus der IT am selben Tisch sitzt.

/01

Siemens

S7.NETPlus / Sharp7

Runtime

Windows-/Linux-Host, Edge-Device

Rolle

Datenaustausch mit S7-1200/1500, LOGO! und S7-300/400. Kein Code auf der SPS

Typische Anwendungsfälle
  • HMI-Anwendungen
  • OPC-UA-Gateway
  • MES-Anbindung
  • Edge-Daten-Pufferung
/02

Beckhoff

TwinCAT.NET (Beckhoff.TwinCAT.Ads)

Runtime

Windows-Seite des Beckhoff-IPC oder separater Host, entwickelt in Visual Studio

Rolle

C#-Anwendung neben der TwinCAT-Runtime, Zugriff über ADS. Nicht zeitkritisch, die Echtzeit-Task bleibt in TwinCAT PLC

Typische Anwendungsfälle
  • Daten-Mapping
  • OPC-UA-Server
  • Logging & Visualisierung
  • Fertigungsdaten an Cloud
/03

Rockwell

Studio 5000 Component Object Model / libplctag.NET

Runtime

Windows-Host neben ControlLogix/CompactLogix

Rolle

Datenaustausch mit Logix-Steuerungen, .NET-Komponenten in Studio-5000-Add-Ons

Typische Anwendungsfälle
  • HMI-Plant-Floor
  • AS-i / OPC-UA-Bridge
  • MES-Integration
  • Reporting
// In 2 Klicks: Welcher C#-Weg?Schritt 1 / 2

Welcher C#-Weg passt zu Ihrer Steuerung?

Für C# an der SPS gibt es je Hersteller einen anderen Weg, von S7.NET bis TwinCAT.NET. Wählen Sie Ihre Steuerung, und Sie bekommen die passende Bibliothek plus den nächsten Schritt.

Welche Steuerung setzen Sie ein?

02
// 02SPS-Sprachen & Echtzeit

Welche Programmiersprache
für die SPS?

Die Norm IEC 61131-3 kennt seit ihrer vierten Ausgabe von 2025 vier SPS-Programmiersprachen: Kontaktplan (KOP), Funktionsplan (FUP), Strukturierter Text (ST) und Ablaufsprache (AS). Die Anweisungsliste (AWL) ist entfallen. C# steht nicht in dieser Liste. Es setzt eine Ebene darüber an, auf dem PC oder Edge-Device neben der Steuerung.

SpracheTypTypischer Einsatz
Kontaktplan (KOP / LD)grafischVerriegelungen und Schützlogik. Vertraut für Elektriker, dominiert in der Instandhaltung.
Funktionsplan (FUP / FBD)grafischVerknüpfungslogik aus UND-/ODER-Bausteinen, verbreitet in der Verfahrenstechnik.
Ablaufsprache (AS / SFC)grafischSchrittketten für sequenzielle Abläufe wie Rüsten, Takten und Rezeptsteuerung.
Strukturierter Text (ST / SCL)textbasiertBerechnungen, Schleifen, Datenstrukturen. Textbasiert und damit diff-bar, deshalb erste Wahl für neue Projekte.
Anweisungsliste (AWL / IL)textbasiertMaschinennahe Befehlsliste aus der Step-7-Zeit. Seit der vierten Ausgabe der Norm von 2025 nicht mehr enthalten, in Bestandsprojekten weiter anzutreffen.
C# / .NETaußerhalb der NormHMI, OPC-UA-Gateway, MES-Anbindung, Test-Automation. Als Anwendungs- und Kommunikationsschicht neben der Steuerung, nicht auf ihr.

IEC 61131-3 · Zielframework für neue OT-Projekte: .NET 10 LTS · Support für .NET 8 endet am 10. November 2026

Ist C# echtzeitfähig?

Nicht im Sinne harter Echtzeit. .NET läuft unter Windows oder Linux mit Garbage Collection und ohne garantierte Zykluszeit, Jitter im Millisekundenbereich ist normal. Für weiche Echtzeit reicht das aus: Visualisierung, Datenerfassung, MES-Kopplung im 100-Millisekunden-Bereich. Für Motion-Control, Lageregler und Sicherheitsfunktionen bleibt die Logik auf der Steuerung.

Beckhoff bindet .NET über ADS an die TwinCAT-Runtime an. Die zyklische, deterministische Task bleibt dabei die SPS-Task. So ist die Architektur gedacht: unten Determinismus, darüber die Anwendungslogik, die sich in Git versionieren und im CI testen lässt. Wie Versionsverwaltung für SPS-Code auf der Steuerungsseite funktioniert, zeigt der Vergleich von octoplant, Copia und TIA Portal.

03
// 03Wann C# überzeugt

Vier Gründe für
C# in der OT.

Wo C# der pragmatischere Pfad ist, und warum.

Vorteil / 01

Standard-Toolchain

MSBuild, NuGet, dotnet CLI, Roslyn, NUnit und xUnit laufen ohne Umweg. Auf dem Build-Agent ist keine TIA-Portal-Lizenz nötig.

Vorteil / 02

Diff-bar in Git

Anders als KOP/AWL ist C#-Code reiner Text. Pull-Request-Reviews, Branch-Strategien und Merge-Konflikte funktionieren wie in klassischen IT-Projekten. Wer schon einmal zwei Binär-Projektstände nebeneinandergelegt hat, um eine verschwundene Änderung zu suchen, weiß, was das wert ist.

Vorteil / 03

Test-Automation

Wer den Steuerungs-Adapter hinter ein Interface legt, testet ohne reale SPS. Coverage ≥ 70 % auf der Daten-Mapping-Logik ist in jedem Projekt erreichbar.

Vorteil / 04

IT-Talente gewinnen

Junior-Entwickler von der Hochschule sind schnell produktiv. Sie kennen C# und Visual Studio, aber selten Structured Text oder KOP.

04
// 04Wann C# NICHT reicht

Drei Grenzen.
Ehrlich genannt.

C# ist kein Universal-Hammer. Diese drei Use-Cases bleiben IEC 61131-3.

Grenze / 01

Harte Echtzeit-Regler

Lageregler, Motion-Control unter 1 ms und Sicherheits-SPS nach IEC 61508/SIL2+ bleiben in IEC 61131-3, also in Structured Text in TIA Portal, CODESYS oder TwinCAT PLC.

Grenze / 02

Steuerungen ohne .NET-Runtime

Eine S7-1200 oder eine klassische CompactLogix hat keine .NET-Runtime. C# läuft hier nur als externer Kommunikations-Layer auf einem PC oder Edge-Device, nicht auf der Steuerung.

Grenze / 03

Zertifizierungs-Pflicht

SIL-zertifizierte Codebasen brauchen geprüfte Compiler und Toolchains. C# und .NET sind dort meist nicht zugelassen. Die Hersteller-IDEs der SPS liefern die zertifizierten Build-Strecken mit.

// 05Code-Beispiele S7 & ADS

Wie greift eine C#-Anwendung
auf eine Siemens S7 zu?

Über das S7-Protokoll, ohne OPC-Server und ohne Änderung am Steuerungsprogramm. Minimales C#-Beispiel: Verbindung zur S7-1500, einen DB-Wert lesen, einen Merker setzen. NuGet-Paket S7.NetPlus installieren und in einer Konsolen-Anwendung referenzieren. Dieser Ansatz ist die typische Einstiegsstufe in Industrial DevOps für den Maschinenbau.

Der Code unten läuft auf einem beliebigen Windows-/Linux-Host mit Netzwerkzugriff auf die Steuerung. Auf die SPS selbst wird nichts geladen, ihr Programm bleibt unverändert.

Was muss im TIA Portal eingestellt sein?

Bei S7-1200 und S7-1500 scheitert die erste Verbindung meist an zwei Einstellungen im Projekt, nicht am C#-Code.

  1. /01PUT/GET erlauben: in den Eigenschaften der CPU unter „Schutz & Security“ und „Verbindungsmechanismen“ die Option „Zugriff über PUT/GET-Kommunikation durch entfernten Partner erlauben“ setzen.
  2. /02Optimierten Bausteinzugriff abschalten: in den Eigenschaften des Datenbausteins unter „Attribute“. Erst dann haben die Variablen feste Offsets wie DBD0, die S7.NET adressieren kann. Danach übersetzen und laden.
  3. /03Netzwerk: TCP-Port 102 zwischen Host und Steuerung freigeben. Rack und Slot sind bei S7-1200 und S7-1500 in der Regel 0 und 1, bei der S7-300 0 und 2.

PUT/GET öffnet einen Zugang ohne Anmeldung. Innerhalb einer abgeschotteten Zelle ist das vertretbar, über Zonengrenzen nach IEC 62443 hinweg ist OPC UA mit Zertifikaten der bessere Weg (Abschnitt 07).

S7Reader.cs · S7.NetPlus
// dotnet add package S7netplus
using S7.Net;

// S7-1500: Rack 0, Slot 1 · TCP-Port 102
var plc = new Plc(CpuType.S71500, "192.168.0.10", 0, 1);
await plc.OpenAsync();

// DB1.DBD0 als REAL lesen. Typisiert über VarType.Real:
// ReadAsync("DB1.DBD0") liefert einen uint, kein float.
var temperature = (float)await plc.ReadAsync(DataType.DataBlock, 1, 0, VarType.Real, 1);
Console.WriteLine($"Temperatur: {temperature:F2} °C");

// Merker M10.0 setzen
await plc.WriteAsync("M10.0", true);

plc.Close();

S7.NetPlus 0.20 · NuGet · Open Source (MIT) · S7-1200/1500, S7-300/400, LOGO!

Wie greift C# über
TwinCAT ADS zu?

Bei Beckhoff läuft der Zugriff über ADS (Automation Device Specification), das interne Kommunikationsprotokoll von TwinCAT. Das NuGet-Paket Beckhoff.TwinCAT.Ads verbindet eine C#-Anwendung in Visual Studio mit der Runtime auf der Steuerung. Port 851 adressiert die erste SPS-Runtime, Variablen spricht der Code über ihren Symbolnamen an, nicht über Adressen. Details zur Plattform stehen im Glossar unter TwinCAT.NET und ADS.

Neben dem Handle-Zugriff unten steht der Symbol-Loader zur Verfügung. Er lädt den Symbolbaum der Steuerung zur Laufzeit, sodass eine Anwendung auch Variablen findet, deren Namen zur Compile-Zeit noch nicht feststehen. Für zyklisch wechselnde Werte lohnen sich ADS-Notifications statt Polling, weil die Runtime dann nur bei einer Änderung sendet. Die Trennung aus Abschnitt 02 gilt auch hier, denn die deterministische Task bleibt die SPS-Task und C# sitzt darüber.

AdsReader.cs · Beckhoff.TwinCAT.Ads
// dotnet add package Beckhoff.TwinCAT.Ads
using TwinCAT.Ads;

using var client = new AdsClient();
client.Connect(AmsNetId.Local, 851); // 851 = SPS-Runtime 1

// Symbol per Handle lesen
var h = await client.CreateVariableHandleAsync("MAIN.fTemperature", CancellationToken.None);
var temperature = await client.ReadAnyAsync<float>(h.Handle, CancellationToken.None);
Console.WriteLine($"Temperatur: {temperature.Value:F2} °C");

// Freigabe-Bit schreiben
var r = await client.CreateVariableHandleAsync("MAIN.bRelease", CancellationToken.None);
await client.WriteAnyAsync(r.Handle, true, CancellationToken.None);

Beckhoff.TwinCAT.Ads 7.0 · NuGet · TwinCAT 2 und 3 · ADS-Port 851

Welche Datentypen passen
zwischen S7 und C#?

Die einfachen Typen bilden sich direkt ab: INT auf short, DINT auf int, REAL auf float, LREAL auf double. Aufpassen müssen Sie bei Zeitstempeln und Zeichenketten, weil die Steuerung sie in eigenen Formaten ablegt. S7.NetPlus kennt dafür eigene Typen und rechnet die Byte-Reihenfolge der S7 selbst um.

Der häufigste Fehler betrifft den DTL. Wer ein DateTime direkt mit WriteAsync schreibt, erzeugt das acht Byte lange Format DATE_AND_TIME. Ein DTL belegt zwölf Byte, die Steuerung liest danach ein unsinniges Datum. Richtig ist der Umweg über DateTimeLong.ToByteArray und WriteBytesAsync.

Ganze Strukturen müssen Sie nicht Byte für Byte zusammensetzen. Eine C#-Klasse, deren Eigenschaften in Reihenfolge und Typ dem Datenbaustein entsprechen, liest ReadClassAsync in einem Aufruf. Zeichenketten in der Klasse brauchen das Attribut S7String mit der im Baustein reservierten Länge, sonst stimmen die Offsets der folgenden Felder nicht.

S7C#ByteHinweis
BOOLbool1 BitAdresse mit Bitnummer, z. B. DB1.DBX4.0
BYTE · USINTbyte1
INTshort2mit Vorzeichen
WORD · UINTushort2
DINTint4
DWORD · UDINTuint4Auch das, was ReadAsync("DB1.DBD0") zurückgibt
REALfloat4Typisiert über VarType.Real lesen
LREALdouble8S7-1200 und S7-1500
STRING[n]stringn + 2VarType.S7String, zwei Kopfbytes für Maximal- und Ist-Länge
WSTRING[n]string2n + 4VarType.S7WString, UTF-16
DATE_AND_TIMEDateTime8BCD-codiert, VarType.DateTime
DTLDateTime12VarType.DateTimeLong, gültig von 1970 bis 2262
S7Types.cs · DTL und Klassen
using S7.Net;
using S7.Net.Types;

// DTL (12 Byte) ab DB10.DBB0 lesen
var stamp = (System.DateTime)await plc.ReadAsync(DataType.DataBlock, 10, 0, VarType.DateTimeLong, 1);

// DTL schreiben: erst in 12 Byte wandeln, dann als Block schreiben
await plc.WriteBytesAsync(DataType.DataBlock, 10, 0, DateTimeLong.ToByteArray(System.DateTime.Now));

// DB20 komplett als Klasse lesen, ändern, zurückschreiben
var rezept = await plc.ReadClassAsync<Rezept>(20);
rezept!.Sollwert = 72.5f;
await plc.WriteClassAsync(rezept, 20);

public class Rezept
{
    public short Nummer { get; set; }     // INT
    public float Sollwert { get; set; }   // REAL
    [S7String(S7StringType.S7String, 20)]
    public string Charge { get; set; } = "";  // STRING[20]
}

S7.NetPlus 0.20 · DateTimeLong · S7String-Attribut · Big-Endian wird umgerechnet

Welche Libraries verbinden
C# mit der SPS?

Fünf Wege sind in der Praxis relevant: S7.NET für Siemens, Beckhoff.TwinCAT.Ads für TwinCAT, libplctag.NET für Rockwell sowie die herstellerneutralen Protokolle OPC UA und Modbus TCP. Die Hersteller-Libraries sind schneller angebunden, die neutralen Protokolle überleben den nächsten Steuerungswechsel.

Library / ProtokollSteuerungenWofür
S7.NetPlus / Sharp7SiemensDatenbausteine, Merker und Peripherie von S7-300/400, S7-1200/1500 und LOGO! lesen und schreiben, über das S7-Protokoll und ohne OPC-Server. Open Source.
Beckhoff.TwinCAT.AdsBeckhoffZugriff auf die TwinCAT-2- und TwinCAT-3-Runtime über ADS: Variablen per Handle oder Symbolname, Symbolbaum zur Laufzeit, Notifications statt Polling.
libplctag.NETRockwell, Omron, ModbusTag-basierter Zugriff auf ControlLogix, CompactLogix und Micro800 über EtherNet/IP. Open Source und herstellerübergreifend, ohne Rockwell-Lizenz auf dem Host.
OPC UA (.NET Standard Stack)herstellerneutralTypisierter Adressraum statt roher Adressen, dazu Authentifizierung und Verschlüsselung über X.509-Zertifikate. Erste Wahl bei gemischten Steuerungslandschaften.
Modbus TCP (NModbus, FluentModbus)herstellerneutralRegister- und Bit-Zugriff auf ältere Steuerungen, Frequenzumrichter und Feldgeräte. Wenig Struktur, dafür praktisch überall vorhanden.

Die Wahl entscheidet später über den Aufwand im Betrieb. Wer nur eine Siemens-Linie anbindet, kommt mit S7.NET am schnellsten zum ersten Wert. Wer mehrere Hersteller in einer Halle stehen hat, spart mit OPC UA als herstellerneutralem Protokoll die zweite und dritte Integration. Wie sich der Zugriff anschließend versionieren und automatisiert testen lässt, zeigt der Anwendungsfall CI/CD für SPS im Maschinenbau.

06
// 06CI/CD in 4 Wochen

Vom ersten Modul
zur Pipeline.

In unseren Projekten in vier Wochen umsetzbar, mit Standard-Toolchain und ohne Spezial-Setup. Die Leistung dahinter ist die CI/CD-Implementierung. Wie Comquent CI/CD für SPS & TIA Portal im Maschinenbau in realen Projekten aufbaut, zeigt der dazugehörige Anwendungsfall.

/01
Phase

Woche 1

Modul-Wahl & Library-Setup

Use-Case festlegen: HMI-Logik, OPC-UA-Gateway oder MES-Anbindung. NuGet-Pakete einbinden: S7.NETPlus für Siemens, Beckhoff.TwinCAT.Ads für TwinCAT, libplctag.NET für Multi-Vendor. Solution-Struktur mit Library-/Test-/Application-Project. .gitignore vorbereiten.

/02
Phase

Woche 2

Unit-Tests & Mocking

NUnit oder xUnit konfigurieren. Steuerungs-Adapter über Interface abstrahieren, damit Tests ohne reale SPS laufen. Coverage-Ziel: ≥ 70 % auf der reinen C#-Logik (Daten-Mapping, Protokoll-Adapter). Mocks für DB-Reads, Schreib-Operationen mit Test-Doubles.

/03
Phase

Woche 3

Build-Pipeline + statische Analyse

Jenkinsfile oder GitLab-CI mit MSBuild-Stage. Roslyn-Analyzer für Code-Quality, SonarQube für Coverage-Reporting. Signed-Build-Artefakt (Authenticode) für OT-Deployments. SBOM-Generierung mit CycloneDX für IEC-62443-Compliance.

/04
Phase

Woche 4

Integration-Tests gegen virtuelle SPS

PLCSim Advanced (Siemens) oder TwinCAT-Runtime im Container starten. Integration-Tests im CI gegen die virtuelle Steuerung: Read/Write-Zyklen, Datentyp-Konsistenz, Edge-Cases. Promotion auf Real-Hardware nur nach Pass. Der erste Lauf, der einen Datentyp-Fehler an der virtuellen Steuerung abfängt, bevor jemand zur Anlage fährt, ist meist der Moment, in dem das Team den Wert der vier Wochen sieht.

// 07Sicherheit & Compliance

.NET-Code in der OT:
was IEC 62443 verlangt.

Sobald C#-Code mit einer Steuerung kommuniziert, wird er zum Bestandteil der OT-Sicherheitszone. IEC 62443 stuft solchen Code als SL-relevant ein. Build, Lieferkette und Deployment müssen nachvollziehbar sein. Spätestens wenn der Auditor wissen will, welche NuGet-Pakete in welcher Version auf dem Gateway laufen, entscheidet die Pipeline, ob die Antwort ein SBOM-Export ist oder eine Woche Archäologie.

Die fünf Pflicht-Stages, die in jeder CI/CD-Pipeline für .NET-OT-Code laufen sollten, sind unten aufgeführt. Wie CI/CD für SPS-Projekte konkret aufgebaut wird, zeigt der Praxisartikel zu TIA Portal & Jenkins. Mit dem Cyber Resilience Act kommen ab Dezember 2027 zusätzliche SBOM- und Meldepflichten dazu.

  • /01

    Authenticode-Signatur

    Build-Artefakte mit gültigem Code-Signing-Zertifikat signieren. Manipulationsschutz und Lieferanten-Nachweis in einem.

  • /02

    SBOM (CycloneDX)

    Alle NuGet-Dependencies in einer CycloneDX-Software-Bill-of-Materials erfassen. Pflicht ab CRA Dezember 2027.

  • /03

    Statische Analyse

    Roslyn-Analyzer mit Security-Regeln aktivieren (z. B. SecurityCodeScan). SonarQube für zentrale Pflege der Regeln.

  • /04

    Dependency-Scan

    Trivy oder OWASP Dependency-Check gegen alle NuGet-Pakete. CVE-Treffer ab CVSS 7 blocken den Build.

  • /05

    Verschlüsselte Kommunikation

    Wo das Protokoll es zulässt: OPC UA mit X.509-Zertifikaten statt klassische S7-Telegramme über Plain-TCP.

// 08Häufige Fragen

FAQ: C# in der
SPS-Welt.

/01
Kann man eine SPS mit C# programmieren?
Den Steuerungscode selbst nicht, er wird nach IEC 61131-3 in Kontaktplan, Funktionsplan, Strukturiertem Text oder Ablaufsprache geschrieben. Mit C# schreiben Sie die Anwendung neben der Steuerung, die deren Variablen liest und schreibt. Verbreitet sind drei Wege: S7.NET oder Sharp7 für Siemens-S7-Steuerungen, Beckhoff.TwinCAT.Ads für den Zugriff auf die TwinCAT-Runtime über ADS und libplctag für Rockwell ControlLogix und CompactLogix. Herstellerneutral kommen OPC UA und Modbus TCP dazu. Logik mit harten Echtzeit-Anforderungen bleibt in der jeweiligen IEC-61131-3-Umgebung.
/02
Welche Programmiersprache für SPS?
Die Norm IEC 61131-3 kennt seit ihrer vierten Ausgabe von 2025 vier SPS-Programmiersprachen: Kontaktplan (KOP/LD), Funktionsplan (FUP/FBD), Strukturierter Text (ST/SCL) und Ablaufsprache (AS/SFC). Die frühere fünfte Sprache, die Anweisungsliste (AWL/IL), ist aus der Norm entfallen. C# steht nicht in dieser Liste. Es setzt eine Ebene darüber an, auf dem PC oder Edge-Device neben der Steuerung. Wer heute neu anfängt, schreibt die Steuerungslogik meist in Strukturiertem Text, weil er als Text vorliegt und Git ihn zeilenweise vergleichen kann. KOP bleibt in der Instandhaltung verbreitet, AWL steht nur noch in Bestandsprojekten.
/03
Hat die SPS-Programmierung Zukunft?
Ja. Jede Maschine braucht weiter eine Steuerung mit garantierter Zykluszeit, und die wird weiter nach IEC 61131-3 programmiert. Was sich ändert, ist das Umfeld. Steuerungscode liegt zunehmend als Text in Git, wird in einer Pipeline gebaut und gegen eine virtuelle Steuerung getestet, und neben der SPS wächst eine Schicht aus C#, Python und OPC UA für Daten, Gateways und MES. Gefragt sind deshalb Leute, die Strukturierten Text und eine Pipeline gleichermaßen lesen können. Mit dem Cyber Resilience Act kommen ab Dezember 2027 Nachweise über die Software der Maschine hinzu, die ohne versionierten Code kaum zu erbringen sind.
/04
Ist SPS-Programmierung schwer?
Die Sprachen der IEC 61131-3 sind in wenigen Wochen erlernbar. Schwer ist das Umfeld: Zykluszeiten, Verriegelungslogik, Sicherheitsfunktionen und der Umstand, dass ein Fehler eine Anlage stoppt, statt einen Prozess neu zu starten. Dazu fehlt in der Steuerungstechnik meist, was in der IT selbstverständlich ist, nämlich eine Testumgebung. Wer aus der IT kommt, unterschätzt selten die Syntax, sondern das Anlagenwissen dahinter. Genau hier hilft C#. Die Anwendungs- und Kommunikationsschicht in .NET lässt sich gegen eine virtuelle Steuerung wie PLCSim Advanced oder eine TwinCAT-Runtime im Container testen, ohne dass jemand an der Maschine steht.
/05
Wie lange dauert es, SPS zu lernen?
Die Grundlagen einer IEC-61131-3-Sprache wie Kontaktplan oder Strukturierter Text lernen Sie in wenigen Wochen, ein Grundkurs beim Hersteller dauert meist eine Woche. Eigene Anlagenteile sicher programmieren, mit Verriegelungen, Fehlerbehandlung und Inbetriebnahme, können die meisten erst nach mehreren Monaten in echten Projekten. Wer aus der Softwareentwicklung kommt, hat die Syntax schnell, braucht für Zykluszeiten, Sicherheitsfunktionen und das Verhalten der Anlage aber dieselbe Zeit an der Maschine wie alle anderen.
/06
Ist C# schwer zu lernen?
Für SPS-Programmierer mit Erfahrung in Strukturiertem Text ist der Einstieg überschaubar, weil beide Sprachen textbasiert sind und Datentypen, Schleifen und Funktionsaufrufe ähnlich funktionieren. Neu sind vor allem Objektorientierung, Namespaces, asynchrone Aufrufe und die Paketverwaltung über NuGet. Für ein erstes Modul mit S7.NET oder TwinCAT ADS reichen erfahrungsgemäß ein bis zwei Wochen, für produktionsreifen Code mit Tests, Fehlerbehandlung und Reconnect-Logik eher ein Quartal. Umgekehrt gilt dasselbe. C#-Entwickler lesen Strukturierten Text schnell, brauchen aber Zeit für Zykluszeiten, Verriegelungen und Inbetriebnahme.
/07
Ist C# noch aktuell?
Ja. C# erschien 2002 mit dem ersten .NET Framework und wird von Microsoft jedes Jahr weiterentwickelt. Mit .NET 10 ist im November 2025 die aktuelle Version mit Langzeit-Support erschienen, sie wird bis November 2028 gepflegt. In der Automatisierung ist C# verbreitet, weil Visual Studio dort ohnehin installiert ist: Beckhoff TwinCAT 3 baut darauf auf, TIA Portal Openness ist eine .NET-Schnittstelle, und die gängigen Bibliotheken für S7, ADS und OPC UA gibt es als NuGet-Paket. Für neue Projekte in der OT ist .NET 10 das passende Zielframework.
/08
Ist C# echtzeitfähig?
Nicht im Sinne harter Echtzeit: .NET läuft unter Windows oder Linux mit Garbage Collection und ohne garantierte Zykluszeit, Jitter im Millisekundenbereich ist normal. Für weiche Echtzeit reicht C# aus, also für Visualisierung, Datenerfassung und MES-Kopplung im 100-Millisekunden-Bereich. Für harte Echtzeit wie Motion-Control, Lageregler oder Sicherheitsfunktionen bleibt die Logik auf der Steuerung in IEC 61131-3. Beckhoff bindet .NET über ADS an die TwinCAT-Runtime an, die zyklische deterministische Task bleibt dabei die SPS-Task.
/09
Ist C# schneller als C++?
Bei reiner Rechenleistung liegen beide nahe beieinander; C++ ist bei speichernaher Verarbeitung im Vorteil, weil es ohne Garbage Collection auskommt. In der Steuerungstechnik entscheidet aber nicht der Durchsatz, sondern der Jitter. Eine Sprache taugt hier nur, wenn eine Zykluszeit garantiert ist. Das leistet weder C# noch C++ auf einem gewöhnlichen Windows oder Linux, denn harte Echtzeit kommt von der Laufzeitumgebung, nicht von der Sprache. Deshalb bleibt der zeitkritische Teil auf der SPS und dort in IEC 61131-3, während C# die Schicht darüber übernimmt.
/10
Was muss im TIA Portal eingestellt sein, damit C# auf eine S7 zugreifen kann?
Zwei Einstellungen: In den Eigenschaften der CPU unter „Schutz & Security“ und „Verbindungsmechanismen“ muss der Zugriff über PUT/GET-Kommunikation durch entfernten Partner erlaubt sein, und bei den Datenbausteinen, die C# liest oder schreibt, muss der optimierte Bausteinzugriff abgeschaltet sein, damit die Variablen feste Offsets haben. Zwischen Host und Steuerung muss außerdem TCP-Port 102 offen sein, Rack und Slot sind bei S7-1200 und S7-1500 in der Regel 0 und 1. PUT/GET kennt keine Anmeldung. Die Verbindung gehört deshalb in eine abgeschottete Zone, über Zonengrenzen hinweg ist OPC UA mit Zertifikaten der bessere Weg.
/11
Was ist S7.NET und wofür wird es eingesetzt?
S7.NET (auch S7.NETPlus oder Sharp7) ist eine offene C#-Library zur Kommunikation mit Siemens-S7-Steuerungen (S7-300/400, S7-1200/1500, LOGO!) über das S7-Protokoll. Typische Use-Cases sind HMI- und Visualisierungs-Anwendungen, OPC-UA-Gateways, MES-Anbindungen, Datenarchivierung und Edge-Datenvorverarbeitung. S7.NET läuft nicht auf der SPS, sondern auf Windows-/Linux-Hosts oder Edge-Devices und ist Read/Write-fähig gegen DBs, Merker und Peripherie.
/12
Was ist Beckhoff TwinCAT.NET?
TwinCAT.NET (offiziell TwinCAT.NET-Komponenten und Beckhoff.TwinCAT.Ads.NET) ist die offizielle Beckhoff-Library, mit der .NET-Anwendungen über ADS (Automation Device Specification) auf TwinCAT-Runtime und SPS-Variablen zugreifen. In Visual Studio lassen sich C#-Module schreiben, die mit der TwinCAT-3-Runtime zusammenarbeiten. Für IT-Entwickler ist das eine vertraute Umgebung. Bei harten Echtzeit-Anforderungen bleibt die Logik in TwinCAT-PLC (Structured Text), .NET-Komponenten ergänzen sie für nicht-zeitkritische Aufgaben.
/13
Wann lohnt sich C# statt KOP/AWL/ST in der SPS-Programmierung?
C# überzeugt für HMI-Logik, OPC-UA-Gateways, MES-Anbindungen, Datenarchivierung, Edge-Datenvorverarbeitung, herstellerunabhängige Tooling-Layer und Test-Automatisierung gegen virtuelle SPS. C# reicht nicht aus für: harte Echtzeit-Regler (Motion-Control, Lageregler unter 1 ms), Safety-relevante Logik nach IEC 61508/SIL2+ (dort bleibt zertifizierter IEC-61131-3-Code Pflicht), und Steuerungslogik auf Steuerungen ohne .NET-Runtime wie der S7-1200 oder einer klassischen CompactLogix.
/14
Wie versioniere ich C#-SPS-Code mit Git?
C#-Code für SPS-Anbindung wird wie normaler .NET-Code in Git versioniert: .gitignore mit Standard-VS-Einträgen (bin/, obj/, .vs/), Solution- und Projektdateien getrackt, NuGet-Pakete über PackageReference verwaltet. Trennung in Library (Steuerungs-Adapter), Application (HMI/Gateway) und Tests. Bei TwinCAT.NET-Projekten zusätzlich TcCOM-Komponenten und Generated-Code im .gitignore-Pattern ausnehmen. Pull-Request-Workflows funktionieren wie in klassischen IT-Projekten und sind viel einfacher als die Versionierung von KOP oder AWL, weil der Code als Text vergleichbar ist.
/15
Wie baut man eine CI/CD-Pipeline für C# in der OT?
Standard-Pipeline in vier Stages: (1) Restore: NuGet-Pakete cachen, (2) Build: MSBuild oder dotnet build, (3) Test: NUnit/xUnit + Coverage, (4) Package & Sign: Artefakt signieren (Authenticode), bei TwinCAT.NET zusätzlich TcCOM-Assembly bauen. Build-Agents müssen Windows mit installierten Visual Studio Build Tools haben. Als Zielframework gehört in neue OT-Projekte .NET 10 LTS, der Support für .NET 8 endet am 10. November 2026. Bei Integration-Tests gegen virtuelle SPS (PLCSim Advanced, TwinCAT-Runtime im Container) ist ein separater Test-Agent mit OT-Lizenz nötig.
/16
Welche Sicherheitsanforderungen gelten für .NET-Code in der OT?
IEC 62443 stuft Code, der mit Steuerungen kommuniziert, als SL-relevant ein. Konkrete Pflichten: (1) Signierte Build-Artefakte (Authenticode), (2) SBOM für alle NuGet-Dependencies (CycloneDX-Format), (3) statische Code-Analyse mit Security-Regeln (Roslyn Analyzers, SonarQube Security Hotspots), (4) Dependency-Scanning auf bekannte CVEs (z. B. Trivy, OWASP Dependency-Check), (5) verschlüsselte Kommunikation zur SPS, wo das Protokoll es zulässt (OPC UA mit X.509-Zertifikaten statt klassische S7-Telegramme).
/17
Welche Tools und Libraries für C#-SPS-Entwicklung 2026?
Siemens-Welt: S7.NETPlus (Open Source), Sharp7 (leichtgewichtig), Siemens Openness (für TIA-Portal-Automatisierung). Beckhoff: Beckhoff.TwinCAT.Ads (offiziell), TwinCAT.NET-Komponenten. Rockwell: Studio 5000 Logix Designer mit Component Object Model, libplctag.NET (Open Source, Multi-Vendor). Hersteller-übergreifend: OPC UA via OPC Foundation .NET Standard Stack. Test/Build: NUnit, xUnit, Roslyn Analyzers, SonarQube, Trivy, GitHub Actions oder Jenkins mit Windows-Agents.
// CI/CD für SPS

C# in der OT.
Pipeline in
4 Wochen.

Wir bauen Ihre erste CI/CD-Pipeline für .NET-Code in der Steuerungstechnik, mit S7.NET, TwinCAT.NET oder Multi-Vendor über libplctag. Standard-Toolchain, signierte Artefakte, virtuelle SPS-Tests. Der Einstieg ist unverbindlich: Ein fachliches Erstgespräch von 30 Minuten reicht, um den passenden Pfad für Ihre Steuerungslandschaft einzugrenzen.

// +Weiterlesen
// Ihr nächster Schritt1 Klick, anonym

Wie geht es bei Ihnen mit C# in der OT weiter?

Sagen Sie uns mit einem Klick, wie es bei Ihnen weitergeht. Passend dazu bekommen Sie direkt einen konkreten nächsten Schritt — ganz ohne Formular.

// Nächster Schritt

Erstgespräch.
90 Tage zum Ergebnis.

Wir klären gemeinsam, wie Sie in 90 Tagen die ersten messbaren Industrial-DevOps-Erfolge erzielen.

Persönliches Erstgespräch buchen
Seit 2006 · 47+ Projekte
Industrie · Automotive · Finance