CoDeSys Real in String wandeln

guwen

Level-2
Beiträge
66
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin am verzweifeln.
Im Einsatz habe ich den Wago 750-849 und die CoDeSys 2.3.9.26.
Ich versuche die Windrichtung (0-360°) in einen String (Nord / Süd...) zu wandeln. Das funktioniert soweit mit meiner kleinen Funktion.
Merkwürdig ist, dass die IF Anweisung nur dann ausgeführt wird, wenn entweder i eine gerade Zahl (2, 4, 6,...) ist, oder demzufolge die Summe der Variablen Hop*i ein ganzzahliges Ergebnis liefern. Andernfalls wird die gesamte IF Anweisung scheinbar ignoriert.
Weiß jemand Rat?

Gruß und Danke
Guwen

Hier der Quellcode:

FUNCTION WindrichtungToString : STRING
VAR_INPUT
WindDirection: REAL; (* Windrichtung von 0 - 360° *)
END_VAR
VAR
WindValue : STRING; (*Zeigt den Wert der Windrichtung als String*)
i : INT; (* allg. Zähler *)
END_VAR
VAR CONSTANT
Hop : REAL := 22.5; (* ein Sprung um 22,5° *)
END_VAR



WindValue := REAL_TO_STRING(Winddirection);
FOR i := 0 TO 15 BY 1 DO
IF WindDirection > (Hop * INT_TO_REAL(i)) AND WindDirection <= (Hop * INT_TO_REAL(i + 1)) THEN
CASE i OF
0,15 : WindrichtungToString :='Nord (';
1,2 : WindrichtungToString := 'Nord-Ost (';
3,4 : WindrichtungToString := 'Ost (';
5,6 : WindrichtungToString := 'Süd-Ost (';
7,8 : WindrichtungToString := 'Süd (';
9,10 : WindrichtungToString := 'Süd-West (';
11,12 : WindrichtungToString := 'West (';
13,14 : WindrichtungToString := 'Nord-West (';
END_CASE;
END_IF;
i := i +1;
END_FOR;
WindrichtungToString := CONCAT(WindrichtungToString, WindValue);
WindrichtungToString := CONCAT(WindrichtungToString, '°)');
 
Hallo,
wiso berechnest du i nicht in Abhängigkeit der aktuellen Windrichtung.
Würd das vielleicht so irgendwie machen:

Code:
i := REAL_TO_INT(((WindDirection - (Hop/2.0))*16.0)/360.0);
IF i <0 THEN
    i:=0;
END_IF
 
CASE i OF
    0,15 : WindrichtungToString :='Nord (';
    1,2 : WindrichtungToString := 'Nord-Ost (';
    3,4 : WindrichtungToString := 'Ost (';
    5,6 : WindrichtungToString := 'Süd-Ost (';
    7,8 : WindrichtungToString := 'Süd (';
    9,10 : WindrichtungToString := 'Süd-West (';
    11,12 : WindrichtungToString := 'West (';
    13,14 : WindrichtungToString := 'Nord-West (';
END_CASE;
WindrichtungToString := CONCAT(WindrichtungToString, WindValue);
WindrichtungToString := CONCAT(WindrichtungToString, '°)');

Kannst ja mal Probieren ob das so Funktioniert.

Gruß
 
Ach ja, ist ja klar Zählerstand:=Zählerstand+1, aber was macht dann die For Next, nichts oder auch zählen, oder wie jetzt?

Hallo und Danke für Eure Antworten.
Manchmal ist man echt "Betriebsblind".
Wenn ich i:=i+1; in einer For-Schleife hochzähle, dann wird eigentlich 2x gezählt. Einmal durch die For-Schleife und einmal durch i:=i+1, und somit werden nur gerade Zahlen beachtet.
Habe i:=i+1; entfernt und alles funktioniert wunderbar.

Vielen Dank nochmals an Euch für die schnelle Hilfe.

Gruß
Guwen
 
Zurück
Oben