Kakaotrinker
Level-1
- Beiträge
- 8
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo alle zusammen,
ich habe angefangen mit ST zu programmieren. Bisher hab ich Übung in KOP/FUP/AWL. Leider will mein Code nicht so wie ich. Hardware ist ein Raspberry 2B mit der Pixtend-SPS von Qube Solutions. Obwohl die Bedingungen im IF bzw. IFELS-Zweig erfüllt sind, wird die Variable Pumpe_EIN nicht auf TRUE gesetzt. Hab das Programm bisher nur simuliert und entsprechen fehlende Eingangswerte simuliert. Über Hilfe würde ich mich freuen. Das Programm soll einmal Pflanzen bewässern, wobei der obere Zweig für Pflanzen gedacht ist, die einen kleinen Wasserspeicher haben und der untere für Pflanzen, bei denen ein Bodenfeuchtewert gehalten werden soll.
FUNCTION_BLOCK Pumpe
VAR_INPUT
AE_REALN: REAL; //Bodenfeuchte
AE_MAX: REAL; //Bodenfeuchte MAX
AE_MIN: REAL; //Bodenfeuchte MIN
Time_Pause: TIME; //Pause zwischen Pumptakten
Time_Takt: TIME; // Pumptaktlänge
Pflanze_Leer: BOOL; //Blumenkübelspeicher alle, bzw. Boden trocken. Wenn Umsch_Dig_Ana=False, dann False.
Fass_Leer: BOOL; // Wasserfass leer
Umsch_Dig_Ana: BOOL; //Umschaltung: Digital (1) oder Analogeingabe(0)
END_VAR
VAR_OUTPUT
Pumpe_EIN: BOOL; //Pumpe EIN
END_VAR
VAR
Pumptakt: BLINK;
Start_BLINK: BOOL := TRUE; //startet Blinker Pumptakt
Blink_Takt:BOOL; // Blinkttakt für Pumpensteuerung
END_VAR
Pumptakt(ENABLE:=NOT Umsch_Dig_Ana , TIMELOW:=Time_Pause , TIMEHIGH:=Time_Takt , OUT=>Blink_Takt);
IF (Pflanze_Leer AND Umsch_Dig_Ana AND NOT Fass_Leer) THEN
Pumpe_EIN:=TRUE;
ELSIF (NOT Umsch_Dig_Ana AND NOT Fass_Leer) AND (AE_REALN <= AE_MIN) THEN
REPEAT Pumpe_EIN:=Blink_Takt;
UNTIL AE_REALN >= AE_MAX
END_REPEAT;
END_IF;
ich habe angefangen mit ST zu programmieren. Bisher hab ich Übung in KOP/FUP/AWL. Leider will mein Code nicht so wie ich. Hardware ist ein Raspberry 2B mit der Pixtend-SPS von Qube Solutions. Obwohl die Bedingungen im IF bzw. IFELS-Zweig erfüllt sind, wird die Variable Pumpe_EIN nicht auf TRUE gesetzt. Hab das Programm bisher nur simuliert und entsprechen fehlende Eingangswerte simuliert. Über Hilfe würde ich mich freuen. Das Programm soll einmal Pflanzen bewässern, wobei der obere Zweig für Pflanzen gedacht ist, die einen kleinen Wasserspeicher haben und der untere für Pflanzen, bei denen ein Bodenfeuchtewert gehalten werden soll.
FUNCTION_BLOCK Pumpe
VAR_INPUT
AE_REALN: REAL; //Bodenfeuchte
AE_MAX: REAL; //Bodenfeuchte MAX
AE_MIN: REAL; //Bodenfeuchte MIN
Time_Pause: TIME; //Pause zwischen Pumptakten
Time_Takt: TIME; // Pumptaktlänge
Pflanze_Leer: BOOL; //Blumenkübelspeicher alle, bzw. Boden trocken. Wenn Umsch_Dig_Ana=False, dann False.
Fass_Leer: BOOL; // Wasserfass leer
Umsch_Dig_Ana: BOOL; //Umschaltung: Digital (1) oder Analogeingabe(0)
END_VAR
VAR_OUTPUT
Pumpe_EIN: BOOL; //Pumpe EIN
END_VAR
VAR
Pumptakt: BLINK;
Start_BLINK: BOOL := TRUE; //startet Blinker Pumptakt
Blink_Takt:BOOL; // Blinkttakt für Pumpensteuerung
END_VAR
Pumptakt(ENABLE:=NOT Umsch_Dig_Ana , TIMELOW:=Time_Pause , TIMEHIGH:=Time_Takt , OUT=>Blink_Takt);
IF (Pflanze_Leer AND Umsch_Dig_Ana AND NOT Fass_Leer) THEN
Pumpe_EIN:=TRUE;
ELSIF (NOT Umsch_Dig_Ana AND NOT Fass_Leer) AND (AE_REALN <= AE_MIN) THEN
REPEAT Pumpe_EIN:=Blink_Takt;
UNTIL AE_REALN >= AE_MAX
END_REPEAT;
END_IF;