Habe beim Befehl NEGI falsche Anzeige im AKKU1....

kraut

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich acker mich gerade durch den Siemens Ordner "AWL für S7-300/400". Dazu programmiere ich dann immer Beispielaufgaben auf einer 312IFM und Step7 5.3 SP3.
Nun habe ich folgendes programmiert für "2-Komplement Ganzzahl 16 Bit":

L EW0 (Akku1=256DEZ)stimmt so, da E0.0=1
NEGI (Akku1=65280DEZ) :shock: sollte da nicht -256 stehen?
T AW0 (Akku1=65280DEZ) hääää?? .....

Wenn ich nun in einer Variablentabelle den Status von EW0 abfrage erhalte ich 256DEZ und bei AW0=-256DEZ, so wie es eigentlich sein sollte. Warum zeigt mir der Akku1 das so an? Beim "2-Komplement Ganzzahl 32Bit zeigt mir der Akku1 folgendes an:

L ED0 (Akku1=16 777 216DEZ) E0.0=1
NEGD (Akku1=-16 777 216DEZ) :D
T AD0 (Akku1=-16 777 216DEZ) :D

Warum ist das so :?:

Und kann man den Akku1 und den Akku2 auch im Format Binär darstellen? DEZ,HEX und Gleitpunkt ist etwas dürftig....

Gruß
Stefan
 
Hallo,

das ist kein Fehler, das ist eine Ansichtssache:

65280Dez = 1111111100000000Bin ist genauso richtig wie
-256Dez = 1111111100000000Bin,
einmal wird das Word als vorzeichenloser Wert interpretiert (Wertebereich dann 0..65535), ein andermal als vorzeichenbehafteter Wert (Wertebereich dann -32768 .. 32767

Wie gesagt: alles eine Ansichtssache.

Peter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Peter,

was ich nicht verstehe ist folgendes:
1. Warum interpretiert der Akku1 den Inhalt anders als die Statusanzeige in der Variablentabelle und das auch nur bei NEGI(16bit). Bei NEGD(32bit) werden beide gleich interpretiert.
2. Wenn ich jetzt das Ergebnis für einen Vergleich verwenden möchte und der interpretiert mir statt z.B. 32768 den Wert 65535, dann passt doch mein Ergebnis nicht oder liege ich da falsch?

Gruß
Stefan
 
kraut schrieb:
1. Warum interpretiert der Akku1 den Inhalt anders als die Statusanzeige in der Variablentabelle und das auch nur bei NEGI(16bit). Bei NEGD(32bit) werden beide gleich interpretiert.
Die Interpretation erfolgt durch den verwendeten Befehl. Die I-Befehle gehen von vorzeichenbehafteten Ganzzahlen im Wertebereich -327678 (0x8000 hex) bis +32767 (0x7FFF hex) aus. Der Inhalt des "Highwords" wird nicht berücksichtigt. Die Variablentabelle stellt die Werte gemäß Foramt dar. Dies hat keine Auswirkung auf das SPS-Programm. Egal ob der Wert nun binär, dezimal oder hexadezimal angezeigt wird.

2. Wenn ich jetzt das Ergebnis für einen Vergleich verwenden möchte und der interpretiert mir statt z.B. 32768 den Wert 65535, dann passt doch mein Ergebnis nicht oder liege ich da falsch?
Wie oben erwähnt, hängt die Interpretation vom Befehl ab. 65535 (0xFFFF hex) entspricht dabei aber -1 dezimal und nicht 32768 (= 0x8000 hex). Diese Zahl ist außerhalb dem zulässigen vorzeichenbehafteten Wortbereich.
 
Hallo,

was ich nicht verstehe ist folgendes:
1. Warum interpretiert der Akku1 den Inhalt anders als die Statusanzeige in der Variablentabelle und das auch nur bei NEGI(16bit). Bei NEGD(32bit) werden beide gleich interpretiert.

Das liegt daran, das der Akku der S7 32Bit lang ist und immer als 32Bit-Ganzzahl ohne Vorzeichen interpretiert wird (in der Statusanzeige).

2. Wenn ich jetzt das Ergebnis für einen Vergleich verwenden möchte und der interpretiert mir statt z.B. 32768 den Wert 65535, dann passt doch mein Ergebnis nicht oder liege ich da falsch?
In der Tat kann das ins Auge gehen, wenn ein Partner den Wert als Integer (also mit Vorzeichen) und der andere den Wert als Word (ohne Vorzeichen) auffaßt.
Ist mir mal bei der Datenübertragung SPS PC passiert, wenn der Drucksensor plötzlich den unmöglichen Wert -1 liefert (falsche Skalierung) und die Visualiserung auf dem PC 65535 Bar anzeigt.

Also immer aufpassen, Grenzen prüfen und so weiter und so fort...

Peter
 
Zurück
Oben