Step 7 CPU Stop Fehler 8x28 Ausrichtungsfehler beim Lesen eines Parameters

paulo78

Level-2
Beiträge
71
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


Ich versuche jetzt schon seit stunden diesen Fehler zu beseitigen. Und zwar experimentiere ich gerade mit dem Simatic Manager und PLCSim hab mir einen FC10 geschrieben der später in FBs aufgerufen werden kann.
Der FC nimmt als Grundlage einen DB 10 “BrandMatrix“ dort ist einen Array angelegt ARRAY[0..15] Type INT.

Der DB wird einmal bei Inbetriebnahme festgelegt

0.0 : INT RecipeBrandMap[0] Wert = z.B 6

2.0 : INT RecipeBrandMap[1] Wert = z.B 3

4.0 : INT RecipeBrandMap[2] Wert = z.B 4

...

30.0 : INT RecipeBrandMap[15] Wert = z.B 1


Nun wird der FC zur zeit im OB 1 aufgerufen und vorbelegt (spaeter in einem FB)
der FC wird von außen beschaltet und bekommt von einem Füller die Rezept Nummer als INT und von Produkt TANK die Nummer des Produktes in dem Tank (auch als INT.)
Wenn die zwei werte passen auf Grundlage des DBs “BrandMatrix“ wird eine Freigabe Bit ausgegeben.

Wenn ich das Programm lade geht die CPU in Stop

(Fehler 8x28 Ausrichtungsfehler beim Lesen eines Parameters) und zwar an der stelle:

L W [AR1,P#0.0] // brand ID from array



Der ganze Code in diesem Netzwerk NW2 :

OPN DB 10 // array: RecipeBrandMap[0..15]
LAR1 P#DBX 0.0

L #iFillerRecipeNo
SLD 1 // multiply by 2 (INT size)
+AR1

L W [AR1,P#0.0] // brand ID from array
T #iFillerBrandID



Kann mir jemand weiterhelfen ?
 
L #iFillerRecipeNo
SLD 1 // multiply by 2 (INT size) <----- muss SLD 4
+AR1

L W [AR1,P#0.0] // brand ID from array
das AR1 adressiert Bit-Adressen "P#Byte.Bit", bei Byte/Word/DWord-Zugriff müssen die Adress-Bits 0..2 = 0 sein
Pointer P#Byte.Bit = Byte_Adresse * 8 + Bit
Code:
  "* 8" entspricht SLD 3
+ "* 2" entspricht SLD 1
--------------------------
= "* 16"   gesamt: SLD 4

siehe Step7-Hilfe "Aufbau des Datentyps Pointer" und "Register-indirekte Adressierung", und die Hilfe zum OB121 wegen Fehlercode B#16#28

PS: Tipp: beim Beobachten des AWL-Codes kann man sich die Spalte "AR1" einblenden lassen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich das Programm lade geht die CPU in Stop

(Fehler 8x28 Ausrichtungsfehler beim Lesen eines Parameters)
Du meinst wahrscheinlich 16#28 oder 0x28

Tipp: Code mit indirekter Adressierung immer erst in PLCSIM ausführlich austesten, bevor in eine produktive CPU geladen wird. Dabei auch die Werte der betreffenden Adressregister beobachten. Und in PLCSIM einen OB121 laden, damit die CPU nicht in STOP geht, damit man den Code beobachten kann.
 
Zuletzt bearbeitet:
PPS:
Nun wird der FC zur zeit im OB 1 aufgerufen und vorbelegt (spaeter in einem FB)
Falls du vorhast, in einem FB Variablen im eigenen IDB indirekt zu adressieren, dann muss noch der Multiinstanz-Offset aus AR2 addiert werden. siehe Forumssuche, das wurde hier schon oft gezeigt.
 
das AR1 adressiert Bit-Adressen "P#Byte.Bit", bei Byte/Word/DWord-Zugriff müssen die Adress-Bits 0..2 = 0 sein
Pointer P#Byte.Bit = Byte_Adresse * 8 + Bit
Code:
  "* 8" entspricht SLD 3
+ "* 2" entspricht SLD 1
--------------------------
= "* 16"   gesamt: SLD 4

siehe Step7-Hilfe "Aufbau des Datentyps Pointer" und "Register-indirekte Adressierung", und die Hilfe zum OB121 wegen Fehlercode B#16#28

PS: Tipp: beim Beobachten des AWL-Codes kann man sich die Spalte "AR1" einblenden lassen
Hallo Harald,

Wie immer bist du der Helfer in der Not. Vielen Dank fuer deine Hilfe. Als du geschrieben hast "AR1 adressiert Bit-Adressen" habe ich mir mit der flachen Hand auf die Stirn geschlagen.

Viele Gruesse,
Paulo
 
Zurück
Oben