saarlaender
Level-1
- Beiträge
- 94
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hi Leute,
ich tu mich leider noch immer schwer mit gewissen Pointer-Geschichten, insbesondere mit dem konkreten Umsetzen von dem was ich im Forum hier so finde...
Ich habe einen FB (wird als Multiinstanz aufgerufen) mit einer UDT-Struktur jeweils in IN, STAT und OUT.
Hintergrund: Ich gebe die Struktur an verschiedene Aufrufe innerhalb des FBs weiter, muss aber davor noch die Daten verändern. Dazu kopiere ich die UDT-Struktur von IN nach STAT, ändere die Daten dort und gebe diese dann an die weiteren Aufrufe weiter. Am Ende kopiere ich dann von STAT nach OUT, da die Aufrufe diese Daten ebenfalls verändern.
Das Problem: Ich muss einen TEIL eines Array of Char ändern - das würde bei einem DB als Ziel mit BLKMOV gehen (P#DB1.DBX0.0 BYTE 10 oder auch P#DB1.DBX10.0 BYTE 22). BLKMOV krigt das aber nicht bei STAT bzw TEMP hin.
Die TEMP-Pointer sind für mich eigentlich kaum mehr ein Hexenwerk, aber die STAT-GEschichte (AR retten und widerherstellen, AR2 addieren usw) schon...
Ich möchte also über einen Pointer einen gewissen Bereich in STAT (ein Teil eines Array of Char, innerhalb eines UDT) ansprechen und zur Sicherheit auch wie hier öfters nachzulesen war das Adressregister retten und zurück spielen (?!).
Bei TEMP würde das z.B. so bei mir aussehen:
Hier würde der TEMP-Bereich ab 50.0 bis 75.0 angesprochen werden. Damit könnte ich dann entweder via BLKMOV von dort Lesen oder eben hin schreiben.
Wie würde dies für den gleichen Bereich in STAT aussehen? Hier mal meine Schlussfolgerung, allerdings ohne die Sicherung und Widerherstellung vom Adressregister...
Stimmt das so, um den STAT-Bereich 50.0-75.0 anzusprechen?
Wie würde in diesem Fall die Rettung usw vom Adressregister aussehen?
Vielen Dank
EDIT: Ich kann den UDT statt in STAT evt. auch in TEMP legen, aber es geht ja hier in erster Linie ums Verständnis...
ich tu mich leider noch immer schwer mit gewissen Pointer-Geschichten, insbesondere mit dem konkreten Umsetzen von dem was ich im Forum hier so finde...
Ich habe einen FB (wird als Multiinstanz aufgerufen) mit einer UDT-Struktur jeweils in IN, STAT und OUT.
Hintergrund: Ich gebe die Struktur an verschiedene Aufrufe innerhalb des FBs weiter, muss aber davor noch die Daten verändern. Dazu kopiere ich die UDT-Struktur von IN nach STAT, ändere die Daten dort und gebe diese dann an die weiteren Aufrufe weiter. Am Ende kopiere ich dann von STAT nach OUT, da die Aufrufe diese Daten ebenfalls verändern.
Das Problem: Ich muss einen TEIL eines Array of Char ändern - das würde bei einem DB als Ziel mit BLKMOV gehen (P#DB1.DBX0.0 BYTE 10 oder auch P#DB1.DBX10.0 BYTE 22). BLKMOV krigt das aber nicht bei STAT bzw TEMP hin.
Die TEMP-Pointer sind für mich eigentlich kaum mehr ein Hexenwerk, aber die STAT-GEschichte (AR retten und widerherstellen, AR2 addieren usw) schon...
Ich möchte also über einen Pointer einen gewissen Bereich in STAT (ein Teil eines Array of Char, innerhalb eines UDT) ansprechen und zur Sicherheit auch wie hier öfters nachzulesen war das Adressregister retten und zurück spielen (?!).
Bei TEMP würde das z.B. so bei mir aussehen:
Code:
LAR1 P##ANY_Pointer
L B#16#10 //Syntax-ID
T LB [AR1,P#0.0]
L B#16#2 //Typ: Byte
T LB [AR1,P#1.0]
L 25 //Länge zu lesender Bereich
T LW [AR1,P#2.0]
L 0 //DB-Nummer, hier 0 da vorherige Lokaldaten
T LW [AR1,P#4.0]
L 50 //Startadresse des zu lesenden Bereiches
SLD 3
T LD [AR1,P#6.0]
L B#16#87 //vorherige Lokaldaten
T LB [AR1,P#6.0]
Hier würde der TEMP-Bereich ab 50.0 bis 75.0 angesprochen werden. Damit könnte ich dann entweder via BLKMOV von dort Lesen oder eben hin schreiben.
Wie würde dies für den gleichen Bereich in STAT aussehen? Hier mal meine Schlussfolgerung, allerdings ohne die Sicherung und Widerherstellung vom Adressregister...
Code:
LAR1 P##ANY_Pointer
[B][I]>> TAR 2 //wg. Multiinstanz
>> +AR1 //wg. Multiinstanz[/I][/B]
L B#16#10 //Syntax-ID
T LB [AR1,P#0.0]
L B#16#2 //Typ: Byte
T LB [AR1,P#1.0]
L 25 //Länge zu lesender Bereich
T LW [AR1,P#2.0]
L 0 //DB-Nummer, hier 0 da vorherige Lokaldaten
T LW [AR1,P#4.0]
L 50 //Startadresse des zu lesenden Bereiches
SLD 3
T LD [AR1,P#6.0]
L B#16#87 //vorherige Lokaldaten
T LB [AR1,P#6.0]
Stimmt das so, um den STAT-Bereich 50.0-75.0 anzusprechen?
Wie würde in diesem Fall die Rettung usw vom Adressregister aussehen?
Vielen Dank
EDIT: Ich kann den UDT statt in STAT evt. auch in TEMP legen, aber es geht ja hier in erster Linie ums Verständnis...
Zuletzt bearbeitet: