Ausrichtungsfehler beim Schreibe

Hello_SPS

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute ich bins wieder,
habe schon nach dem Fehler hier im Forum geguckt aber nicht meinen Fall gefunden.
Ich benutze eine VIPA CPU 313SC und Step7 V5.4
Mein Code befindet sich im FB85 mit Instanzen DB.
DB402 ist ein globaler Datenbaustein.
DB402.dbd8.0 beinhaltet die Adresse von einem Wert der im Array_Werte steckt (db402.dbx0.0 bis db402.dbx2.1)

Code:
      AUF   DB   402
      L     P#DBX 8.0                   // Zeiger auf Array_Reihenfolge_(1)
      LAR1  
      T     MD   546
      L     DBD [AR1,P#0.0]             // Inhalt im Array_Reihenfolge_(1)
      LAR1  
      T     #Zeigermerker_ar1
      T     MD   550

// ---  Abfragen ---
      AUF   DB   402
      L     P#DBX 0.0                   // Zeiger auf Array_Werte(1)
      LAR2                              
      T     #Zeigermerker_ar2
      T     MD   554
      
      L     #Zeigermerker_ar1
      L     #Zeigermerker_ar2
      ==D   

      SPBN  sk01
      = #Freigabe1            
      SPB   end

sk01: AUF   DB   402
      L     P#DBX 0.1                   // Zeiger auf Array_Werte(2)
      LAR2                              
      T     #Zeigermerker_ar2
      T     MD   558   

      L     #Zeigermerker_ar1
      L     #Zeigermerker_ar2
      ==D   
      SPBN  sk02
      =  #Freigabe2             
      SPB end

sk02: ...

end: nop 0
Im MD554 und MD558 stehen die richtigen Adressen drin, aber die SPS geht in Stop und "sagt": Ereignis-ID 16# 2529
"Instanz-DB, Doppelwortzugriff, Falsche Adresse: 6"

Die Stelle an der die SPS in Stop geht, ist ganz woanders im Code und hat mit meinem Code hier doch nichts zu tun, oder?
Nehme ich den Code wieder raus, stopt die SPS an der Stelle nicht mehr, also muss das irgendwas mit dem Adresszugriff zu tun haben, oder?

Die Unterbrechung ist ein Aufruf in ein anderen FB mit gewissen IN / OUTS ... auch dabei ist die "#Freigabe1". Die falsche Adresse im Instanzen DB bezieht sich zwar auf den Aufruf aber auf eine ganz andere Variable.

Ich hoffe, ich konnte mein Problem so gut es geht beschreiben.
 
Sicherst du deine Adressregister?
Wenn du Ar2 nimmst muss du es vorher sichern und am Ende wieder zurückschreiben, da dieses Register für die Adressierung im InstanzDB verwendet wird.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

sind #Zeigermerker und #Freigabe Statische Variablen?
Das kann nicht gehen.
Du überschreibst das AR2 und willst dann wieder auf den Bereich zugreifen.
 
Oh ha, AR2 sichern und später wieder zurückgeben, das ist die Lösung! Danke euch. Habe bis jetzt noch nichts davon gehört. Ich hatte deswegen bissle recherchiert und es klingt plausibel.
Also in Zukunft, Adressregister sichern. Sicher ist sicher ;)

Wie gesagt, danke!
 
Zurück
Oben