Init von Array of Rec

majaestix

Level-2
Beiträge
39
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

wieder mal ein Problem mit meinem Array. Folgendes habe ich definiert:
Code:
TYPE raffstore_rec :

    STRUCT

        input                        :    blind_input_rec;
        scene                        :    blind_scene_rec;
        shade                        :    blind_shade_rb_rec;
        dark                            :    blind_dark_rb_rec;
        set                            :    blind_set_rec;
        security                        :    blind_security_rb_rec;
        control                        :    blind_control_rec;
        alarm_direction                :    alarm_rec;

    END_STRUCT

END_TYPE

Hier kommt ein Beispiel für einen der Sub-Recs:
Code:
TYPE blind_input_rec :

    STRUCT
        (* Eingaenge *)
            in_pos                :    BYTE;                    (* Rückführung der Jalousiestellung *)
            in_ang                :    BYTE;                    (* Rückführung der Lamellenwinkels *)
            in_s1                :    BOOL;                    (* Eingang AUF *)
            in_s2                :    BOOL;                    (* Eingang AB *)
            in_in                    :    BOOL;                    (* Gesteuerter Betrieb wenn TRUE *)
            in_pi                :    BYTE;                    (* Position wenn IN = TRUE *)
            in_ai                :    BYTE;                    (* Winkel  wenn IN = TRUE *)

        (* Setup *)
            set_single_switch        :    BOOL    :=    FALSE;        (* TRUE für Einzeltasterbetrieb *)
            set_click_en            :    BOOL    :=    FALSE;        (* TRUE für Single Klick Mode *)
            set_click_time        :    TIME    :=    T#500ms;    (* Timeout für Klick Erkennung *)
            set_max_runtime        :    TIME    :=    T#60s;        (* Timeout für eine Bewegung *)
            set_manual_timeout    :    TIME    :=    T#14h;        (* Timeout des Handbetriebs Vorgabe 1h*)
            set_debounce_time    :    TIME    :=    T#20ms;        (* Entprellzeit für die Eingänge S *)
            set_dbl_click1        :    BOOL    :=    FALSE;        (* bei Doppelklick Position anfahren wenn TRUE *)
            set_dbl_pos1            :    BYTE;                    (* Position bei S1 Doppelklick *)
            set_dbl_ang1            :    BYTE;                    (* Winkel bei S1 Doppelklick *)
            set_dbl_click2        :    BOOL    :=    FALSE;        (* bei Doppelklick Position anfahren wenn TRUE *)
            set_dbl_pos2            :    BYTE    :=    255;            (* Position bei S1 Doppelklick *)
            set_dbl_ang2            :    BYTE    :=    255;            (* Winkel bei S2 Doppelklick *)
            set_d1_toogle        :    BOOL    :=    TRUE;        (* Toggle Modus für D1 *)
            set_d2_toogle        :    BOOL    :=    TRUE;        (* Toggle Modus für D2 *)
            set_master_mode        :    BOOL;                    (* aktiviert den Master Mode wenn TRUE *)

        (* Output *)
            out_qu                :    BOOL;                    (* Motor AUF Signal *)
            out_qd                :    BOOL;                    (* Motor AB Signal *)
            out_status            :    BYTE;                    (* ESR kompatibler Status Ausgang *)
            out_po                :    BYTE;                    (* Ausgang Position *)
            out_ao                :    BYTE;                    (* Ausgang Winkelstellung *)
            out_d1                :    BOOL;                    (* Kommandoausgang für Doppelklick Funktion 1 *)
            out_d2                :    BOOL;                    (* Kommandoausgang für Doppelklick Funktion 2 *)
    END_STRUCT

END_TYPE

Dann habe ich darüber ein Array gelegt:
Code:
    rs_rec     :    ARRAY[1..11] OF raffstore_rec;

Jetzt wollte ich bereits bei der Programminitialisierung ein paar dieser VARs Werte verpassen, in etwa so:
Code:
    rs_rec    :    ARRAY[1..11] OF raffstore_rec    :=

    (* 01 *)            (input.in_s1 := true),
    (* 02 *)            (),
    (* 03 *)            (),
    (* 04 *)            (),
    (* 05 *)            (),
    (* 06 *)            (),
    (* 07 *)            (),
    (* 08 *)            (),
    (* 09 *)            (),
    (* 10 *)            (),
    (* 11 *)            ();

Hier laufe ich allerdings immer auf eine Fehlermeldung a la "Falsche Zuweisung".
Kann mir jemand sagen, warum?

Danke!

Gruss

Majaestix
 
Was hast du für eine Programmierumgebung? Bei TwinCAT gibt es im PLC Control eine Eingabehilfe auch für Variableninitialisierungswerte, bei komplexeren Initialisierungen ist das ein ganz nützliches Tool.

Bei TwinCAT erreicht man diesen über Shift+F2 oder das Menü Bearbeiten-> Variablen Deklaration. Da kannst du dann deine Variable neu anlegen, und in einer Baumstruktur die Initialwerte eintragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas_v2.1,

danke für die Hilfe.
Ja, ich benutze Twincat 2. Im Programm kriege ich den einzelnen VARs ja auch problemlos Werte zugewiesen z. B.:

Code:
rs_rec[11].input.in_s1 := true;

läuft problemlos.

Aber bei der Zuweisung als Initialsierung in den globalen Variablen läuft irgendwas falsch, vermutlich eine Klammer oder sowas, aber ich kriege es nicht raus :-(

Edit:
Vielleicht lege ich auch die Matrix falsch an...


Gruss

Majaestix
 
Wie geschrieben, guck dir die Eingabehilfe an. Damit wird dir die korrekte Syntax für die Initialisierung später in der Deklaration generiert.
Ich habe das Tool immer als nervig abgetan, aber das ist für sowas echt nützlich.

Für Unterstrukturen sieht die Initialisierung nämlich etwas anders, du musst für die Unterstrukturen nochmal eine Klammer setzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas_v2.1,

danke für Deine Hilfe!

Ich habe das Tool immer als nervig abgetan, aber das ist für sowas echt nützlich.
Da hast Du allerdings Recht, ging mir genauso. Gestern Abend haber ich es dann probiert, und, na ja, es hat funktioniert!!!

Jetzt weiss ich, wie die Matrix aussehen muss. Die werde ich zwar nicht mit diesem Tool sondern mit dem Editor anlegen, aber ich weiss jetzt wenigstens wie.

Also, nochmals ganz herzlichen Dank für den Tip!

Schönes WE

Gruss

Majaestix
 
Zurück
Oben