Uso de Depictor para visualizar grupos de ejes
Para este proyecto, también necesita el CODESYS Depictor complemento con una licencia válida.
La aplicación SoftMotion consta de cuatro accionamientos giratorios configurados como un grupo de ejes. Los primeros tres ejes mueven el TCP en el plano X / Y y el cuarto eje en el plano Z.
El ejemplo demuestra cómo se puede utilizar Depictor con la configuración cinemática Kin_Scara3_Z. También puede personalizar el mismo procedimiento para otras configuraciones cinemáticas.

Creando el proyecto estándar
- Cree un proyecto estándar con el CODESYS SoftMotion Win controlador y el lenguaje de programación ST. 
- Agregue un administrador de biblioteca en el POU vista. 
- Abra el Administrador de bibliotecas y agregue las bibliotecas - SM3_Depictory- DepictorBase.
Añadiendo y parametrizando los ejes
- Inserte cuatro ejes virtuales debajo del objeto Piscina SoftMotion General Axis y nombre los ejes como Drive1 ... Drive4. 
- Parametrizar los ejes Drive1, Drive2, Drive3 y Drive4 como tipo de eje finito con interruptores finales de software de -180 grados a 180 grados. - Editor de configuración:  
Para más información, ver: unidad virtual
Configurar los grupos de ejes
- Agregue un grupo de ejes "KinScara" debajo de la aplicación. Para hacer esto, haga clic en . 
- En el configurador, haga clic en Seleccionar cinemática. Selecciona el TRAFO.Kin_Scara3_Z cinemática. 
- Defina los parámetros de la siguiente manera: - dArmLength1, dArmLength2, dArmLength3: 500 
- dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0 
 
- Ordene los ejes de la siguiente manera: - A1: Drive1 
- A2: Drive2 
- A3: Drive3 
- Z: Drive4 
 - Nota: Puede arrastrar los ejes directamente al campo de entrada. 
Para más información, ver: Cinemática
Creando el programa del controlador
- En el - PLC_PRGprograma, declare instancias del- MC_Powerbloque de funciones para todas las unidades. Crear un- istatevariable para el diagrama de estado.- VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power; istate: INT; END_VAR 
- Defina un diagrama de estado en la implementación. - CASE istate OF 0: 1: 2: END_CASE 
- Activar todas las unidades en estado - 0.- 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 
- Cuando los ejes están activados, habilite el grupo de ejes (cambie de "desactivado" a "standby"). - VAR GroupEnable:MC_GroupEnable; END_VAR 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF 
- Declare e inicialice una variable para guardar el valor establecido en coordenadas de máquina. Declare dos instancias de tipo - SMC_POS_REFpara representar el TCP en coordenadas cartesianas y de eje.- 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; 
- Declare una instancia de - MC_MoveDirectAbsolutepara mover el robot SCARA a las coordenadas especificadas.- 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
- Declarar una variable de tipo - SMC_GroupReadSetPositionpara leer el valor actual del robot en coordenadas cartesianas y coordenadas de eje.- 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 
Todo el programa PLC_PRG
Compare su programa y agregue las partes del programa que faltan.
Declaración
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_VARImplementación
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
Creación de un programa de representación
- Agregue un nuevo POU "Representación" del tipo "Programa" debajo de la aplicación. Para hacer esto, haga clic en . 
- Declarar una variable de tipo - SM3_Depictor.SMC_R_Scara3_Z_Data. Declarar una variable- LrSizede tipo- LREALe inicializar la variable con el valor de 100.- VAR ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data; LrSize:LREAL:=100; END_VAR 
- Inserte una llamada al bloque de funciones en la implementación. - ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo); 
- Agrega el POU "Representación" al Tarea principal. 
Configuración de Depictor
- Agrega un objeto "Representante" debajo de la aplicación. Para hacer esto, haga clic en . 
- Haz doble clic en el objeto. 
- Selecciona el Pose elemento en el árbol de Depictor. 
- Hacer clic . - los Caja El elemento se agrega debajo de la pose. 
- Selecciona el Representante Ref. opción en las propiedades del elemento. 
- Haga clic en el  botón. botón.
- Selecciona el SMC_R_Depictor_Scara3_Z objeto del - SM3_DepictorBiblioteca.
- Defina las variables de la interfaz de la siguiente manera: - pensión completa: Representante.ScaraTrafo 
- lrZ_: Drive1.fSetPosition 
- lrZmin: 10 
- lrZmax: -50 
- lrSize: Depic.LrSize 
- xShowPlane: 0 
 
Creando visualizaciones
Cree una pantalla de visualización en la que se puedan visualizar y modificar las coordenadas cartesianas y las coordenadas del eje.

- Agregue un objeto "Visualización" debajo de la aplicación. Para hacer esto, haga clic en . 
- Abra la visualización en el editor. 
- Insertar un Rectángulo elemento de visualización (1). 
- Cambia las propiedades del elemento. - : %s 
- : - PLC_PRG.Car_pos.Position.c.X
- Tipo de entrada: VisuDialogs.Numpad 
- Usa otra variable: - PLC_PRG.Frame.X
 
 
- Inserta el otro Caja elementos de visualización. 
- Cambie las propiedades de los elementos (2) y (3). - : %s 
- : - PLC_PRG.Car_pos.Position.c.Yo- PLC_PRG.Car_pos.Position.c.Z
- Tipo de entrada: VisuDialogs.Numpad 
- Usa otra variable: - PLC_PRG.Frame.Yy- PLC_PRG.Frame.Z
 
 
- Cambie las propiedades de los elementos (4), (5) y (6). - : %s 
- : - PLC_PRG.Frame.Ao- PLC_PRG.Frame.Bo- PLC_PRG.Frame.C
 
- Cambie las propiedades de los elementos (7), (8), (9) y (10). - : %s 
- : - PLC_PRG.Axis_pos.Position.a.a0o- PLC_PRG.Axis_pos.Position.a.a1o- PLC_PRG.Axis_pos.Position.a.a2o- PLC_PRG.Axis_pos.Position.a.a3
- Tipo de entrada: VisuDialogs.Numpad 
- Usa otra variable: - PLC_PRG.Pos_Axis.a.a0y- PLC_PRG.Pos_Axis.a.a1y- PLC_PRG.Pos_Axis.a.a2y- PLC_PRG.Pos_Axis.a.a3
 
 
- Etiquete los elementos de visualización con el Etiqueta elemento. 
Iniciar y probar el programa
Puede modificar los valores de los ejes en la visualización del proyecto. Si comenta el comando de movimiento activo (MoveAbs..., ...) en el programa PLC_PRG y elimine los comentarios del segundo comando de movimiento, luego puede modificar las coordenadas cartesianas.
- Construya el proyecto y descárguelo al PLC. 
- Abra el editor del objeto Depictor en su proyecto. 
- Cambie a la visualización y modifique los valores del eje o los valores cartesianos. Observe el movimiento del robot SCARA en Depictor.