Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: Instanzen/Multiinstanzen?

  1. #1
    Registriert seit
    30.09.2005
    Beiträge
    33
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    wäre dankbar, wenn man mich diesbezüglich ein wenig aufklären könnte.
    Will einige FBs (als AWL Quellen) programmieren, die oftmals die gleichen Variablen benutzen.
    FB1 ist fertig und funktioniert auch. Dem FB1 habe ich jetzt am Ende der Quelle den InstanzDB DB1 zugeordnet, in dem die Variablen gespeichert werden.
    Wenn ich jetzt den FB2 programmiere, wie geht das, dass die FB2 quasi auch die Variablen des DB1 mitbenutzt, oder muss ich für jede FB einen eigenen InstanzDB?
    Ich denke mal, dass ich das nicht muß, aber dann hätte ich gleich noch eine Frage, wie ich das denn dann regel, dass der FB2 zwar die Variablen des DB2 nutzt, ich aber ja auch Variablen im FB2 habe, die ich im FB1 nicht brauche. Ist das Step7 so schlau, dass es die zusätzlichen Variablen dazuschreibt? Oder müsste ich quasi im FB1 sämtliche Variablen deklarieren, die in den restlichen FBs vorkommen?
    Hoffe es ist verständlich, wo meine Frage liegt.

    Programmiere in AWL, auf einer 300er, Siemens Step 7, Ver. 5.0 SP2,
    Zitieren Zitieren Instanzen/Multiinstanzen?  

  2. #2
    Registriert seit
    25.09.2005
    Ort
    Neuss
    Beiträge
    278
    Danke
    11
    Erhielt 31 Danke für 29 Beiträge

    Standard

    Bei Multiinstanzen kann man einen Baustein mehfach mit unterschiedlichen Datenbausteinen nutzen. D.h. eine FB 1 kann man mal aufrufen mit z.B. einem Instanz-DB 1, oder z.B. ein 2. mal mit beispielsweise dem Instanz-DB 2.
    z.B.
    call FB1, "Instanz-DB1"
    call FB1, "Instanz-DB2"


    Von "außen" kann man über den normalen DB-Zugriff auf die Daten zugreifen z.B. L "Instanz-DB1".Daten, wobei "Instanz-DB1" der symbolische Name des Instanz-DBs ist und "Daten" der symbolische Name der Variable in der Instanz.

    Aus deiner Beschreibung werde ich noch nicht ganz schlau, vielleicht postest Du mal ein paar Zeilen deines Programms, damit es für mich verständlicher wird.

  3. #3
    Anonymous Gast

    Standard

    Warum muss man immer mit FBs programmieren? Mit FCs wäre ggf. das auch Problem zu lösen. Man projektriert einen x-beliebigen DB, der die Daten enthält, auf die dann in den FCs zugriffen wird.

    Ich glaube, dass vielfach der Sinn und damit auch die Anwendung der Instanz-DBs nicht verstanden wird. Ein Instanz-DB ist immer dann ZWINGEND erforderlich, wenn LOKALE STATISCHE Variablen verwendet werden sollen, das geht nur innerhalb von FBs. Diese Erklärung ist zwar etwa so, wie von hinten durchs Auge in die Brust.

    Aber wann verwendet man lokale statische Variablen? Z.B. dann, wenn man Zwischenergebnisse von einem in den nächsten Zyklus retten will und diese Zwischenergebnisse nur für die jeweilige Instanz des FBs Gültigkeit haben sollen.

    Wann wendet man einen FB an? Immer dann wenn mehrere gleichartige Funktionsabläufe zwingend mit einem gleichen Algorithmus realisiert werden sollen und Zwischenergebnisse instanzbezogen gespeichert werden MÜSSEN, weil die Zwischenergebnisse im nächsten Zyklus wieder angewendet werden. Hiebei fällt jedoch in den meisten Fällen die Arbeit an, eine Initialisierung für den erstmaligen Durchlauf einer Instanz zu projektieren.

    Haben Zwischenergebnisse nach Verlassen des FBs ihre Bedeutung verloren, so kann der Funktionsablauf auch mit einem FC realisiert werden. Zwischenergebnisse werden dann dynamisch auf den Stack gespeichert und sind nach Verlassen des FCs ohne Bedeutung.

    Will man z.B. mehrere unterschiedliche FCs nutzen, dabei den Zugriff auf gemeinsame Daten haben und insgesamt mehrere Instanzen von diesem System erstellen, dann geht das ganz simpel, indem man den FCs z.B. die Nummer des gemeinsamen Datenbaustein als Parameter übergibt.

    Beispiel:
    Es sollen die Funktionsaufrufe FC1, FC2 und FC3 jeweils unterschiedliche Aufgaben einer Gesamtaufgabe erfüllen. Der Typ der Gesamtaufgabe ist einem Projekt 4 mal vorhanden.

    Lösung:
    Es werden die Datenbausteine DB10, DB20, DB30 und DB40 jeweils mit der gleichen Struktur angelegt. Die FCs werden so projektiert, dass ihnen die Nummer des Datenbausteins entsprechend der jeweiligen Instanz als Parameter übergeben werden kann. Es folgt die 1. Instanz einer Sequenz, welche die Aufrufe für den FC1, FC2 und FC3 ausführt, bei dem jeweiligen Aufruf wird der Parameterwert 10 übergeben, danach folgt die 2. Instanz einer Sequenz, als Parameterwert wird 20 übergeben, bei der 3. Instanz wird der Wert 30 und schließlich bei der 4. Instanz der Wert 40 übergeben.

    Die o.g. Vorgehensweise ist nur ein Ansatz für einen Lösungsweg, ich würde jedenfalls wenn sich immer die gleiche Sequenz der Aufrufe von FC1, FC2 und FC3 ergeben würde, darüber nachdenken und die in den FC1, FC2 und FC3 verpackten Funktionsabläufe in einen FC oder ggf. in einen FB zusammenfassen.

    Barnee

  4. #4
    Registriert seit
    30.09.2005
    Beiträge
    33
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Uff, da werde ich ja wieder mit Informationen erschlagen
    Danke erstmal.
    Eine kleine Frage nur noch, ich kann doch auch statt
    call FB1, "Instanz-DB1"
    call FB1, "Instanz-DB2"


    verschiedenen Funktionen den gleichen DB zuordnen, oder?
    Also:
    call FB1, "Instanz-DB1"
    call FB2, "Instanz-DB1"

    Das ist eigentlich nur was ich brauche, durch die Erklärung von Barnee habe ich eingesehen, dass ich das mit den Instanzen mal so gar nicht verstanden hatte und ich die auch nicht wirklich brauche. Mir reicht ein DB, indem die Variablen gespeichert sind.

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @Sh4gr4th
    Das geht nicht.
    Wenn du auf die gleichen Variablen zugreifen willst, dann nimm einen globalen DB, definiere deine Variablen darin und öffne diesen DB im FB1, FB2, ... zum lesen und schreiben.

    @HeizDuese
    Es ist nicht unbedingt ratsam, von "außen" auf Instanz-DB zuzugreifen. Es geht natürlich, aber bei jeder Änderung an der FB-Schnittstelle, ändern sich die Adressen der Variablen im Instanz-DB und man muß das gesamte Programm "nachbasteln".
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    30.09.2005
    Beiträge
    33
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hm, das ist ja schade dass das nicht geht. Sehr ärgerlich sogar, macht mir einen Strich durch sämtlich Ideen , die ich hatte....

    Wie ist das denn dann mit den Output-Variabeln, die ich in der AWL Quelle deklariert habe, wie erkläre ich dann dem FB, dass er beispielsweise die jetzige Output Variable(Istwert oder Busy), aus dem DB nimmt?
    Oder auch die Eingangsvariablen? Die hab ich ja oben in der AWL Quelle bei Input deklariert, beispielsweise Spindeladresse?
    Muss ich die alle extra im FB in meinem DB abspeichern bzw. herausladen und dann zu den Variablen meiner Funktion transferrieren, also quasi zu Fuß? Genau das dachte ich könnte ich umgehen, wenn ich mit so einem InstanzDB arbeite, aber das bin ich wohl am Thema vorbeigerauscht, was so ein InstanzDB für eine Funktion hat...

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Input-, InOut-, und Outputvariablen trägst du ohnehin außen an den FB/FC an. Die tauchen zwar bei einem FB im Instanz-DB auch mit auf, aber sie kommen ja über die FB-Schnittstelle rein und raus. Wenn du also an jeden FB/FC die gleichen Variablen (aus einem DB oder Merker) anträgdt, wird auch mit diesen gearbeitet. Aber Vorsicht, Output-Variablen müssen unbedingt im FB/FC zugewiesen werden, sonst ist ihr Wert am Ausgang undefiniert. InOut-Variablen sind Durchgangsvariablen (wohl am Besten geeignet) die am Anfang im FB eingelesen und am Ende wieder ausgelesen werden.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    Anonymous Gast

    Standard

    @Sh4gr4th
    Du solltest dir die Unterschiede zwischen FBs und FCs klarmachen. Der wesentlichste Unterschied zwischen diesen beiden Bausteinarten ist, dass ein FC KEINE statischen Variablen speichern kann! Werden für die Realisierung eines Algorithmus keine statischen Variablen benötigt, dann macht es in den meisten aller Fälle für die Realisierung keinen Unterschied ob ein FB oder ein FC verwendet wird, wenn man von der Ausnahme absieht, dass ein FB IMMER einen Instanz-DB benötigt, ein FC dagegen NICHT. Und wenn die Realisierung auch mit einem FC erfolgen kann, dann ist diese Art der Realisierung vorzuziehen, weil somit keine zusätzlichen Resourcen gefressen werden. Bei kleineren Programmen mag das so nicht ins Gewicht fallen, aber bei größeren Programmen, die auf kleinen CPUs laufen, kann das schon einen Gewinn bringen, einen FC anstatt eines FBs zu verwenden.

    Ein Umsteiger von S5 auf S7 sollte sich merken, dass die Funktionalität eines S5-FBs IMMER in einem S7-FC realisiert werden kann, dagegen ist ein S7-FB nur äußerst selten auf einem S5-FB übertragbar.

    Wie auch schon in diesem Thread angedeutet wurde, sollte ein Instanz-DB wie eine heilige Kuh behandelt werden, d.h. da ich keine heiligen Kühe mag, verwende ich FBs nur dort, wo es wirklich angebracht ist.

    Wenn in deinem Fall zwei unterschiedliche FBs den gleichen Instanz-DB verwenden sollen, dann MUSS die Schnittstelle dieser beiden FBs völlig identisch aufgebaut sein, sich auf eine solche Konstruktion einzulassen, halte ich aber für eine waghalsige Aktion, wenn man dann Inhalte des Instanz-DBs anderswo manipulieren will.

    Ich möchte das auch noch unterstreichen, was Ralle zu den OUT-Variablen geschrieben hat, d.h. es müssen immer ALLE OUT-Variablen mit einer Zuweisung bearbeitet werden, bevor die Programmbearbeitung in einem FB/FC beendet oder auch vorzeitig abgebrochen wird.

    Gruß Barnee

  9. #9
    Registriert seit
    30.09.2005
    Beiträge
    33
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ja, danke, ist mir jetzt auch klar geworden, dass ich den InstanzDB missbraucht hätte.
    Aber du schreibst ich kann in einer FC keine statischen Variablen speichern. Das heißt doch nicht etwa, dass ich aus einer Funktion heraus keine Werte in einen DB meiner Wahl abspeichern kann? Nee, damit sind jetzt wirklich nur speziell die Variablen die auch innerhalb der Funktion deklariert werden gemeint, richtig?
    Dann werde ich mit FCs auskommen (glaube ich jetzt zumindest noch nach den ersten Überlegungen) und mir einen DB erstellen, auf den alle FCs ihre Daten ablegen können und dürfen.

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du kannst in einem FC Daten speichern soviele du willst und in den DB in den du sie haben willst. In einem FB können intern statische Variablen deklariert werden, die dieser dann in seinem Instanz-DB ablegt. Die gibt es in einem FC nicht. Deswegen können aber trotzdem FC und FB immer Daten in andere Datenbausteine schreiben und lesen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Allgemeines zu Multiinstanzen
    Von MikeJ im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 06.01.2011, 18:04
  2. Instanzen
    Von Deep Blue im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 09.10.2008, 11:00
  3. Multiinstanzen in GRAPH?
    Von derbenny im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.09.2007, 19:05
  4. Multiinstanzen
    Von uwme2002 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.06.2006, 06:52
  5. Multiinstanzen
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.01.2005, 11:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •