spiritdev

Was in der Steuerung wirklich steht

Wie aus einem Diagnosewerkzeug für ein Kundenprojekt ein eigenes Produkt wurde: PLC-Inspector

Florian Cremer
Florian Cremer
Illustration: Auf einem Holztisch steht ein dunkles Steuerungsmodul in Petrol auf einem kurzen Stück Hutschiene. Seine Front zeigt ein Raster kleiner, türkis leuchtender Speicherzellen, von denen eine einzelne warm orange leuchtet. Ein petrolfarbenes Netzwerkkabel führt vom Modul zu einem aufgeklappten Laptop mit dunklem Display. Links eine Topfpflanze mit breiten Blättern, im Hintergrund ein weich unscharfes Büro mit petrolfarbenen Wänden und großen Fenstern. Sinnbild für den direkten Blick in den Speicher einer Steuerung.

Eine Anlage tut nicht das, was sie soll. Das Tor bleibt zu, der Wert stimmt nicht, irgendetwas hängt.

Jetzt beginnt das Rätselraten. Liegt es an der Steuerung? An der Verkabelung? An der App, die die Steuerung bedient? Oder an einem Parameter, den vor drei Monaten jemand anders gesetzt hat?

Solange niemand sieht, was tatsächlich im Speicher der Steuerung steht, ist jede Antwort eine Vermutung.

Genau dafür haben wir PLC-Inspector gebaut.

Entstanden ist er nebenbei

PLC-Inspector war nie als Produkt geplant. Er entstand während der Arbeit an Lift Gate Control, der App, die wir für RMP-Tec zur Steuerung von Hubtoren in Melkanlagen entwickelt haben.

Dort saßen wir vor derselben Frage wie jeder Techniker vor Ort. Die App sendet einen Befehl, die Anlage reagiert nicht wie erwartet, und im Speicher der Siemens LOGO! liegt die Antwort. Nur kommt man an sie ohne Werkzeug nicht heran.

Also haben wir uns eins gebaut. Erst für uns. Dann ist daraus eine eigene App geworden, weil das Problem nicht unseres allein ist. Jeder, der eine LOGO! 8 in Betrieb nimmt, kennt es.

Was die App macht

PLC-Inspector liest den Speicher einer Siemens LOGO! 8 live aus, über Modbus/TCP, direkt im Netz. Kein Gateway, keine Hersteller-Cloud, kein Zwischenserver.

Sichtbar wird:

  • VM Memory, der Variablenspeicher mit seinen 426 Registern
  • Analoge Eingänge AI1 bis AI8 und analoge Ausgänge AQ1 bis AQ2
  • jeder 16-Bit-Wert gleichzeitig dezimal, hexadezimal und binär
  • die einzelnen Bits eines Registers, hervorgehoben und lesbar
  • Wertänderungen, die beim Aktualisieren farblich markiert werden
  • mehrere Stationen nebeneinander, gespeichert mit Name, Adresse, Port und Offset

Dazu ein einstellbares Aktualisierungsintervall, damit man einen Wert beim Umschalten der Anlage einfach beobachten kann.

PLC-Inspector auf dem Mac: links die Liste der gespeicherten SPS-Stationen mit Name und Adresse, rechts die Registertabelle des VM-Speichers mit Adresse, Hex-Wert, Dezimalwert und den sechzehn einzelnen Bits je Register. Die Zeile VW30 ist orange hinterlegt, weil sich ihr Wert gerade geändert hat, gesetzte Bits sind grün markiert.

Die App läuft auf macOS und iOS. Am Schreibtisch auf dem Mac, im Schaltschrank auf dem iPhone.

PLC-Inspector auf dem iPhone: dieselbe Registertabelle in der mobilen Ansicht, mit Speicherbereich, Startadresse, Anzahl der Register, Auto-Aktualisierung und Schreibmodus im Kopfbereich. Die geänderten Zeilen VW30 und VW44 sind orange hervorgehoben.

Eine Einschränkung nennen wir offen, weil sie wichtig ist: Unterstützt wird die LOGO! 8, Modell 0BA8. Ältere LOGO!-Generationen bis Version 7 haben schlicht kein Modbus/TCP-Interface. Da hilft keine App.

Version 1.1: Schreiben, mit Absicht unbequem

Bisher konnte der Inspector nur lesen. Mit Version 1.1 kann er auch schreiben. Einzelne Halteregister lassen sich direkt setzen, über Modbus Function Code 0x06, mit Prüfung der Echo-Antwort.

Eine Entscheidung dabei ist erklärungsbedürftig. Denn sie sieht auf den ersten Blick aus wie ein fehlendes Feature.

Beim Schreiben gibt es keinen automatischen Wiederholversuch.

Beim Lesen ist ein zweiter Versuch harmlos. Man fragt denselben Wert noch einmal ab, mehr passiert nicht. Beim Schreiben ist das anders. Ein wiederholter Schreibbefehl an eine SPS kann einen realen Vorgang ein zweites Mal auslösen. Ein Tor, das zweimal fährt. Eine Pumpe, die zweimal anläuft.

Deshalb bleibt der Wiederholversuch aus. Stattdessen gibt es einen eigenen Schreibmodus und eine Rückfrage vor dem Schreiben, die sich für die laufende Sitzung abschalten lässt, wenn jemand konzentriert arbeitet.

Wer Software für Anlagen baut, die sich bewegen, muss an dieser Stelle konservativ sein. Bequemlichkeit ist hier das falsche Ziel.

Ein Fehler, den kein Test gefunden hat

Zur Ehrlichkeit gehört auch das hier.

Die Registertabelle hat lange Zeit keine aktualisierten Werte angezeigt. Manueller Refresh, automatisches Aktualisieren, die Hervorhebung von Änderungen. Alles betroffen. Also genau die Kernfunktion eines Werkzeugs, dessen einzige Aufgabe es ist, Werte anzuzeigen.

Die Ursache lag in zwei widersprüchlichen Identitäten innerhalb einer SwiftUI-Liste. Die Liste bekam bei jeder Aktualisierung neue Kennungen, die Zeilen darin wurden über ihre Position identifiziert. Das Framework hat daraufhin die alten Inhalte behalten.

Sämtliche Unit-Tests waren dabei grün.

Aufgefallen ist der Fehler beim Durchklicken der laufenden App auf einem echten Gerät. Nicht im Simulator, nicht in der Testsuite, nicht beim Draufschauen.

Daraus ist bei uns eine feste Regel geworden. Vor jeder Store-Einreichung wird die App auf echtem iPhone und echtem iPad von Hand bedient, einmal komplett durch die Kernfunktion, zusätzlich mit großer Systemschrift. Grüne Tests sagen etwas über die Logik. Über die Anzeigeschicht sagen sie nichts.

Was der Inspector den anderen Apps beibringt

Der Inspector liest bis zu 125 Register am Stück. Eine Antwort darauf kann knapp 260 Byte groß sein. Über TCP kommen solche Antworten regelmäßig in mehreren Teilen an.

Lift Gate Control ist dieses Problem nie begegnet. Dessen Frames sind rund 20 Byte groß und passen praktisch immer in ein Paket.

Für den Inspector mussten wir die Kommunikation deshalb härten:

  • Die Antwort wird erst ausgewertet, wenn sie anhand des Längenfelds im Protokollkopf vollständig ist.
  • Die Kennung der Antwort wird gegen die gesendete Anfrage geprüft. Es zählt nur, was zur eigenen Frage gehört.
  • Abgeschnittene Fehlerantworten werden sauber behandelt statt fehlinterpretiert.

Diese Härtung wandert jetzt zurück nach Lift Gate Control. Nicht weil dort etwas kaputt wäre. Sondern weil dieselbe Kommunikationsschicht in mehreren Produkten steckt und jede Verbesserung an einer Stelle allen anderen zugutekommt.

Die Schicht darunter ist das Älteste an der Sache

Unter allen unseren Apps für Steuerungen liegt dieselbe Kommunikationsschicht: Verbindungsaufbau, Frame-Erzeugung, Timeouts, Wiederholversuch bei besetzter Leitung, Auswertung der Antwort, verständliche Fehlermeldung nach oben.

Entstanden ist sie ab 2011 für unsere Home-Automation-Apps PLC Smart Home und deren Nachfolger Neon Home. Zunächst für Mitsubishi-Steuerungen, mit eigenem Frame-Format und eigener Adressarithmetik. Später kamen die Millenium-Steuerungen von Crouzet dazu. Vor rund zehn Jahren haben wir die Schicht auf Modbus ausgebaut und dafür optimiert. Damit war sie nicht mehr an eine Steuerungsfamilie gebunden.

Seitdem hat sie eine Reihe weiterer Apps getragen. Darunter eine Demo-App, mit der auf einer Messe die Steuerung von Brandschutztoren vorgeführt wurde, ebenfalls über SPS-Stationen und dasselbe Kommunikationsmodul.

Über die Jahre ist sie dabei nie stehen geblieben. Jede neue Anlagenfamilie, jede Eigenheit im Antwortverhalten und jede Änderung an den Frameworks von Apple und Google ist eingearbeitet worden. Das Ergebnis ist keine Bibliothek von der Stange. Sondern erprobte, sehr schnelle Routinen, die im industriellen Umfeld über Jahre gelaufen sind und dort zuverlässig arbeiten.

Drei Apps, die heute darauf stehen

  • Neon Home, früher PLC Smart Home, seit 2011 in Entwicklung. Bedient Rollladen, Licht, Dimmer und Heizung über die Steuerung im Keller. Diesen Sommer von Grund auf modernisiert.
  • Lift Gate Control, im Auftrag von RMP-Tec entwickelt. Bedient Hubtore in Melkanlagen über eine Siemens LOGO! 8.
  • PLC-Inspector, der jüngste der drei, entstanden als Werkzeug im Lift-Gate-Control-Projekt. Bedient nichts. Sondern zeigt, was drinsteht.

Die ersten beiden bedienen eine Anlage. Der dritte erklärt sie.

Das ist der eigentliche Wert aus fünfzehn Jahren. Die Domäne wechselt. Rollladen, Hubtor, Registerspeicher. Die Kommunikation bleibt.

Kleinigkeiten, die trotzdem zählen

Zwei Dinge aus Version 1.1, die keine Schlagzeile hergeben und den Unterschied trotzdem machen.

Wir haben die Mindestanforderung deutlich gesenkt, auf iOS 17 und macOS 14. Vorher stand dort ein Wert, der den erreichbaren Gerätebestand ohne Not klein gehalten hat. In der Industrie steht selten das neueste Gerät im Schrank.

Und wir haben aus der Store-Beschreibung entfernt, was nicht stimmte. Dort stand, Wago-Steuerungen würden unterstützt. Dafür gibt es im Inspector keinen Code. Jetzt steht dort, was tatsächlich zutrifft: Siemens LOGO! 8 (0BA8).

Die App gibt es in zehn Sprachen. Version 1.1 ist seit dem 16. August 2026 im Mac App Store und seit dem 17. August 2026 im App Store für iPhone und iPad verfügbar.

Sie bauen Steuerungen und brauchen die App dazu?

Wir entwickeln Apps, die mit echter Hardware sprechen. Steuerungen, Maschinen, Sensoren. Nativ für iOS, macOS und Android, direkt über Modbus/TCP, ohne Umweg über eine fremde Cloud.

Typische Ausgangslagen, die wir kennen:

  • Ein Steuerungsbauer will seinen Kunden eine eigene App mitgeben statt ein Fremdprodukt zu empfehlen.
  • Eine bestehende Anlage soll mobil bedienbar werden.
  • Ein Servicetechniker braucht ein Diagnosewerkzeug, das genau zu den eigenen Anlagen passt.

Sprechen Sie uns an. Ein erstes Gespräch kostet nichts und klärt meist schon, ob der Weg über eine eigene App der richtige ist.


PLC-Inspector für Mac und iPhone:

Alles zur App, alle Funktionen und die Systemvoraussetzungen stehen auf plc-inspector.com.

Laden im App Store

Von der Idee bis in den App Store begleiten wir den ganzen Weg: Individuelle Softwareentwicklung

Themen wie diese in der Praxis?

Lassen Sie uns 30 Minuten darüber sprechen - kostenlos und unverbindlich.