Bereichslängenfehler beim Schreiben in den DB

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe folgendes Programm und bekomme es nicht zum Laufen, weil ich laut Diagnosepuffer einen Bereichslängenfehler beim Schreiben habe.

L MD 404 //Adresspointer
L 640
<D
SPB gut
L 0
T MD 404 //Adresspointer



gut: AUF DB 3
L MD 400 //kW-Wert in REAL
T DBD [MD 404]
L 8
L MD 404 //Adresspointer
+D
T MD 404 //Adresspointer
 
dürfte kein problem sein

l
erstmal: nimm als adresspointer eine integer variable, weiss nicht ob dint dort geht. hier das funktionierende Listing in rot:
L MD 404 //Adresspointer L mw404
L 640 L 640
<D <I
SPB gut spb gut
L 0 L 0
T MD 404 //Adresspointer T mw404
gut: AUF DB 3 gut:AUF DB3
L MW404
SLW3
LAR1
L MD 400 //kW-Wert in REAL L MD400
T DBD [MD 404] t DBD[ar1,P#0.0]
L 8 L 8
L MD 404 //Adresspointer L mw404

+D +i
T MD 404 //Adresspointer] t mw404


wofür brauch man sowas kompliziertes? wenn Du weitere Hilfe brauchst, meld dich mit mehr infos . ich hoffe Du hast ne schnelle CPU, die schleife ist zykluszeitmässig nicht ohne....

Gruß aus oelde
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo mertens2,

vergleich doch mal Dein MD404-Inhalt mit der Länge des DBs im USTACK.
Der DB ist bestimmt zu kurz

Gruß
raika

PS:
Warum erhöhst Du den Zeiger um 8?
Real hat 4 Byte, laso:
L P#4.0
+D
T MD404
 
Nimm unbedingt DINT, INT geht zwar erstmal, aber bei einer hohen Adresse läuft INT dann über und baut Mist, der Pointer hat 32 Bit. Wenn du INT als Zählvariable nutzt, dann wandeln in DINT.

L MW404 INT
ITD nach DINT
SLD3 und DWord schieben !!!
LAR1


Warum Doppelposting ???
 
Ralle schrieb:
Nimm unbedingt DINT, INT geht zwar erstmal, aber bei einer hohen Adresse läuft INT dann über und baut Mist, der Pointer hat 32 Bit. Wenn du INT als Zählvariable nutzt, dann wandeln in DINT.

L MW404 INT
ITD nach DINT
SLD3 und DWord schieben !!!
LAR1


Warum Doppelposting ???

Hallo Ralle,

Du scheinst viel Erfahrung mit ind. Adressierung zu haben. Hier im Forum lese ich oft Adressierungen wie L db[md44]. geht so was direkt in s7 oder muss mann immer über das AR gehen?

gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe alle eure Versionen durchprobiert, leider bleibt dieses Fehlermeldung:
Bereichslängenfehler beim Schreiben.

Da ich das Programm jede Minute über den OB 10 aufrufe, bekomme ich auch menütlich diese Fehlermeldung.

Womit kann das zusammenhängen?

@mertens 2: Warum hast du den Befehl slw3 noch mit im Programm?
Ich verstehe nicht, warum ich drei Bits herausschieben muss.
 
Hallo Gast,

ich hoffe du hast auch einen DB (dein DB 3) angelegt, der ausreichend lang ist!
Die Fehlermeldung kommt eignetlich nur wenn die CPU versucht in einen Bereich auserhalb eines DB's zu schreiben...

Gruß Küffel
 
@mertens 2: Warum hast du den Befehl slw3 noch mit im Programm?
Ich verstehe nicht, warum ich drei Bits herausschieben muss.

Dies hat mit dem Addressformat zu tun. Die Zeiger sind DWORDS und haben as Format Byte.Bit (für Bereichsübergreifender Zeiger ist im höchsten zusätzlich der Operandenbereich gespeichert). Weil die Adressierung Byte-orientiert ist muss man die Bit-Zeiger ausblenden und das ist was dieser SRD3 Befehl tut.

Eine Beschreibung der Zeigerformate findest Du auf Seite 5 in diesem Thread.
 
Zurück
Oben