Zahlen vergleichen - stimmt das so?

MSRler

Level-1
Beiträge
27
Reaktionspunkte
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
 
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
 
Zuletzt bearbeitet:
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.
 
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
 
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:
:) 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ß.
 
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...
 
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:
Hmm, jo ist leider so... jedenfalls wirds nie langweilig :) hast Du schon mal mit den 64bit REAL gearbeitet? vielleicht wird da ja alles besser...
 
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"....
 
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
 
Hallo Schmidtchen,

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

Gruß, Toki
 
Zuletzt bearbeitet:
Zurück
Oben