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

Ergebnis 1 bis 4 von 4

Thema: Wertzuweisung in ein Array aus verschachtelten Records

  1. #1
    Registriert seit
    18.07.2010
    Beiträge
    20
    Danke
    22
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    folgendes Problem:
    Einer 2x verschachtelten REC-Struktur, die in einem Array gelagert wird, sollen Werte zugewiesen werden. Leider bekomme ich nur Werte zugewiesen, die als Input-VAR an den FB übergeben werden. Werte, die in anderen FB zugewiesen werden, werden nicht gespeichert.

    Meine REC-Struktur:

    Code:
    TYPE raffstore_rec :
    
        STRUCT
    
            status                   :    BOOL;
    
             aufwaerts                  :    BOOL;
            abwaerts                   :    BOOL;
    
            input                      :    blind_input_rec;
            scene                     :    blind_scene_rec;
            shade                     :    blind_shade_rec;
            dark                       :    blind_dark_rb_rec;
            set                        :    blind_set_rec;
            security                  :    blind_security_rb_rec;
            control                   :    blind_control_rec;
            status_alarm           :    alarm_rec;
            max_einschaltdauer        :    max_einschaltdauer_rec;
    
        END_STRUCT
    
    END_TYPE
    Dazu als Beispiel eine Sub-Rec-Struktur:

    Code:
    TYPE blind_input_rec :
    
        STRUCT
            (* Eingaenge *)
                in_pos                :    BYTE;                    (* Rückführung der Jalousiestellung *)
    etc.
    
            (* Setup *)
                set_single_switch        :    BOOL    :=    FALSE;        (* TRUE für Einzeltasterbetrieb *)
    etc.
    
            (* Output *)
    etc.
    
        END_STRUCT
    
    END_TYPE
    In einem FB sollen nun diesen VARs Werte zugewiesen werden:

    Code:
    FUNCTION_BLOCK eg_aus_variablen_setzen
    
    VAR_INPUT
        enable    :    BOOL;
    END_VAR
    
    VAR
        rs_rec                                    :    ARRAY[1..11] OF raffstore_rec;
    END_VAR
    
    
    
    zum Beispiel: (*----- blind_input_rec -----*) rs_rec[1].input.set_single_switch := nein; (* TRUE für Einzeltasterbetrieb, nur via S1 *) rs_rec[1].input.set_click_en := nein; (* TRUE für Single Klick Mode *) rs_rec[1].input.set_click_time := T#500ms; (* Timeout für Klick Erkennung *) rs_rec[1].input.set_max_runtime := T#80s; (* Timeout für eine Bewegung *) rs_rec[1].input.set_manual_timeout := T#5m; (* Timeout = Ruhezeit S1/S2 -> zurück zum Automatikbetrieb *) rs_rec[1].input.set_debounce_time := T#20ms; (* Entprellzeit für die Eingänge S *) etc.
    Wenn ich jetzt in einem FB diese Struktur abfrage, werden zwar die Werte, welche mit VAR_INPUT übergeben werden, verwendet, nicht aber dier oben gesetzten.

    Aufrufprogramm mit vorbesetzten VAR_INPUT:

    Code:
    FUNCTION_BLOCK raffstore_wz_ost_auto
    
    VAR_INPUT
        raffstore_auf_zu        :    BOOL;
        Enable                :    BOOL;
    END_VAR
    
    VAR
        fb_raffstore_schalten    :    raffstore_schalten;
    END_VAR
    
    
    (* ---------- einzelnen Raffstore betaetigen ---------- *) (* ---------------------------------------------------------------------------- FB aktiviert -------------------------------------------------------------------------------- *) IF enable = FALSE THEN RETURN; END_IF; (* ----- IF Enable = FALSE THEN ----- *) (* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- *) fb_raffstore_schalten (rs_nr := 11, (* Raffstore Nummer *) (* BLIND_INPUT *) raffstore_blind_input_in_in := FALSE, (* Gesteuerter Betrieb wenn TRUE, QU + QD = TRUE = Auto, PI/AI -> PO/AO *) raffstore_blind_input_in_s1 := FALSE, (* Eingang AUF falls IN = FALSE *) raffstore_blind_input_in_s2 := FALSE, (* Eingang AB falls IN = FALSE *) raffstore_blind_input_in_pi := 0, (* Position wenn IN = TRUE *) raffstore_blind_input_in_ai := 255, (* Winkel wenn IN = TRUE *)
    Und zum Schluss der verarbeitende FB "raffstore_schalten", in dem nichts ankommt:

    Code:
    FUNCTION_BLOCK raffstore_schalten
    
    VAR_INPUT
    
        rs_nr                                    :    INT;                        (* Raffstore Nummer *)
    
    (* BLIND_INPUT *)
        raffstore_blind_input_in_in                    :    BOOL;                    (* Gesteuerter Betrieb wenn TRUE, QU + QD = TRUE = Auto, PI/AI -> PO/AO *)
        raffstore_blind_input_in_s1                    :    BOOL;                    (* Eingang AUF falls IN = FALSE *)
        raffstore_blind_input_in_s2                    :    BOOL;                    (* Eingang AB falls IN = FALSE *)
        raffstore_blind_input_in_pi                    :    BYTE;                    (* Position wenn IN = TRUE *)
        raffstore_blind_input_in_ai                    :    BYTE;                    (* Winkel  wenn IN = TRUE *)
    
    
    (* ------------------------------------ Baustein BLIND_INPUT aus OSCAT.LIB ------------------------------------ *) test_var := rs_rec[11].shade.set_direction; (* Eingaenge *) raffstore_blind_input (POS := rs_rec[rs_nr].control.out_pos, (* Rückführung der Jalousiestellung *) ANG := rs_rec[rs_nr].control.out_ang, (* Rückführung der Lamellenwinkels *) S1 := raffstore_blind_input_in_s1, (* Eingang AUF *) S2 := raffstore_blind_input_in_s2, (* Eingang AB *) IN := raffstore_blind_input_in_in, (* Gesteuerter Betrieb wenn TRUE *) PI := raffstore_blind_input_in_pi, (* Position wenn IN = TRUE *) AI := raffstore_blind_input_in_ai, (* Winkel wenn IN = TRUE *) (* Setup *) SINGLE_SWITCH := rs_rec[rs_nr].input.set_single_switch, (* TRUE für Einzeltasterbetrieb *) CLICK_EN := rs_rec[rs_nr].input.set_click_en, (* TRUE für Single Klick Mode *) CLICK_TIME := rs_rec[rs_nr].input.set_click_time, (* Timeout für Klick Erkennung *) MAX_RUNTIME := rs_rec[rs_nr].input.set_max_runtime, (* Timeout für eine Bewegung *) MANUAL_TIMEOUT := rs_rec[rs_nr].input.set_manual_timeout, (* Timeout des Handbetriebs Vorgabe 1h*) DEBOUNCE_TIME := rs_rec[rs_nr].input.set_debounce_time, (* Entprellzeit für die Eingänge S *) DBL_CLK1 := rs_rec[rs_nr].input.set_dbl_click1, (* bei Doppelklick Position anfahren wenn TRUE *) DBL_POS1 := rs_rec[rs_nr].input.set_dbl_pos1, (* Position bei S1 Doppelklick *) DBL_ANG1 := rs_rec[rs_nr].input.set_dbl_ang1, (* Winkel bei S1 Doppelklick *) DBL_CLK2 := rs_rec[rs_nr].input.set_dbl_click2, (* bei Doppelklick Position anfahren wenn TRUE *) DBL_POS2 := rs_rec[rs_nr].input.set_dbl_pos2, (* Position bei S1 Doppelklick *) DBL_ANG2 := rs_rec[rs_nr].input.set_dbl_ang2, (* Winkel bei S2 Doppelklick *) D1_TOGGLE := rs_rec[rs_nr].input.set_d1_toogle, (* Toggle Modus für D1 *) D2_TOGGLE := rs_rec[rs_nr].input.set_d2_toogle, (* Toggle Modus für D2 *) MASTER_MODE := rs_rec[rs_nr].input.set_master_mode, (* aktiviert den Master Mode wenn TRUE *) (* Output *) QU => rs_rec[rs_nr].input.out_qu, (* Motor AUF Signal *) QD => rs_rec[rs_nr].input.out_qd, (* Motor AB Signal *) STATUS => rs_rec[rs_nr].input.out_status, (* ESR kompatibler Status Ausgang *) PO => rs_rec[rs_nr].input.out_po, (* Ausgang Position *) AO => rs_rec[rs_nr].input.out_ao, (* Ausgang Winkelstellung *) D1 => rs_rec[rs_nr].input.out_d1, (* Kommandoausgang für Doppelklick Funktion 1 *) D2 => rs_rec[rs_nr].input.out_d2); (* Kommandoausgang für Doppelklick Funktion 2 *)
    Kann mir vielleicht jemnd einen Tip gebe, wo mein Fehler liegt.

    Edit:
    Jetzt habe ich gerade noch einmal nachgeschaut und den Eindruck gewonnen, dass garkeine Array-Werte gespeichert werden?????

    Danke im voraus.

    Majaestix
    Zitieren Zitieren Wertzuweisung in ein Array aus verschachtelten Records  

  2. #2
    Registriert seit
    14.03.2013
    Ort
    Norderstedt
    Beiträge
    28
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Moin,

    wenn ich dich richtig verstanden habe übergibst du die Strukturen in einen FB als Input und möchtest die Zustände die aus der Abarbeitung des FB's resultieren speichern.
    Wenn du Werte speichern möchtest nutze VAR_IN_OUT.
    Wenn du den Inhalt der Struktur auch bei einem Stromausfahl speichern möchtest, musst du dir eine Instanz der Struktur als retain persistant speichern.

    MFG
    Definition Hobby: Mit möglichst viel Aufwand möglichst wenig erreichen!

  3. #3
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    755
    Danke
    27
    Erhielt 166 Danke für 144 Beiträge

    Standard

    Im FB eg_aus_variablen_setzen initialisierst Du eine FB-lokale Variable namens rs_rec. Der FB raffstore_schalten hat auf diese Variable keinen Zugriff, die dort verwendete rs_rec muss also eine andere sein. Vielleicht global deklariert? In dem Fall brauchst Du nur die lokale rs_rec aus dem eg_aus_variablen_setzen entfernen.

  4. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    majaestix (08.04.2013)

  5. #4
    majaestix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.07.2010
    Beiträge
    20
    Danke
    22
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo StrucuredTrash,

    leider kann man den Danke Button nur einmal drücken, ich würde ihn sonst festklemmen

    Vielleicht global deklariert?
    Genau das wars und Deine Lösung passte auch noch perfekt!
    Und ich Dumpfbacke habe tagelang nach diesem sch..... Fehler gesucht

    Also, noch mal ganz herzlichen Dank!

    Gruss

    Majaestix

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 30.09.2011, 13:35
  2. Wie umgehen mit verschachtelten Bausteinaufrufen
    Von Binaryboy im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 28.04.2011, 12:50
  3. Not-Aus Relais mit Steuerung Ein/Aus verknüpfen
    Von mmr im Forum Schaltschrankbau
    Antworten: 2
    Letzter Beitrag: 09.10.2010, 09:56
  4. Elau: Ein Byte, bitweise in ein Array schreiben?
    Von Trashman im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 24.10.2007, 19:27
  5. Antworten: 4
    Letzter Beitrag: 17.11.2005, 11:13

Lesezeichen

Berechtigungen

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