Mit Funktionbaustein unterschiedliche dOut schalten

Ulf S.

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und guten Tag,
nach einiger Probieren bräuchte ich als ziemlicher Anfänger Hilfe. Ist auch gut möglich dass meine Vorstellung in den Augen erfahrener Anwender Banane sind...

In FUP habe ich mir einen für mein Verhältnisse komplexen Funktionsbaustein mit 4 Bool Eingängen und 2 Bool Ausgängen erstellt. Dieser FB soll 4 programmierte Funktionen an 9 verschiedene identische Motoren (2xdOut) steuern. für jeden einzelnen Motor funktioniert das sauber.
Steuerung erfolgt aktuell über eine Visualisierung, die 9 Geräte mit den 4 Programmen sind mittels DUT deklariert und in der Visu über eine Template angelegt. das geht mit 9 Geräte/ 9 Instanzen des FBs eigentlich schön. Mehrere Geräte gleichzeitig (Gruppen 0-4, 5-9, alle) zu steuern kriege ich nicht schön und nur sehr umständlich hin...

Wie könnte ich elegant und schlank abhängig vom Output der Visualisierung ( Input für den FB) festlegen, welches Gerät oder welche Gruppe schaltet (dOut der Motoren)?
Vielen Dank und schöne Grüße....
Ulf




1644244187445.png

1644244240673.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Seiten erzeugen doch für ihr jeweiliges Gerät ein Kommando ? dann brauchst du doch für grp x-y eh eine eigene Seite. Daraus holst du dann doch eine paralelle Kommandoverbindung ? (welche in jedem der Geräte pro gruppe reingeht)

Sollte das nicht so gedacht sein, dann muss in die Kommandostructur doch eine Bitmaske(z.b Grp 1-4 setzt die ersten 4 bits), welche Geräte jetzt aufs kommando reagieren sollen => das ist in der Anzeige dann ... aber auch machbar.

Oder hab ich das falsch verstanden ?
 
Zuletzt bearbeitet:
Ich hoffe ich habe das richtig verstanden:
Mehrere Instanzen vom FB_Raff. Die Knöpfe für Auf/Ab alle auf den jeweils gleichen Visu-Knopf geben(ein und dieselbe Variable). Der FB_Raff bekommt einen zusätzlichen Freigabeeingang, welcher von der Visualisierung gesetzt wird(Checkboxen...). Der selektierte Freigabeeingang definiert welcher Rollo mitfährt.
Im FB mussen die entsprechenden Eingänge mit dem Freigabeeingang verriegelt werden.
 
Die Seiten erzeugen doch für ihr jeweiliges Gerät ein Kommando ? dann brauchst du doch für grp x-y eh eine eigene Seite. Daraus holst du dann doch eine paralelle Kommandoverbindung ? (welche in jedem der Geräte pro gruppe reingeht)
so hab ich ich mir das in meinem nicht mehr jugendlichen Leichtsinn vorgestellt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte das nicht so gedacht sein, dann muss in die Kommandostructur doch eine Bitmaske(z.b Grp 1-4 setzt die ersten 4 bits), welche Geräte jetzt aufs kommando reagieren sollen => das ist in der Anzeige dann ... aber auch machbar.

Oder hab ich das falsch verstanden ?
Uff...Vielen Dank für die Antwort aber da muss ich noch eine Menge lesen....
 
Ich hoffe ich habe das richtig verstanden:
Mehrere Instanzen vom FB_Raff. Die Knöpfe für Auf/Ab alle auf den jeweils gleichen Visu-Knopf geben(ein und dieselbe Variable). Der FB_Raff bekommt einen zusätzlichen Freigabeeingang, welcher von der Visualisierung gesetzt wird(Checkboxen...). Der selektierte Freigabeeingang definiert welcher Rollo mitfährt.
Im FB mussen die entsprechenden Eingänge mit dem Freigabeeingang verriegelt werden.
Ursprünglich hatte ich alle Rollos in FUP einzeln angelegt in 8 Netzwerken je Rollo = 8x9 Netzwerke
in jedem Zimmer waren die Gruppeneingänge dann schon implementiert
Funktionierte, aber schlecht pflegbar/erweiterbar/unübersichtlich
Hatte ich schon mal hier gepostet:
1644272182320.png

Bis jetzt arbeite ich ausschließlich mit Bool, so viel zu meinem Kenntnisstand!
Sorry wenn meine Problemstellung zu ungenau ist....
Vielen Dank für eure Antworten!
 
Zuletzt bearbeitet:
Uff...Vielen Dank für die Antwort aber da muss ich noch eine Menge lesen....
dann würde ich mal so vorgehen wie Du dir selbst Dein Programm beschreibst : structur kommandos mit up,down, wasweißich plus ein Ziel:Word (Speichersparen kostet später). Diese Kommandos erstellst du dann aus den Eingängen und der Visu, wobei die Visu die einzelnen Zielbits ein und ausschaltet (wenn das Bedienfeld auch Selektionen oder lokal können soll, muss das halt auch parallel diese Ziele aktivieren/deaktivieren) das lässt du nun in deinen gemachten Code rein statt dort direkt mit deinen Eingängen reinzugehen. Dein Code braucht dann halt dort wo das jeweilige Bewegungskommando reingeht eine Und-Verknüpfung mit dem Zielbit ( Beispiel: FB4 : kommando.up & kommandoziel.4 )
wichtig dabei ist halt das die Kommandos an einer Stelle(in einem FB) gemacht werden damit Du beim debuggen nicht in jeden FB/Programm reinschauen musst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich weis ja nicht, mit welcher Visu du arbeitest, aber mir kommt da spontan der Begriff Multiplex in den Sinn.
Damit schaltet man zB. ein Visuelement an ein Array und kann da die einzelnen Felder an immer die gleiche Visuseite anschliessen. Voraussetzung wäre dann natürlich ein
Array[0..n] of StructvomRollo
...oder ich hab die Fragestellung nicht verstanden...
 
Hallo Jensemann,
vielen Dank für deinen Antwort. Ihc glaube du hast das vollkommen richtig verstanden.
Interessanterweise hatte ich gestern Abend auch an Array gedacht. So ganz durchblicke ich das nicht, im Gegenteil ich fange gerade erst an, ansatzweise zu verstehen wie ich das nutzen könnte. Vor allem stelle ich mir gerade vor, dass ich mit einem Array "Szenen" gestalten kann, was dann auch für die Lichter wieder interessant werden wird.

Ich verwende e!Cockpit!
Den Funktionsblock habe ich geändert, der hat in der Deklaration jetzt die gleiche Struct als Eingangsvariable, im PLC-PRG schalte ich die Struct aus der Visu mit s= in die Instanzen, überblicke aber nicht, ob man das machen darf... Vieles mache ich als trial and error....

Sturct in der Visu und als Eingang der FB-Instanzen sieht so aus:
1644433278486.png

In der Simulation funktioniert zumindest die erste Instanz schon
 
Zuletzt bearbeitet:
dann würde ich mal so vorgehen wie Du dir selbst Dein Programm beschreibst : structur kommandos mit up,down, wasweißich plus ein Ziel:Word (Speichersparen kostet später). Diese Kommandos erstellst du dann aus den Eingängen und der Visu, wobei die Visu die einzelnen Zielbits ein und ausschaltet (wenn das Bedienfeld auch Selektionen oder lokal können soll, muss das halt auch parallel diese Ziele aktivieren/deaktivieren) das lässt du nun in deinen gemachten Code rein statt dort direkt mit deinen Eingängen reinzugehen. Dein Code braucht dann halt dort wo das jeweilige Bewegungskommando reingeht eine Und-Verknüpfung mit dem Zielbit ( Beispiel: FB4 : kommando.up & kommandoziel.4 )
wichtig dabei ist halt das die Kommandos an einer Stelle(in einem FB) gemacht werden damit Du beim debuggen nicht in jeden FB/Programm reinschauen musst.
Danke für deine Antwort.
Sorry, das hatte ich noch nicht gelesen, aber macht es mir Kopfschmerzen....ich muss noch so viel lernen....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aber macht es mir Kopfschmerzen
zuerst mal ein Tipp: Unteraufgaben in unter-FBs verpacken = im Programm kann man sich das anschauen, muss aber nicht.
Jeder Programmierer kann ein Programm so klein wie möglich schreiben, aber ein schlauer verpackt es so kleingestückelt und einfach, dass auch der Dümmste es nachher noch lesen und verstehen kann. Und wenns Kopfschmerzen bereitet => kleiner Stückeln, skizzieren etc
NICHT dran rumbasteln bis es geht aber keiner mehr versteht warum. (Ein Grund wieso ich graphische Sprachen nicht mag, da dort genau das zu oft gemacht wird )

Und das zweite :
im PLC-PRG schalte ich die Struct aus der Visu mit s= in die Instanzen
verstehe ich das richtig, dass du Konstanten (Texthäppchen wie z.B. "Wohnzimmer 1") mit der Kommando-String vergleichst und wenn true, dann mit einem Sel die Kommandos in den Block weitergibst ? Stringvergleiche gehen über alle Zeichen der String = mehrere Bytes und deshalb werden Vergleiche mit Bits, einer Nummer oder vor allem mit einer Enum vorgezogen.

Da aber viele Wege zum Ziel führen und man sich schnell auf einen Lösungsvorschlag versteift, wenn man ihn mal irgendwo gesehen hat => weiß nicht ob ich mein Beispielprogramm dafür posten soll.
 
zuerst mal ein Tipp: Unteraufgaben in unter-FBs verpacken = im Programm kann man sich das anschauen, muss aber nicht.
Jeder Programmierer kann ein Programm so klein wie möglich schreiben, aber ein schlauer verpackt es so kleingestückelt und einfach, dass auch der Dümmste es nachher noch lesen und verstehen kann. Und wenns Kopfschmerzen bereitet => kleiner Stückeln, skizzieren etc
NICHT dran rumbasteln bis es geht aber keiner mehr versteht warum. (Ein Grund wieso ich graphische Sprachen nicht mag, da dort genau das zu oft gemacht wird )
Meinst du ich hätte den großen FB in mehrere Funktionen zerlegen sollen? Ich möchte je auch in 5 Jahren möglichst leicht Anpassen/Warten können. Geschweige denn, wenn das mal anderer machen muss!
FUP habe ich gewählt, weil es mir als Anfänger ohne wirkliche Programmiererfahrung...ich glaube ich muss es nicht ausführen.
 
ok , ich lad mal doch n Schnipsel hoch. Außerdem muss ich ja nicht recht haben... war eher meine Meinung dazu.
sind alle 4 Möglichkeiten reingepackt, eine auswählen die anderen löschen.
die Zerteilung musst du halt eventuell zerkleinern bis Du beim Gesamtbild und bei einzelbildern keinen Kopfschmerz mehr hast
Beispielmit3Vorgangsweisen.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und das zweite :

verstehe ich das richtig, dass du Konstanten (Texthäppchen wie z.B. "Wohnzimmer 1") mit der Kommando-String vergleichst und wenn true, dann mit einem Sel die Kommandos in den Block weitergibst ? Stringvergleiche gehen über alle Zeichen der String = mehrere Bytes und deshalb werden Vergleiche mit Bits, einer Nummer oder vor allem mit einer Enum vorgezogen.

Da aber viele Wege zum Ziel führen und man sich schnell auf einen Lösungsvorschlag versteift, wenn man ihn mal irgendwo gesehen hat => weiß nicht ob ich mein Beispielprogramm dafür posten soll.
nein so mache ich das nicht, habe anders umgesetzt. Je Rolladen eine Instanz. In der Visu habe ich ein Template, die benutzt den String nur zur "Beschriftung" in der Visu. Bis jetzt nur Boolsche Algebra auf Anfängerniveau....
 
sowas ? der Nachteil ist halt das Du so die anderen möglichen Lösungen nicht mehr wahrnimmst. Und kann auch mal sein, dass ich die Fragestellung falsch verstehe..
 

Anhänge

  • Beispielmit3Vorgangsweisen1.PNG
    Beispielmit3Vorgangsweisen1.PNG
    21,3 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
sowas ? der Nachteil ist halt das Du so die anderen möglichen Lösungen nicht mehr wahrnimmst. Und kann auch mal sein, dass ich die Fragestellung falsch verstehe..
noch mal Danke, dass du dir die zeit genommen hast. Ich glaube, ich verstehe das Prinzip. Würde zum Verständnis noch gerne Fragen:
das sind in Netzwerk 3-5 verschiedene Wege, den Output zu selektieren?
der OR ist mir klar, schaltet bei einzelnem Raum oder bei ALLE
das hatte ich so schon mal realisiert (KiZ, OG und All)
1644524206434.png

Könnte man die Mehrfachzuweisungen/Szenen so lösen, dass man ein definiertes Array abhängig von einer BOOL schreibt und das geschriebene Array steuert, welche Instanzen eine FBs aktiviert werden? oder ist das ein noGo oder Performance Killer?
das wäre halt eine dynamische Szenengestaltung....
 
das sind in Netzwerk 3-5 verschiedene Wege, den Output zu selektieren
der erste Screenshot hat soll dies aufzeigen : das dein Baustein bei jeder Instanz andere Aktoren schaltet (ob das ein Motor/Ausgang/etc oder x-Verschiedene Aktoren sind, ist dabei egal ).
Könnte man die Mehrfachzuweisungen/Szenen so lösen, dass man ein definiertes Array abhängig von einer BOOL schreibt
ein fixes Muster kann man ohne Probleme in die Kommandostruktur reinlegen um gleiche Bewegung zu erreichen.
auch Schritte können einfach hintereinander Verschiedene Kommando-Konstanten erhalten.
Performance sollte in dieser Anwendung noch gar kein Thema sein.
 
Zurück
Oben