Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
wir versuchen momentan über Codesys und Raspberry Pi mit Hilfe des PWM-Drivers PCA 9685 16-Channel mehrere Servomotoren (2 oder noch mehr) anzusteuern.
Folgendes Problem hat sich bei uns ergeben und zwar lässt sich ein Servomotor mit unserem Code ansteuern, also seine Position ändern. Sobald wir aber einen zweiten Servomotor und optional noch mehrere Servomotoren ansteuern möchten bekommen wir das im Programm, als strukturierten Text, nicht mehr umgesetzt.
Hardwaretechnisch ist mit den Servomotoren soweit alles in Ordnung, lassen sich also einzeln über den PWM-Controller ansteuern.
Jetzt wäre die Frage, ob sich schon mal jemand damit auseinandergesetzt hat und uns evtl. einen Tipp geben kann wie der Programmverlauf bei zwei oder mehreren Servomotoren aussehen muss.
Danke für Eure Hilfe
Programmcode stellt den Versuch da, einen zweiten Servomotor mit einzubinden.
danke für die schnelle Hilfe es funktioniert jetzt so wie gewollt.
Ich hätte noch eine Frage bezüglich der Motion FBs die ich jetzt verschoben habe, funktioniert dies im Case nicht weil wir in einen neuen Schritt springen und dann die Eingänge für die Bausteine quasi nicht mehr gesetzt sind oder was ist der Grund dafür dass diese im Case nicht so funktionieren wie gewollt?
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi,
die Bedingungen für die Verwendung der Motion FB's sind:
Sie müssen einmal pro Zyklus aufgerufen werden sonst kommt ne Fehlermeldung. (->die Trajektorie wird ja in den Motion
FB's gerechnet, daher ist das eine Ãœberwachung)
Wenn du die FB's (Instanzaufruf) in dem Case oben aufrufst ist das ja nicht gewährleistet das Sie einmal pro Zyklus dran kommen,
sondern eben nur wenn man sich in dem jeweiligen CASE befindet.
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
wir versuchen momentan über Codesys und Raspberry Pi mit Hilfe des PWM-Drivers PCA 9685 16-Channel mehrere Servomotoren (2 oder noch mehr) anzusteuern.
Folgendes Problem hat sich bei uns ergeben und zwar lässt sich ein Servomotor mit unserem Code ansteuern, also seine Position ändern. Sobald wir aber einen zweiten Servomotor und optional noch mehrere Servomotoren ansteuern möchten bekommen wir das im Programm, als strukturierten Text, nicht mehr umgesetzt.
Hardwaretechnisch ist mit den Servomotoren soweit alles in Ordnung, lassen sich also einzeln über den PWM-Controller ansteuern.
Jetzt wäre die Frage, ob sich schon mal jemand damit auseinandergesetzt hat und uns evtl. einen Tipp geben kann wie der Programmverlauf bei zwei oder mehreren Servomotoren aussehen muss.
Danke für Eure Hilfe
Programmcode stellt den Versuch da, einen zweiten Servomotor mit einzubinden.
PROGRAM SoftMotion
VAR
uiError: UINT;
mcp_01 : MC_Power;
mcp_02 : MC_Power;
mcma_01 : MC_MoveAbsolute;
mcma_02 : MC_MoveAbsolute;
MotionStep: UINT := 0;
lrSpeed_01: LREAL;
lrSpeed_02 : LREAL;
rlAngle_01: LREAL;
rlAngle_02 : LREAL;
END_VAR
CASE MotionStep OF
0:
mcp_01(Enable := TRUE,bRegulatorOn := TRUE,bDriveStart:= TRUE, Axis := SM_Drive_Servo_01);
mcma_01.Acceleration := 1000;
mcma_01.Deceleration := 1000;
mcp_02(Enable := TRUE,bRegulatorOn := TRUE,bDriveStart:= TRUE, Axis := SM_Drive_Servo_02);
mcma_02.Acceleration := 1000;
mcma_02.Deceleration := 1000;
5:
END_CASE
Hi,
ruf die Motion fb's nach der Statemachine auf:
.
.
.
END_CASE
mcp_01(Enable := TRUE,bRegulatorOn := TRUE,bDriveStart:= TRUE, Axis := SM_Drive_Servo_01);
mcp_02(Enable := TRUE,bRegulatorOn := TRUE,bDriveStart:= TRUE, Axis := SM_Drive_Servo_02);
mcma_01(Axis := (SM_Drive_Servo_01));
mcma_02(Axis := (SM_Drive_Servo_02));
dann sollte es gehen...denke ich.
Grüße
Edwin
Hi Edwin,
danke für die schnelle Hilfe es funktioniert jetzt so wie gewollt.
Ich hätte noch eine Frage bezüglich der Motion FBs die ich jetzt verschoben habe, funktioniert dies im Case nicht weil wir in einen neuen Schritt springen und dann die Eingänge für die Bausteine quasi nicht mehr gesetzt sind oder was ist der Grund dafür dass diese im Case nicht so funktionieren wie gewollt?
Gruß
Hi,
die Bedingungen für die Verwendung der Motion FB's sind:
Sie müssen einmal pro Zyklus aufgerufen werden sonst kommt ne Fehlermeldung. (->die Trajektorie wird ja in den Motion
FB's gerechnet, daher ist das eine Ãœberwachung)
Wenn du die FB's (Instanzaufruf) in dem Case oben aufrufst ist das ja nicht gewährleistet das Sie einmal pro Zyklus dran kommen,
sondern eben nur wenn man sich in dem jeweiligen CASE befindet.
Grüße
Edwin