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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Array länge mit SCL ermitteln

  1. #1
    Registriert seit
    22.05.2008
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    gibt es in SCL eine Funktion um die länge eines Arrays zu ermitteln?

    hab leider nichts dazu gefunden.

    Danke.
    Zitieren Zitieren Array länge mit SCL ermitteln  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Nein ...
    was hast du denn vor ...?

  3. #3
    Linowitch ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.05.2008
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich will ein Array durchlaufen und die Werte auswerten,
    nur sind die Arrays nicht immer gleich lang und um mir einen zusätlichen Parameter, der die länge angibt, zu ersparen, wollte ich die mit SCL selbst ermitteln.

    Da komm ich wohl um den Parameter nicht rum. Schade

    Danke

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... vielleicht ist das ja was für dich :
    Ich definiere bei manchen meiner Routine im Kopf Konstanten. Diese Konstanten kannst du auch für die Array-Dimensionierung hernehmen bzw. als End-Variable bei einer Schleife ...

    Gruß
    LL

  5. #5
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Wenn Du den Array als Any-Parameter an eine Funktion übergibst, kannst Du aus dem Any-Pointer den Wiederholfaktor auslesen. Das ist dann die Länge Deines Arrays. In AWL ist das so ohne weiteres möglich, diese AWL Funktion könntest Du dann in SCL aufrufen und dir als Rückgabewert der Funktion die Länge zurückgeben lassen.


    EDIT:

    Habe gerade mal ein wenig rumgespielt und beobachtet, das bei symbolischer Übergabe eines Arrays im AnyPointer der Typ immer als Byte, und als Wiederholfaktor immer die Länge des Arrays in Byte steht.

    Bei Definition Deines Array direkt im SCL-Code funktionierts aber.

    Code:
    FUNCTION FC51 : INT
     
    VAR_TEMP
      MyArray       : ARRAY[1..17] OF WORD; //Dein Arr eines beliebigen Typs 
      PAny           : ANY;
      ATVar AT PAny : ARRAY[1..5]  OF WORD;
    END_VAR
    PAny := Myarray;
    // Zuweisungen zum Beobachten
    ATVar[1] := ATVar[1]; 
    ATVar[2] := ATVar[2]; // Hier steht die Länge Deines Arrays 
    ATVar[3] := ATVar[3];
    ATVar[4] := ATVar[4];
    ATVar[5] := ATVar[5];
    
    FC51 := 51;
    END_FUNCTION
    Geändert von Grubba (22.10.2008 um 13:08 Uhr)

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    @Grubba:
    Diese Möglichkeit hatte ich gar nicht bedacht ...
    Das geht natürlich auch in SCL (und sogar sehr schön) zu machen. Die Frage ist natürlich, da die ARRAY's ja nicht dynamisch deklariert werden können, ob das so Sinn macht ...

    Gruß
    LL

  7. #7
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Hi Larry,

    hab gerade nochmal editiert. Ist so, dass bei Übergabe eines Arrays als
    Any

    -> InputAny := TestArray

    als Typ immer Byte (2) ausgegeben wird, Wiederholfaktor ist dann immer die Anzahl der Bytes.

    mit z.B.

    -> InputAny := P#DB1234. dbx0.0 Real 123

    wird dann auch korrekt der wiederholfaktor 123 angegeben.

    Du noch Ideen, wie mans auch symbolisch hinkriegt ?

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von Grubba Beitrag anzeigen
    Du noch Ideen, wie mans auch symbolisch hinkriegt ?
    Wenn dein DB sysbolisch deklariert ist und du in dem DB den Bereich als ARRAY of REAL (dein Beispiel) deklariert hast (mit der gleichen Größe), dann sollte die symbolische Zuordnung übernommen werden ... oder anders herum kannst du sie dort hin schreiben ...

    Gruß
    LL

  9. #9
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Genau das ist das Problem.

    Angenommen, Du deklarierst in zwei DBs zwei identische Arrays. (Z.B. Array of Real) Den einen übergibst Du symbolisch, den anderen direkt. Der symbolische wird von Step 7 wohl automatisch so umformatiert, das der Datentyp immer vom Typ BYTE ist, und der Wiederholungsfaktor der Anzahl der Bytes entspricht.
    Wird er direkt adressiert, ist der Datentyp dann vom Typ Real, und der Wiederholungsfaktor entspricht der Anzahl der Elemente (Und nicht der Bytes).
    Aus irgendeinem Grund geht Step7 wohl hin und formatiert bei symbolischer Adressierung intern auf Byte um.

    Mein Interesse ist hier nur theoretischer Natur, würde mich halt mal interessieren warum das so ist.

  10. Folgender Benutzer sagt Danke zu Grubba für den nützlichen Beitrag:

    hammerheadbene (26.05.2010)

  11. #10
    Registriert seit
    10.12.2008
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hat super funktioniert, zumindest für den Sinn und Zweck, wofür ich es benötige.

Ähnliche Themen

  1. SCL DB Länge ermitteln
    Von Dotzi im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.07.2010, 20:01
  2. Länge eines UDT ermitteln
    Von Woto im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 20.04.2009, 08:21
  3. Länge einer Struktur im DB ermitteln
    Von Knut333 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.01.2009, 18:04
  4. DB-Länge ermitteln
    Von Fliegertiger im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 18.12.2007, 15:39
  5. Gechwindigkeit aus Länge ermitteln
    Von capri-fan im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.02.2005, 15:43

Lesezeichen

Berechtigungen

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