Gleiche Instanz - mehrfach aufrufen ...

Larry Laffer

Super-Moderator , User des Jahres 2008-2009
Teammitglied
Beiträge
14.525
Reaktionspunkte
3.338
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wenn ich einen FB (es ist ein slebstgebauter Spezial-FB) mit der gleichen Instanz mehrfach aufrufe allerdings unterschiedliche Start-Eingänge belege, wie wirkt sich das auf die Funktion desselben aus ?

Zum Verdeutlichen:
Ich habe einen FB163 mit DB163, der neben ein paar INT-Parametern auch ein paar Steuer-Eingänge hat.
Wenn ich nun den FB zum Beispiel im OB35 mit den Steuer-Eingängen IN1 und IN2 versorge und den gleichen FB und DB im OB1 an den Steuer-Eingängen IN3 und IN4 versorge, kommen die sich ins Gehege, wenn ich das (möglicherweise) auch mal gleichzeitig mache. Oder gibt das keinen Stress ?
Ich habe das bisher noch nicht gemacht, aber prinzipiell geht das ja und ich hätte eine Anwendung, wo ich das (eventuell) gebrauchen könnte ...
 
Hallo,
wenn ich einen FB (es ist ein slebstgebauter Spezial-FB) mit der gleichen Instanz mehrfach aufrufe allerdings unterschiedliche Start-Eingänge belege, wie wirkt sich das auf die Funktion desselben aus ?

Zum Verdeutlichen:
Ich habe einen FB163 mit DB163, der neben ein paar INT-Parametern auch ein paar Steuer-Eingänge hat.
Wenn ich nun den FB zum Beispiel im OB35 mit den Steuer-Eingängen IN1 und IN2 versorge und den gleichen FB und DB im OB1 an den Steuer-Eingängen IN3 und IN4 versorge, kommen die sich ins Gehege, wenn ich das (möglicherweise) auch mal gleichzeitig mache. Oder gibt das keinen Stress ?
Ich habe das bisher noch nicht gemacht, aber prinzipiell geht das ja und ich hätte eine Anwendung, wo ich das (eventuell) gebrauchen könnte ...




wenn du im Baustein ggf. den


SFC6 RD_SINFO


einsetzt und damit sicherstellst, das nur "gewisse" Eingänge (der Zustand) in Abhängigkeit zur AUFRUFUMGEBUNG (OBxx/OBxx) in deine innere Funktion hereinkopiert werden, dann dürfte es gehen.


Ohne dem Wissen - von wo du Aufrufts - gibst bei den Signalen sonst "Wettlaufeffekte".


.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das währe eine glatte sechs. Der OB35 unterbricht evt. deine Bearbeitung bei dem Aufruf im OB1 oder sonst wo. Ich kann mir nicht vorstellen, das man eine solche Lösung benötigt, schon gar nicht, das man dort Fehlersuche betreibt. Was auch immer du vorhast, bitte nicht so.

pt
 
@Zotos:
...
ausnahmsweise ...?????
Na du bist ja Klasse. ;)
Aber stimmt. Das hatte mich auch auf die Idee gebracht. Es dreht sich bei mir allerdings um etwas anderes. Ich bin wieder bei meinem Lieblingsspiel - Messwerte aufzeichnen (OB35) und hinterher auswerten (OB1 oder FC xyz).
Das hatte ich vor Urzeiten auch mal als Beitrag ("2 FB's und 1 DB" oder so). Richtig befriedigend hatte ich das allerdings nie gelösst. Nur halt so, dass es funktioniert ...

Ich hatte allerdings bislang noch nicht die Musse, das zu testen und da dachte ich halt : "frag doch mal die anderen, was die so davon halten ..."
:???:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe die Anwendung eben immer noch nicht.

Du willst im OB35 z.B. einen Messwert Aufnehmen in dem das Du IN_WERT und IN_MESSEN beschaltest und im OB1 bzw. FCxy willst Du z.B. IN_AUSLESEN beschalten um an die Daten zu kommen?

Also Daten und Methoden kombinieren?

Also ohne einen DB und zwei FCs zu nehmen damit Du nur an einer Stelle mal was ändern musst und nicht an drei?

Oder bin ich jetzt auf dem Falschen Dampfer?
 
Wenn ich ausnahmsweise mal auch das verstanden habe was ich gemeint habe zu lesen dann hat der Hartmut Lux >hier< sowas gemacht.


ja ZOTOS, da wird der FB mehrfach mit dem selben IDB aber unterschiedlicher "anparametrierter" TimerNummer aufgerufen.

WOBEI auch ein FC mit intern "gepointertem" normalen DB verwendbar wäre
 
ja ZOTOS, da wird der FB mehrfach mit dem selben IDB aber unterschiedlicher "anparametrierter" TimerNummer aufgerufen.

WOBEI auch ein FC mit intern "gepointertem" normalen DB verwendbar wäre

... genau so ...
Nur eben halt bezogen auf meine Anwendung :
Ich habe (hätte) einen Aufruf desselben FB's im OB35 in dem er dann Messdaten aufnimmt, wenn es ihm befohlen wird und einen Aufruf außerhalb davon (damit der SPS-Zyklus nicht so hochgepeitscht wird), wo ich dann die Auswertung vornehme (Glättung, Mittelwert, Peek min./max., Impulsbreite usw.)

Aktuell läuft das mit 1x FC, 1x FB und 2x DB - im Prinzip wie von IBFS gesagt ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also bei einem FB muss man die Ein- und Ausgänge nicht beschalten.

Wie wäre es einen Eingang IN_modus zu nehmen und im FB dann eine CASE (oder SPL in AWL) und dem Modus entsprechend den Code auszuführen.
 
Also bei einem FB muss man die Ein- und Ausgänge nicht beschalten.

Wie wäre es einen Eingang IN_modus zu nehmen und im FB dann eine CASE (oder SPL in AWL) und dem Modus entsprechend den Code auszuführen.




Eingang IN_modus ersetzen durch SFC6 = RD_SINFO (OB35= CASE [eins] / OB1 = CASE [irgendwas])
 
Für soetwas macht man eigentlich 2 Bausteine, einen Datensammler, einen Auswerter, aber ich meine mich erinnern zu können, dass du das nicht willst.

pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@zotos:
Ich hatte bei der Verriegelung der Funktionen an etwas If-Then-Else-mässiges gedacht ... und ... genau wie du vorgeschlagen hast könnte ich mir vorstellen die jeweils nicht benötigten Eingänge (des FB) auch nicht zu beschalten.

Der Hintergrund meiner Frage zielte eher auf den Punkt ob sich die unterschiedlichen Aufrufe in die Quere kommen können. Hört sich aber so an, als könnte ich das mal probieren.

@plc_tippser:
Ich meine auch, dass wir beide das Thema "damals" durchgekaut hatten. Ich mache das aktuell (wie schon gesagt) so wie du es beschrieben hast. Die andere Variante (mit nur einem FB und 2 seperaten Funktionen) gefällt mir aber besser (auch wenn es unschön ist - ich kann mir aber schlimmeres vorstellen).
Dieses Thema wieder aufzugreifen ist tatsächlich die "Schuld" von Hartmut Lux.
 
ja ZOTOS, da wird der FB mehrfach mit dem selben IDB aber unterschiedlicher "anparametrierter" TimerNummer aufgerufen.

WOBEI auch ein FC mit intern "gepointertem" normalen DB verwendbar wäre

Kaüiere die Frage nicht,

dafür hat man ja die FB`s damit man die so oft man sie benötigt hintereinader aufrufen kann.

Natrülich benötigst du dann andere Werte.

Angenommen du hast 30 Anlogmesswerte mit unterschiedliechen DB`s etc. und benötigst für jeden einen Offsetwert und eine eignes erstellte Offsetfunktion.
Dann machst du halt 30 Aufrufe deines FB.

Vor allem sparst du hauffen CPU Speicher durch.
 
@maxi:
Hallo und guten Abend werter Kollege maxi,
lies mal den Titel diese Threads und gleiche das mal mit Deiner Antwort ab ;o)
Du weist schon was eine Instanz ist?

Mit föniglichem Gruß // ach das steht ja schon in meiner Signatur ;o)

PS: Ich weis ja das Du auf Begrüßung und Abschieds Grußformel großen wert legst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

...Wenn ich nun den FB zum Beispiel im OB35 mit den Steuer-Eingängen IN1 und IN2 versorge und den gleichen FB und DB im OB1 an den Steuer-Eingängen IN3 und IN4 versorge, kommen die sich ins Gehege, wenn ich das (möglicherweise) auch mal gleichzeitig mache. Oder gibt das keinen Stress ?...
Prinzipiell könnte das so schon funktionieren. Es sind ja versch. Eingänge, welche jeweils versorgt werden. Die Eingänge werden in der Instanz gespeichert. Stress bekommst du lediglich, wenn ein "Unkundiger" an deinem Programm rumwurschtelt.

Wenn ich es richtig deute, legst du die Messwete in den Instanzdaten ab? Derartiges gehört ganz einfach in einen Global-DB! Dann kannst du von überall ungeniert auf diese Daten zugreifen, event. über Pointer.

Übrigens, deine genannten Auswertungen der Messwerte lassen sich u.U. sehr vorteilhaft im OB35-Zyklus ausführen. Ich denke dabei besonders an die Dämpfung der Werte.


Gruß, Onkel
 
Aus gegebenem Anlass (blick in den Chat zu HDD) muss ich mich von dem Projekt distanzieren.

Ich finde das Konzept zwar sehr interessant. Daten mit Methoden zu kapseln. Aber an sich wieder spricht es der etwas der Natur von S5 (und somit auch der S7) wo statische Daten möglichst getrennt von den Methoden gespeichert werden.

Also ich würde das einfach mal testen.
 
@Onkel:
Gleichzeitig Auswerten mit dem Einlesen ist nicht sinnvoll, weill ich unter Umständen schon sehr viele Werte mit berücksichtigen muss (Beispiel Glättung mit hoher Stufe). Es gibt aber auch Auswertungen, die überhaupt erst sinnvoll sind, wenn alle Werte vorliegen (in der Regel ca. 100 - 200). Das läßt sich im OB35-Intervall nicht machen. Die Zykluszeit geht mir bei der Auswertung schon durchaus mal um 100 ms höher.
Ein 2. DB (global) hatte mir dehalb nicht gefallen, weil ich meinen Aufzeichne-Baustein durchaus auch schon 2x im Programm habe. Da drängte sich mir die Instanz-Geschichte förmlich auf ...
Mit dem "Unkundigen" hast du recht, allerdings ist der Baustein in seiner Funktion so komplex, dass du ihn ohnehin verstehen musst (und sein drumherum), wenn du daran herummachen willst.

@Zotos:
Das ganze Konstrukt ist übrigens in SCL geschrieben. Bestimmt läßt das dein Herz höher schlagen und dich irgendwelche Vorbehalte vergessen.

@Alle:
Ich danke auf jeden Fall allen für die Zuschriften. Sie haben mich motiviert das mal zu testen ...
 
Zurück
Oben