Software Resilienz im SPS-/Produktionsbereich

Zuviel Werbung?
-> Hier kostenlos registrieren
Interessant PLCOpen hat vorgestern ein Dokument zu dem Thema raus gebracht.


Scheint wohl nicht nur mich zu interessieren😁
Die Sau wird halt grad durchs Dorf getrieben...

Stell doch einfach mal ein Programm von Dir hier ein, vielleicht gibt Dir jemand Verbesserungsvorschläge.
 
Als ich angefangen habe, hat mir ein erfahrener Programmierer gesagt: "Der Quellcode selbst ist genug Kommentar!" 😉
Grundsätzlich stimmt das auch. Das Programm ansich sollte durch Struktur und Variablennamen und Netzwerktitel und Bausteinnamen etc. selbsterklärend sein. Trotzdem sollte man abundzu zumindest bei Sonderlocken im Kommentar vermerken, warum man hier dies oder jenes tut...

Solchen Quatsch hier kann man aber lassen:
Code:
U Pu1.Stoe // Pumpe 1 Störung
O Pu2.Stoe // Oder Pumpe 2 Störung
...

Zu viele Kommentare haben die Eigenart, bei Änderungen der Logik während IBN oder später nicht mitgeändert zu werden.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Was gibt’s da zu Lachen?
Gerade bei Inbetriebnahmen kommt man doch mit einigen anderen Programmierern zusammen.
Und die wenigsten die ich kennengelernt habe sind menschenscheue Fachidioten.
Das er da ein bisschen lächelnd kann Ich verstehen,
Programmierer sind zwar keine Fachidioten, aber oft
Eigenbrödler vor den Herren. Jeder kann es besser!
Das merkt man ja schon in jedem Thread wo es um
Programmierstile geht, auch hier.

Liegt vielleicht in der Natur des Jobs, oft werden Sie
als Feuerwehr ausgenutzt, um Unklarheiten oder Fehl-
konstruktionen zu beseitigen, sind dann unter Umständen
Wochenlang alleine oder mit einen Mechaniker auf der Baustelle
und kämpfen gegen Windmühlen.

Die Teamarbeit fängt ja nicht nur bei den Programmierern an,
sondern im Vertrieb.
  • Ist die Maschine / Anlage zum angemessenen Preis verkauft
  • Sind die Termine Realistisch
  • Sind alle Informationen im Haus und auch verteilt
  • Entspricht das was verkauft ist den Anforderungen des Kunden
Dann geht es in die Konstruktion Sphäre, üblicherweise Arbeiten da
alle beteiligten anneindar vorbei
  • Werden alle Gewerke der Konstruktion an der Konzeptfindung beteiligt
  • Arbeiten diese Gewerke als Team zusammen oder konstruiert jeder
    für sich an den anderen vorbei
  • Gibt es Zeitpläne und wird versucht sich dran zu halten
  • Sind die Konstrukteure auf dem Stand der Technik oder alte Hasen und
    verweigern sich in der persönlichen Weiterendwicklung
  • Entspricht das was Konstruiert wurde den Anforderungen des Kunden
Dann geht es irgendwann in die Fertigung
  • Haben die Jungs und Mädels Bock auf das Projekt, bringen sich ein
    und kommunizieren mit der Konstruktion
  • Arbeiten Sie sauber oder rotzen, das was konstruiert ist nur so da hin
  • Bemerken Sie während des Schraubens, da passt etwas nicht oder der
    Kollege hat etwas falsch zusammengeschraubt und es wird korrigiert
  • Entspricht das zusammengebaute den Anforderungen des Kunden
Ist die Abnahme mit Hängen und würgen erfolgt geht es auf die Baustelle
  • Ist die Baustelle gut vorbereitet
  • Sind die Monteure gut und motiviert
  • Ist ausreichend Zeit für die Aufstellung geplant
  • Können die Monteure die Maschine aufstellen oder sind Sie überfordert
  • Haben die Monteure auch Bock auf die Anlage und den Kunden bzw. das Land
  • Hat der Kunde Bock auf die Maschine
  • Können die Monteure die Betreiber gut schulen
  • Entspricht das aufgestellte den Anforderungen des Kunden
Was hat das jetzt mit der Programmierung zu tun?
Eine ganze Menge, passt es oben nicht kannst du
Programmieren so sauber und fehlerfrei wie du willst,
es wird nichts helfen.

Code:
ShitOut := ShitIn;

Fehler werden zurrest immer am Programm gesucht, weil
es für die anderen am wenigsten greifbar und augenscheinlich
wenig Arbeit bereitet.

Dann wirst du es als Programmierer auf der Baustelle immer versuchen irgendwie
hinzu Fummeln, schmierst in deinen noch so schönen Programm rum, weil es
ohne Flex und Schweißgerät geht. Am Ende ist es wieder ein Kunstwerk.
Künstler sind immer Merkwürdig
 
Zuletzt bearbeitet:
Zur Softwarequalität ansich, jemand der sich damit auskennt sollte nen Standardprogrammierstil bzw. Standardbausteine entwickeln, die dann für einen Kunden oder die Automatisierungsfirma einheitlich gelten und über Jahre fix bleiben.

Dann den Programmierer darauf schulen, eindeutige, umfägliche Vorgaben für die Funktion geben, genügend Zeit für Softwareerstellung und Inbetriebnahme zur Verfügung stellen.

Was ich halt noch mache, vor der Inbetriebnahme die Software und HMI im Büro mit ner kleinen Minisimulation ordentlich durchtesten...
 
Zuletzt bearbeitet:
Zur Softwarequalität ansich, jemand der sich damit auskennt sollte nen Standardprogrammierstil bzw. Standardbausteine entwickeln, die dann für einen Kunden oder die Automatisierungsfirma einheitlich gelten und über Jahre fix bleiben.
Und die Anforderung über einen einheitlichen Programmierstil und das jeder alle Programme verstehen sollte, halte ich für unmöglich. Warum sollte jemand, der Palettentransport programmiert ein SPS Programm z.b. einer größeren Abfüllanlage verstehen. Dazu gehören ja auch sehr viele spezifische Sachkenntnisse. Anders herum genauso. Beide Seiten müssten sich einarbeiten und von einem Programmierer über Besonderheiten informiert werden ( bei größeren Änderungen ). Außer man ändert nur eine Bitmeldung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und die Anforderung über einen einheitlichen Programmierstil und das jeder alle Programme verstehen sollte, halte ich für unmöglich. Warum sollte jemand, der Palettentransport programmiert ein SPS Programm z.b. einer größeren Abfüllanlage verstehen. Dazu gehören ja auch sehr viele spezifische Sachkenntnisse. Anders herum genauso. Beide Seiten müssten sich einarbeiten und von einem Programmierer über Besonderheiten informiert werden ( bei größeren Änderungen ). Außer man ändert nur eine Bitmeldung.
Ja natürlich ist das stark Branchenabhängig!
Üblicherweise (sinnvollerweise) wechselt aber der Programmierer bzw. die Automatisierungsfirma nicht jede Woche die Branche.
Fertigungsautomatisierung ist was ganz anderes als Prozessautomatisierung. Und ne Brauerei was anderes als nen Zementwerk. Und nen Fertigungsroboter was anderes als ne CNC-Fräse. Mit jeweils passenden Werkzeugen und Programmierstilen und Standards.
 
Üblicherweise (sinnvollerweise) wechselt aber der Programmierer bzw. die Automatisierungsfirma nicht jede Woche die Branche.
Damit meinte ich auch die Leute, die einem was von einheitlichen Code erzählen, den jeder lesen und verstehen kann. Egal aus welcher Branche.
Üblicherweise sind diese Leute gar keine Programmierer oder im ersten Jahr ( oder Marketingler einer Firma die mit G anfängt ).
 
Auch Spaghetticode in FUP ohne OOP ist ein Programmierstandard ;) und wenn der nicht wirr ist, in der Regel auch nachvollziehbar und gut beobachtbar 🤷‍♂️
Wenn Du in nem Werk 1000 SPSn hast, über 50 Jahre gewachsen, von 100 Lieferanten, von 10 SPS Herstellern, über mehrere Steuerungsgenerationen, ohne eigene Werksnorm... dann brauchst über Programmierstile und Standardisierung eh nicht mehr reden... Sowas muss sehr langfristig angelegt sein. Und neue Werke auf der grünen Wiese gibts in Deutschland eh nur sehr selten....

Also wie immer, die Diskussion ist ziemlich müßig 🤷‍♂️
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin auch schon an viele fremde SPS-Programme herangekommen, sei es zur Fehlerbehebung, zur Erweiterung oder Optimierung.
Ich kann nur Blockmove aus vollem Herzen zustimmen:
Es gibt Programmierer, die haben das Talent schönen Code zu schreiben. Programm öffnen und sich wohlfühlen.
Es gibt andere, da machst du das Programm auf und fragst dich ob es überhaupt zu der Anlage gehört.

Meine Erfahrung möchte ich dabei so zusammenfassen:
Geht es um Maschinen (auch Sondermaschinen), die von Firmen gebaut werden, die solche Art Maschinen als Haupteinnahmequelle bauen, ist der Code meistens grottenschlecht. Was sich dann auch wieder nach außen auswirkt, weil das Personal dann sagt: Die Maschine lief noch nie fehlerfrei bzw. der Inbetriebnehmer hat monatelang an der Anlage gesessen und Fehler gesucht bzw. behoben.
Das geht über Bausteine, die nur in AWL ohne jeglichen Kommentar vorhanden sind über Bausteine, die per Instanzdaten verschaltet werden anstatt über In/Outs bis zu unverständlichen Spaghetticode. Oder "Handshakesignale", die nach Zeit x automatisch zurückgesetzt werden, ohne zu wissen, ob die Gegenstelle die registriert hat.
Grund sind hier eben der wiederverwendete Code (ohne daß dieser auch in Jahrzehnten mal überarbeitet, verbessert oder kommentiert wurde), sowie interne "Vorschriften", die dann aber auch nur die internen Mitarbeiter verstehen, oder aber Werkstudenten in solchen Läden: Du machst das schon, mach das mal so wie in Anlage XY, dann klappt das schon. Oder eben auch Zeitmangel, weil der Vertrieb sagt: Sowas haben wir doch schon X Mal gebaut, da kann doch die Programmierung nicht so lange dauern. Also wird der Code hingerotzt.

Ist eine Anlage individuell programmiert, weil es ein Einzelstück ist, wird der Code von Grund auf geschrieben und ist meistens auch strukturiert, kommentiert und man "fühlt sich wohl" darin.
Der Grund ist eben, daß der Programmierer sich für genau diese Anlage Gedanken macht und das Programm auch entsprechend aufbaut. Oft gibt es dann auch nicht den Baustein, den man aus seiner eigenen Bibliothek wiederverwenden kann, den eierlegenden Wollmilchbaustein. Dadurch wird das Programm übersichtlicher. Meistens ist hier dann auch die entsprechende Zeit im Projekt einkalkuliert und man setzt nicht "mal eben" einen Werksstudenten dran.

Klar hat jeder Programmierer seine Eigenarten. Klar sagt man bei dem ein oder Anderen: Was hat der da gemacht? Aber das ist bei jedem Handwerker so und schlußendlich gibt es viele Wege nach Rom.
Was ich aber denke, was ausschlaggebend ist, ist immer die Vorgeschichte zum Programm, wie auch @rostiger Nagel in #43 schreibt. Da kommt vieles zusammen:
Ist eine realistische Zeit für die Programmierung (und ihrer Planung) einkalkuliert?
Werden die "richtigen" Personen mit der Erstellung beauftragt?
Ist die Mechanik korrekt geplant und ausgereift oder muß der Programmierer die Mängel der Mechanik ausgleichen?
Hat der Kunde korrekte Vorgaben gemacht oder soll die Maschine nach IBN völlig andere Anforderungen (zusätzlich) erfüllen, als bei Bestellung?
Wer pflegt das Programm? 1, 2, 3 Personen oder jede Woche jemand Anderes?

Hallo Zusammen,

Gerne würde ich mit euch das Thema Software Resilienz im Bereich SPS diskutieren!

Glaub ihr es ist ein Bereich der für SPSen Sinn ergibt? Glaub ihr es gibt generell Programmierstrategien die eine Software stabiler macht? Und glaubt ihr es ist messbar, wenn man diese anwendet?


Ich habe sehr oft den Eindruck, dass in meinem Bereich so programmiert wird: "Hauptsache die Anlage läuft und besteht die Abnahme - egal wie!"

Auch jeder programmier hat seinen eigenen Stil und hält den für den besten!?

Aber gibt es Herangehensweisen die man Newbys mitgeben kann, damit eine Software stabiler läuft? Und welche sind diese?


Freue mich auf eure Ideen!

Ich denke "Sinn" macht es, sich mit dem Thema zu beschäftigen, genauso wie "Styleguides" Sinn machen.
Am Ende muß aber lesbarer Code herauskommen, egal wie die Variablen benannt sind oder das Programm aufgebaut ist. Signale müssen nachvollzogen werden können, Signalwege müssen klar sein, Code sollte durch Einrücken und Kommentare strukturiert werden, Netzwerke Überschriften bekommen.

Ich glaube, die beste Programmierstrategie ist die, daß die Zeit für die Programmierung realistisch kalkuliert wird und der Programmierer vor Beginn seiner Arbeit einmal in sich geht und überlegt, wie er das Programm am besten aufbauen kann und nicht einfach drauf losprogrammiert und vor allem, daß die Anforderungen an die Mechanik und das Programm eindeutig formuliert sind. Denn was nützt mir das schönste Programm, wenn ich am Ende alles umstricken muß, von hinten durch die Brust ins Auge, weil die Anforderungen der Mechanik oder des Kunden sich plötzlich völlig verändern.
 
Und die Anforderung über einen einheitlichen Programmierstil und das jeder alle Programme verstehen sollte, halte ich für unmöglich. Warum sollte jemand, der Palettentransport programmiert ein SPS Programm z.b. einer größeren Abfüllanlage verstehen.
Das sehe ich jetzt nicht so.
Die Basis der allermeißten Programme sind doch wohl Abläufe - also normalerweise Schrittketten.
Hier allerdings scheiden sich dann schon wieder die Geister in der Umsetzung :
- Graph (Siemens)
- "Merker"
- CASE (SCL / ST)
Danach kommt dann die Doku der Schritte - auch so ein Thema ...
Dann : wie werden von der Schrittkette die Aktionen geschaltet ? Direkt am Schritt ? Oder gesammelt am Ende (mein Favourit).

Bei speziellen Berechnungen (egal welcher Art) oder Regelungen gebe ich dir natürlich Recht - die sind aber meißtens (hoffentlich) in sich gekapselt und damit dann ggf. mit Erklärung dazu auch nachvollziehbar zu machen ...

Dazu gehören ja auch sehr viele spezifische Sachkenntnisse.
Die Kenntnis um die Maschine selbst und deren Abläufe und was wie zusammengehört setze ich hier natürlich auch voraus ...
 
Die Basis der allermeißten Programme sind doch wohl Abläufe - also normalerweise Schrittketten.
Da geht es doch schon los. Bei unseren Palettentransportanlagen wirst du keine einzige Schrittkette finden sondern einen FB pro Band.
Und in dem FB gibt es keine Schrittketten sondern nur logische Verknüpfungen. Nur mal so als Beispiel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da geht es doch schon los. Bei unseren Palettentransportanlagen wirst du keine einzige Schrittkette finden sondern einen FB pro Band.
Genau - unterschiedliche Vorgehensweisen ...
würde ich z.B. in keinem Fall so machen - ich hätte immer eine Schrittkette, die von Segment 1 nach Segment 2 übergibt - ggf. als eigenständigen parametrierbaren FB. Und das dann so oft wie Segment-Übergaben gibt ... (nach meiner Erfahrung ist das für den Instandhalter auch nachvollziehbarer)
 
Jeder kann es besser!
Das merkt man ja schon in jedem Thread wo es um
Programmierstile geht, auch hier.
... da hast du (leider) Recht ... wobei das ja eigentlich gar nicht das Thema dieses Thread ist (auch wenn ich da jetzt auch drauf eingestiegen bin).
Das Thema war ja "stabile Programme" und das ist vom Programmierstil erst mal unabhängig ...
 
... da hast du (leider) Recht ... wobei das ja eigentlich gar nicht das Thema dieses Thread ist (auch wenn ich da jetzt auch drauf eingestiegen bin).
Das Thema war ja "stabile Programme" und das ist vom Programmierstil erst mal unabhängig ...
Ich bin der Meinung, das eine hängt mit dem Anderen zusammen und kann (oder sollte) nicht einzeln betrachtet werden.
Die Resilienz bedeutet ja eben, daß es "Fehler" (welcher Art auch immer) aushalten kann.
Die beste Resilienz ist bei einem solch "stabilen" System wie einer SPS ja, in erster Linie eigene Fehler zu vermeiden. In zweiter Linie, äußere zu erwartende Fehler abzufangen.
Die eigenen Fehler zu vermeiden hängt meiner Meinung nach aber mit der Art und Weise der Programmierung zusammen. Wenn schon der Ersteller unübersichtlich programmiert, erkennt er selber nicht, ob er initialisiert, über Array-Grenzen schreibt, Variablen doppelt belegt/benutzt, Speicherbereiche überlappt.... Und wenn dann die erste Softwarepflege durch eine 2. Person erfolgt und diese nicht durch das Programm steigt, ja, wie soll diese Person dann Fehler ausschließen?

Für mich gehört das zusammen, denn ohne eine Strategie (über deren Art man sich dann wiederum trefflich streiten kann) bekomme ich keine Härtung gegen Fehler.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@JSEngineering :
Jetzt wäre ich aber nicht so vermessen zu sagen, dass ein Programm, nur weil es nicht meinem Programmierstil entspricht, schlechter ist als eines für dieselbe Aufgabe von mir.
Um bei dem konkreten Beispiel zu bleiben (von @DeltaMikeAir ) kann ich mir schon gut vorstellen, dass die Programme von denen auch durchaus nachvollziehbar sind und stabil laufen ... Von meinen eigenen Werken mal nicht zu reden ... :cool:
 
... als Ergänzung zu Allem :
Aber natürlich bin ich (auch) schon an Maschinen gekommen, die nicht gut liefen und das Programm sooo grottig war, dass ich es kurzerhand weggeschmissen habe und es nach eigenen Vorstellungen neu gemacht habe. Danach war dann Frieden im Haus.
Das ist natürlich nur als Mitarbeiter im eigenen Haus so möglich ...
 
@JSEngineering :
Jetzt wäre ich aber nicht so vermessen zu sagen, dass ein Programm, nur weil es nicht meinem Programmierstil entspricht, schlechter ist als eines für dieselbe Aufgabe von mir.
Um bei dem konkreten Beispiel zu bleiben (von @DeltaMikeAir ) kann ich mir schon gut vorstellen, dass die Programme von denen auch durchaus nachvollziehbar sind und stabil laufen ... Von meinen eigenen Werken mal nicht zu reden ... :cool:
Das habe ich ja auch nicht gesagt :D

Ich hab weder gesagt, daß eine Strategie besser ist als die andere.
Nur ich habe Deinem Satz widersprochen, daß das Thema "stabile Programme" unabhängig vom Programmierstil ist.
Der Stil trägt meiner Meinung essentiell dazu bei, ein Programm zu stabilisieren.

Ob das nun durch Schrittketten oder übersichtliche logische Verknüpfungen geschieht, sei dahingestellt, so lange es übersichtlich und nachvollziehbar ist, was dann wieder der Programmierstil ist.
 
@JSEngineering :
Jetzt wäre ich aber nicht so vermessen zu sagen, dass ein Programm, nur weil es nicht meinem Programmierstil entspricht, schlechter ist als eines für dieselbe Aufgabe von mir.
Um bei dem konkreten Beispiel zu bleiben (von @DeltaMikeAir ) kann ich mir schon gut vorstellen, dass die Programme von denen auch durchaus nachvollziehbar sind und stabil laufen ... Von meinen eigenen Werken mal nicht zu reden ... :cool:
Aber da fängt es doch schon an, auch wenn der eigene Programmierstil, wirklich
der beste ist, heißt es noch lange nicht das er für das Team der beste ist, wenn es
das Team nicht beherrscht.
Entweder kann ich das Team auf das Niveau heben, ansonsten muss ich unten bleiben
und versuchen es langsam zu verbessern.

Man sieht ja schon wieder die unterschiedliche Herangehensweise von euch beiden, der
eine will für die gleiche Anwendung Schrittketten der andere Statemachine nutzen.
Sicher wird beides gut.
 
Ich hab weder gesagt, daß eine Strategie besser ist als die andere.
Nur ich habe Deinem Satz widersprochen, daß das Thema "stabile Programme" unabhängig vom Programmierstil ist.
Der Stil trägt meiner Meinung essentiell dazu bei, ein Programm zu stabilisieren.
Sorry, Jens - da widersprichst du dir jetzt selber ...
Und genau auf dein Statement hatte ich mich bezogen ...
Der Stil trägt natürlich dazu bei - aber er ist nicht der Schlüssel ...
 
Zurück
Oben