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

Ergebnis 1 bis 2 von 2

Thema: Erstellen eines Array[1..x] of FB,SFB in SCL

  1. #1
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Allgemein ist es in S7 nicht möglich ein Array mit FB zu erstellen.Mit kleinen Tricks läßt diese Behinderung allerdings umgehen.
    Ansatz:
    Die Deklaration einer Multiinstanz stellt nicht den eigentlichen Funktionbaustein dar,sondern lediglich den Speicherbereich innerhalb des Instanz DB`s.
    Wenn jetzt direkt hinter der Multiinstanz ein Speicherbereich (array[1..x] of struct) definiert wird,wobei jedes Element die gleiche Größe hat wie die Multiinstanz,läßt sich mittels Index[0],innerhalb einer Schleife,auf den Speicher der Multiinstanz zugreifen-austauschen.Somit ist es möglich für jeden Schleifendurchlauf mit anderen Daten in der Multiinstanz zu arbeiten.

    Beispiel:
    Zeitliches Entprellen eines Array`s von Eingängen.
    Jeder Eingang hat seine eigene Entprellzeit.
    Verwendeter SFB 3 "TP"

    Beispielprojekt liegt bei

    SCL Code
    Code:
    FUNCTION_BLOCK "Entprell"
    //**********************************************************
    VAR_INPUT
    einwort:ARRAY[1..16] OF bool;  // Jeder Eingang wird bei true um einen
                                   //zeitlichen Impuls verlängert
    Zeitfeld:ARRAY[1..16] OF TIME; // Impulszeiten der einzelnen Eingänge
    END_VAR
    //**********************************************************
    VAR_OUTPUT
    Auswort:ARRAY[1..16] OF BOOL;    // Entprellte Ausgänge
    END_VAR
    //**********************************************************
    VAR_TEMP
    index:INT;//Schleifenindex 
    END_VAR
    //**********************************************************
    VAR
        Index_Min_minus_1:INT:=0;//Hilfsindex um Speichervariable "Speicher_TP_Feld" mit [0] anzusprechen 
         TP_aktiv:"TP";//Speicherbereich-Name der Multiinstanz(SFB 3),verlängerter Impuls
        Speicher_TP_Feld:ARRAY[1..16] OF STRUCT//Speicher für Daten der einzelnen Schleifen
            wort_1:WORD;                       //Jedes Element des Array`s hat die gleiche Größe wie      
            wort_2:WORD;                       //die Multiinstanz.Die Variable "Speicher_TP_Feld" grenzt
            wort_3:WORD;                       //unmittelbar an die Multiinstanz an.                    
            wort_4:WORD;                       //Somit kann die Multiinstanz "TP_aktiv" als Element
            wort_5:WORD;                       //von "Speicher_TP_Feld" betrachtet werden.Es muß allerdings
            wort_6:WORD;                       //in einer Hilfsvariablen ( "index_Min_minus_1")der Index[0]eingeprägt
            wort_7:WORD;                       //sein,damit der Arraybereich 1 unterschritten werden kann.
            wort_8:WORD;                       //
            wort_9:WORD;                       //
            wort_10:WORD;                      //
            wort_11:WORD;                      //
            END_STRUCT;
    END_VAR
    //**********************************************************
    BEGIN
    index:=1;
        FOR index:=1 TO 16 BY 1 DO
            //---------------------------------  
            Speicher_TP_Feld[Index_Min_minus_1]:=Speicher_TP_Feld[index];
    //Informationsübergabe mittels Speicherbereichsunterschreitung von "Speicher_TP_Feld" an die Multiinstanz     
    //Speicher_TP_Feld[Index_Min_minus_1]=TP_aktiv
            //---------------------------------
            TP_aktiv(IN :=einwort[index],PT :=Zeitfeld[index]);//Entprellfunktion + Befehlsausgabe
            Auswort[index] := TP_aktiv.Q OR einwort[index];
            //---------------------------------
            Speicher_TP_Feld[index]:=Speicher_TP_Feld[Index_Min_minus_1];
    //Informationsübergabe mittels Speicherbereichsunterschreitung von  Multiinstanz an "Speicher_TP_Feld"  
    //Speicher_TP_Feld[Index_Min_minus_1]=TP_aktiv
            //---------------------------------
        END_FOR;
    OK:=true;    
    END_FUNCTION_BLOCK
    Mit Vielen Grüßen Bernard
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Erstellen eines Array[1..x] of FB,SFB in SCL  

  2. Folgender Benutzer sagt Danke zu Bernard für den nützlichen Beitrag:

    dalbi (14.03.2010)

  3. #2
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.
    Ich kenn deine Vorgehensweise von 3S her. Sprich auf den Bachmann Systemen ist ein Array aus FB's kein Problem.
    Ehrlich gesagt ich habe es in SCL noch nicht versucht. Deine Lösung find ich sehr interessant aber auch ein wenig verwirrend. Ich glaube nicht dass du damit viel Anklang finden wirst...
    SLC ist noch lange kein AnsiC!!! Aber ich bin ja schon froh dass es den AT - Operator gibt

Ähnliche Themen

  1. Software zum Erstellen eines Stromlaufplans
    Von Anonymous im Forum Suche - Biete
    Antworten: 15
    Letzter Beitrag: 28.02.2014, 21:50
  2. Kommentar im ARRAY eines Datenbaustein
    Von tahren im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.06.2010, 11:03
  3. Zugriff auf einen Array eines UDT`s
    Von Andreas- im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.09.2009, 19:02
  4. Länge eines Array variabel halten
    Von Kuffel im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 17.01.2007, 15:46

Lesezeichen

Berechtigungen

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