AND Function Erklärung

J_Kapkan

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Freaks

Ich hab da mal eine frage .
Ich habe diessen code:

variable1 := (variable2 AND 16#FFF8 )

Variable1 : REAL;
Variable2 : WORD;


Und jetzt die Frage was macht das AND ?

+-*\ oder was macht es ich mochte gerne wissen was da passiert , ich kenne nur den AND Baustein für. BOOL variablen


Danke in voraus
Mfg
Alex
 
Zuletzt bearbeitet:
Hi... Also Word, Real oder auch FFF8 ist doch aus Binärwerten zusammen gesetzt... Nur dass es eben mehr sind... DAS Beispiel blendet die drei Niederwertigsten Bits aus Variable2 aus und übergibt das Ergebnis an Variable1
gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist aber schon interessant was das denn tun soll...
Hier eine kurze Erklärung zur Wortverknüpfung

Wie Wolfi schon sagte würde der Befehl die 3 letzten Bits in Variable 2 ausblenden.
Aber selbst unter der Annahme das in Variable 2 ein als Gleitpunkt formatierter Wert steht würde man nur dir Bits mit den Wertigkeiten
1/(2^20)
1/(2^21)
1/(2^22)
aus der Mantisse löschen.

Grad bei einer Gleitpunktzahl ist der Endwert stark von der Kombination aus Mantisse und Exponent abhängig. Wenn man nur aus der Mantisse ein paar Bits löscht, muss man schon sehr
genau Wissen was man tut. Wenn das bewusst ist würde mich schon interessieren was damit bezweckt wurde. :confused:

Ich würde fast vermuten dass dort vor dem Übertragen des Ergebnisses eine Formats-Konvertierung vergessen wurde.
 
Zuletzt bearbeitet:
Ich kenne die Analogwertdarstellung bei Codesys nicht aber wenn in Variable2 wirklich ein Dezimalwert steht würde es teilweise Sinn machen.
Mit dem ausblenden der letzen 3 Bits kann man bei einem Analogwert ein "Flackern" ausblenden, was mich auch weiter zur Vermutung bringt das in Variable 2
einen DigitWert abgelegt ist.

Wenn aber Codesys mit der Zuweisung auf Variable 1 nicht automatisch eine INT-to-REAL-Conversion macht, dann bin ich mir ziemlich sicher dass in dem Moment in
Variable 1 nichts brauchbares drin steht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Fachsprache nennt man das ganze auch maskieren.
In dem Fall werden dann (vermutlich) Status-Bits aus dem Eingangswort der PT100 Baugruppe eliminiert. (Ist bei einigen mir bekannten PT100 Baugruppen so)

Im Anschluss findet da dann noch eine sog. implizite Konvertierung von Word nach Real statt.

Mfg
Manuel
 
Nur aus Interesse... Findet die konvertierung einfach durch angabe der Datentypen statt oder fehlt da dann die Angabe WortToReal?
 
Ja da ist noch INT_TO_REAL dabei!
hier das Original

VAR_INPUT
EW:WORD;(* 0.. 16#7FFF


END_VAR
VAR_OUTPUT
TEMP: REAL;
END_VAR
VAR
R_TEMP: REAL;
END_VAR

R_TEMP := INT_TO_REAL(EW AND 16#FFF8 ) /16;


TEMP := REAL_TO_INT(R_TEMP);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja da ist noch INT_TO_REAL dabei!
hier das Original

VAR_INPUT
EW:WORD;(* 0.. 16#7FFF


END_VAR
VAR_OUTPUT
TEMP: REAL;
END_VAR
VAR
R_TEMP: REAL;
END_VAR

R_TEMP := INT_TO_REAL(EW AND 16#FFF8 ) /16;


TEMP := REAL_TO_INT(R_TEMP);
:confused:
Irgendwie hab' ich das Gefühl, dass der Urheber nicht wirklich wußte, was er tat.
Vielmehr sieht das aus wie von irgendwoher zusammen kopiert.

Dieses wilde und dabei teils noch unnötige Hin- und Hergespringe zwischen den Zahlenformaten ist ja schon nicht mehr feierlich.
:sb5:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:confused:
Irgendwie hab' ich das Gefühl, dass der Urheber nicht wirklich wußte, was er tat.
Vielmehr sieht das aus wie von irgendwoher zusammen kopiert.

Dieses wilde und dabei teils noch unnötige Hin- und Hergespringe zwischen den Zahlenformaten ist ja schon nicht mehr feierlich.
:sb5:
So unsinnig ist das gar nicht. REAL_TO_INT rundet automatisch. Bei einer Division mit INTs würde der Nachkommaanteil aber schon vorher unter den Tisch fallen.
 
Preisfrage: kann hier auch eine negative Temperatur 'rauskommen?
Code:
R_TEMP := INT_TO_REAL( EW AND 16#FFF8 ) /16;
(REAL)               (WORD)    (WORD)   (?)


Hätte man das Ganze nicht auch einfach so schreiben können?
Code:
TEMP := INT_TO_REAL(EW / 16) ;

Harald
 
Bei einer Division mit INTs würde der Nachkommaanteil aber schon vorher unter den Tisch fallen.
:confused:
Welcher Nachkommaanteil?
Da wird ein WORD implizit zu INT und dann explizit zu REAL gewandelt. Woher sollen die da kommen?

Dann wird der ganzzahlige REAL geteilt (dabei entstehen vielleicht Nachkommastellen) und direkt hinterher zu INT (da fallen sie gleich wieder weg).

Ich sehe da jetzt keinen Unterschied, das alles direkt in INT zu machen (da fallen sie direkt weg).
PS: Oder wird mit Real_TO_INT mathematisch gerundet?
 
Zuletzt bearbeitet:
Ja, bei REAL_TO_INT wird mathematisch gerundet, sprich 1.5 wird zu 2
Interessant wäre jetzt noch, welche Temperaturbaugruppe da verbaut ist sprich warum der eigentliche Prozesswert durch 2 geteilt wird.
/ 8 eliminiert die ausmaskierten Bits, bleibt also noch ein / 2 übrig ...

Mfg
Manuel
 
Zurück
Oben