Step 7 Multiinstanz FBs erzeugen alle den gleichen Ausgang

SenderTs

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

das ist mit eines meiner ersten Fragen an euch :)..

Ich habe folgendes Problem, wobei Ihr mir hoffenltich helfen könnt.

Ich rufe mit dem OB1 ein FB20 auf welches eine allg. Monitoring Routine enthält. In dem FB20 rufe ich 12x eine multiinstanz FB (FB21) auf, welches einzelne Sensoren auf Grenzwertüberschreitung überprüft.

Die Eingänge und Ausgänge bei dem FB21 sind identisch, sodas ich nur den Input (Sensorwert) und den Output (Alarm Sensor) anpassen muss.

Nun habe ich jedoch ein Problem. Wenn ich z.b. auf einem Sensor ein Alarm habe, dann zeigt er mir bei allen Sensoren am Output ein Alarm an. Mir scheint es so, als würden sich die FB21 den gleichen speicherraum teilen.

Was mache ich falsch?...

Vielen dank für eure Hilfe!
Richard
 
Ich versuche es mal mit dem Hellsehen.

Hast du tatsächlich 12 Instanzen des FB21 im STAT Bereich angelegt ?
Oder hast du nur einen angelegt und diese Instanz dann 12 mal aufgerufen ?
Letzteres würde das Verhalten das du beschreibst erklären, da ja dann nur ein einziges Mal 'das Gedächtnis' im Speicherbereich angelegt und mit jedem Aufruf überschrieben wird.

Gruß B.
 
Hallo B.A.

wie??.. muss ich 12x den FB21 im Stat bereich des FB20s anlegen?...
Dachte 1x reicht. Muss der Name im Stat gleich oder Verschieden sein?

Viele Grüße,
Richard
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie??.. muss ich 12x den FB21 im Stat bereich des FB20s anlegen?...
Dachte 1x reicht. Muss der Name im Stat gleich oder Verschieden sein?

Wenn du 12 VERSCHIEDENE GEDÄCHTNISSE haben willst, dann muss du - der Name "Multiinstanz" sagt es schon - 12 STAT-Bereiche (natürlich mit verschiedenen Namen) anlegen.
 
IBFS:
Vielen Dank für den Hinweis.. wie gesagt bin noch ziemlich neu in der SPS Programmierung
Ich werde es gleich ausprobieren :)
 
Zuletzt bearbeitet:
Hallo zusammen jeglicher versuch eine Multiinstanz zu erzeugen scheitert bisher leider.
Klappt seit 2 Tagen nicht trotz lesen jeglicher Doku.:-(
Ich lege die schnittstelle auf den Statischen Bereich.
Der Baustein ist Multiinstanzfähig.
Sobald ich einen MI Aufruf mache kommt die Fehlermeldung
Anbei ein Screenshot vlt. könnt Ihr mir sagen wo ich Fehler mache.
Danke vorab.
 

Anhänge

  • Multiinstanz.jpg
    Multiinstanz.jpg
    240,8 KB · Aufrufe: 40
Vielleicht solltest du dem FB2 erst einmal etwas Leben einhauchen? Wenigstens eine statische Variable anlegen? Eingänge? Ausgänge?
 
Vielleicht solltest du dem FB2 erst einmal etwas Leben einhauchen? Wenigstens eine statische Variable anlegen? Eingänge? Ausgänge?
Wenn du in dem FB2 in das MW12 schreibst, was willst du dann damit als Multiinstanz? Jeder Aufruf schreibt in das selbe Merkerwort. Das ergibt keinen Sinn.
 
Wenn du in dem FB2 in das MW12 schreibst, was willst du dann damit als Multiinstanz?
Vlt. deshalb, weil Multiinstanz nicht bedeutet, den FB mehrfach aufzurufen, sondern nur, dass sich die Instanzdaten von aufrufenden und aufgerufenem FB in einem gemeinsamen IDB befinden.
;)

Aber natürlich hast Du Recht, dass dazu erst mal überhaupt Instanzdaten vorhanden sein müssen.
 
Wie der Onkel für Dich bemerkt hast, hast Du im FB überhaupt keine Instanzdaten angelegt, um diese in eine Multiinstanz einzubringen.

Instanzdaten entstehen durch Anlegen von Variablen im oberen Bereich Deines Screenshots bei IN, OUT usw., die dann im Programm darunter verwendet werden können (und auch sollten, denn sonst machen sie ja keinen Sinn).
Über die IN, OUT-Variablen kann man an den FB bei mehreren Aufrufen (egal ob MI oder nicht) unterschiedliche Variablen übergeben. Vergleichbar mit den vorgegebenen Logik-Gattern. Du legst zwei Eingänge außen an, intern werden sie immer auf die gleiche Weise verknüpft und das Ergebnis an den außen angegebenen Ausgang übergeben.
 
OHH vielen Dank ich teste das gleich mal!
Ich dachte das macht der automatisch wenn ich sage " FB xy als Multiinstanz aufrufen" da ist die Step 7 in die Tabelle gesprungen.
Ok Danke euch beiden!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich dachte das macht der automatisch wenn ich sage " FB xy als Multiinstanz aufrufen" da ist die Step 7 in die Tabelle gesprungen.
Das er da hinspringt, war das Zeichen, da gefälligst was einzutragen.
;)

Aber woher soll denn der Editor wissen, was Du da so an Variablen benötigst? Sollen die Step7-Programmierer bei Siemens schon im Voraus wissen, was Du später vlt. so programmieren möchtest?
:confused:

Die geben nur vor, wie das dann auszusehen hat.
 
GEILLLLLL hat funktioniert.
VIELEN HERZLICHEN DANK.

Ich habe bevor ich den FB2 zu DB1 verwiesen habe, wie Du plastisch erklärt hast erst die Werte in die Symboltabelle von FB1 eingetragen und danach eine Rechenfunktion hinterlegt.
Dann FB2 auf DB1 verwiesen!
Nun lese ich die Werte aus den Statischen Variablen von einem einzigem DB in den verschiedenen FB´s und verknüpfe diese Worte mit anderen PEW SUPER!
Somit kann ich je nach Rezept verschiedene Daten von dem selben DB laden in dem ich vorher Werte hinterlegt habe.
Stehen die stat Werte sofort zur Verfügung?

Anbei ein Bild ist nur eine wilde Konstruktion ohne wirkliche Funktion nur um das Prinzip zu verstehen.
2 Fragen:
1: Kann ich diese Statischen Werte nicht in Abhängigkeit von einem analogen Sensor überschreiben?
2: Kann ich Werte in dem FB2 die Speicheradresse für nur diejenige Instanz ändern?
Z.B.
FB 2 Aufruf von FB1 Speichert in db1.dbw0
FB 2 Aufruf von FB3 speichert in db1.dbw2
Oder dient diese Multiinstanz nur als Quellspeicher und nicht als Ablageort?
 

Anhänge

  • Multiinstanz Konstruktion.jpg
    Multiinstanz Konstruktion.jpg
    227,6 KB · Aufrufe: 22
Zuletzt bearbeitet:
Jeder Aufruf von FB1 kann andere Werte für stat1 bis 3 enthalten. Diese unterschiedlichen Werte werden im jeweiligen Instanzdatenbaustein des Aufrufs gespeichert. Die Werte unterschiedlich überschreiben kannst Du durch die Nutzung der IN bzw. INOUTs.
Also:
1. Aufruf FB1 mit Daten im IDB1
2. Aufruf FB1 mit anderen Daten im IDB2
3. Aufruf FB1 mit noch anderen Daten im IDB3
usw.

[EDIT]:
FB 2 Aufruf von FB1 Speichert in db1.dbw0
FB 2 Aufruf von FB3 speichert in db1.dbw2
Das wäre dann die Nutzung der OUTs.
Im FB1 übergibst Du das Ergebnis an #out und an den jeweiligen Aufrufen des FB1 gibst Du dann am PIN #out den Speicherort db1.dbw0 oder db1.dbw2 an.[/EDIT]

Das ist einfach erstmal eine mehrfache Verwendung des FBs. Dazu sollten im FB normalerweise nur lokale Variablen (das sind die, die Du gerade angelegt hast) verwendet werden. Deshalb hat Dich der Onkel vorhin darauf hingewiesen.


Wenn Du jetzt nicht für jeden Aufruf des FB1 einen separaten IDB erzeugen willst, kannst Du die Instanzdaten mit in den IDB des aufrufenden FB integrieren, wie Du es gerade erfolgreich gemacht hast.
Das macht natürlich vor allem bei mehrfachem Aufruf eines FBs Sinn (um z.B. nicht die oben aufgeführten 3 IDBs für jeden Aufruf zu erzeugen), ist aber nicht Bedingung dafür. Deshalb werden Multiinstanz und mehrfacher Aufruf eines FBs auch gerne in einen Topf geschmissen.
Sie sind aber nicht voneinander abhängig und schon gar nicht das Gleiche.
 
Zuletzt bearbeitet:
Zurück
Oben