Step 7 Array indirekter Zugriff - Fehler

Bergungsdackel

Level-1
Beiträge
39
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Bei folgendem Code kommt ein Fehler und meine CPU (Simulation) geht in STOP.
Ich möchte in einem DB (z.B. DB100 / DB_TEST123) ein BoolArray (Start bei 2.0) an Position Index (z.B. 91) setzen oder zurücksetzen:

AUF "DB_TEST123"
L P#2.0 // Anfangsadresse des Array in DB100
L 91 // gewünschter Index, 1..201
+ -1 // -1 beim index
+D // AKKU1 und AKKU2 addieren
LAR1 // Adresse laden

SET
S L [AR1,P#0.0] // Set bit

Danke im Voraus
 
Moin Begungsdackel,

// P#2.0 wird in AKKU 1 geladen
L P#2.0 // Anfangsadresse des Array in DB100
// Inhalt von AKKU 1 wird in AKKU 2 geschoben und 91 wird in AKKU 1 geladen
L 91 // gewünschter Index, 1..201
// Inhalt von Akku 1 wird um 1 dekrementiert
+ -1 // -1 beim index
// Akku 1 und Akku 2 werden addiert und das Ergebnis in Akku 1 geladen
+D // AKKU1 und AKKU2 addieren
// das AR 1 wird mit dem Inhalt von Akku 1 geladen, aber was soll das jetzt sein??? P#2.0 + 91 -1 ???
// P#2.0 => 16
// 16 + 91 - 1 = 106
// 106 als Adresse: 13.2
LAR1 // Adresse laden

SET
S L [AR1,P#0.0] // Set bit

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Begungsdackel,

// P#2.0 wird in AKKU 1 geladen
L P#2.0 // Anfangsadresse des Array in DB100
// Inhalt von AKKU 1 wird in AKKU 2 geschoben und 91 wird in AKKU 1 geladen
L 91 // gewünschter Index, 1..201
// Inhalt von Akku 1 wird um 1 dekrementiert
+ -1 // -1 beim index
// Akku 1 und Akku 2 werden addiert und das Ergebnis in Akku 1 geladen
+D // AKKU1 und AKKU2 addieren
// das AR 1 wird mit dem Inhalt von Akku 1 geladen, aber was soll das jetzt sein??? P#2.0 + 91 -1 ???
// P#2.0 => 16
// 16 + 91 - 1 = 106
// 106 als Adresse: 13.2
LAR1 // Adresse laden

SET
S L [AR1,P#0.0] // Set bit

VG

MFreiberger

Adresse 13.2 müsste ja passen? An der stelle steht ja mein Bool Array[91]?

Wenn ich statt "S L [AR1,P#0.0]" direkt "S DBX13.2" mache, funktioniert es...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
AUF "DB_TEST123"
L P#2.0 // Anfangsadresse des Array in DB100
L 91 // gewünschter Index, 1..201
+ -1 // -1 beim index
+D // AKKU1 und AKKU2 addieren
LAR1 // Adresse laden

SET
S L [AR1,P#0.0] // Set bit
muß so
Code:
      L     P#2.0                       // Anfangsadresse des Array in DB100
      L     91                          // gewünschter Index, 1..201
      +     -1                          // -1 beim index
      +D                                // AKKU1 und AKKU2 addieren
      LAR1                              // Adresse laden

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#0.0]             // Set bit

Bei festem Index geht auch:
Code:
      L     P#2.0                       // Anfangsadresse des Array in DB100
      LAR1                              // Adresse laden

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#11.2]            // Set bit Array[91]
oder
Code:
      L     91
      +     -1
      LAR1

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#2.0]            // Set bit Array[91]

Harald
 
muß so
Code:
      L     P#2.0                       // Anfangsadresse des Array in DB100
      L     91                          // gewünschter Index, 1..201
      +     -1                          // -1 beim index
      +D                                // AKKU1 und AKKU2 addieren
      LAR1                              // Adresse laden

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#0.0]             // Set bit

Bei festem Index geht auch:
Code:
      L     P#2.0                       // Anfangsadresse des Array in DB100
      LAR1                              // Adresse laden

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#11.2]            // Set bit Array[91]
oder
Code:
      L     91
      +     -1
      LAR1

      SET
      AUF   "DB_TEST123"
      S     DBX [AR1,P#2.0]            // Set bit Array[91]

Harald

Vielen Dank! Ich arbeite normalerweise nicht mit AWL, aber anscheinend war "AUF" nur an der falschen Stelle. Danke.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank! Ich arbeite normalerweise nicht mit AWL, aber anscheinend war "AUF" nur an der falschen Stelle. Danke.
Eigentlich war "AUF" nicht an der "falschen" Stelle. Aber, es wird verständlicher, wenn der DB erst aufgeschlagen wird, kurz, bevor er verwendet wird.

Das Problem war:
S L [AR1,P#0.0] // Set bit

Da gehört hin:
S DBX [AR1,P#0.0] // Set bit
 
anscheinend war "AUF" nur an der falschen Stelle.
Nein. Es funktioniert auch wenn wie bei Dir das AUF in der ersten Zeile steht. Der Fehler war das "L".
S L [AR1,P#0.0] muß heißen S DBX [AR1,P#0.0]

Ich habe mir nur angewöhnt, das AUF erst unmittelbar vor dem Zugriff auf den DB "DB_TEST123" zu schreiben. Wenn die Berechnung der Array-Adresse mit einem Index aus einer Variable gemacht wird, und die Variable mit dem Index ist in einem anderen DB, dann MUSS zwingend der DB "DB_TEST123" erst nach der Adressberechnung geöffnet werden.

Harald
 
Nein. Es funktioniert auch wenn wie bei Dir das AUF in der ersten Zeile steht. Der Fehler war das "L".
S L [AR1,P#0.0] muß heißen S DBX [AR1,P#0.0]

Ich habe mir nur angewöhnt, das AUF erst unmittelbar vor dem Zugriff auf den DB "DB_TEST123" zu schreiben. Wenn die Berechnung der Array-Adresse mit einem Index aus einer Variable gemacht wird, und die Variable mit dem Index ist in einem anderen DB, dann MUSS zwingend der DB "DB_TEST123" erst nach der Adressberechnung geöffnet werden.

Harald
Danke für die Info!
 
Zurück
Oben