ich habe ein Problem mit einer CASE-Anweisung.
Zugegebener Maßen meine Erste CASE-Anweisung überhaupt.
leider wird, obwohl “LABEL” auf 2 steht der 2. Fall nicht abgearbeitet.
Erkennbar daran, dass die Variable “Druck_eingestellt” nicht true wird.
Findet Ihr einen Fehler?
CASE LABEL of
0: Druckreglersoll := real#0.0;
1: Druckreglersoll := Druck;
Timer_start := true;
IF (Druck_ok and (not timer_on)) then
timer_start := false;
LABEL := int#2;
ELSE
IF (timer_on) then
timer_start := false;
Label := int#3;
END_IF;
END_IF;
2: timer_start := false;
Druck_eingestellt := true;
Druck_gehtnicht := true;
3: timer_start := false;
druck_eingestellt := false;
Druck_gehtnicht := true;
END_CASE;
entschuldige bitte, dass ich erst jetzt antworte… bei uns brennt leider die luft… da sag ich dir ja sicher nichts neues^^
also ich habe wie du empfohlen hast, den udint counter eingefügt. und da dieser nicht nochzählt, gehe ich ganz davon aus, dass er nicht in das 2. Label springt.
im Anhang liegt das projekt in dem ich den FB verwende, sowie die Anwenderbibliothek mit dem Baustein Druck_anlegen. (in dem die CASE-Anweisung liegt).
das problem ist, das ich die online zustände deiner signale nicht kenne, und somit den verlauf deiner schrittkette somit nicht erahnen kann
also bei meinem test mit null-werten wurde nach dem schritt 2 gleich zum schritt 3 gesprungen, was ja bedeutet das es ok ist !
was mich etwas stutzig macht ist folgendes
wenn du im schritt 2 ankommst und CNT_druck = anzahl_druecke dann gehts mit schritt 3 weiter, und sollte dann noch das startkriterium DI_START auf TRUE sein
dann wiederholt sich deine schrittkette sofort wieder. aber da ich den ablauf nicht kenne ,ist das auch vielleicht absicht !
mach doch auch hier den zähler rein !
2:
IF (CNT_druck = anzahl_druecke) then cnt_druck := cnt_druck + int#1;
durchlauf_cnt := int#3;
ELSE
cnt_druck := cnt_druck + int#1;
durchlauf_cnt := int#1;
END_IF;