ich möcchte einen Sollwert (50) während einer Zeit (Zeitintervall) z.B von 200ms halten. Wenn die erste 200ms gelaufen sind,der alten Sollwert um 10 erhöhen um wieder innerhalb von 200ms halten, so dass am Ende, der Sollwert einen treppenverlauf hat.
Dieser Verlauf vom Sollwert würde ich mich das auch auf dem Trace anschauen. Leider klappt die Progrmmierung dieses Verlaufs nicht. !!!!
Wer kann mir helfen
LG Guy
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
guynougouapi hat geschrieben:
hallo,
ich möcchte einen Sollwert (50) während einer Zeit (Zeitintervall) z.B von 200ms halten. Wenn die erste 200ms gelaufen sind,der alten Sollwert um 10 erhöhen um wieder innerhalb von 200ms halten, so dass am Ende, der Sollwert einen treppenverlauf hat.
Dieser Verlauf vom Sollwert würde ich mich das auch auf dem Trace anschauen. Leider klappt die Progrmmierung dieses Verlaufs nicht. !!!!
Wer kann mir helfen
LG Guy
es funktioniert soweit wie ich mir vorher vorgestellt habe. Aber jetzt kommt noch was dazu. Die funktion muss den Anfangswert z.B 0 während einer sehr kurze Zeit (z.B 10ms) behalten, dann wird der Anfangswert (0) z.B um 10 erhöht. Sie muss diesen neuen berechneten wert jetzt während der Zeit z.B 200ms behalten. Nach Ablauf dieser 200ms soll sie wieder auf 0 wieder während z.B 10ms (wie ich oben erklärt habe, wenn der funktionswert den wert 0 hat) zurückgesetzt werden.
So würde eine funktion enstehen die ganz kurz (10ms) den Wert 0 hat, dann während 200ms hat sie einen neuen Wert z.B 10 der ungleich null ist.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Was erwartest Du jetzt eigentlich von uns? Wir werden dir nicht dein Problem lösen sondern nur den Ansatz liefern. Du brauchst einen Osziilator mit unterscheidlichen Impuls/Pausenverhältnis also am einfachsten 2 Timer. Das ist genau das was Speicherzelle dir geliefert hat die verwendung von einem Timer jetzt also mal das Gehirn einschalten und versuch mal das auf zwei Timer umzusetzen
Also konkret:
Timer 1 läuft (10ms) --> Ausgabe von Wert 0
Wenn Timer 1 abgelaufen ist
Timer 2 läuft (200ms) --> Ausgabe von Wert 0 + 10 oder vielleicht doch gleich 10
Wenn Timer 2 abgalaufen ist geht es wieder von vorne los
Also Forum funktioniert so:
Gehirn einschalten
Selbst probieren (also z.B. rausfinden wie die Timer funktionieren und rausfinden wie man beding etwas ausführt)
Wenn du nicht mehr weiter kommst das Forum fragen und dabei am besten noch deine Code den du schon geschrieben hast posten
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
guynougouapi hat geschrieben:
Hallo,
hier ist mein Programmcode:
PROGRAM PLC_PRG
VAR
t1: TON;
t2:TON;
wert: INT := 0;
wert1:INT:=0;
temp_:INT:=0;
VAR_TEMP1:INT:=0;
BOOLl: BOOL;
END_VAR
VAR_OUTPUT
END_VAR
LDN t1.Q
ST t1.IN
CAL t1(pt:=t#10ms)
LD t1.Q
JMPCN M001
LDN t2.Q
ST t2.IN
CAL t2(pt:=t#200ms)
LD t2.Q
JMPCN M002
M001:LD 0
ST wert
JMP en
M002:LD 10
ADD wert
ST wert
JMP en
en:
Das Programm läuft in Taskmodus mit einem Zykluszeit die von 100ms. Der Wert wurde von mir willkürlich gegeben.
Auf dem Trace bekommen nichts sinnvolles.
Wie kann und wo kann ich mein Programm korrigieren?
LG Guy
Hallöchen,
wollte eigentlich nur mal wisen was für ein Background-Wissen Du hast.
Anfänger
sage doch mal Bescheid dann wissen wir wie intensiv das Frage Antwortspiel wird.
nigs für Ungut
MFG
Speicherzelle
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
guynougouapi hat geschrieben:
Hallo,
ich hab ein sinnvolleres Code gechrieben s.u
PROGRAM Text
VAR
bool_1:BOOL;
bool_2:BOOL;
rtrig:R_TRIG;
ftrig:F_TRIG;
tp_1:TP;
tp_2:TP;
F:REAL:=10;
END_VAR
IF NOT bool_1 THEN
rtrig(CLK:= NOT bool_2);
tp_1(IN:= rtrig.Q, PT:= t#6000ms);
IF tp_1.Q THEN
bool_2:=TRUE;
F:=F;
END_IF
END_IF
IF NOT tp_1.Q THEN
bool_1:=TRUE;
ftrig(CLK:= NOT bool_2);
tp_2(IN:= ftrig.Q, PT:= t#6000ms);
IF tp_2.Q THEN
bool_2:=FALSE;
F:=0;
ELSE
F:=20;
bool_1:=FALSE;
END_IF
END_IF
Die Frage ist folgendes:
Ich habe Breakpoint gesetzt und vermute dass da der Fehler kommt. Theoretisch würde es funktionieren. Sie können selbst probieren.
LG
Guy
Hallo mein Freund,
habe mal eine Function geschrieben wo alle variable von dir vorgegeben werden können.
Prob es aus und viel spaß dabei
Im Beispielproggi siehste ja wie Du das machen sollst oda kannst
ich bin gestern abend auf meine Lösung nach einer langen Suche gekommen. Das programmcode steht unten. Sie können selbst probieren es funktioniert wunderbar. Ich habe sogar spasshalber eine Visualisierung dazu gemacht wo ich 6 Parameter (Stufenhoehe, Stufenanzahl, anfangswerte, die Zeiten der beide Timer etc...) eingeben kann.
Ich danke Ihnen nochmals für Ihre Vorschläge zwei Timer zu benutzen
hallo,
ich möcchte einen Sollwert (50) während einer Zeit (Zeitintervall) z.B von 200ms halten. Wenn die erste 200ms gelaufen sind,der alten Sollwert um 10 erhöhen um wieder innerhalb von 200ms halten, so dass am Ende, der Sollwert einen treppenverlauf hat.
Dieser Verlauf vom Sollwert würde ich mich das auch auf dem Trace anschauen. Leider klappt die Progrmmierung dieses Verlaufs nicht. !!!!
Wer kann mir helfen
LG Guy
Prob mal so
PROGRAM PLC_PRG
VAR
en_temp3:
mfg
Speicherzelle
Geht kürzer:
Gruß
Ralph
Gruß
Ralph
voll kurz
alles geht ürgendwie kürzer oder anders nä
MFG
Speicherzelle
Hallo Ralp,
es funktioniert soweit wie ich mir vorher vorgestellt habe. Aber jetzt kommt noch was dazu. Die funktion muss den Anfangswert z.B 0 während einer sehr kurze Zeit (z.B 10ms) behalten, dann wird der Anfangswert (0) z.B um 10 erhöht. Sie muss diesen neuen berechneten wert jetzt während der Zeit z.B 200ms behalten. Nach Ablauf dieser 200ms soll sie wieder auf 0 wieder während z.B 10ms (wie ich oben erklärt habe, wenn der funktionswert den wert 0 hat) zurückgesetzt werden.
So würde eine funktion enstehen die ganz kurz (10ms) den Wert 0 hat, dann während 200ms hat sie einen neuen Wert z.B 10 der ungleich null ist.
Was erwartest Du jetzt eigentlich von uns? Wir werden dir nicht dein Problem lösen sondern nur den Ansatz liefern. Du brauchst einen Osziilator mit unterscheidlichen Impuls/Pausenverhältnis also am einfachsten 2 Timer. Das ist genau das was Speicherzelle dir geliefert hat die verwendung von einem Timer jetzt also mal das Gehirn einschalten und versuch mal das auf zwei Timer umzusetzen
Also konkret:
Timer 1 läuft (10ms) --> Ausgabe von Wert 0
Wenn Timer 1 abgelaufen ist
Timer 2 läuft (200ms) --> Ausgabe von Wert 0 + 10 oder vielleicht doch gleich 10
Wenn Timer 2 abgalaufen ist geht es wieder von vorne los
Also Forum funktioniert so:
Gehirn einschalten
Selbst probieren (also z.B. rausfinden wie die Timer funktionieren und rausfinden wie man beding etwas ausführt)
Wenn du nicht mehr weiter kommst das Forum fragen und dabei am besten noch deine Code den du schon geschrieben hast posten
Hallo,
hier ist mein Programmcode:
PROGRAM PLC_PRG
VAR
END_VAR
VAR_OUTPUT
END_VAR
LDN t1.Q
M001:LD 0
M002:LD 10
en:
Das Programm läuft in Taskmodus mit einem Zykluszeit die von 100ms. Der Wert wurde von mir willkürlich gegeben.
Auf dem Trace bekommen nichts sinnvolles.
Wie kann und wo kann ich mein Programm korrigieren?
LG Guy
Hallöchen,
wollte eigentlich nur mal wisen was für ein Background-Wissen Du hast.
Anfänger
sage doch mal Bescheid dann wissen wir wie intensiv das Frage Antwortspiel wird.
nigs für Ungut
MFG
Speicherzelle
Hallo,
ich bin relativ neu in Codesys. Aber ich hab mal in der Vorlesung Steuerungstechnik ein bisschen von SPS mitbekommen.
Ist mein Programmcode total daneben?
LG Guy
Hallo,
ich hab ein sinnvolleres Code gechrieben s.u
PROGRAM Text
VAR
bool_1:BOOL;
END_VAR
Die Frage ist folgendes:
Warum am Zeil mit dem Befehl ftrig(CLK:= NOT bool_2); wird keine negative Flanke erkannt obwohl bool_2 der Wert TRUE an diesem Programmzeil hat. ?
Ich habe Breakpoint gesetzt und vermute dass da der Fehler kommt. Theoretisch würde es funktionieren. Sie können selbst probieren.
LG
Guy
Hallo mein Freund,
habe mal eine Function geschrieben wo alle variable von dir vorgegeben werden können.
Prob es aus und viel spaß dabei
Im Beispielproggi siehste ja wie Du das machen sollst oda kannst
testberechnung.zip [9.38 KiB]
Hallöchen,
ich bin gestern abend auf meine Lösung nach einer langen Suche gekommen. Das programmcode steht unten. Sie können selbst probieren es funktioniert wunderbar. Ich habe sogar spasshalber eine Visualisierung dazu gemacht wo ich 6 Parameter (Stufenhoehe, Stufenanzahl, anfangswerte, die Zeiten der beide Timer etc...) eingeben kann.
Ich danke Ihnen nochmals für Ihre Vorschläge zwei Timer zu benutzen
hier noch ein beispiel wie es geht
tx := time();
if not init then
last := tx;
init := true;
elsif tx - last >= intervall then
out := out + step;
last := last + intervall;
end_if;
codebeispiele wie diese findest du zahlreich in der open source library von oscat