Step 7 Pointer AWL Programmieren

pramkies

Well-known member
Beiträge
49
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo SPS Community,


ich stehe wieder mal an eine Herausforderung, die ich selber nicht selber lösen kann.
Ich habe in einen DB einen Array [0..99] DINT (Schrittmenge 0 bis 99) und einen Byte wo eine Schrittnummer definiert ist ( DBB 0).

Ziel ist indirekte Programmierung:

Wenn Schritt 3, dann will ich Array [3] lesen können. In TIA bzw. SCL und Symbolisch wär das richtig easy. Aber ich muss das hier in eine CPU400 mit Step7 umsetzen.

mein Ansatz:


AUF DB 1210 // Global DB

L 1454 //Stepmerker Offsetadresse
SLW 3 // Pointerformat
LAR1
L DBB 0 // Schrittnummer
+D
L DBW [AR1,P#0.0] //Lade LM vom aktuellen Step
T #Sollmenge


Ich habe diese Vorlage wo ich das mit Stepbits Mappe. Nur da ich bits setze > da geht es einwandfrei:

L 0 //Stepmerker loeschen
T DBD 54 //Step 0-31
T DBD 58 //Step 32-63
L 54 //Stepmerker Offsetadresse
SLW 3 //in Pointerformat
L DBB 0 //Stepnummer
+D
LAR1 //Bitadresse ins Register
SET
= DBX [AR1,P#0.0] //Stepmerker setzen


noch nie mit Pointer selber rumprogrammiert. Also seid gnädig zu mir.

Gruß Pramkies
 

Aweeller

Well-known member
Beiträge
118
Punkte Reaktionen
113
Zuviel Werbung?
->Hier kostenlos registrieren
Wenn Du DINT adressieren willst, musst Du SLD 5 schreiben, damit Du 32-Bit Adressschritte erzielst.
probier mal so:

AUF DB 1210 // Global DB

L DBB 0 // Schrittnummer
SLD 5 // Pointerformat
L 1454 //Stepmerker Offsetadresse
SLD 3
+D
LAR1

L DBD [AR1,P#0.0] //Lade LM vom aktuellen Step
T #Sollmenge

alternativ kannst Du die Offsetadresse auch direkt als Pointer eintragen:

AUF DB 1210 // Global DB

L DBB 0 // Schrittnummer
SLD 5 // Pointerformat
LAR1

L DBD [AR1,P#1454.0] //Lade LM vom aktuellen Step
T #Sollmenge
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
19.527
Punkte Reaktionen
5.881
Ich würde das so formulieren:
Code:
// SCL

Sollmenge := "DB1210".Schrittmenge["DB1210".Schrittnummer];

// AWL

L   "DB1210".Schrittnummer
SLD 5
L   P#DBX1454.0 //Anfangsadresse (Offset) des Arrays Schrittmenge in DB1210
+D
LAR1

AUF "DB1210"
L   DBD [AR1,P#0.0] //Lade LM vom aktuellen Step
T   #Sollmenge

Harald
 
OP
P

pramkies

Well-known member
Beiträge
49
Punkte Reaktionen
3
Ich würde das so formulieren:
Code:
// SCL

Sollmenge := "DB1210".Schrittmenge["DB1210".Schrittnummer];

// AWL

L   "DB1210".Schrittnummer
SLD 5
L   P#DBX1454.0 //Anfangsadresse (Offset) des Arrays Schrittmenge in DB1210
+D
LAR1

AUF "DB1210"
L   DBD [AR1,P#0.0] //Lade LM vom aktuellen Step
T   #Sollmenge

Harald
Funktioniert ! Danke
 
OP
P

pramkies

Well-known member
Beiträge
49
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Wenn Du DINT adressieren willst, musst Du SLD 5 schreiben, damit Du 32-Bit Adressschritte erzielst.
probier mal so:

AUF DB 1210 // Global DB

L DBB 0 // Schrittnummer
SLD 5 // Pointerformat
L 1454 //Stepmerker Offsetadresse
SLD 3
+D
LAR1

L DBD [AR1,P#0.0] //Lade LM vom aktuellen Step
T #Sollmenge

alternativ kannst Du die Offsetadresse auch direkt als Pointer eintragen:

AUF DB 1210 // Global DB

L DBB 0 // Schrittnummer
SLD 5 // Pointerformat
LAR1

L DBD [AR1,P#1454.0] //Lade LM vom aktuellen Step
T #Sollmenge
geht auch ! super danke
 
OP
P

pramkies

Well-known member
Beiträge
49
Punkte Reaktionen
3
Ich würde das so formulieren:
Code:
// SCL

Sollmenge := "DB1210".Schrittmenge["DB1210".Schrittnummer];

// AWL

L   "DB1210".Schrittnummer
SLD 5
L   P#DBX1454.0 //Anfangsadresse (Offset) des Arrays Schrittmenge in DB1210
+D
LAR1

AUF "DB1210"
L   DBD [AR1,P#0.0] //Lade LM vom aktuellen Step
T   #Sollmenge

Harald
:)
 
Oben