-> Hier kostenlos registrieren
Hallo Leute,
ich habe mir eine Funktion geschrieben, die kontrolliert, ob eine Achse auf einem Sollwert steht oder nicht. Ich übergebe den Sollwert, den Istwert und einen Toleranzwert (alles Realzahlen) und erhalte einen boolschen wert zurück.
Im Baustein werden aus Sollwert und Toleranzwert die lokalen Werte Min und Max gebildet (auch Realzahlen).
Ist der Istwert größer Min und kleiner Max ist der Rückgabewert true sonst false.
Dies hat bis heute immer geklappt.
Heute ist folgendes aufgetreten:
Der Baustein vergleicht zwei Achspositionen (Soll- und Istwert), die er aus zwei verschiedenen DBs erhält (dort sind die Wert auch als Real definiert und belegen 4Byte) .
Aus unerfindlichen Gründen ist der Istwert der Achse nicht mehr mit 0.005 angezeigt, sondern mit -5.86e-6 angezeigt worden und der Baustein funktionierte nicht mehr. Der Sollwert war 0.0 und die Tolleranz 0.5. Also hätte der Baustein für -0.00000586 (die geläufigere Darstellung) ein True zurückliefern müssen.
Der Baustein ist in Kontakplan programmiert und läuft auf einer S7-317-2 DP und ist mit Step7 V5.2+SP1 programmiert worden.
Warum kann ein COMP <=R oder COMP>=R Baustein nicht mit beiden Formaten rechnen? Oder klappt schon die Parameterübergabe beim Funktionsaufruf nicht?
Wenn ich an einen Vergleicherbaustein als Eingabewert 100.0 dranschreibe wird das von Step7 ja auch sofort in 1e2 umgeschrieben.
Oder kann es sein, daß sich das Format dauerhaft umstellt, wenn einmal der Bereich über oder unterschritten wird. Also wird der Istwert einmal 0.00000000123 dann stellt sich das Format darauf ein und bleibt so. Mit der Folge, daß auch die Auflösung geringer wird und Vergleiche auf 0.5 vieleicht nicht mehr möglich sind, sondern nur noch Vergleiche die der aktuellen Auflösung entsprechen.
Bin ein bisschen ratlos
Michael
PS: auf die Istwert habe ich keinen Einfluß. Die kommen via Profibus von einem SEW-Movidrive als Doubleinteger (Anzahl Geberinkremente) mal Weg pro Motorumdrehung durch 4096 (Geberinkremente pro Geberumdrehung)
ich habe mir eine Funktion geschrieben, die kontrolliert, ob eine Achse auf einem Sollwert steht oder nicht. Ich übergebe den Sollwert, den Istwert und einen Toleranzwert (alles Realzahlen) und erhalte einen boolschen wert zurück.
Im Baustein werden aus Sollwert und Toleranzwert die lokalen Werte Min und Max gebildet (auch Realzahlen).
Ist der Istwert größer Min und kleiner Max ist der Rückgabewert true sonst false.
Dies hat bis heute immer geklappt.
Heute ist folgendes aufgetreten:
Der Baustein vergleicht zwei Achspositionen (Soll- und Istwert), die er aus zwei verschiedenen DBs erhält (dort sind die Wert auch als Real definiert und belegen 4Byte) .
Aus unerfindlichen Gründen ist der Istwert der Achse nicht mehr mit 0.005 angezeigt, sondern mit -5.86e-6 angezeigt worden und der Baustein funktionierte nicht mehr. Der Sollwert war 0.0 und die Tolleranz 0.5. Also hätte der Baustein für -0.00000586 (die geläufigere Darstellung) ein True zurückliefern müssen.
Der Baustein ist in Kontakplan programmiert und läuft auf einer S7-317-2 DP und ist mit Step7 V5.2+SP1 programmiert worden.
Warum kann ein COMP <=R oder COMP>=R Baustein nicht mit beiden Formaten rechnen? Oder klappt schon die Parameterübergabe beim Funktionsaufruf nicht?
Wenn ich an einen Vergleicherbaustein als Eingabewert 100.0 dranschreibe wird das von Step7 ja auch sofort in 1e2 umgeschrieben.
Oder kann es sein, daß sich das Format dauerhaft umstellt, wenn einmal der Bereich über oder unterschritten wird. Also wird der Istwert einmal 0.00000000123 dann stellt sich das Format darauf ein und bleibt so. Mit der Folge, daß auch die Auflösung geringer wird und Vergleiche auf 0.5 vieleicht nicht mehr möglich sind, sondern nur noch Vergleiche die der aktuellen Auflösung entsprechen.
Bin ein bisschen ratlos
Michael
PS: auf die Istwert habe ich keinen Einfluß. Die kommen via Profibus von einem SEW-Movidrive als Doubleinteger (Anzahl Geberinkremente) mal Weg pro Motorumdrehung durch 4096 (Geberinkremente pro Geberumdrehung)