Berechnung SCL ; WORD oder INT

toto45

Level-1
Beiträge
65
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte in SCL Berechnungen durchführen. Und zwar bekomme ich verschiedene Zählerstande als WORD (binär).
Nun will ich mit diesen Werten Rechnungen durchführen.
Habe da eine grundlegende Frage zu den Datentypen.
Word hat ja einen Wertebereich bis 65536 Integer +- 32768. Ich benötige sowieso nur positive Zahlen. Also wäre WORD besser geeignet.
Wenn ich allerdings einen Befehl wie:
Wert := Zaehler1*100/Zaehler2;
schreibe funktioniert das mit WORD nicht. Der SCL Compiler gibt Fehler an.
Wenn ich vorher die Zaehlerstände in INT konvertiere und auch "Wert" als INT deklariere funktioniert es.

Wieso ist das so? Kann man mit WORD Variablen nicht ohne Weiteres rechnen?
 
Hi,

nein geht nicht. Du kannst aber Dein Word in ein Dword konvertieren z.b. DWORD_TO_DINT(WORD_TO_DWORD(x)).

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Word ist halt Wort und gibt noch keine Aussage was darin enthalten ist. Das könnten auch 16 Einzelbits sein. Der Compiler kann also nicht wissen soll er jetzt Einzelbits addieren, eine Dezimalzahl, oder BCD. Das gäbe alles verschiedene Resultate.

Integer hingegen ist ein Datenformat das alles aussagt das man wissen muss um damit zu rechnen.
Wenn dir ein INT von der Grösse nicht reicht, mach n Dint draus.

Wenn aber das Word das du von dem Zähler kriegst ein uInt enthält musst du dafür sorgen dass das Vorzeichen richtig interpretiert wird. Mit nur word_to_int läufts sonst nicht.

mfG René
 
Und zwar bekomme ich verschiedene Zählerstande als WORD (binär).
Vermutlich hast du deine Zähler als IW oder PIW und dann hast du Symbole dafür eingerichtet, womit STEP7 WORD vorschlägt obwohl INT sinnvoller wäre.

Word hat ja einen Wertebereich bis 65536 Integer +- 32768. Ich benötige sowieso nur positive Zahlen. Also wäre WORD besser geeignet.
Was du beschreibst ist ein "unsigned INT". Sowas gibt es nicht in STEP7.
Wenn du ausserhalb von -32768..+32767 zählen muss, dan DINTs verwenden.

OBS. Wenn ich ein Zähler-Modul in mein S7 hat, dann ist den Zählerwert ein doubleword (ID, oder PID, mit DINT als Typ).
 
Zurück
Oben