Step 7 SCL ARRAY OF STRUCT initialisieren

muma1234

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Liebes Forum,

Mein Problem ist folgendes:
Ich habe in einem DB ein ARRAY aus einem Struct. Dieses möchte ich nutzen um z.B. für eine verschiedene Anzahl von Geräten eine Konfiguration vorzunehmen. Das Beispiel ist kurz gehalten in Wirklichkeit ist das Struct länger.
Bei der Inititalisierung ärgert mich, dass ich immer den Index in der Klammer ändern muss. Gibt es in SCL etwas wie z.B. in C in der man den Arrayindex einmal schreibt und dann nur noch die Variablennamen (geht auch ohne die Namen) angibt.
Quellcode:
Code:
DATA_BLOCK DB_Adressen
STRUCT
    Adressen: ARRAY[1..4] OF STRUCT
        Port_SPS: INT;
        IP1_Partner: INT := 192;
        IP2_Partner: INT := 168;
        IP3_Partner: INT := 0;
        IP4_Partner: INT;
        Port_Partner: INT;
    END_STRUCT;
END_STRUCT;
BEGIN
    // Im Bsp nur 1. Partner konfiguriert
    Adressen[1].Port_SPS := 2000;
    Adressen[1].IP4_Partner := 101;
    Adressen[1].Port_Partner := 502;
END_DATA_BLOCK
Ich hätte gern so etwas in die Richtung:
Code:
    Adressen[1]:
        [
        Port_SPS := 2000;
        IP4_Partner := 101;
        Port_Partner := 502;
        ];
    // Oder so:
        Adressen[1] := [2000, 192, 168, 0, 101, 502];
    // Geht ja in C mit geschweiften Klammern
 
So erstmal nicht.
Du müsstest deine Struktur umbauen.
z. B.:
Port_SPS : ARRAY[1..4] OF INT := 1,2,3,4;
IP1_Partner : ARRAY[1..4] OF INT := 192,193,194,195;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein Plan war eigentlich mit einem Zeiger auf ein Element des ARRAYs Adressen zu zeigen, um auf alle Daten eines Geräts zu zeigen. Wenn ich nach deinem Vorschalg vorgehe liegen die Daten die zu einem Gerät gehören nicht mehr hintereinander im Speicher und lassen sich nicht zusammengehörig adressieren.
 
Eine Krücke

Mein Plan war eigentlich mit einem Zeiger auf ein Element des ARRAYs Adressen zu zeigen, um auf alle Daten eines Geräts zu zeigen. Wenn ich nach deinem Vorschalg vorgehe liegen die Daten die zu einem Gerät gehören nicht mehr hintereinander im Speicher und lassen sich nicht zusammengehörig adressieren.

Diese Lösung ist natürlich zur Laufzeit die übersichtlichste und vernünftigste.

Ich behelfe mich in so einem Fall damit, dass ich im ersten Zyklus dieses ARRAY of STRUCT in einer Schleife aus einzelnen Arrays of INT etc. fülle.

Diese Datenarrays werden als CONSTANT angelegt und sind natürlich unschön, aber wenn es nicht besser von der Norm oder Compiler geht, dann darf zumindest zur Laufzeit die Übersicht nicht gefährdet werden.
 
Mein Plan war eigentlich mit einem Zeiger auf ein Element des ARRAYs Adressen zu zeigen, um auf alle Daten eines Geräts zu zeigen. Wenn ich nach deinem Vorschalg vorgehe liegen die Daten die zu einem Gerät gehören nicht mehr hintereinander im Speicher und lassen sich nicht zusammengehörig adressieren.

Dann ist deine Vorstellung der Initialisierung leider nicht möglich.
Es gibt viele Funktionalitäten in C und VB, die es in SCL nicht gibt.

Du kannst den Vorschlag von RobiHerb probieren, dies außerhalb des DBs zu erledigen.
Oder, da es ja nur ein Array[1..4] ist, mit Copy/Paste und Suchen/Ersetzen arbeiten.
 
Zurück
Oben