Zeitschaltuhr für Tor und Schranke programmieren

Ich hab mal dein Programm mit dem Timer_P4 auf TwinCat umgerubelt und es scheint tatsächlich ein Problem mit dem TIMER_P4 zu geben. Wenn man mehrere Ereignisse pro Kanal definiert, ist nur das letzte relevant. Wenn ich mir die Programmierung des Bausteins anschaue, ist das auch logisch, da beim Durchlauf des Arrays der jeweilige Kanal immer wieder überschrieben wird. Für den jeweiligen Kanal müsste eine ODER-Verknüpfung mit sich selbst programmiert werden, um den vorherigen Zustand zu berücksichtigen.

Lösung wäre z.B. vor der Schleife alle Ausgänge rücksetzen

ELSIF dtime <> last_execute THEN
	(* prepare the logical input mask to be used later *)
	qn[0] := FALSE;
	qn[1] := FALSE;
	qn[2] := FALSE;
	qn[3] := FALSE;
	mask := 255;
	mask.0 := L0;
	mask.1 := L1;
	mask.2 := L2;

und dann


43:	(* event on workdays Mo-FR and no holiday *)
					qn[channel] := qn[channel] OR (DT_TO_TOD(dtime) >= event.START) AND (DT_TO_TOD(dtime) < event.START + event.DURATION) AND (NOT Holy) AND (DAY_OF_WEEK(DT_TO_DATE(dtime)) < 6);
					prog[pos].LAST := current_day;

Muss natürlich für jeden Event-Typ gemacht werden.

Hallo Tom,

da es mit dem Timer_4 nicht richtig funktioniert hatte, bin ich auf den Timer_2 umgestiegen.
Mit dem Timer_2 klappt alles soweit, nur Visu mit dem Timer_2 klappt nicht. Weil ich 5 Timer habe, weiß ich nicht
wie ich die Eingänge aus einer Visu ändern kann.

:)Danke für deine Hilfe, schaue mir dein Programm mal an.

Gruß

Ich glaube, du hast da was falsch verstanden. Der Timer_P4 ist fehlerhaft, der Code ist ein Teil vom TIMER_P4 intern und für die Leute von OSCAT gedacht.

Ok, habs verstanden.
Dann sollen die vom Oscat Team mal sich den Timer anschauen.

Gruß