Andy082
Level-2
- Beiträge
- 177
- Reaktionspunkte
- 2
-> Hier kostenlos registrieren
Abend.
Bin gerade dabei in CodeSys mit AWL meine ersten größeren Schritte zu tun und würde mir gerne einen Ablauf zur Steuerung meiner Rollläden schnitzen.
Dazu gibt es die Bits E_up und E_down mit welchen der Ablauf entsprechend angesteuert wird und A_up und A_down, mit welchen ich die Ansteuerung der Jalousie übernehme.
Vorgestellt hätte ich mir den Ablauf so:
Taste <2Sek. drücken, Motor setzt sich kurz (für die Dauer des Tastendrucks) in Bewegung;
Taste >2Sek. drücken, Motor bewegt sich für 30Sek. jeweils nach oben oder unten; Ist diese Bewegung aktiv, so kann diese anhand einer neuerlichen Betätigung einer der beiden E_up oder E_down gestopt werden.
So weit so gut, bis hier her funktioniert das Ganze mal.
Nur ist der Motor in Bewegung und ich drücke die entgegengesetzte Ansteuerung, so setzt sich dieser nach 500ms sofort wieder in diese Richtung in Bewegung, was ja eigentlich erst bei einem neuerlichen Tastendruck passieren sollte.
Später kommt noch eine Gruppensteuerung hinzu (Taste binnen 1 Sek. 2x drücken und alle Rollläden der Gruppe schliessen oder öffnen sich), aber dies nehme ich erst in Angriff, wenn auch der restliche Ablauf 100%ig passt.
Muss leider zugeben, dass ich seitens S7 etwas zu sehr verwöhnt bin um meinen Fehler hier selbst zu entdecken.
Danke!
Andreas
P.S.: wo gibt's Infos zu AWL in CodeSys (ausgenommen die Hilfedatei) um sich etwas besser einzuarbeiten?
Bin gerade dabei in CodeSys mit AWL meine ersten größeren Schritte zu tun und würde mir gerne einen Ablauf zur Steuerung meiner Rollläden schnitzen.
Dazu gibt es die Bits E_up und E_down mit welchen der Ablauf entsprechend angesteuert wird und A_up und A_down, mit welchen ich die Ansteuerung der Jalousie übernehme.
Vorgestellt hätte ich mir den Ablauf so:
Taste <2Sek. drücken, Motor setzt sich kurz (für die Dauer des Tastendrucks) in Bewegung;
Taste >2Sek. drücken, Motor bewegt sich für 30Sek. jeweils nach oben oder unten; Ist diese Bewegung aktiv, so kann diese anhand einer neuerlichen Betätigung einer der beiden E_up oder E_down gestopt werden.
So weit so gut, bis hier her funktioniert das Ganze mal.
Nur ist der Motor in Bewegung und ich drücke die entgegengesetzte Ansteuerung, so setzt sich dieser nach 500ms sofort wieder in diese Richtung in Bewegung, was ja eigentlich erst bei einem neuerlichen Tastendruck passieren sollte.
Später kommt noch eine Gruppensteuerung hinzu (Taste binnen 1 Sek. 2x drücken und alle Rollläden der Gruppe schliessen oder öffnen sich), aber dies nehme ich erst in Angriff, wenn auch der restliche Ablauf 100%ig passt.
Muss leider zugeben, dass ich seitens S7 etwas zu sehr verwöhnt bin um meinen Fehler hier selbst zu entdecken.
Code:
VAR
TON_E_up:TON;
TON_E_down: TON;
TON_A_up:TON;
TON_A_down: TON;
TOF_A_up: TOF;
TOF_A_down: TOF;
FP_TON_up: R_TRIG;
FP_TON_down: R_TRIG;
FP_E_up: R_TRIG;
FP_E_down: R_TRIG;
FN_E_up: F_TRIG;
FN_E_down: F_TRIG;
active: BOOL;
enable_up:BOOL;
enable_down:BOOL;
END_VAR
VAR_INPUT
E_up:BOOL;
E_down:BOOL;
delay_signal: TIME;
delay_move:TIME;
END_VAR
VAR_OUTPUT
A_up:BOOL;
A_down:BOOL;
END_VAR
(*define inputs, create triggers*)
CAL FP_E_up(CLK:= E_up)
CAL FN_E_up(CLK:= E_up)
CAL FP_E_down(CLK:= E_down)
CAL FN_E_down(CLK:= E_down)
(*handling input to move shutter upwards*)
LD E_up
ST enable_up
CAL TON_E_up(in:= enable_up, PT:= delay_signal)
CAL FP_TON_up(CLK:= TON_E_up.Q)
LD FP_TON_up.Q
JMPCN no_delay_up
LD delay_move
ST TOF_A_up.PT
no_delay_up:
CAL TOF_A_up(in:= FP_TON_up.Q)
(*handling input to move shutter downwards*)
LD E_down
ST enable_down
CAL TON_E_down(in:= enable_down, PT:= delay_signal)
CAL FP_TON_down(CLK:= TON_E_down.Q)
LD FP_TON_down.Q
JMPCN no_delay_down
LD delay_move
ST TOF_A_down.PT
no_delay_down:
CAL TOF_A_down(in:= FP_TON_down.Q)
(*stop shutters movement*)
LD FP_E_up.Q
OR FP_E_down.Q
JMPCN no_stop
LD t#0s
ST TOF_A_up.PT
ST TOF_A_down.PT
no_stop:
(*move shutter up/down*)
CAL TON_A_up(PT:=T#500ms)
CAL TON_A_down(PT:=T#500ms)
LDN A_down
AND ( enable_up
OR TOF_A_up.Q
)
ST TON_A_up.IN
LDN A_up
AND ( enable_down
OR TOF_A_down.Q
)
ST TON_A_down.IN
LD TON_A_up.Q
ST A_up
LD TON_A_down.Q
ST A_down
Danke!
Andreas
P.S.: wo gibt's Infos zu AWL in CodeSys (ausgenommen die Hilfedatei) um sich etwas besser einzuarbeiten?