konstante arrays abhängig von konstante...

Exedra

Level-1
Beiträge
10
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Schönen guten Abend,

ich hät da ein problem, das wie folgt aussieht:
Ich habe eine hand voll Arrays, in denen konfigurationen hinterlegt sind. Diese konfigurationen können sich in den einzelnen Systemen später unterscheiden, daher wird die länge über eine konstante festgelegt, so dass die länge später ohne viel Aufwand angepasst werden kann.
Nun war mein Plan diese Struktur von längen-konfiguration + eigentliche konfiguration auch nochmal in der Anzahl anpassbar zu machen.
Hierfür hatte ich die Konfigurationsarray 2dimensional gemacht und Längenangabe in ein Array umgewandelt. Dessen länge sollte nun über eine neu eingeführte Längenvariable festgelegt werden.

Nun... das funktioniert so nicht.
Codesys meint, die länge von den Arrays, in denen die länge der Konfigurationsarrays festgelegt werden, wäre unbekannt. Kommt wohl daher, dass die erste längenkonstante zu dem zeitpunkt, wenn die längenarrays erzeugt werden, noch nicht evaluiert wurde oder so ähnlich....

Was kann man dagegen tun, bzw. wie kann man das problem anders lösen?


Code:
VAR_GLOBAL CONSTANT
    cfg_DISP_MAX_loops:    INT    :=    1;
    cfg_DISP_MAX_SP_1    :    ARRAY [1..cfg_DISP_MAX_loops]     OF    INT        :=    4;
    cfg_DISP_MAX_SP_2    :    ARRAY [1..cfg_DISP_MAX_loops]        OF    INT        :=    10;
END_VAR

VAR_GLOBAL PERSISTENT RETAIN
    cfg_DI2SP_SP_Maske_B_1        :    ARRAY [1..cfg_DISP_MAX_loops] OF t_DISP_16bits;
    cfg_DI2SP_SP_CFG_B_1        :    ARRAY [1..cfg_DISP_MAX_loops,1..cfg_DI2SP_MAX_SP_1]     OF t_DISP_16bits;
    cfg_DI2SP_SP_1                    :    ARRAY    [1..cfg_DISP_MAX_loops,1..cfg_DI2SP_MAX_SP_1]     OF REAL;

    cfg_DI2SP_SP_Maske_B_2        :    ARRAY [1..cfg_DISP_MAX_loops]                                    OF    t_DISP_16bits;
    cfg_DI2SP_SP_CFG_B_2        :    ARRAY [1..cfg_DISP_MAX_loops,1..cfg_DI2SP_MAX_SP_2]     OF t_DISP_16bits;
    cfg_DI2SP_SP_2                    :    ARRAY    [1..cfg_DISP_MAX_loops, 1..cfg_DI2SP_MAX_SP_2]     OF REAL;
END_VAR




Andreas
 
Die Constanten cfg_DI2SP_MAX_SP_1 und cfg_DI2SP_MAX_SP_1 hast du nicht deklariert. Oder ist das nur ein Vertipper und du meinst cfg_DISP_MAX_SP_1 bzw cfg_DISP_MAX_SP_1?

Wenn ja, dann wird das so auch nicht funktionieren weil das Arrays sind und keine Integer-Werte. Du musst also angeben aus welchem Feld der Wert genommen werden soll.

Versuche mal ob

Code:
cfg_DI2SP_SP_CFG_B_1        :    ARRAY [1..cfg_DISP_MAX_loops,1..cfg_DISP_MAX_SP_1[SIZE=4][B][1][/B][/SIZE]]     OF t_DISP_16bits;

funktioniert.

Mir erschließt sich aber noch nicht der Sinn hinter einem konstanten Array, das in jedem Feld den gleichen Wert enthält. Dafür würde auch eine einzelne Konstante reichen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke du willst doch einfach sowas haben:
Code:
VAR_GLOBAL CONSTANT
      cfg_DISP_MAX_loops:    INT    :=    1;
      cfg_DISP_MAX_SP_1    :    INT        :=    4;
END_VAR
VAR_GLOBAL PERSISTENT RETAIN
    cfg_DI2SP_SP_Maske_B_1        :    ARRAY [1..cfg_DISP_MAX_loops] OF t_DISP_16bits;
    cfg_DI2SP_SP_CFG_B_1        :    ARRAY [1..cfg_DISP_MAX_loops,1..cfg_DISP_MAX_SP_1]     OF t_DISP_16bits;
END_VAR
Du gibst einfach ein Zweidimensionales Feld an.
 
Zurück
Oben