Kann ich Hex und INt miteinander verrechnen?

Tigerkroete

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

irgendwie habe ich bei den Zahlenformaten noch nicht alles verstanden.
Ich weiß, dass man Zahlenformate wie INT,DINT, REAL und BCD nicht einfach miteinander verrechnen kann. Dafür gibt es ja die Umwandlungen mittels ITD, DTR usw..
Aber was ist nun mit WORD und INT. Ich habe doch einmal die Möglichkeit im Anwenderprogramm, eine Zahl als Dezimalzahl (L 2) und als Hexadezimalzahl (L W#16#2) in ein WORD zuschreiben!? Doch im DB selbst steht es doch so oder so im Hexformat!?
Kann ich ein INT-Format nur mit einem WORD-Format verrechnen, wenn ich die Zahl als Dezimalzahl ins WORD geschrieben habe?

Wäre für eine Antwort dankbar!
Viele Grüße,
Tigerkroete
 
Hallo,

der Unterschied zwischen INT und WORD liegt im Vorzeichen.

Daher klappt es nur, wenn Dein HEX-WERT im Positiven Bereich liegt (0..32xxx). Das Ergebnis ist ein INT.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich interessiert das auch.
Man kann INT und WORD also miteinander verrechnen, egal in welchem Format die Zahl in das WORD geschrieben wurde? Nur wenn die Zahl im WORD negativ ist, funktioniert das nicht?

Spike
 
Mich interessiert das auch.
Man kann INT und WORD also miteinander verrechnen, egal in welchem Format die Zahl in das WORD geschrieben wurde? Nur wenn die Zahl im WORD negativ ist, funktioniert das nicht?

Spike

INT und WORD haben beide 16bit, werden jedoch unterschiedlich interpretiert. Verrechnen kannst du nur im INT, DINT oder REAL Format.
In FUP/KOP/SCL werden die entsprechenden Funktion direkt gesperrt.
Es sei denn, du hast's in den Einstellungen unterdrückt :twisted:

In AWL jedoch nicht und die Eingabe:

L 1
L W#16#01
+I
T Erg

Ist prinzipiell immer möglich und das sogar wenn Erg REAL ist, macht aber keinen Sinn :rolleyes: . Der Programmierer muss hier selber sicherstellen (und ist gut beraten) nur typgleiche Operationen durchzuführen.
 
im db steht das so wie du das deklariert hast.
da ist aber gar nicht das problem.

nehmen wir mal an du definierst in deinem hmi ein eingabefeld vom typ word(hex) und vom typ int(dez).

nun gibst du in beide 20 ein.

var1 hat aber dann einen wert von 32 dez. und var2 logischerweise 20 dez.

bei real ist das npch viel krasser, da das format völlig anders ist.

wie du das im programm verarbeitest bleibt dir überlassen. du musst halt
nur wissen in welchem format die vorliegen.

allklar ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Verrechnen kannst du nur im INT, DINT oder REAL Format.

Wenn ich nur in diesen Formaten rechnen kann, warum gibt es denn dann überhaupt die Möglichkeit Hexzahlen aufzunehmen? Welchen Vorteil hat das? Wann brauche ich eine Hexzahl, anstatt einer Dezimalzahl?

Danke,
Spike
 
es gibt halt variablen die liegen im hexformat vor. da ist es dann teilweise einfacher im hex zu bleiben.

nehmen wir als beispiel die uhrzeit im ob1. diese daten liegen im hexformat vor.

14hex = 20dez

um nun zu sehen ob es 14 uhr ist kann ich dies so machen.

L LB15 //stunde
L W#16#14
==I
= M1.0

oder so

L LB15
BTI
L 14
==I
= M1.0
 
das einzige wo man wirklich aufpassen muss sind Vergleichsoperationen...


L W#16#8000
L W#16#FFF
>I
= M 900.0


der Merker 900.0 wird in diesem Beispiel nicht 1 werden da das Vorzeichenbit(das höchstwertige) gesetzt ist und somit der erste Wert kleiner ist als der zweite. Der Grund liegt im eben genannten INT Rechenverfahren, welches immer angewandt wird.
 
Zurück
Oben