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

Ergebnis 1 bis 4 von 4

Thema: Syntaxerror bei indiziertem Arrayzugriff in AWL

  1. #1
    Registriert seit
    14.08.2007
    Beiträge
    8
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Auf Basis diverser entsprechender Beiträge versuche ich in AWL einen indizierten Zugriff auf ein Array:

    Code:
    arTest := ARRAY [0..5] OF INT
    
    L #arTest[4]            // Zugriff auf Feld 4 von #arTest
    
    L  #arTest[AR1,P#0.0]   // statt #arTest[i] mit i=4
    Allerdings wirft mir der Editor permanent eine Syntaxerrormeldung aus, so dass ich keine Chance habe ihm den indizierten Zugriff beizubringen.

    Was mache ich falsch oder sind irgendwelche Grundeinstellungen zu ändern?

    Programmierumngebung: Simatic Step7 V5.4 - SP4

    Vielen Dank und viele Grüße, Dk.
    Every advanced technology cannot be distinguished from magic.
    Zitieren Zitieren Syntaxerror bei indiziertem Arrayzugriff in AWL  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    indirekte adressierung funktioniert an dieser stelle ein wenig anders ...

    lade die startadresse vom array in das adressregister mit:

    Code:
         LAR1    P##arTest
    und greife im folgenden mit hilde des AR1 auf die gewünschten bereiche zu:

    Code:
         L     W[AR1,P#6.0]        //für L #arTest[4]
    Geändert von vierlagig (09.08.2009 um 19:42 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Avatar von Deichkind
    Deichkind ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.08.2007
    Beiträge
    8
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke soweit, allerdings habe ich dann immer noch das Problem, dass ich nicht über eine Indexvariable direkt das Offset
    im Array angeben kann, also den Wert P#n.m beeinflussen kann!?

    Folgender Code aus den FAQ (Index in S7 AWL) ist für mich zwar nachvollziehbar, aber nicht implementierbar...
    Code:
    Feld := ARRAY[0..10] of INT
    index := INT
     
    L #index    // Lade Index in den Akku1   Bsp.:0
    SLD3        // Schiebe den Wert im Akku1 um 3 Bits nach links
    LAR1        // Lade den Inhalt des Akku1 in das AR1
     
    L #Feld[AR1,P#0.0]   // Lade den Wert im Feld mit dem Index  0 in den Akku1
    -> Syntaxerror! Ist dieser Code so nicht in Ordnung?

    Eigentlich möchte ich den in ST einfachen Zugriff auf ein Array in AWL umsetzen, ohne CASE oder ähnliches, sondern
    direkt über eine Indexvariable.

    Vielen Dank und viele Grüße, Dk.
    Every advanced technology cannot be distinguished from magic.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Deichkind Beitrag anzeigen
    Danke soweit, allerdings habe ich dann immer noch das Problem, dass ich nicht über eine Indexvariable direkt das Offset
    im Array angeben kann, also den Wert P#n.m beeinflussen kann!?

    Folgender Code aus den FAQ (Index in S7 AWL) ist für mich zwar nachvollziehbar, aber nicht implementierbar...
    Code:
    Feld := ARRAY[0..10] of INT
    index := INT
     
    L #index    // Lade Index in den Akku1   Bsp.:0
    SLD3        // Schiebe den Wert im Akku1 um 3 Bits nach links
    LAR1        // Lade den Inhalt des Akku1 in das AR1
     
    L #Feld[AR1,P#0.0]   // Lade den Wert im Feld mit dem Index  0 in den Akku1
    -> Syntaxerror! Ist dieser Code so nicht in Ordnung?

    Eigentlich möchte ich den in ST einfachen Zugriff auf ein Array in AWL umsetzen, ohne CASE oder ähnliches, sondern
    direkt über eine Indexvariable.

    Vielen Dank und viele Grüße, Dk.
    Versuchs mal so, in Kombination mit dem Beitrag von 4L:

    Code:
    Feld := ARRAY[0..10] of INT
    index := INT
     
    LAR1    P##Feld
    L #index    // Lade Index in den Akku1   Bsp.:0
    L 2
    *I            //mit 2 multiplizieren, da eine Int aus 2 Byte besteht
    SLD3        // Schiebe den Wert im Akku1 um 3 Bits nach links
    +AR1        // zum Akku 1 dazu addieren
     
    L W [AR1,P#0.0]   // Lade den Wert im Feld mit dem Index (Bsp. 0) in den Akku1
    So ungefähr aus dem Kopf; sollte eigentlich funzen.
    Geändert von Ralle (09.08.2009 um 22:49 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Lesezeichen

Berechtigungen

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