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

Ergebnis 1 bis 5 von 5

Thema: SCL ARRAY OF STRUCT initialisieren

  1. #1
    Registriert seit
    22.04.2015
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch


    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
    Zitieren Zitieren SCL ARRAY OF STRUCT initialisieren  

  2. #2
    Registriert seit
    20.01.2009
    Beiträge
    190
    Danke
    32
    Erhielt 15 Danke für 14 Beiträge

    Standard

    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;

  3. #3
    muma1234 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.04.2015
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  4. #4
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von muma1234 Beitrag anzeigen
    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.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Eine Krücke  

  5. #5
    Registriert seit
    20.01.2009
    Beiträge
    190
    Danke
    32
    Erhielt 15 Danke für 14 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von muma1234 Beitrag anzeigen
    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.

Ähnliche Themen

  1. Array of enum Initialisieren
    Von shrimps im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 06.02.2015, 13:50
  2. Array OF REAL initialisieren
    Von bass im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 14.08.2014, 17:36
  3. TIA Struct Initialisieren
    Von hacker im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.06.2014, 08:27
  4. Array Initialisieren
    Von Hans_J im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 19.11.2013, 13:20
  5. TwinCat - Constant Array mit Constant Struct initialisieren ?
    Von reniviech im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 13.10.2013, 10:04

Lesezeichen

Berechtigungen

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