Zahlen vergleichen - stimmt das so?

MSRler

Active member
Beiträge
27
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Zusammen,
folgende Frage stelle ich mir gerade:
Ich habe eine Zahl im Real-Format vorliegen.
Diese würde ich gerne mit einem bestimmten Wert von bsp. 3,7 vergleichen.

Muss ich hierfür die Realzahl runden, durch 10 dividieren und dann mittels des CMP == R vergleichen
oder
muss ich die 3,7 in ein anderes Format bringen
oder
kann ich die Real-Zahl einfach mit der 3,7 vergleichen?

Danke vorab
 

thomas_1975

Well-known member
Beiträge
240
Punkte Reaktionen
34
Zuviel Werbung?
->Hier kostenlos registrieren
du kannst Real direkt vergleichen, also kein Runden oder dividieren.
Du solltest aber darauf achten, das imho ein Vergleich auf ==
bei Real schnell zu Problemen führen kann, wenn es sich um schwankende Werte handelt ( mußt du aber wissen )
Die 3.7 ist schon im Realformat ( 32bit )

l #dein_Real
l 3.7
==R
=dein_bit

gruß Thomas
 

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Zuletzt bearbeitet:

Ralle

Supermoderator
Teammitglied
Beiträge
15.103
Punkte Reaktionen
3.820
Ja klar, kannst du die vergleichen.
Oft ist es im technischen Bereich aber so, dass du nicht GENAU die Zahl aus deiner Auswertung bekommst. Dein Prozess bringt eine Temperatur, diese ist 3.7543 °C, du willst mit 3.7 vergleichen, das wird dann natürlich ungleich werden. Also bildet man ein Fenster und vergleicht lieber auf 3.7 < 3.7543 < 3.8 (mal als Beispiel). Das kann man auch durch Runden erreichen, aber ich bilde immer Fenster, da kann man den Bereich beliebig festlegen.
 

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Zuviel Werbung?
->Hier kostenlos registrieren
Naja lustigerweise ist aber 160/100 ungleich 160*0,01 von daher verwende ich die Abfrage auf Gleichheit bei REAL nie. Aber jeder kann tun wie er mag...
 

volker

Supermoderator
Teammitglied
Beiträge
5.622
Punkte Reaktionen
976
Zuviel Werbung?
->Hier kostenlos registrieren
wenn du auf eine nachkommastelle vergleichen willst würde ich das mit mit 10 multiplizieren, runden und dann auf int vergleichen
Code:
l realzahl
l 10.0
*r
rnd
l vergleich //in 1/10tel also 37 für 3.7
==I
= ausgang
 

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Uns das in CFC.... sehr interessant... kann das bei Ganzen (ohne Nachkommastellen) Zahlen auch passieren?

Nee, bei INT kann das erstmal nicht passieren. Bei REAL liegts einfach an internen Rundungsfehlern, die bei Berechnungen ja zwangsläufig gemacht werden müssen. In den beiden Links zum Siemens-Support wird versucht zu erklären warum das so ist...

Gruß.

PS: CFC verleitet dazu, nicht mehr über die Dinge nachzudenken, welche im Innern der SPS passieren... abundzu muss mans aber dann doch tun...
 
Zuletzt bearbeitet:

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
:) achso, jetzt weiss ich was Du meinst

kommt halt drauf an, ob das REAL-Ergebnis wirklich in allen Bits übereinstimmt, aber das kann ich im Kopf auch nicht ausrechnen :) Für mich ists nicht einfach überschaubar, wanns geht und wann nicht, deshalb hab ich der Einfachheit halber für mich festgelegt: kein REAL-Vergleich auf Gleichheit.

Gruß.
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Ich glaube ich werde ne Testschleife machen wo ich Werte hochzähle zB Wert 1 immer +100.0 und / 100.0 und Wert 2 immer +0.1 und * 10.
Wenn ich kein equal habe hör ich zum Zählen auf.....
Melde mich dann... muss nur ne SPS finden...
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Zuviel Werbung?
->Hier kostenlos registrieren
Ja ist so,
ab 700.0 und 0.7 ist es nicht mehr equal.
Ab und zu ist es dann wieder equal, man sieht das im Status kurz bei
<> R
dass das VKE auf "0" zuckt (da habe ich den SPB rausgenommen).
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    46,2 KB · Aufrufe: 31
Zuletzt bearbeitet:

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Hmm, jo ist leider so... jedenfalls wirds nie langweilig :) hast Du schon mal mit den 64bit REAL gearbeitet? vielleicht wird da ja alles besser...
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Nein habe ich nicht.
Realistisch hat diese Ungenauigkeit keine Auswirkung. Die letzten 20 Jahre hat so auch immer alles geklappt.
Aber es überrascht mich trotzdem ein wenig, zumal im Status die Werte ja gleich "scheinen"....
 

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Zuviel Werbung?
->Hier kostenlos registrieren
Jo... Dass 1.0e+050 + 1.0 nicht mehr addiert wird, war mir früher auch schon klar, aber bei 160/100 160*0.01 ists nicht so augenscheinlich...
 

Schmidtchen

Well-known member
Beiträge
88
Punkte Reaktionen
0
Hallo Leute ich hab ein Problem beim Vergleich (größer als bzw kleiner als) zweier REAL-werte. Die ganze geschichte fängt irgendwie zu blinken an, was so nicht sein soll und ich kann irgendwie keinen Fehler erkennen. Ich hoffe Ihr findet den Fehler bzw habt einen Verbesserungsvorschlag. Ich verwende eine S7-1214 C mit TIA V12 .

Anbei noch ein Bild von den betroffenen Bausteinen.

Gehäuselüfter.jpg
 

Toki0604

Well-known member
Beiträge
670
Punkte Reaktionen
133
Hallo Schmidtchen,

was genau fängt denn zu blinken an :confused:
Ein ständiger Wechsel zwischen Grenzwert überschritten und unterschritten?

Gruß, Toki
 
Zuletzt bearbeitet:
Oben