VAT: HEX <-> DEZ Umrechnung

derbenny

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

hänge grad an einem kleinen "Problem":

Ich habe ein INT-Array, das nur INT-Werte bis 250 enthält. Diese Zahlen will ich in ein anderes Array kopieren. Um Speicherplatz zu sparen dacht ich super, mach ich INT_TO_BYTE, dann reicht ein Byte pro Zahl.

Jetzt habe ich in der Variablentabelle also beide Arrays da stehen.
In der HEX-Ansicht kommt das raus:

B#16#96 und W#16#0096

Das Problem liegt in der DEZ-Ansicht:

-106 und 150

Die Umrechnung läuft also falsch, S7 berechnet das Zweierkomplement und interpretiert die Zahl negativ.

kann ich das irgendwie beeinflussen? Ich will doch nur eine "normale" Umrechnung :(
 
Zuletzt bearbeitet:
Nur die Ansicht in der VAT interpretiert das Bit 7 als negatives Vorzeichen.
Wenn Du das Byte mit dem L - Befehl in den Akku lädst steht der Wert dort wieder als positive Ganzzahl.

L #DeinByte // hier steht die vermeintliche -106
T #DeinWort // hier steht wieder Deine 150
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also man kann Siemens ja für vieles verantwortlich machen,
aber dafür nun ausnahmsweise nicht.
Also höchstens das die das UINT-Format in ihre VAT nicht integriert haben.

Dez = INT = Höchste Bit Vorzeichen.

Mfg
Manuel
 
Wenn du mit Ganzzahlen Rechnen willst, solltest du dich auf die Typen INT bzw. DINT beschränken, da Siemens nur auf diesen die entsprechenden Operatoren zur Verfügung stellt.
Es passieren dann zwar in AWL implizit einige Typenumwandlungen beim Rechnen - aber eben auch solche Quereffekte wie oben beschrieben.
Also, wenn möglich, mach aus deinem Baustein wieder ein INT-Array, du ersparst dir einiges an Ärger.
 
Zurück
Oben