Dragonfire
Level-2
- Beiträge
- 46
- Reaktionspunkte
- 6
-> Hier kostenlos registrieren
Hi,
ich will mir einen FB schreiben mit dem ich mit verschiedene Datentypen skalieren kann. Dazu verwende ich den Datentyp Any. Leider lässt er sich nicht so verwenden, wie ich gerne hätte. Habt ihr einen Tipp für mich???
In der Hilfe steht was von ANY_NUM. Wo benutze ich das???
Danke im Vorraus!!!
Hier der Programmauszug
FUNCTION_BLOCK FB80
VAR_INPUT
I1_I_MIN : ANY;
I1_I_MAX : ANY;
I2_I_MIN : ANY;
I2_I_MAX : ANY;
I1_ACTUAL : ANY;
I_MODE : INT;
END_VAR
VAR_OUTPUT
O_ACT_REAL : REAL;
O_ACT_INT : INT;
END_VAR
VAR_TEMP
TEMP_I_VALUE : ANY;
TEMP1_I_VALUE : ANY;
TEMP2_I_VALUE : ANY;
TEMP3_I_VALUE : ANY;
END_VAR
BEGIN
// I_MODE = 0 ist die Umwandlung von INT nach INT
CASE I_MODE OF
0: TEMP_I_VALUE := INT_TO_REAL (I1_I_MAX - I1_I_MIN);
TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von INT nach REAL
1: TEMP_I_VALUE := INT_TO_REAL I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von REAL nach REAL
2: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von REAL nach INT
3: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
END_CASE;
END_FUNCTION_BLOCK
ich will mir einen FB schreiben mit dem ich mit verschiedene Datentypen skalieren kann. Dazu verwende ich den Datentyp Any. Leider lässt er sich nicht so verwenden, wie ich gerne hätte. Habt ihr einen Tipp für mich???
In der Hilfe steht was von ANY_NUM. Wo benutze ich das???
Danke im Vorraus!!!
Hier der Programmauszug
FUNCTION_BLOCK FB80
VAR_INPUT
I1_I_MIN : ANY;
I1_I_MAX : ANY;
I2_I_MIN : ANY;
I2_I_MAX : ANY;
I1_ACTUAL : ANY;
I_MODE : INT;
END_VAR
VAR_OUTPUT
O_ACT_REAL : REAL;
O_ACT_INT : INT;
END_VAR
VAR_TEMP
TEMP_I_VALUE : ANY;
TEMP1_I_VALUE : ANY;
TEMP2_I_VALUE : ANY;
TEMP3_I_VALUE : ANY;
END_VAR
BEGIN
// I_MODE = 0 ist die Umwandlung von INT nach INT
CASE I_MODE OF
0: TEMP_I_VALUE := INT_TO_REAL (I1_I_MAX - I1_I_MIN);
TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von INT nach REAL
1: TEMP_I_VALUE := INT_TO_REAL I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von REAL nach REAL
2: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
// I_MODE = 1 ist die Umwandlung von REAL nach INT
3: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
END_CASE;
END_FUNCTION_BLOCK