Step 7 Frage zu Blinker/Taktgeber

bastler

Level-2
Beiträge
258
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich möchte gerne einen Blinker/Taktgeber programmieren, bei dem die Ein- und Ausschaltzeit unterschiedliche Zeitwerte haben soll. Mit 2 Timern hab ich das auch alles hinbekommen, wurde auch hier im Forum schon öfters besprochen.
Jetzt hatte ich die folgende Idee und würde gerne von den Profis wissen, ob und wie man das realisieren kann.
Ich hätte gerne einen FB erstellt, der den Taktgeber beinhalten soll. Aber in den FB will ich nicht 2 Timer (SE und SA) verwenden, sondern ich würde lieber den SFB4 und SFB5 dafür verwenden. Nur weiß ich jetzt nicht, wie ich die beiden SFB's verknüpfen soll, das daraus ein Taktgeber entsteht.
Ist diese Idee realisierbar und wenn ja, wie muss ich das machen?
Und die zweite Frage wäre, kann ich diesen FB mehrfach in einem FC aufrufen? Danke schon mal für eure Hilfe.
PS: wie man die SFB's in einem FB aufruft bzw. als Variable anlegt weiß ich bereits (nennt man glaub ich Multiinstanz)

MfG
bastler
 
Hallo,
das kannst du machen (macht auch Sinn, so, wie du es beschreibst) und es ist im Grunde genau so umzusetzen wie du es bisher mit den S7-Timern gemacht hast.
Zeig doch mal deinen Code-Ansatz ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst den FB mehrfach in einem FC aufrufen. Jeder FB wird ja mit einem Instanz-DB zusammen aufgerufen und dieser Instanz-DB muß bei jedem FB-Aufruf ein anderer sein.
 
Danke schon mal für die Antworten. Da bin ich froh, das meine Idee umsetzbar ist.

@LarryLaffer, bisherigen Code stell ich heute Abend rein, schaffe es nicht eher.

@Ralle, bedeutet das, dass ich pro Aufruf einen eigen Instanz- DB brauche, also das der FB mehrere Instanz-DB's bekommt, praktisch soviel wie Aufrufe sind?
 
@Kalel, ich möchte doch die Timer (SFB's) in einem FB aufrufen, damit ist doch der FB ein Multiinstanz-FB.
ich glaube gelesen zu haben, dass man die einzelnen Instanz-DB's nur benötigt, wenn der FB in einen FC mehrfach aufgerufen wird, ich kann mich aber auch täuschen.
 
Code:
UN    T16
L       S5T#2s
SE    T17

U       T17
L       S5T#5s
SA     T16

U       T16
=       DB2.DBX23.5

Das ist mein bisheriger Taktgeber. Aber wie muss das mit den SFB's aussehen. Wahrscheinlich sehe ich gerade den Wald vor lauter Bäumen nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich antworte mal.
Wenn du die SFBs mehrmals in einem FB aufrufst und sie nur in der Schnittstelle des AUFRUFENDEN FB deklarierst. sind das Multiinstanzen und brauchen keine zusätzlichen DBs. Der FB brauch natürlich einen eigenen DB.
diesen FB wiederum kannst du ebenfalls in einem anderen FB mehrmals aufrufen und wieder entweder mit jeweils unterschiedlichen DBs beschalten oder du deklarierst ihn wiederum nur mehrmals in der Schnittstelle des Aufrufenden FBs. Dann brauchst du also wieder nur einen DB.

Da hat google n schönes Bild:
STEP7_V105_Multiinstanzen_01_d.png
 
Das könntest du z.b. so machen. das sind aber zwei TON in der Schnittstelle deklariert.
Hier Toggelt das "HUE"._DBX_55_7

Code:
      CALL  #WD_Timer_ON
         IN :="HUE"._DBX_55_7
         PT :=t#2s
         Q  :=
         ET :=


      UN    #WD_Timer_ON.Q
      =     #WD_Timer_ON_INV


      CALL  #WD_Timer_OFF
         IN :=#WD_Timer_ON_INV
         PT :=t#2s
         Q  :="HUE"._DBX_55_7
         ET :=
 
bastler schrieb:
Das ist mein bisheriger Taktgeber. Aber wie muss das mit den SFB's aussehen.
Im Prinzip genau gleich. SE entspricht TON, SA entspricht TOF.
Die Ausgänge der IEC-Timer kannst du auch direkt mit
#DeinTimerMultiinstanzname.Q abfragen. So wie du es mit U T17 gewohnt bist.

<EDIT>
Vollmi war wieder um ne ganze Ecke schneller. :eek:
Tolle Grafik übrigens - Danke Google! ;)
</EDIT>
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Ausgänge der IEC-Timer kannst du auch direkt mit
#DeinTimerMultiinstanzname.Q abfragen. So wie du es mit U T17 gewohnt bist.

Dies geht zwar. Allerdings hatte ich bei Timern (und zwar nur da) schon das komische verhalten dass sie so nicht korrekt funktioniert haben sondern erst nach einem übergang auf eine stat Variable.
 
Dies geht zwar. Allerdings hatte ich bei Timern (und zwar nur da) schon das komische verhalten dass sie so nicht korrekt funktioniert haben sondern erst nach einem übergang auf eine stat Variable.
Merkwürdig. #DeinTimerMultiinstanzname.Q wäre ja eigentlich eine STAT-Variable und müsste ja im IDB stehen.
Würde bedeuten das wenn man den IDB online beobachtet, das Q-Bit nicht tut und das anderer schon?
Ist mir zum Glück noch nicht begegnet.
 
Also das mit dem Code leuchtet mir ein, aber mit den DB's und den dem ganzen Instanzgetöns hab ich noch so meine Probleme. Die SFB's werden nur einmal im FB aufgerufen, also bräuchte ich dafür einen Instanz-DB.
Der FB selber wird allerdings mehrfach in einen FC aufgerufen, und da wiederum bräuchte ich für jeden Aufruf einen eigenen DB. Hab ich das jetzt so richtig begriffen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da du die SFBs aber in einem FB aufrufst, macht es sinn diesen keinen eigenen InstanzDB zu geben sondern sie im FB in der Schnittstelle zu deklarieren (Stat Bereich).
hier mit TP aber es geht natürlich auch mit TON TOF oder jedem anderen FB.

STEP7_Multiinstanzen_erstellen_aendern_03_d.gif
 
@vollmi, genauso hatte ich es vor. Hatte mich etwas unglücklich ausgedrückt mit den SFB-Aufrufen.
reicht somit der Instanz-DB des FB' s aus, oder muss ich für jeden FB-Aufruf in dem FC wie ich es benötige einen separaten DB erstellen?
 
Das oben genannte Weg ist ein wenig von hinten durch die Brust ins Auge. Meinst du nicht.
Verwirren wir unseren Kollegen doch nicht gleich mit Dingen wie Aufruf-Aktualisierung.

Der Originale normale Weg ist eher:
1. FB aus der FUP-Leiste per Drag&Drop reinziehen
2. Rechts anklicken
3. Auf "Aufruf ändern in Multiinstanz" drücken
4. Namen eingeben
5. Fertig. Der FB ist als Multiinstanz angelegt und kann die zugehörigen Daten im STAT-Bereich abgelget.

Beide Varianten funktionieren halt nur wenn der Baustein der die zu erstellende Multiinstanz aufrufen soll, in irgeneiner Form selbst
Daten aufnehmen kann.
Also ein FB mit Instanzbaustein. Sonst brauchst du für jede Multiinstanz einen DB.
Wer mit Multiinstanzen programmiert verwendet für das Programm hauptsächlich FBs.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der FB selber wird allerdings mehrfach in einen FC aufgerufen, und da wiederum bräuchte ich für jeden Aufruf einen eigenen DB. Hab ich das jetzt so richtig begriffen?

Wenn du deinen FB wirklich mehrfach von irgendwo her aufrufen möchtest (hier stelle ich mir gerade die Frage nach dem warum) dann bräuchtest du dann jedes Mal einen neuen Instanz-DB wenn dieser neu aufgerufene FB vollkommen anders (also z.B. mit anderen Intervallzeiten) arbeiten soll wie der zuletzt aufgerufene.
@TE: Hier vielleicht mal den Grund der Maßnahme erklären ...

Gruß
Larry
 
@vollmi, genauso hatte ich es vor. Hatte mich etwas unglücklich ausgedrückt mit den SFB-Aufrufen.
reicht somit der Instanz-DB des FB' s aus, oder muss ich für jeden FB-Aufruf in dem FC wie ich es benötige einen separaten DB erstellen?

Für jeden aufruf eines FBs brauchst du eine Instanz (ob diese nun ein eigener Instanzdb oder jedesmal im Stat bereich der Schnittstelle des aufrufenden FBs ist, ist egal).
Aus einem FC werden keine FBs aufgerufen, wenn dann umgekehrt. Das tut man nicht, es gibt kein grund dazu, wer das tut nimmt auch sein Essen mit ins Restaurant.

mfG René
 
Der Blinker/Taktgeber funktioniert Dank eurer Hilfe. Den FB werde ich nicht in dem FC aufrufen, sondern werde das Programm so ändern, dass der FB auch in einen FB aufgerufen wird. Habe mal wieder ein Menge dazu gelernt. Vielen Dank an alle die mir geholfen haben.

Mfg
bastler
 
Zurück
Oben