Syntaxerror bei indiziertem Arrayzugriff in AWL

Deichkind

Level-1
Beiträge
8
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

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

Code:
[B]arTest := ARRAY [0..5] OF INT[/B]

[B]L #arTest[4][/B]            // Zugriff auf Feld 4 von #arTest

[B][I][COLOR=Red]L  #arTest[AR1,P#0.0][/COLOR][/I][/B]   // 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.
 
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]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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.
 
Zuletzt bearbeitet:
Zurück
Oben