l.schwanitz
Level-1
- Beiträge
- 3
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Nabend,
ich versuche seit zwei Tagen die Schrittmotorklemme KL2531 zum leben zu
erwecken. (Einfach drehen lassen mit veränderbarer Drehrichtung und
Geschwindigkeit geht schon). Ich möchte eine abselute Anzahl von Schritten machen. Ich habe mich an dieses Beispiel gehalten:
http://sps-forum.de/threads/16576
Ich komme in meiner rudimentären Implementation bis zu dem Punkt wo der Fahrauftrag gestartet werden soll CTRL.2 auf 1. Nur der Motor fährt nicht los! Über die Systemsteuerung habe ich mir die Register R2 & R3 angesehen und gesehen das meine Benutzerdefinierten Werte geschrieben wurden.
Ich habe meinen FB für die KL2531 hier mit reinkopiert.
Ich bin jetzt ein wenig planlos wo ich weiter nach einen Fehler suchen kann.
Wenn Euch irgend etwas auffällt, wäre ich über Ideen dankbar!
mfg
Lars
FUNCTION_BLOCK KL2531
VAR_INPUT
Steps: UINT := 0;
Reset: BOOL := FALSE;
Enable: BOOL := FALSE;
END_VAR
VAR_OUTPUT
Busy: BOOL := FALSE;
Err: BOOL:= FALSE;
END_VAR
VAR
Enable_TRIG : R_TRIG;
Reset_TRIG : R_TRIG;
TerminalReg: ReadWriteTerminalReg;
nr: INT := 0;
temp_position: INT;
Step_Count: INT;
END_VAR
Enable_TRIG(CLK := Enable);
Reset_Trig(CLK := Reset);
CASE step_count OF
0: IF Enable_Trig.Q = TRUE THEN
Step_Count := 5;
Busy := TRUE;
Ctrl.0 := TRUE;
nr := 0;
temp_position := position;
END_IF
5: CTRL := 16#DF;
Velocity := 16#1235;
IF Status = 16#9F THEN
Step_Count := 8;
END_IF
8: Ctrl := 16#9F;
IF position = 16#1235 THEN
step_count := 10;
END_IF
10: Ctrl := 16#C2;
Velocity := 1234 + temp_position;
IF Status = 16#82 THEN
Step_Count := 15;
nr := 1;
END_IF
15: Ctrl := 16#82;
IF position = (1234 + temp_position) THEN
step_count := 20;
nr :=2 ;
END_IF
20: Ctrl := 16#C3;
Velocity := 5678 + temp_position;
IF Status = 16#83 THEN
step_count := 25;
nr := 3;
END_IF
25: Ctrl := 16#83;
IF position = (5678 + temp_position) THEN
step_count := 30;
Velocity := 0;
nr := 4;
END_IF
30: IF Velocity = 0 THEN
Step_count := 40;
nr := 5;
END_IF
40: CTRL.0 := TRUE;
CTRL.1 := FALSE;
CTRL.2 := TRUE;
CTRL.3 := FALSE;
CTRL.4 := FALSE;
CTRL.5 := FALSE;
CTRL.6 := FALSE;
CTRL.7 := FALSE;
IF extstatus.3 THEN
busy := FALSE;
Ctrl.2 := FALSE;
nr := 6;
step_count := 0;
END_IF
END_CASE
ich versuche seit zwei Tagen die Schrittmotorklemme KL2531 zum leben zu
erwecken. (Einfach drehen lassen mit veränderbarer Drehrichtung und
Geschwindigkeit geht schon). Ich möchte eine abselute Anzahl von Schritten machen. Ich habe mich an dieses Beispiel gehalten:
http://sps-forum.de/threads/16576
Ich komme in meiner rudimentären Implementation bis zu dem Punkt wo der Fahrauftrag gestartet werden soll CTRL.2 auf 1. Nur der Motor fährt nicht los! Über die Systemsteuerung habe ich mir die Register R2 & R3 angesehen und gesehen das meine Benutzerdefinierten Werte geschrieben wurden.
Ich habe meinen FB für die KL2531 hier mit reinkopiert.
Ich bin jetzt ein wenig planlos wo ich weiter nach einen Fehler suchen kann.
Wenn Euch irgend etwas auffällt, wäre ich über Ideen dankbar!
mfg
Lars
FUNCTION_BLOCK KL2531
VAR_INPUT
Steps: UINT := 0;
Reset: BOOL := FALSE;
Enable: BOOL := FALSE;
END_VAR
VAR_OUTPUT
Busy: BOOL := FALSE;
Err: BOOL:= FALSE;
END_VAR
VAR
Enable_TRIG : R_TRIG;
Reset_TRIG : R_TRIG;
TerminalReg: ReadWriteTerminalReg;
nr: INT := 0;
temp_position: INT;
Step_Count: INT;
END_VAR
Enable_TRIG(CLK := Enable);
Reset_Trig(CLK := Reset);
CASE step_count OF
0: IF Enable_Trig.Q = TRUE THEN
Step_Count := 5;
Busy := TRUE;
Ctrl.0 := TRUE;
nr := 0;
temp_position := position;
END_IF
5: CTRL := 16#DF;
Velocity := 16#1235;
IF Status = 16#9F THEN
Step_Count := 8;
END_IF
8: Ctrl := 16#9F;
IF position = 16#1235 THEN
step_count := 10;
END_IF
10: Ctrl := 16#C2;
Velocity := 1234 + temp_position;
IF Status = 16#82 THEN
Step_Count := 15;
nr := 1;
END_IF
15: Ctrl := 16#82;
IF position = (1234 + temp_position) THEN
step_count := 20;
nr :=2 ;
END_IF
20: Ctrl := 16#C3;
Velocity := 5678 + temp_position;
IF Status = 16#83 THEN
step_count := 25;
nr := 3;
END_IF
25: Ctrl := 16#83;
IF position = (5678 + temp_position) THEN
step_count := 30;
Velocity := 0;
nr := 4;
END_IF
30: IF Velocity = 0 THEN
Step_count := 40;
nr := 5;
END_IF
40: CTRL.0 := TRUE;
CTRL.1 := FALSE;
CTRL.2 := TRUE;
CTRL.3 := FALSE;
CTRL.4 := FALSE;
CTRL.5 := FALSE;
CTRL.6 := FALSE;
CTRL.7 := FALSE;
IF extstatus.3 THEN
busy := FALSE;
Ctrl.2 := FALSE;
nr := 6;
step_count := 0;
END_IF
END_CASE