Arbeiten mit zwei Pointern im FB

ottokar24

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich möchte mit zwei Pointern im FB arbeiten. Im FC kann ich das ohne Probleme. Habe schon gelesen das der FB das AR2 benutzt.
Hat jemand eine Lösung?

Danke

Gruß
Ottokar


L #Adr_DB1
T #Pointer_DB1
SLW 3
LAR1

L #Adr_DB2
T #Pointer_DB2
SLW 3
LAR2


AUF #DB1
L DBW [AR1,P#20.0]

AUF #DB2
T DBW [AR2,P#0.0]
 
Sieh mal hier: http://www.sps-forum.de/showthread.php?t=10198&highlight=Offset+AR2

Ansonsten aus reiner Faulheit und der Einfachheit vielleicht:

L #Adr_DB1
T #Pointer_DB1
SLW 3
LAR1

AUF #DB1
L DBW [AR1,P#20.0]
T #Temp_Hilfsvar //Word im Bereich Temp

L #Adr_DB2
T #Pointer_DB2
SLW 3
LAR1

L #Temp_Hilfsvar
AUF #DB2
T DBW [AR1,P#0.0]

Wenn beim Umkopieren keinerlei Zugriff auf Variablen der Multiinstanz erfolgt, sollte es auch reichen, vor dem Kopieren das AR2 zu retten und nach dem kopieren das AR2 wieder herzustellen. bei Bedarf auch den offenen DB retten und wieder herstellen.

TAR2 RETTAR2 //DWord im Temp-Verzeichnis

L #Adr_DB1
T #Pointer_DB1
SLW 3
LAR1

L #Adr_DB2
T #Pointer_DB2
SLW 3
LAR2


AUF #DB1
L DBW [AR1,P#20.0]

AUF #DB2
T DBW [AR2,P#0.0]

LAR2 RETTAR2

PS: Nimm SLD3 statt SLW3
 
oder du sicherst die Adressregister bevor du sie verwendest temporär und schreibst sie am ende wieder zurück.
 
Und wenn im Weckalarm ein FB aufgerufen wird?.....

verstehe diese anmerkung nicht! es gilt: sichern!

komme ich aus dem main_prog in den weckalarm, sichere ich - egal ob FC oder FB aufgerufen wird - beide adressregister und schreibe sie nach weckalarm abarbeitung zurück, damit das main_prog anstandslos weiterlaufen kann.

zusätzlich wird bei mir noch der letzte offene global-db gesichtert und wieder auf gemacht, wenn der wert <>0 ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 4L,

verstehe diese anmerkung nicht! es gilt: sichern!

komme ich aus dem main_prog in den weckalarm, sichere ich - egal ob FC oder FB aufgerufen wird - beide adressregister und schreibe sie nach weckalarm abarbeitung zurück, damit das main_prog anstandslos weiterlaufen kann.

zusätzlich wird bei mir noch der letzte offene global-db gesichtert und wieder auf gemacht, wenn der wert <>0 ist.

Woher hast du diese Weisheit?


Gruß, Onkel
 
Zuletzt bearbeitet:
Das erledigt doch das Betriebsystem, wir sind hier doch nicht am Assembler:

Wie werden die Adressregister 1/2 bei Unterbrechung der zyklischen Bearbeitung durch einen Alarm-OB gesichert?

Anleitung:
Wird die Programmbearbeitung durch einen OB mit höherer Priorität unterbrochen (z.B. Unterbrechung des zyklischen OB1 durch den Weckalarm OB35), dann speichert das Betriebssystem die aktuellen Inhalte der Akkumulatoren / Adressregister sowie die Nummer / Größe der geöffneten Datenbausteine im Unterbrechungs-Stack.
Ist die Bearbeitung des neuen OB beendet, lädt das Betriebssystem die Informationen aus dem Unterbrechungs-Stack und nimmt die Bearbeitung des unterbrochenen Bausteins an der Stelle erneut auf, an der die Unterbrechung auftrat.
 
@onkel&thomas: ich hab pferde kotzen sehen ... vorbeugen ist besser als sich auf die schuhe zu kotzen ... etc.

ich sichere lieber und weiß, dass nach dem weckalarm alles i.o. ist, als dass ich tagelang den gotverdammten zugriffsfehler, der auch noch wandert, suche.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich hatte schon den Fall, daß irgendein Baustein mir in die AR2-Suppe gespuckt hat. Kaum hatte ich nur noch den AR1 am Wickel funzte das. Wenn man alles selbst schreibt, lieber 4L, wird das sicher gehen. Man hat aber ja auch ab und an Bausteine von werweißwoher zu verwenden.
 
Zurück
Oben