Achsgruppe mit Depictor visualisieren
Für dieses Projekt benötigen Sie zusätzlich das Add-on CODESYS Depictor mit einer gültigen Lizenz.
Die SoftMotion-Anwendung besteht aus 4 rotatorischen Antrieben, die als Achsgruppe konfiguriert sind. Die ersten drei Achsen bewegen den TCP in der XY-Ebene, die vierte Achse in der Z-Ebene.
Das Beispiel zeigt, wie Sie den Depictor mit der kinematischen Konfiguration Kin_Scara3_Z verwenden können. Dasselbe Verfahren können Sie auch für andere kinematische Konfigurationen anpassen.

Standardprojekt erstellen
Erstellen Sie ein Standardprojekt mit der Steuerung CODESYS SoftMotion Win und der Programmiersprache ST.
Fügen Sie in der Ansicht POUs einen Biliotheksverwalter hinzu.
Öffnen Sie den Bibliotheksverwalter und fügen Sie die Bibliotheken
SM3_Depictor
undDepictorBase
hinzu.
Achsen hinzufügen und parametrieren
Hängen Sie unterhalb des Objekts SoftMotion General Axis Pool 4 virtuelle Achsen an und benennen Sie die Achsen mit Drive1…Drive4.
Parametrieren Sie die Achsen Drive1, Drive2, Drive3 und Drive4 als Achstyp begrenzt mit Softwareendschalter von -180 Grad und 180 Grad.
Konfigurationseditor:
Für weitere Informationen siehe: Virtueller Antrieb
Achsgruppe konfigurieren
Fügen Sie unterhalb der Applikation eine Achsgruppe „KinScara“ hinzu. Wählen Sie dazu den Befehl
.Klicken Sie im Konfigurator auf Kinematik wählen. Wählen Sie die Kinematik TRAFO.Kin_Scara3_Z aus.
Legen Sie die Parameter wie folgt fest:
dArmLength1, dArmLength2, dArmLength3: 500
dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0
Ordnen Sie die Achsen wie folgt zu:
A1: Drive1
A2: Drive2
A3: Drive3
Z: Drive4
Hinweis: Sie können die Achsen direkt mit der Maus in das Eingabefeld ziehen.
Für weitere Informationen siehe: Kinematiken
Steuerungsprogramm erstellen
Deklarieren Sie im Programm
PLC_PRG
Instanzen des FunktionsbausteinsMC_Power
für alle Antriebe. Legen Sie eine Variableistate
für die Zustandsmaschine an.VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power; istate: INT; END_VAR
Definieren Sie in der Implementierung eine Zustandsmaschine.
CASE istate OF 0: 1: 2: END_CASE
Schalten Sie im Zustand
0
alle Antriebe ein.0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF
Wenn die Achsen zugeschaltet sind, geben Sie die Achsgruppe frei (Schalten von „deaktiviert“ auf „standby“).
VAR GroupEnable:MC_GroupEnable; END_VAR 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF
Deklarieren und Initialisieren Sie eine Variable, um den Sollwert in Maschinenkoordinaten zu speichern. Deklarieren Sie zwei Instanzen des Typs
SMC_POS_REF
, um den TCP in kartesischen und Achskoordinaten zu darzustellen.VAR Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates END_VAR VAR CONSTANT axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60); END_VAR 2: Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
Deklarieren Sie eine Instanz von
MC_MoveDirectAbsolute
, um den Scara-Roboter auf die festgelegten Koordinaten zu bewegen.VAR MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates END_VAR 2: MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IF
Deklarieren Sie eine Variable vom Typ
SMC_GroupReadSetPosition
um den aktuellen Wert des Roboters in kartesischen Koordinaten und Achskoordinaten zu lesen.VAR Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values END_VAR 2: Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values
Das gesamte Programm PLC_PRG
Vergleichen Sie Ihr Programm und fügen Sie die fehlenden Programmteile hinzu.
Deklaration
PROGRAM PLC_PRG VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power; istate: INT; GroupEnable:MC_GroupEnable; Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP) Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used nPeriod:DINT:=0; // SCARA_3_Z Period Xelbow:BOOL:=TRUE; END_VAR VAR CONSTANT axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60); END_VAR
Implementierung
CASE istate OF 0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF 2: scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod); kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE); Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IF END_CASE
Depictorprogramm erstellen
Fügen Sie unterhalb der Applikation eine neue POU „Depic“ vom Typ „Programm“ hinzu. Wählen Sie dazu den Befehl
.Deklarieren Sie eine Variable vom Typ
SM3_Depictor.SMC_R_Scara3_Z_Data
. Deklarieren Sie eine VariableLrSize
vom TypLREAL
und initialisieren Sie die Variable mit dem Wert 100.VAR ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data; LrSize:LREAL:=100; END_VAR
Fügen Sie in der Implementierung einen Aufruf des Funktionsbausteins ein.
ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
Fügen Sie die POU „Depic“ zur Task MainTask hinzu.
Depictor konfigurieren
Fügen Sie unterhalb der Applikation ein Objekt „Depictor“ hinzu. Wählen Sie dazu den Befehl
.Doppelklicken Sie auf das Objekt.
Selektieren Sie im Depictor-Baum das Element Pose.
Wählen Sie den Befehl
.Das Element Box wird unterhalb der Pose hinzugefügt.
Wählen Sie in den Eigenschaften des Elements die Option Depictor Ref.
Klicken Sie auf die Schaltfläche
.
Wählen Sie aus der Bibliothek
SM3_Depictor
das Objekt SMC_R_Depictor_Scara3_Z.Definieren Sie die Schnittstellenvariablen wie folgt:
fb: Depic.ScaraTrafo
lrZ_: Drive1.fSetPosition
lrZmin: 10
lrZmax: -50
lrSize: Depic.LrSize
xShowPlane: 0
Visualisierung erstellen
Erstellen Sie eine Visualisierungsseite, in der die kartesischen Koordinaten und die Achskoordinaten angezeigt und verändert werden können.

Fügen Sie unterhalb der Applikation ein Objekt „Visualisierung“ hinzu. Wählen Sie dazu den Befehl
.Öffnen Sie die Visualisierung im Editor.
Fügen Sie ein Visualisierungselement Rechteck (1) ein.
Ändern Sie die Eigenschaften des Elements.
: %s
:PLC_PRG.Car_pos.Position.c.X
Eingabetyp: VisuDialogs.Numpad
Andere Variable verwenden:
PLC_PRG.Frame.X
Fügen Sie die anderen Visualisierungselemente Rechteck ein.
Ändern Sie die Eigenschaften der Element (2) und (3).
: %s
:PLC_PRG.Car_pos.Position.c.Y
bzw.PLC_PRG.Car_pos.Position.c.Z
Eingabetyp: VisuDialogs.Numpad
Andere Variable verwenden:
PLC_PRG.Frame.Y
bzw.PLC_PRG.Frame.Z
Ändern Sie die Eigenschaften der Element (4), (5) und (6).
: %s
:PLC_PRG.Frame.A
bzw.PLC_PRG.Frame.B
bzw.PLC_PRG.Frame.C
Ändern Sie die Eigenschaften der Element (7), (8), (9) und (10).
: %s
:PLC_PRG.Axis_pos.Position.a.a0
bzw.PLC_PRG.Axis_pos.Position.a.a1
bzw.PLC_PRG.Axis_pos.Position.a.a2
bzw.PLC_PRG.Axis_pos.Position.a.a3
Eingabetyp: VisuDialogs.Numpad
Andere Variable verwenden:
PLC_PRG.Pos_Axis.a.a0
bzw.PLC_PRG.Pos_Axis.a.a1
bzw.PLC_PRG.Pos_Axis.a.a2
bzw.PLC_PRG.Pos_Axis.a.a3
Beschriften Sie die Visualisierungselemente mit dem Element Beschriftung.
Programm starten und testen
Über die Visualisierung des Projekts können Sie die Achswerte verändern. Wenn Sie im Programm PLC_PRG
den aktiven Bewegungsbefehl (MoveAbs...
) auskommentieren und die Kommentare des zweiten Bewegungsbefehls entfernen, können Sie die kartesischen Koordinaten verändern.
Übersetzen Sie das Projekt und laden Sie es auf die Steuerung.
Öffnen Sie den Editor des Depictor-Objekts Ihres Projekts.
Wechseln Sie zur Visualisierung und Ändern Sie die Achswerte oder die kartesischen Werte. Beobachten Sie die Bewegung des Scara-Roboters im Depictor.