Aufbau eines FB´s mit 8 * FB42 im Bauch

trinkiwinki

Level-1
Beiträge
40
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Aufbau eines FB´s mit 8 * SFB42 "CONT S" im Bauch

Hallo Leute.

Bin neu hier. 29 Jahre alt, derzeit auf der Technikerschule Lahr. Erstes Jahr vorbei und nun in den Sommerferien ein bißchen Zeit, um an der Technikerarbeit zu basteln. Ich heisse Marco.

Mein Ziel ist es, ein bestehendes Programm zu vereinfchen. Eine Schaumanlage besitzt in der Regel pro Lanze 2 Regler. Liquid und Luft werden über kleine SAMSON Stellmotoren mit dem PID FB 42 angesteuert. Um uns immer wieder das kopieren zu sparen soll ich 4 Lanzen in einen FB packen, in dem dann die 8 Regler drin sind. Also intern multiinsanzfähig. Das ganze soll von aussen beschreibbar sein, das heißt immer die 1. Adresse soll einegeben werden und die anderen intern verwendet werden.
Also z.B. der erste Liquiddurchfluss DB40.DBD320 und die andere 324.....328....332 sollen intern verwendet werden. Genauso soll es mit den digitalen Eingängen und Ausgängen sein.

Versteht ihr mein kauderwelsch?

Ich stehe momentan ein wenig auf dem Schlauch, da dieses Thema in der Schule erst im 2. Jahr ein bisschen behandelt wird.

Danke für Eure Hilfe im voraus. Falls jemand versteht, was ich meine.....

Gruß MArco
 
Zuletzt bearbeitet:
Hi,
erst beim 2-ten Durchlesen habe ich eine leise Ahnung bekommen was Du überhaupt vor hast.

Also, erstelle ein FB1.
Ruf' den FB 42 so oft du brauchst auf(pro Netzwerk bitte nur 1 Mal(blos nicht mehrere nacheinander in einem Netzwerk)).
Ändere jeden Aufruf(über das Kontextmenü(rechtsklick auf dem jeweiligen Bastein)) in eine Multiinstanz(Namen vergeben z.B.: miLanze01_1).

Die Beschaltung deinen FB von Aussen würde ich nicht auf die Art machen, wie Du es vor hast(ich denke Du meintest ANY-Pointer und Offsets), sondern mit Hilfe von UDT's.

Erstelle UDT's(UDT ist eine Datenmaske oder Struktur) für alle Ein- und Ausgabeparameter(ob Du einen UDT pro Regler oder einen für alle Regler erstellst ist Dir überlassen), lege die UDT's in einem DB ab und deklariere diese Bereiche als Ein- bzw. Ausgabeparameter an deinem FB1.
Dadurch hast Du den Vorteil, dass Du in deinem FB1 symbolisch adressieren kannst.

Ich hoffe Dir geholfen zu haben.
Gruß
Alex
 
Hallo Leute.

Bin neu hier. 29 Jahre alt, derzeit auf der Technikerschule Lahr. Erstes Jahr vorbei und nun in den Sommerferien ein bißchen Zeit, um an der Technikerarbeit zu basteln. Ich heisse Marco.

Mein Ziel ist es, ein bestehendes Programm zu vereinfchen. Eine Schaumanlage besitzt in der Regel pro Lanze 2 Regler. Liquid und Luft werden über kleine SAMSON Stellmotoren mit dem PID FB 42 angesteuert. Um uns immer wieder das kopieren zu sparen soll ich 4 Lanzen in einen FB packen, in dem dann die 8 Regler drin sind. Also intern multiinsanzfähig. Das ganze soll von aussen beschreibbar sein, das heißt immer die 1. Adresse soll einegeben werden und die anderen intern verwendet werden.
Also z.B. der erste Liquiddurchfluss DB40.DBD320 und die andere 324.....328....332 sollen intern verwendet werden. Genauso soll es mit den digitalen Eingängen und Ausgängen sein.

Versteht ihr mein kauderwelsch?
Gruß MArco

Ehrlich gesagt nicht so ganz. Reicht es nicht überall den gleichen Sollwert aufzuschalten???
Mit dem Multiinstanziieren handelst du dir den Nachteil ein, dass das Tool PID parametrieren nicht mehr richtig verwendet werden kann.

Achja, nicht vergessen - Regler grundsätzlich über die Weckalarm-OB's aufrufen, sonst gibts ärger !
 
Zuletzt bearbeitet:
Hm... weiß auch nicht worum es geht, aber gebe mien Senf mal dazu: :D

Prinzipiell würde ich dann auch pro Lanze einen FB/FC machen. (Wieso FB? reicht kein FC? Und dann ein und ausgangsvariablen anlegen bzw. wie ANo schon geschrieben hat einen Struct anlegen, damit es übersichtlich bleibt. Dann kannst dir immer noch überlegen ob du pro Lanze einen eigenen DB machst und diesen auch am FC anbindest, oder einen DB für alle Lanzen, wo du halt einen Offset anhängen müsstest...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit dem Multiinstanziieren handelst du dir den Nachteil ein, dass das Tool PID parametrieren nicht mehr richtig verwendet werden kann.
Man kann bei "PID Control" einen Byteoffset angeben an dem sich die entsprechende Regler-Instanz im DB befindet.
Also vorher im Instanz-DB die entsprechende Adresse des FB-Aufrufes raussuchen und dort eintragen.
Achja, nicht vergessen - Regler grundsätzlich über die Weckalarm-OB's aufrufen, sonst gibts ärger !
Grundsätzlich kann man so gar nicht sagen. Bei einer langsamen Regelstrecke bei dem der Regler FB z.B. alle 5s aufgerufen wird, ist der Unterschied marginal.
Alternativ lässt sich noch die Zykluszeit auf einen Minimalwert einstellen sodass der Jitter gering bleibt.
Die Fummelei mit den Weck-OBs geb ich mir nur bei schnellen Regelstrecken mit viel I oder D-Anteil.

Aber wenn man es grundsätzlich im Interrupt macht, macht man auf jeden Fall nichts verkehrt, das stimmt.
 
Prinzipiell würde ich dann auch pro Lanze einen FB/FC machen. (Wieso FB? reicht kein FC?

... es sollen ja Multiinstanzen verwendet werden.

wenn man bedenkt das es eine Technikerarbeit werden soll, wird vielleicht ein Weckalarm in Verbinding mit einem PID auf die Lehrer einen bleibenden Eindruck hinterlassen. :)
 
Zuletzt bearbeitet:
Servus Alex

das mit dem UDT habe ich jetzt soweit. Nun füge ich die UDT 10 mal in einen DB ein. Schaumlanze 1 bis 10. Soweit richtig? Nun erstelle ich einen FB. Ob ich jetzt 4 Lanzen in den FB mache oder 1 ist erstmal egal. Jedenfalls muss ich ja oben in der Deklaration auch was einfügen. Als IN die UDT oder was? Wenn ich die nur als IN mache, dann kann ich am FB 42 an den Ausgängen nichts einfügen. Icrgendwas mache ich falsch und verstehe nichts. Hast Du mir nochmals einen Tip? Danke im voraus.


Gruß Marco
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann bei "PID Control" einen Byteoffset angeben an dem sich die entsprechende Regler-Instanz im DB befindet.
Also vorher im Instanz-DB die entsprechende Adresse des FB-Aufrufes raussuchen und dort eintragen.
klar, machen kann man viel. Nur die Frage ob es so praktisch ist wenn in einem InstanzDB zehn Regler liegen, jedesmal die Adresse neu einzugeben.
Viel Spass kann ich da nur sagen.

Das gleiche gilt für die Regler, ich kann denjenigen nur bedauern, der vielleicht die Anlage in einigen Monaten oder Jahren abändert und sich bei verlängernden Zykluszeiten dann wundert, warum evt. Seiteneffekte entstehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus Alex

das mit dem UDT habe ich jetzt soweit. Nun füge ich die UDT 10 mal in einen DB ein. Schaumlanze 1 bis 10. Soweit richtig? Nun erstelle ich einen FB. Ob ich jetzt 4 Lanzen in den FB mache oder 1 ist erstmal egal. Jedenfalls muss ich ja oben in der Deklaration auch was einfügen. Als IN die UDT oder was? Wenn ich die nur als IN mache, dann kann ich am FB 42 an den Ausgängen nichts einfügen. Icrgendwas mache ich falsch und verstehe nichts. Hast Du mir nochmals einen Tip? Danke im voraus.


Gruß Marco

deklariere eine (oder mehrere) Variablen z.B. Lanze_1 vom Typ UDT1(oder welchen auch immer du genommen hast) in den IN_OUT Bereich.

!Achte drauf dass in deinem Projekt symbolische Adressierung aktiviert ist.
zur Kontrolle: >rechtsklich auf dem Bausteinordner > Objekteingenschaften > Reiter "Operandenvorrang" > Symbol hat vorrang (bei allen zugriffen).
 
Zurück
Oben