Mehrere Programme auf einer Steuerung einfach möglich?

Qnkel

Level-1
Beiträge
99
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich will auf einer universell einsetzbaren Steuerung quasi drei Programme mit drei unterschiedlichen Visus haben und ein zentraler Bildschirm, wo man das Programm anwählt, was man benötigt.

Wie kann man das am einfachsten realisieren bevor ich jetzt zu kompliziert denke?

Ein Programm besteht aus mehreren FBs. Das Problem ist, dass die drei Programme auf die selben Ausgänge zugreifen. Dachte erst, einfach die Bausteine mit EN/ENO zu deaktivieren aber laut Hilfe werden die Ausgänge weiter beschrieben.

Sprich wenn der FB von Programm 1 nicht läuft weil EN=0, schreibt er 0 auf die boolschen Ausgänge und überschreibt damit das Ergebnis, was beim FB vom aktiven zweiten Programm käme.

Daher müsste ich alle FB in einen übergeordneten FB (oder PRG oder sonstwas) packen und alle Ausgänge mit ANDs zu den Programm-FBs zu ordnen mit Verriegelung, ob das Programm aktiv ist.

Gleichzeitig müsste ich bei der Visu entsprechend nach der Auswahl abfragen, ob das Programm aktiv ist, damit ein Rücksprung zur Auswahl gesperrt wird und so weiter und so fort....


Glaube ihr versteht das Problem.
Gibt es da eine einfachere Lösung ein Programm-FB quasi einfach zu sperren, nicht nur die Bearbeitung sondern dass er EVA-mäßig nichts mehr ausgibt?
 
Hallo,

ist das wirklich eine gute Idee? Ich meine, wie reagiert die Hardware von Programm 1 auf den Ablauf von Programm 2 oder 3? Wenn die Hardware identisch ist löse ich das normalerweise mit verzweigten Abläufen.
Mit welcher Steuerung willst Du denn arbeiten?

Ich arbeite eigentlich bei allen Programmen mit einem I/O-Programm in dem die Hardwarezuordnung zu den Programmvariablen erfolgt und die Zugriffe aller Programmteile auf die Ausgänge abgearbeitet wird.
Ist sicher Geschmackssache, aber ich finde das viel übersichtlicher und es vermindert extrem die Gefahr konkurierender Zugriffe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Steuerung ist von Sabo, Hardware ist dieselbe.

Das mit dem "I/O-Programm" ist ja auch meine Idee, wo ich alle Ausgänge beschreibe und dann jeweils über Variablen von Programm 1/2/3 ansteuern lasse und darüber verriegele, welches Programm gerade aktiv ist und auf den Ausgang schreiben darf.

Weil man/ich hat ja mal gelernt: Ausgänge etc. werden nur an _einer_ Stelle beschrieben, um konkurrierende Zugriffe zu vermeiden.
 
Mit Sabo habe ich noch nie gearbeitet (außer beim Rasen mähen ;)) - mit was werden die programmiert?

Wenn die Hardware identisch ist löse ich solche Probleme mit verzweigten Schrittketten.
Beispiel:

Start der Schrittkette -> Grundlegende Sachen wie Schutzumhausung geschlossen werden im gemeinsamen Pfad abgewickelt.
An Schritt x wird der Programmwahlschalter ausgewertet und je nachdem mit Schritt Ya, b oder c weitergemacht.
Nach Ablauf der Schrittketten a, b oder c werden diese wieder zusammengeführt und in einem gemeinsamen Schlusspfad die Schrittkette beendet.

Dazu noch ein PRG das neben der Schrittkette läuft in der alle Schrittmerker auf die jeweiligen Ausgänge ver-Oder-t sind - schon hast Du keine Probleme mit konkurierenden Zugriffen und das "versehentliche" Ausführen einzelner FBs entfällt damit auch :D
 
was machen denn die einzelnen Programme, die du bescrheibst? Wird je nach Programm das verhalten anders? Wie umpfangreich is so ein Programm? Hört sich nach nem Strategy-Pattern an...
 
Es sind verschiedene Schrittketten, die nach unterschiedlichen Zeiten/Verfahren letztendlich zwei Ausgänge beschalten. Diese Schrittketten werden immer 6mal verwendet.

Verzweigte Schrittketten wären zu kompliziert. Denke ich werde es so machen mit Programmwahlschalter und dann ein übergeordneter Baustein, wo die Ausgänge der Schrittketten je nach Programmwahlschalter auf die Ausgänge gegeben werden.
So kann man auch später weitere Schrittketten recht "unkompliziert" hinzufügen.

Sabo wird mit Codesys V2.3 programmiert.

Frage zum Interesse: Wie meinst das mit der CASE-Anweisung?

Code:
CASE Programmwahlschalter OF
1: Ausgang1 := Programm1_Ausgang1;
2: Ausgang1 := Programm2_Ausgang1;
3: Ausgang1 := Programm3_Ausgang1;
END_CASE;

Wird dann Ausgang1 nur entsprechend CASE beschrieben und danach nicht überschrieben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wird dann Ausgang1 nur entsprechend CASE beschrieben und danach nicht überschrieben?

ja klar wird der Ausgang1 nur in dem entsprechenden Case beschreiben, sonst würde switch/case ja keinen sinn machen..

mach doch 3 FB's für jedes Programm... und calleds den FB in entsprechenden Case.. in den FB's selber kannst ja die Ausgänge setzen...
 
Zurück
Oben