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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Dynamische indirekte InstanzDB bei FB Aufruf ?

  1. #1
    Registriert seit
    14.09.2011
    Beiträge
    109
    Danke
    17
    Erhielt 5 Danke für 5 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,
    ich suche mir seit ein paar Tagen die Finger wund ...

    Ich arbeite einem Modul in SCL mit welchem ich mehrere FBs und deren InstanzDBs aufrufen muss.

    Code:
    VAR_INPUT
        nr:INT;          // Nummer, bestimmt die Indecs der verwendeten InstanzDBs 1 ... 4 möglich
    END_VAR
    
    VAR // statische Variablen
        init: BOOL;
        dbstart:DINT;  // Basis der Instanz DB 400 + (achse - 1) * 10;
        pid:DINT;        // +0
        rampe:DINT;    // +1
    END_VAR
    
    (* Instanz DBS
     + 0 => pid Regler
     + 1 => rampe
    *)
    
        dbstart := 300 + (nr - 1) * 10;  // meine IDBS starten bei 300
        pid    :=  dbstart + 0;
        rampe  := dbstart +1;
    
    // Dies Funktioniert, statisch formuliert:
    FB234.DB300();
    FB235.DB301();
    // Dies nicht - bzw. ich werde aus der Doku auch nicht so wirklich schlau ... hier möchte ich einen iDB indirekt angeben, berrechnet s.o.
    // FB234.DB[pid];
    // FB235.DB[rampe];

    Das Problem ist in Abhängigkeit von "nr" möchte ich die FBs mit jeweils anderen iDBs aufrufen, zugordnet durch die Index Nr.

    Hat da wer vielleicht eine Idee ?

    Danke für eine Erleuchtung ...

    Euer Schatten
    Zitieren Zitieren Dynamische indirekte InstanzDB bei FB Aufruf ?  

  2. #2
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Da bin ich auch schon drüber gestolpert.
    Leider muss ich dir sagen, dass SCL das nicht kann. Das ist eigentlich unverständlich, da es bei AWL ja funktioniert.

  3. #3
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    Warum überhaupt soviel Aufwand?

    Dein Mutter-FB benötigt ja ohnehin nochmal eine eigene Instanz, da du IN und VAR verwendest,
    warum schreibst du dann die Instanz der FB234/235 nicht einfach in den VAR Bereich des Mutter-FB als "Multiinstanz"?

    @Lupo
    Wie sollte das indirekte Übergeben einer Instanz bei AWL denn funktionieren?
    Ein FB in AWL wird doch mit CALL "Name_in_STAT" oder CALL FB..., DB... aufgerufen.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  4. #4
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    @MSB:
    Du machst an dem Baustein einen IN-Parameter vom Typ BLOCK_DB und übergibst den dem aufzurufenden FB in dem Baustein. Du mußt hier natürlich beachten, dass der so übergebene Datenbaustein für die Instanz zu gebrauchen ist.

    Code:
    myDB : BLOCK_DB ;
    
    call FB100 , #myDB

  5. #5
    Avatar von shadowdb
    shadowdb ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.09.2011
    Beiträge
    109
    Danke
    17
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Moin,
    erstmal thx

    Historisch kommme ich mehr von den Hochsprachen (C, C++).
    Den FB Aufruf hatte ich mehr im Kopf als "Objekt+Daten" abgefasst.

    @MSB:
    Der Call wäre dann ja ein Methodenaufruf gewesen. Ich klemme da beim SCL transformieren oft genug noch im Kopf.

    Ich habe dann ja für/von 4x4 = 6 iDBs die Deklarationen im Header ? Aua ...

    Euer Schatten

  6. #6
    Avatar von shadowdb
    shadowdb ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.09.2011
    Beiträge
    109
    Danke
    17
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Lupo Beitrag anzeigen
    @MSB:
    Du machst an dem Baustein einen IN-Parameter vom Typ BLOCK_DB und übergibst den dem aufzurufenden FB in dem Baustein. Du mußt hier natürlich beachten, dass der so übergebene Datenbaustein für die Instanz zu gebrauchen ist.

    Code:
    myDB : BLOCK_DB ;
    
    call FB100 , #myDB

    Hmm, das ist ja eben nicht in SCL machbar ?
    Siehe auch die Antwort von Lupo.

    Die komplexe Regel & Positionieraufgabe muß ich mir nicht wirklich in AWL antun.
    Genauer gesagt ich arbeite an einer Bibliotheksfunktion, die komplexe Regelungen zum Positonieren von bis z8u 4 Achsen abhaspeln soll.
    Das Teil wird - wenn fertig vielleicht in die oscat.de als OSS aufgenommen, wenn die Lösung da akzeptiert wird und elegant genug ist ...

    Ich hab da mal probiert:
    Code:
    VAR_INPUT
        achse:INT;          // Achsen Nummer, bestimmt die Indecs der verwendeten InstanzDBs
        nr:BLOCK_DB;
        
    ...
    
       nr := WORD_TO_BLOCK_DB(134);
        FB234.#nr();
    Ergebnis: Geht nicht - der SCL kann's nicht.
    => "Der Bezeichner existiert nicht"
    => "Unbekannte Anweisung"


    Lässt sich AWL vielleicht in einem SCL Quellcode einbetten ? (* Träum *)


    Euer Schatten
    Geändert von shadowdb (24.02.2012 um 12:44 Uhr)

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Hallo,
    schau dir mal diesen Thread an:

    http://www.sps-forum.de/showthread.p...-SCL-übergeben

    Das Thema gab es vom Prinzip her schon öfters.

  8. #8
    Avatar von shadowdb
    shadowdb ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.09.2011
    Beiträge
    109
    Danke
    17
    Erhielt 5 Danke für 5 Beiträge

    Standard

    tja, gesehen, nur dir Lösung ist irgendwie blöd unflexibel.

    Aber ich fürchte zu meiner Frage gibt es wohl keine Lösung ...

    In der SCL Definition fehlt wohl der "=>" Operator.

    Euer Schatten

  9. #9
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    @ Manuel:
    Zitat Zitat von MSB Beitrag anzeigen
    Wie sollte das indirekte Übergeben einer Instanz bei AWL denn funktionieren?
    Ein FB in AWL wird doch mit CALL "Name_in_STAT" oder CALL FB..., DB... aufgerufen.
    schau doch mal hier: http://www.sps-forum.de/showthread.p...814#post274814

    Grüße
    Gebs

  10. #10
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von shadowdb Beitrag anzeigen
    tja, gesehen, nur dir Lösung ist irgendwie blöd unflexibel.

    Aber ich fürchte zu meiner Frage gibt es wohl keine Lösung ...
    Die Antwort ist eine Lösung. In SCL geht es eben nicht anders.

    Mit mehreren TONs habe ich das in SCL mal so geschrieben:
    http://www.sps-forum.de/showthread.p...882#post363882

    Wenn die Datenmenge der Instanzdaten größer ist, bietet sich aber eher der Blockmove wie in dem Post von dalbi an.

Ähnliche Themen

  1. Ich möchte bei einer Sicherheitsschranke eine „dynamische Schützkontrolle“ machen.
    Von MichaelBart im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 13
    Letzter Beitrag: 15.02.2012, 23:15
  2. Antworten: 9
    Letzter Beitrag: 10.02.2011, 10:46
  3. Dynamische DB Adressierung bei SCL
    Von mr.binford im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 08.11.2009, 11:51
  4. Indirekte Adressierung bei Codesys/TwinCat
    Von Majestic_1987 im Forum CODESYS und IEC61131
    Antworten: 26
    Letzter Beitrag: 31.03.2009, 20:00
  5. Indirekte Adressierung bei AB, Bosch, Beckhoff... IEC61131
    Von ANo im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 20.07.2005, 22:28

Stichworte

Lesezeichen

Berechtigungen

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