Mein erster ST-Gehversuch, Hilfe erwünscht

Kakaotrinker

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> 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;
 
Kommt ein Fehler beim Übersetzten ?
Was passiert denn überhaupt ? Wie simulierst du deine Eingänge ?
Wie sind diese adressiert ?
Der ändert sich etwas wenn du statt den Zuweisungen Var_in, Var_out... Alles in eine Var Tabelle schreibst ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oha eine Repeatschleife im Code, ganz ganz böse.

Normalerweise sollte sich deine SPS hier in Störung gehen wegen Zykluszeitüberschreitung.

Ob das jetzt direkt mit deinem Problem zu tun hat, weiss ich nicht, aber ganz du solltest dir ganz dick hinter die Ohren schreiben:
REPEAT und WHILE Schleifen in der SPS-Welt vermeiden, oder nur dann verwenden wenn du 100% sicher bist, das die Abbruchbedingung innerhalb eines SPS-Zykluses erfüllt wird.
Das ist bei dir nicht der Fall. Wenn AE_REALN < AE_MIN wird sich dein Programm aufhängen, weil die Schleife im Dauerlauf rödelt.

Du brauchst die Schleife auch garnicht, weil dein SPS-Programm sowieso zyklisch abläuft.
 
Danke für die Antworten. Hab die Schleifen rausgenommen und dann noch einen Fehler gefunden. Vergessen der Variable Fass_leer einen Eingang zuzuweisen. Jetzt geht es. "Simuliere" gerade relativ stumpf Eingänge mit Draht da eh noch nichts dran hängt. Das mach ich dann ab Morgen geschickter.

Wünsche eine Gute Nacht
 
Ich empfehle zur Simulation die VAR_INPUT Variablen temporär als VAR zu deklarieren und sie dann über STRG +F7 bzw. F7 zu setzen/forcen.
Habe festgestellt, dass das Forcen von Eingangsvariablen die direkt auf Eingangsadressen zugewiesen sind (beispiel "Taster1 AT %IX0.1"), nicht richtig geforced werden können in einer Simulation.

Vielleicht mache ich hier selbst immer etwas falsch, habe es mir aber angewöhnt, das eben durch die Temporäre Deklaration als VAR anstatt VAR_INPUT zu umgehen.

Gruß,
Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachdem mein Programm jetzt Form angenommen hat, arbeite ich gerade an der WebVisu. Dazu hätte ich noch eine Frage. Hat jemand eine Erläuterung parat, wie die Syntax für das Initiale Darstellungsformat von Texteingabefeldern ist? Die Hilfe gibt zwar ein paar Beispiele an, aber keine richtige Erläuterung.

Grüße
Kakaotrinker
 
Zuviel Werbung?
-> Hier kostenlos registrieren
EIngabe von Integern und REAL-Werten klappt jetzt. Werden auch schön im Programm verarbeitNur die Zeiten wollen nicht so wie ich. Wenn ich als Initiales Darstellungsformat %t oder %t[ss] angebe, wird mit im Texteingabefeld immer t[s oder t[ss angezeigt und ich kann keine eigegebene Zahl mit Enter bestätigen. Hat einer eine Idee?
 
Hab den Fehler gefunden. Muss die Formatierungsangabe bei "Text" eintragen und nicht bei "Initiales Darstellungsformat". Wobei ich mich frage, welchen SInn zweiteres dann hat.
 
Zurück
Oben