CANopen Bibliotheken

Albion

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

gibt es Erfahrungen bzw. kann jemand CANopen Bibliotheken für Codesys empfehlen? Insbesondere für Antriebe CiA402. Ich überlege gerade einen FB zu schreiben, aber das sollten ja bereits Hunderte vor mir getan haben.
 
jetzt habe ich eine konkrete Anwendung:
ein Motor treibt eine Kette an, zwei Endlagen melden die komplett ein- und ausgefahrener Kette
wie stoppe und behindere ich ein weiteres Anfahren in eine Richtung wenn die jeweilige Endlage erreicht ist? Problem: Der Motor wird ja nicht per zwei verschiedene bools (vorwärts+rückwärts) gestartet, sondern per bool Start und real Sollgeschwindigkeit.

wenn vorne AND Sollgesch. > 0 dann nicht vorwärts
wenn hinten AND Sollgesch. < 0 dann nicht rückwärts

scheint mir zu einfach zu sein :wink:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt habe ich eine konkrete Anwendung:
ein Motor treibt eine Kette an, zwei Endlagen melden die komplett ein- und ausgefahrende Kette
wie stoppe und behindere ich ein weiteres Anfahren in eine Richtung wenn die jeweilige Endlage erreicht ist? Problem: Der Motor wird ja nicht per zwei verschiedene bools (vorwärts+rückwärts) gestartet, sondern per bool Start und real Sollgeschwindigkeit.

wenn vorne AND Sollgesch. > 0 dann nicht vorwärts
wenn hinten AND Sollgesch. < 0 dann nicht rückwärts

scheint mir zu einfach zu sein :wink:
Also der Motor wird über ein Bool gestartet und je nach Richtung wird eine positive oder negative Geschwindigkeit übergeben?
Dann ist Deine grundlegende Idee Idee doch genau richtig, muss vielleicht nur etwas erweitert werden. Und warum darf etwas einfaches nicht gut sein?
Code:
IF xStartPos AND I_xEndSwitchPos THEN (* NC wegen Drahtbruchsicherheit *)
  Q_iSollVelo := iVeloPos;
  Q_xStart := TRUE;
ELSIF xStartNeg AND I_xEndSwitchNeg THEN  (* NC wegen Drahtbruchsicherheit *)
  Q_iSollVelo := iVeloNeg;
  Q_xStart := TRUE;
ELSIF xStartPos AND NOT I_xEndSwitchPos THEN  (* NC wegen Drahtbruchsicherheit *)
  Q_xStart := FALSE;
(* Fehlermeldung bei Bedarf *)
ELSIF xStartNeg AND NOT I_xEndSwitchNeg THEN  (* NC wegen Drahtbruchsicherheit *)
  Q_xStart := FALSE;
(* Fehlermeldung bei Bedarf *)
ELSE
  Q_xStart := FALSE;
END_IF
 
das wäre die Lösung für den Velocity Mode, allerdings gibt es noch den Position Mode.

Dann wird per bool gestartet, ein Sollwert Position gibt die Richtung vor. Der Sollwert Velocity ist dann immer positiv, egal in welcher Richtung der Motor läuft. Die Auswertung der aktuellen Geschwindigkeit hat zur Folge, dass der Motor immer ein kurzes Stück über die Endlage fahren würde, bis eine Istgeschwindigkeit übergeben wird.
 
Die Auswertung der aktuellen Geschwindigkeit hat zur Folge, dass der Motor immer ein kurzes Stück über die Endlage fahren würde, bis eine Istgeschwindigkeit übergeben wird.
:confused:
Man fährt doch nicht los um zu testen ob man hätte losfahren dürfen... ob man losfahren darf muß man auch im Stand wissen.

Code:
[COLOR="#008000"]//Velocity Mode: Ansteuerung mit bool Start und real +/-Sollgeschwindigkeit[/COLOR]
Q_xStart := xStart AND ((rVelo > 0.0 AND I_xEndSwitchPos) OR (rVelo < 0.0 AND I_xEndSwitchNeg));
Q_rSollVelo := rVelo;
Code:
[COLOR="#008000"]//Position Mode: Ansteuerung mit bool Start und int Sollposition und real +Sollgeschwindigkeit[/COLOR]
iDistanz := iSollPosition - iIstPosition;
Q_xStart := xStart AND ((iDistanz > 0 AND I_xEndSwitchPos) OR (iDistanz < 0 AND I_xEndSwitchNeg));

rFaktor_abhaengig_von_Distanz := 1.0; [COLOR="#008000"]//könnte man bei kleinerer Distanz/Restweg kleiner 1.0 gehen lassen[/COLOR]
Q_rSollVelo := rVelo * rFaktor_abhaengig_von_Distanz;

Harald
 
Zurück
Oben