Hi,Ich setze ihn doch am Ende auch wieder auf FALSE. Oder verstehe ich was falsch? kannst das in meinem Quellcode evtl. ändern und nochmal posten? Wäre echt hilfreich.
TP_01( IN:=input_1, PT:=T#3s500ms );
input_1 = true
...
code
...
if (was weiss ich) then
input_1 = false ; erzeugt einen startpuls, da in einem durchgang = 0
endif
TP_01( IN:=input_1, PT:=T#3s500ms );
input_1 = false
...
code
...
if (was weiss ich) then
input_1 = true ; erzeugt einen startpuls, da ein durchgang = 1
endif
; wenn du sofort wieder zurückfahren willst
TP_02( IN:=EDGENEG(TP_01.Q), PT:=T#3s500ms );
So habe das mal ausprobiert aber es funzt nicht, das Ventil 1 wird innerhalb 1ms dauernd eingeschaltet wenns ausgeht....
So hab ich deinen Code umgesetzt, ich hab wohl nen Fehler drin:
...
IF (magnetventil_1_do = FALSE) THEN
input_1 := TRUE; //erzeugt einen startpuls, da ein durchgang = 1
END_IF
PROGRAM _INIT
TON_01.PT := T#7s; // Nach sieben Sekunden wieder starten
magnetventil_1_do := 0;
magnetventil_2_do := 0;
END_PROGRAM
PROGRAM _CYCLIC
// neuen Zyklus starten wenn beide DO's 0 sind 7 Sekunden warten
IF (magnetventil_1_do = 0) AND (magnetventil_2_do = 0) THEN
TON_01.IN := 1;
END_IF
TON_01 (IN:= TON_01.IN, PT:= TON_01.PT);
IF (TON_01.Q = 1) THEN
TON_01.IN := 0;
input_1 := 1;
END_IF
// Ventil auf
TP_01( IN:=input_1, PT:=T#1500ms );
input_1 := FALSE;
magnetventil_1_do := TP_01.Q;
// Ventil zu...
TP_02( IN:=EDGENEG(TP_01.Q), PT:=T#1500ms );
magnetventil_2_do := TP_02.Q;
END_PROGRAM
Freut michHi, habe den Code gleich mal in mein PowerPanel übertragen und es tut perfekt. Und dass ich damit sogar den Startzyklus gewollt verzögern kann ist natürlich eine tolle Sache. An dieser Stelle vielen Dank
..Kurz nachdem du prüfst ob beide DO's = 0 sind, kommt der folgende Quelltext:
Das ist falsch, ich setzte nicht .Q auf := 0 sondern .IN, hast du falsch abgeschrieben.Code:TON_01 (IN:= TON_01.IN, PT:= TON_01.PT); IF (TON_01.Q = 1) THEN [COLOR=Red] TON_01.Q := 0;[/COLOR] input_1 : = 1; END_IF
Du hast recht, es handelt sich hier um ein TON() Zeitglied, wo .Q = 1 wird nach Ablauf der parametrierten Zeit. Mit "input_1" wird ja dann dein Puls-Zeitglied gestartet...Ich habe aber im ganzen Quelltext keine einzige Zeile mit TON_01.Q := TRUE gesehen
Ja genau! Diese Schreibweise ist etwas komisch für mich, da ich normalerweise Automation Basic verwende. In Automation Basic würde ich das so schreibenHeist das jetzt, dass wenn ich den Funktionsaufruf TON_01 (IN:= TON_01.IN, PT:= TON_01.PT); mit Parameterübergabe mache, dass dann automatisch mein Ausgang TON_01.Q auf TRUE gesetzt wird?
Du hast ja die Variable TON_01 als TON Zeitglied definiert, oder nicht ?Code:TON_01 FUB TON() if (TON_01.Q = 1) then ... ...
Nein, der wird nur nach dem Einschalten ausgeführt. Während der Programmerstellung nach dem Download, nach einem Kalt- oder Warmstart....Und noch eine Frage zum InitCode, wird dieser, wenn meine Taskklasse alle 10ms neu durchläuft, auch alle 10ms neu aufgerufen?
bg
bb
Du hast ja die Variable TON_01 als TON Zeitglied definiert, oder nicht ?
IF (druckregelvenil_druck = 0) THEN // Bei jedem Neustart oder // Programmabruch der Fall
wegmitte := sensor_weg;
zeit_wegmitte := 0;
n := 0;
END_IF
IF (sensor_weg = wegmitte) AND (n = 1) THEN
n := 0;
zeit_wegmitte := 0;
IF(startbutton = TRUE) THEN
zyklenzahl := zyklenzahl + 1;
END_IF
END_IF
IF (sensor_weg <> wegmitte) THEN
zeit_wegmitte := zeit_wegmitte + 1;
n := 1;
END_IF
IF (startbutton = FALSE) THEN
zyklenzahl := 0;
END_IF
if (EDGEPOS(startbutton)) then
zyklenzahl = 0
endif
if (sensor_weg = wegmitte) then // ist wieder auf Position die geprüft werden soll
zyklenzahl = zyklenzahl + war_weg and startbutton
war_weg = 0
else
war_weg = 1 // ist weg von prüfposition, wenn er wieder drauf fährt, zählen
endif
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?