Jeder Case ein eigenes Programm

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe gesehen, dass in AS ja jeder schritt ein eigenes Programmbaustein sein kann.

Meint ihr es macht sinn, im ST einer Case-Struktur jedem Case einen Baustein zuzuweisen und diesen dort aufzurufen?

Oder gibt das viel speicherverbrauch?
Wieviel POUS kann man denn erstellen? Gibt es da grenzen?


Oder meint ihr, amn sollte die case striktur direkt in einem baustein ausprogrammieren?
 
Meint ihr es macht sinn, im ST einer Case-Struktur jedem Case einen Baustein zuzuweisen und diesen dort aufzurufen?
Das kommt darauf an, wie umfangreich der Code für die einzelnen Schritte ist. Bei solchen Abläufen wird ja oft bei einem Schritt nur ein Ausgang gesetzt oder rückgesetzt, dafür wäre mir eine eigene POU zu viel des Guten.
 
Ok

Ja finde ich eigentlich auch, bin nur drauf gekommen, weil man ja in as eigentlich auch für jeden "CASE" ne eigene POU hat
 
Design Pattern

Ich würde ...

So wird es auch nicht "gelehrt" ..... :)

Es gibt ja aktuell einige Diskussion an verschiedenen Punkten hier im Forum, deshalb mal ein Hinweis auf die weltweit anerkannte "Lehre".

Seit etwa 1985 ist das unten gezeigte Buch das Standard Lehr Werk, wie man grosse Projekte angeht.

Spätestens, wenn Ihr in der Oberklasse spielt (Medizintechnik, Atom Industrie, Luftfahrt, Sicherheitstechnik) und der TÜV oder ähnliche Revisoren sich Eure Programme Zeile für Zeile ansehen und genehmigen müssen, werdet Ihr Probleme haben, eine eigene Status Maschine implemetiert zu haben, die nicht den Pattern des erwähnten Buches folgt.

ST hat da so seine Probleme unter Codesys 2.x, 3.x geht besser.

Wenn man mit 2.x dem Pattern Rahmen folgt, kommt eine CASE Struktur des Main Programms, die in jedem Case eine FUN oder einen FB (besser) aufruft, am nächsten.

Ein Aufruf PRG -> PRG mit global Variablen ist tabu.

Codesys3.x würde das mit Interface etc lösen.

Ein Lesen des Buches empfiehlt sich auf jeden Fall, wenn Ihr komplexere Probleme (im Team besonders) angeht.
 

Anhänge

  • pattern.jpg
    pattern.jpg
    119,1 KB · Aufrufe: 56
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ohne Globale Variablen

Muss man alles ohne globale Variablen lösen, oder wie? Also alle werte übergeben? Das ist doch auch nicht so toll, wenn man tausende übergabeparameter hat, oder? Wie funktioniert das sonst mit dem Interface?
 
In Codesys 3 bzw. TwinCAT 3 ist ja ein Augenmerk auf objektorientierte Programmierung gelegt.
Das Interface ist ein Teil der Vererbung bzw. der OOP.

Ich würde hierbei vieles mit Übergabe- und Rückgabeparametern, sowie lokalen Variablen lösen.
 
Übergabe

Wenn man die Variablen logisch in structs zusammenfasst, übergibt man die struct als "Gesamt Variable" der Funktion oder dem Baustein.

Die Anlage dieser structs bedarf einiger Vorüberlegung und erleichtert das Handling und die Performance bei der Übergabe enorm.

Eine Übergabe (per Reference) entspricht im Prinzip einer Information an den aufgerufenen Programmteil, wo die Daten sich im Speicher befinden.

Hier einmal ein CASE für eine State Engine (Rettungsbühne der Feuerwehr), es werden nur FB verwendet.

fbCalcState (theImage := theImage); (* struct enthält das komplette Process Abbild*)

CASE (theImage.myTTab.sysStat) OF
eOtNN:
;
eSelfTest:
fbSelfTest (theTable := theImage.myTTab); (* struct enthält NUR die Drehtisch Variablen *)
eOtStop:
fbEStop (theTable := theImage.myTTab); (* struct enthält NUR die Drehtisch Variablen *)
ELSE
fbCalib (theImage := theImage);
END_CASE


Warum keine Globalen Variablen? Globale Variablen können überall manipuliert werden, sei es per Absicht (also wie geplant) oder per Zufall (Tippfehler) oder per Unglück (Kollege muss mal was ändern und sieht nicht die Folgen im ihm unbekannten Teil des Systems).

Ich selber setze Globals nur als CONST ein, da kann dann nix schiefgehen, der Compiler achtet darauf, dass hier niemand dran drehen kann.
 
Zuletzt bearbeitet:
Zurück
Oben