Problem mit Multiinstanz und SFB4

shephard

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich bin leider ein Multiinstanz-Neuling :-?
Ich habe jedoch eine Aufgabenstellung bekommen, bei welcher ich, soviel ich bis jetzt erkannt habe, wohl um den Einsatz von Multiinstanzen nicht herum komme.

Ich muss ein Programm erstellen, welches Zusatzfunktionen für eine Torsteuerung mit 12 Toren beinhaltet.

Ich verwenden eine CPU 314 mit Step 7 V5.4.

Ich möchte zwei FB’s anlegen einen Haupt-FB (FB1) und einen Steuerungs-FB (FB4).
Im Steueungs-FB erstelle ich das ganze Programm.
Im FB1 möchte ich dann den FB4 für jedes Tor aufrufen und mit den entsprechenden Ein. Und Ausgängen beschalten.

Das Programm im FB4 beinhaltet auch drei Einschaltverzögerungen. Zuerst benutzte ich normale „S_EVERZ“ , bis ich merkte, dass diese nicht verwendet werden können bei mehrfachen Aufrufen. Also habe ich diese durch SFB4 ersetzt. Dazu habe ich bei Schnittstellen/STAT die drei Timer mit dem Datentyp SFB4 deklariert und diese im Programm eingefügt. Für den FB4 habe ich eine Instanz-DB FB104 erstellt.

Wenn ich nun im FB1den FB4 für nur ein Tor aufrufe, funktioniert alles einwandfrei. Sobald ich den FB4 aber für mehre Tore aufrufe, funktioniert das mit den Timern nicht mehr so toll.

Evtl. habe ich das mit den Multiinstanzen noch nicht ganz begriffen. Muss ich im FB1 für jeden FB4-Aufruf einen eigenen Instanz-DB erstellen oder kann ich einfach überall den FB104 eintragen? Ich habe schon beides versucht à Fehlanzeige. Was mache ich falsch?

Ich hoffe, ihr konntet meinen Neuling-Erklärungen folgen und würde michfreuen, etwas dazulernen zu dürfen.
 
Du musst den FB4 im Stat Teil des FB 1 so offt deklarieren, wie du ihn brauchst.

Dann die einzelnen Multiinstanzen aufrufen

Im OB1 ruftst du den FB1 auf und gibst ihm einen DB

Fertig

btw. dies wäre auch mit timern gegangen, du musst nur die timernummern, die verwendet werden sollen dem fb4 übergeben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

jeder FB, der nicht im ihn Aufrufenden FB als STAT deklariert ist benötigt einen eigenen Instanz DB.
Ebenso wie jeder FB, der in einem Baustein aufgerufen wird, der keine STAT Variablen hat.

Es mag Gründe geben, weshalb man einen FB mehrmals mit gleichem IDB aufruft, aber das ist eine seltene Ausnahme und trifft bei dir sicher nicht zu...

Micha
 
Um AUDSUPERUSERs Post etwas anschaulicher zu machen:

Code:
NAME            DATENTYP
Tor_1            FB4
Tor_2            FB4
So die Schnittstelle

Code:
CALL #Tor_1
 
CALL #Tor_2
So die Aufrufe

hoffe geholfen haben zu können!
 
"P: Flanke 0->1 abfragen"-Glied schuld?

Vielen Dank euch allen. Das hat mir scho sehr geholfen und ich konnte viele Instan-DB's killen.

Das Problem besteht aber leider immer noch. Mitlerweile denke ich, dass es etwas mit den "P: Flanke 0->1 abfragen"-Gliedern zu tun hat, welche ich auch im FB4 werwende um ein SR-Flipflop anzusteuerun. Irgenwie schient dieses P-Glied einfach durchzuschalten anstatt nur die pos. Flanke auszuwerten. Wie muss ich mit diesen Flankengleidern im FB4 verfahren, dass es mit mehreren Bausteinaufrufen funktioniert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank euch allen. Das hat mir scho sehr geholfen und ich konnte viele Instan-DB's killen.

Das Problem besteht aber leider immer noch. Mitlerweile denke ich, dass es etwas mit den "P: Flanke 0->1 abfragen"-Gliedern zu tun hat, welche ich auch im FB4 werwende um ein SR-Flipflop anzusteuerun. Irgenwie schient dieses P-Glied einfach durchzuschalten anstatt nur die pos. Flanke auszuwerten. Wie muss ich mit diesen Flankengleidern im FB4 verfahren, dass es mit mehreren Bausteinaufrufen funktioniert?

Du musst für jeden Aufruf eine eigene Flanke generieren und diese im STAT Teil des FB deklarieren.
Dann klappt es auch bei mehrmals Aufrufen


bike
 
Das Problem besteht aber leider immer noch. Mitlerweile denke ich, dass es etwas mit den "P: Flanke 0->1 abfragen"-Gliedern zu tun hat, welche ich auch im FB4 werwende um ein SR-Flipflop anzusteuerun. Irgenwie schient dieses P-Glied einfach durchzuschalten anstatt nur die pos. Flanke auszuwerten.

Kann es sein, daß Du die Flankenauswertung mit temporären Variablen statt mit statischen durchführst?
Wenn ja, dann klappt so nicht. Temporäre Variablen behalten nur für einen
Bearbeitungszyklus die ihnen angedachte Funktion, bei Mehrfach-Aufrufen in FB's werden sie im Programmzyklus vom nächsten aufgerufenen FB kaputtgeschrieben. Darum statische nehmen, die behalten ihren Zustand.

Gruß
Corosop15
 
Du musst für jeden Aufruf eine eigene Flanke generieren und diese im STAT Teil des FB deklarieren.
Dann klappt es auch bei mehrmals Aufrufen

bike

Danke für Eure Antworten. Das Probelm hat sicher damit zu tun, dass ich temporäre Variablen verwendet habe. Wie meinst du dass genau, dass ich für jeden Aufruf eine eigene Flanke definieren muss? Meinst du im FB4 oder im FB1?

Ich habe nun mal eine STAT-Variable für die Flanke (Flanke des Schliessimpulses) verwendet. Dies bewirkt nun, das wenigstens etwas funktioniert. Jedoch wird der Impuls immer für alle Tore gleichzeigtig erzeugt und nicht für jedes einzeln...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für Eure Antworten. Das Probelm hat sicher damit zu tun, dass ich temporäre Variablen verwendet habe. Wie meinst du dass genau, dass ich für jeden Aufruf eine eigene Flanke definieren muss? Meinst du im FB4 oder im FB1?

Ich habe nun mal eine STAT-Variable für die Flanke (Flanke des Schliessimpulses) verwendet. Dies bewirkt nun, das wenigstens etwas funktioniert. Jedoch wird der Impuls immer für alle Tore gleichzeigtig erzeugt und nicht für jedes einzeln...

Du wirst pro Tor eine eigene Flanke brauchen, also noch elf baugleich zu der die Du bereits editiert hast.
Die Flanken im FB1 schreiben und als "IN" an den FB 4 übergeben.

Der Weg sieht doch schon gut aus!
 
Zuletzt bearbeitet:
Du wirst pro Tor eine eigene Flanke brauchen, also noch elf baugleich zu der die Du bereits editiert hast.
Die Flanken im FB1 schreiben und als "IN" an den FB 4 übergeben.

Der Weg sieht doch schon gut aus!

Leider kann ich mir das nicht ganz vorstellen.
Ich habe deshalb mal zwei Bilder meines Programms angehängt.
Vielen Dank
 

Anhänge

  • Ausschnitt aus FB1.JPG
    Ausschnitt aus FB1.JPG
    47,3 KB · Aufrufe: 37
  • NW aus FB4.JPG
    NW aus FB4.JPG
    56,4 KB · Aufrufe: 40
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, ich dachte an was anderes...
Also hat jedes Tor seine INTERNE Flanke

( @ nordischerjung: das im Fußball NICHT machen, wird 'n Eigentor ):cool:

Könnte der Impuls vielleicht durch die #M_abwesenheit / #M_abend erzeugt werden?
 
Hallo,

Besteht dein Problem noch?

Kannst mal den kompletten FB zeigen ?


Hallo Verpolt

Ja das Problem besteht noch. Der Schliessimpuls wird erst gestartet, wenn ich bei ALLEN Toren den Eingang #M_Abwesenheit setze. Eigentlich sollte das für jedes Tore einzeln klappen.

Ich werde heute Abend mal den ganzen FB4 posten. Im Moment habe ich keine Möglichkeit dazu.

Danke und bis später
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

So am Rande sehe ich noch, daß M1 im Temp-Bereich ist.
Wenn dort noch mehr Temp-Variablen hast, gehe ich davon aus, daß dort das Problem ist.

kopier doch mal alle Temp-Variablen in den Stat-Bereich und teste nochmal.

Der Schliessimpuls wird erst gestartet, wenn ich bei ALLEN Toren den Eingang #M_Abwesenheit setze

Da der Temp-Bereich vom vorhergehenden FB-Aufruf undefiniert ist. Wenn alle den M_Abwesenheit bekommen sind die zugehörende TempVars wahrscheinlich bei allen gleich.
 
Hallo,

So am Rande sehe ich noch, daß M1 im Temp-Bereich ist.
Wenn dort noch mehr Temp-Variablen hast, gehe ich davon aus, daß dort das Problem ist.

kopier doch mal alle Temp-Variablen in den Stat-Bereich und teste nochmal.

Da der Temp-Bereich vom vorhergehenden FB-Aufruf undefiniert ist. Wenn alle den M_Abwesenheit bekommen sind die zugehörende TempVars wahrscheinlich bei allen gleich.

Hallo Verpolt

Genau das war es, vielen Dank für diesen Hinweis. Das Problem war tatsächlich, dass ich Baustein-intern TEMP-Variablen benutzt habe anstat STAT-Variablen. Nach dem Befolgen deines Tipps (kopieren der Temp-V in den Stat-Bereicht) funkionierte alles prächtig.

Habe wieder vieles lernen dürfen! Danke Euch allen :D
 
Zurück
Oben