Index in S7 AWL

plc_tippser

Level-1
Beiträge
2.500
Reaktionspunkte
308
Zuviel Werbung?
-> Hier kostenlos registrieren
Aufgrund der immer wiederkehrenden Problematik mit der indirekten Adressierung, erstelle ich hier mal ein Topic.

Ich werde noch ein weiteres eröffnen, mit indirekter Adressierung. Gerne und hoffentlich bekomme ich da Unterstützung in Form von Beispielen und Quellcodes

pt
 
In AWL ist es nicht mögich, einen Index, wie bei anderen Sprachen gewohnt, direkt in die eckigen Klammern [] zu setzen.

Hier ein Beispiel, wie dieses realisiert werden kann.

Deklaration:
Feld := ARRAY[0..10] of INT
Index := INT

Code:

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

Lädt man den ersten Eintrag eines Feldes, funktioniert es nach dem oben beschriebenen Code. Da das sicherlich nicht das Ziel eines Feldes ist, muss der Code für höhere Indizes noch erweitert werden.

Den Index direkt ins AR1 zu laden ist eigentlich ein Fehler. Er muss noch mit der Größe der Feldvariablen multipliziert werden.

Fortsetzung folgt...

Vorschau:

L #Index // Lade Index in den Akku1 Bsp.:2
L 2 // Lade die Bytegröße der verwendeten Variablen (INT = 2 Byte)
*I // multipliziere den Index
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
 
Zurück
Oben