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

Ergebnis 1 bis 6 von 6

Thema: Array of Struct in einem FB nutzen

  1. #1
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen,
    habe mal wieder zwei Fragen -.-

    1. Frage

    Ich habe ein Array of Struct
    Code:
    arr_Spannung:    ARRAY[1..1] OF str_Spannung;
    str_Spannung besteht aus
    Code:
    rl_Spannung1: REAL;
    rl_Spannung2: REAL;
    rl_Spannung3: REAL;
    und anstatt die Werte wie folgt zuzuweisen

    arr_Spannung[1].rl_Spannung1:=230.0;
    || .rl_Spannung2:=240.0;
    || .rl_Spannung3:=235.0;

    würde ich es gerne in einer Schleife oder so machen. Ist das möglich?
    Ein "normales" Array of INT z.B. kann ich ja einfach beim Instanzieren schon füllen
    arr1: ARRAY[1..3] OF INT :=1,5,9;


    2. Frage

    Ich nutze hier mal das Beispiel aus Frage 1.
    Ich habe einen FB

    Code:
    FUNCTION_BLOCK FB_MELDUNG
    VAR_INPUT
        rl_Spannung:    REAL;
    END_VAR
    VAR_OUTPUT
        x_Meldung:    BOOL;
        st_Meldung:    STRING;
    END_VAR
    ---------------------------------
    IF rl_Spannung > 240 THEN
        x_Meldung:=FALSE;
        st_Meldung:='Spannung zu hoch!';
    ELSE
        x_Meldung:=TRUE;
    END_IF
    Nun meine Frage, wie kann ich mit dem Array aus Frage 1 diesen FB aufrufen ohne für
    jede Spannung einen eigenen Aufruf zu schreiben?
    Also nicht so
    Code:
    PLC_PRG
    
    VAR
        Meldung: FB_MELDUNG;
        arr_Spannung:    ARRAY[1..1] OF str_Spannung;  (*Aus Frage 1*)
        x_Var  : BOOL;
        st_Var : STRING;
    END_VAR
    -----------------------------------
    Meldung(rl_Spannung:=arr_Spannung[1].rl_Spannung1);
    x_Var:=Meldung.x_Meldung;
    st_Var:=Meldung.st_Meldung;
    Nun würde ich das selbe für .rl_Spannung2 und .rl_Spannung 3 schreiben -.-
    So ist das aber ziehmlich bescheiden, finde ich. Deshalb eben die Frage ob
    man das auch mit einer Schleife oder wie auch immer anders lösen kann?

    MfG

    Bone
    Zitieren Zitieren Array of Struct in einem FB nutzen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    1. Ich denke mal nein, das geht dann so nicht. Du müßtest aus der Struct dann auch ein Array machen, aber dann verlierst du die schöne Symbolik. Ist halt immer so das Problem zwischen praktischer Verwendung und guter Lesbarkeit.

    2. Was du in deinem FB machst, dafür braucht es keinen FB, dafür nimm einen FC. Sollte eber auch mit dem FB gehen, ist aber unnötig.
    Geändert von Ralle (16.09.2015 um 09:44 Uhr)
    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

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zitat Zitat von bone666 Beitrag anzeigen
    Ich habe ein Array of Struct
    Code:
    arr_Spannung:    ARRAY[1..1] OF str_Spannung;
    str_Spannung besteht aus
    Code:
    rl_Spannung1: REAL;
    rl_Spannung2: REAL;
    rl_Spannung3: REAL;
    Das könntest Du ändern zu:
    Code:
    rl_Spannung: ARRAY[1..3] OF REAL;
    Dann kannst Du indiziert auf rl_Spannung[1], rl_Spannung[2], rl_Spannung[3] zugreifen:
    Code:
    FOR i:=1 TO 3 DO
      Meldung(rl_Spannung:=arr_Spannung[1].rl_Spannung[i]);
    ...
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    @ Ralle:
    Erstmal Danke für die schnelle Antwort.
    Zu 1: Um die Übersicht besser behalten zu können lasse ich den Spannungen ihre einzelnen Namen. Also sitze ich in der von dir angesprochenen Zwickmühle.
    Zu 2: Ich habe bis jetzt noch nicht mit Functions gearbeitet, habe jedoch gelesen, dass die nur einen Wert zurück geben. Ich brauche aber mindestens 2.

    @PN/DP:
    Danke für deine Antwort. Ich habe das Beispiel wohl etwas dumm gewählt. In Realität heißen die Spannungen z.B. SpannungTrafoL1/L2/L3/N/L1L2/L2L3/L3L1, deshalb fällt dein Vorschlag, aus den Bezeichnern ein Array zu machen, raus. Trotzdem danke


    Ich werde also nun einfach für alles einen einzelnen Aufruf schreiben und einzeln Werte zu weisen.

    MfG

    Bone

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ja, FC haben einen Rückgabewert, aber den kann man intern fest beschalten und zur Ausgabe auch die Out benutzen, das geht wie bei den FB auch.
    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
    20.08.2007
    Beiträge
    112
    Danke
    13
    Erhielt 10 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zu 1:

    Forschleife ist doch immer noch möglich. Klar könnte man sich das auch noch schöner wünschen, aber schlecht ist es doch nicht, oder.

    Code:
    
    For i := 1 TO 2500 DO
       arr_Spannung[i].rl_Spannung1 := 230;
       arr_Spannung[i].rl_Spannung2 := 240;
       arr_Spannung[i].rl_Spannung3 := 250;
    END_FOR
    Solls was Rechtes sein, oder darfs auch was von Siemens sein?

Ähnliche Themen

  1. Datentyp ARRAY und STRUCT
    Von Quoellfrisch im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 06.12.2015, 19:40
  2. TIA Bildbaustein array of Struct anhängen
    Von Balu_der_Bär im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 09.06.2015, 10:11
  3. Step 7 SCL ARRAY OF STRUCT initialisieren
    Von muma1234 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.04.2015, 15:50
  4. TIA Struct nach Array kopieren
    Von Christof G im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 04.07.2013, 13:37
  5. Problem mit ARRAY - STRUCT
    Von Jörg_24 im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 31.03.2011, 16:08

Stichworte

Lesezeichen

Berechtigungen

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