KOP/FUP/AWL Editor ändert DID Aufruf

matziane

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

will in meinem Programm in einen indirekt adresseirten Bereich einen Wert transferieren.
Trage ein T DID[AR1,p#14.0]
nach dem Speiechern steht plötzlich Bereich1 da.

Bereich1 steht im Instanz DB an Adresse 14.

Ich will duch meinen Transferierbefehl aber in einen ganz anderen Bereich schreiben.
Immerhin errechne ich vorher eine Adresse und Lade diese ins Adressregister, bei mir wäre der erste errechnete Adresspointer bei Adresse 72 im Instanz DB.
Finde das sehr komisch.

Habe es auch mal gegengecheckt, es wird auch korrekt in meinen per Pointer adressierten Adressbereich geschrieben und nicht in die Absolutadresse 14 im Instanz DB.

Also passt das was mir der KOP/FUP/AWL Editor da anzeigt nicht zu dem was er macht.

Woran kann das liegen, vielen Dank im voraus.
 
... das habe ich nun gar nicht verstanden ... :(

Der Befehl bewirkt auf jeden Fall, dass in das DID geschrieben wird, das durch AR1 adressiert wird und das um den Byte-Offset 14 noch zusätzlich erhöht wird.
Wenn also das AR1 selbst auf Adresse 58 zeigt und das Offset p#14.0 ist dann wird dann tatsächlich auf Adresse 72 geschrieben ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:???: ... ja sieht ziemlich verwirrend aus...da hast du vollkommen recht.

Mein AR1 zeigt auf Adresse 72 Offset P#14.0 zeigt also auf Adresse 86.
Wenn ich den Funktionsablauf gegenchecke und schaue welche Daten kommen wo an, muss ich feststellen, es funktioniert alles ordnungsgemäß.

Es ist nun so, ich trug im Programm den Befehl T DID[AR1,p#14.0] ein und speicherte, plötzlich stand da wo vorher mein Befehl "T DID[AR1,p#14.0]" stand "T Bereich1".
Wenn ich mir meinen Instanz DB anschaue, dann sehe ich dass an Absolutadresse 14 die Variable Bereich1 steht.

Hoffe das ist etwas verständlicher.
 
Es war mir bisher nicht bekannt, dass Step7 so etwas (außer bei einem ANY-Pointer) kann - also das rückwärts-Zuordnen.

Wenn die Frage sein sollte : warum hat mein AR1 den Wert 72 - dann beachte bitte, dass z.B. bei einem FB auch alle IN- und OUT-Deklarationen mit zur Instanz zählen und somit das Adress-Offset beeinflussen ...

Gruß
Larry
 
Das heisst für mich ?????.....konnte immerhin meinen Editor noch nicht dazu bewegen mir meinen Transferierbefehl so anzuzeigen wie ich ihn eingegeben habe und nicht so wie er da steht.
Denn das was da steht stimmt ja nun nicht mit dem über ein, was das Programm in Wirklichkeit tut.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

habe ein ähnliches "Phänomen". Step7 verfolgt die Variable bis zum IN des Bausteins zurück oO.
Im AR2 steht Adresse 40.0, da wo mein Struct anfängt. Meine Input Variable liegt auf Adresse 8.
Genau die Variable an Adresse 8.0 wird nachher auf 48.0 geschrieben.

Vor dem Speichern
Code:
L DID [AR2, P#8.0]  // AR2 = 40.0 -> Addresse 48 Wird angesprochen
T PAW [AR1, P# 8.0]

Nach dem Speichern
Code:
L #TempLimit  // Adresse 8.0 wird angesprochen
T PAW [AR1, P# 8.0]
 
Zuletzt bearbeitet:
habe ein ähnliches "Phänomen". Step7 verfolgt die Variable bis zum IN des Bausteins zurück oO.
Im AR2 steht Adresse 40.0, da wo mein Struct anfängt. Meine Input Variable liegt auf Adresse 8.
Genau die Variable an Adresse 8.0 wird nachher auf 48.0 geschrieben.

Also das mit AR2, P#8.0 ist noch irgendwo nachvollziehbar.
Im AR2 steht ja üblicherweise die Startadresse der deklarierten Variablen.
Wenn du natürlich AR2 "verbiegst", dann sollte der Editor seine Finger davon lassen.

Gruß
Dieter
 
Ich habe ein wenig weiter Probiert.
Der Editor geht davon aus, dass wenn man DI [AR2, P#0.0] schreibt, dass man im Instanzdatenbaustein die Adresse 0.0 Ansprechen will. Daher übernimmt der dann die Symbolische Adressierung, sofern der Datentyp (Word, Dword, etc..) übereinstimmt.
Kann man das irgendwie abschalten?
 
Zuletzt bearbeitet:
Ich habe ein wenig weiter Probiert.
Der Editor geht davon aus, dass wenn man DI [AR2, P#0.0] schreibt, dass man im Instanzdatenbaustein die Adresse 0.0 Ansprechen will. Daher übernimmt der dann die Symbolische Adressierung, sofern der Datentyp (Word, Dword, etc..) übereinstimmt.
Kann man das irgendwie abschalten?

Keine Ahnung, ob man das abschalten kann, aber man kann diesen Bug/Feature!? umgehen, indem man

Code:
L P##VARIABLE 
UD    DW#16#FFFFFF //Bereich entfernen
OD    DW#16#85000000 //Bereich Instanz-DB setzen
LAR2
...
T D [AR2,p#x.x]

schreibt.
In den o.g. Transferbefehl kann S7 nix reininterpretieren, und es bleibt so stehen.

Micha
 
Zurück
Oben