# BYTE/WORD/DWORD vergleichen



## slma (6 Juli 2007)

Hallo!

Ich möchte eine Variable vom Typ BYTE vergleichen ob si 0,1,2,...ist.
Bei Intager gibt es ja genug vergleichsoperatoren die mir TRUE/FALSE ausgeben. Gibt es so etwas für BYTE/WORD/DWORD auch???

danke, mfg


----------



## zotos (6 Juli 2007)

in ST/SCL kannst Du mit
<
>
>=
<=
<>
=

alle Datentypen miteinander vergleichen.


----------



## kiestumpe (6 Juli 2007)

Falls du das jedoch nicht hast, weil du mit der "Unprofessionel" Version arbeitest (oder arbeiten musst), kommst du im ein Konvertierung nach INT oder DINT nicht herum und wendest die Vergleicher dann hierauf an.

hth


----------



## slma (6 Juli 2007)

kiestumpe schrieb:


> Falls du das jedoch nicht hast, weil du mit der "Unprofessionel" Version arbeitest (oder arbeiten musst), kommst du im ein Konvertierung nach INT oder DINT nicht herum und wendest die Vergleicher dann hierauf an.
> 
> hth


 
ja habe leider die "Unprofessionel" Version...
wo finde ich diese Konvertierer? Ich sehe da nur ...BCD to INT, INT to REAL, REAL to DINT....
aber nichts mit BYTE WORD DWORD!!!


----------



## kiestumpe (6 Juli 2007)

Probiersmal mit move


----------



## vladi (6 Juli 2007)

*Vergleichen*

Hi,
ist AWL verboten, oder?

Vladi


----------



## slma (6 Juli 2007)

vladi schrieb:


> Hi,
> ist AWL verboten, oder?
> 
> Vladi


 
nein wiso?


----------



## Larry Laffer (6 Juli 2007)

... weil du in AWL diese Vergleiche machen kannst ...


----------



## slma (6 Juli 2007)

Larry Laffer schrieb:


> ... weil du in AWL diese Vergleiche machen kannst ...


 
Und wie würde das dann aussehen? 
sagen wir ich habe die variable stoerung(BYTE) und möchte wissen ob sie 3 ist (true=ist 3; false nicht=3)


----------



## Larry Laffer (6 Juli 2007)

L MB 10
L 3
==I
= m 47.0

L MD 20
L 10000
>=D
= M47.1

...
WORD geht wie INT


----------



## slma (6 Juli 2007)

Larry Laffer schrieb:


> L MB 10
> L 3
> ==I
> = m 47.0
> ...


 

ok danke! werds probieren!


----------



## godi (6 Juli 2007)

zotos schrieb:


> in ST/SCL kannst Du mit
> <
> >
> >=
> ...


 
Meines Wissen nach kann man in SCL auch nur INT vergleichen und keine Byte/Word!

godi


----------



## Larry Laffer (6 Juli 2007)

Hallo Godi,
das stimmt so nicht. Du kannst in SCL nur keine unterschiedlich Typen direkt vergleichen. Dort musst du immer erst wandeln ...


----------



## godi (6 Juli 2007)

siehe Bild:


----------



## zotos (6 Juli 2007)

Larry Laffer schrieb:


> Hallo Godi,
> das stimmt so nicht. Du kannst in SCL nur keine unterschiedlich Typen direkt vergleichen. Dort musst du immer erst wandeln ...



echt? (dreck!)

Also in ST muss ich keine expliziten Typecast machen wenn ich nur vergleichen will.

Aber wenn SCL das nicht kann ein Typecast tut ja auch nicht weh muss eben mit bedacht gewählt werden.


----------



## zotos (6 Juli 2007)

godi schrieb:


> siehe Bild:



kann nicht gehen!
Das geht nicht mit Zuweisungen!!!

```
IF(myDWORD < myByte) THEN
  RetVal := TRUE;
ELSE
  RetVal := FALSE;
END_IF;
```
und mit dem Typecast:

```
IF(myDWORD < BYTE_TO_DWORD(myByte)) THEN
  RetVal := TRUE;
ELSE
  RetVal := FALSE;
END_IF;
```


----------



## Larry Laffer (6 Juli 2007)

@Godi:
OK - OK , versuch doch mal DINT oder REAL ... DWORD wird dann warscheinlich auch nicht gehen ...
Aber da gibt es ja dann noch die Sache mit dem "AT"-Befehl ...


----------



## godi (6 Juli 2007)

zotos schrieb:


> kann nicht gehen!
> Das geht nicht mit Zuweisungen!!!


 
Warum soll das nicht mit Zuweisung funktionieren?
Mit den Datentype Int funktionierts auch!

Mit einer IF - Anweisung habs ich auch schon probiert. Ist der selbe Mist!

godi


----------



## zotos (6 Juli 2007)

godi schrieb:


> Warum soll das nicht mit Zuweisung funktionieren?
> Mit den Datentype Int funktionierts auch!
> 
> Mit einer IF - Anweisung habs ich auch schon probiert. Ist der selbe Mist!
> ...



Stimmt geht hab ich noch nie benutzt ;o)

Test es mal mit dem Typecast.


----------



## godi (6 Juli 2007)

Hier noch 2 Bilder:
Mit Umwandlung funktionierts natürlich
ohne funktionierts nicht


----------



## Larry Laffer (6 Juli 2007)

... und hier noch ein Bild von mir ...


----------



## godi (6 Juli 2007)

Larry Laffer schrieb:


> ... und hier noch ein Bild von mir ...


 
OK!

Kannst du das mal kurz erklären was du da machst mit den AT Befehl?
Da wird ja eine Variable mit 2 Datentypen Deklariert oder wie?  
So gut kenn ich mich in SCL nicht aus. :???: 

godi

Ok ich glaub ich weiß schon wie das geht:
i_Wert_1_Word übernimmt den Wert von Wert_1_Word ist aber als Int deklariert


----------



## Larry Laffer (6 Juli 2007)

Hallo Godi,
der AT-Befehl bildet eine 2. Ansicht der gleichen Variable für SCL. In der Siemens Hilfe steht es aber noch etwas schöner. Richtig klasse ist der Befehl, wenn man ihn auf ein ARRAY oder eine Struktur anwendet. Ein DINT ist ja zum Beispiel vergleichbar mit einem ARAAY [1..32] of BOOL usw.
Entscheidend ist, das die Datentypen in der Größe (Bit-Breite) vergleichbar sind ...

Viel Spaß damit ...


----------



## zotos (6 Juli 2007)

Also die Auslegungen von ST und der IEC61131-3 sind mal wieder Herstellerspezifisch ;o(
Andere Systeme brauchen kein Typecast zum Vergleichen.


----------

