ARRAY[256]

Anuncio
Recortar:
Arriba: 61,5 mm
Abajo: 61,5 mm
Izquierda:
43,5 mm
Derecha:
43,5 mm
Controlador
Descripción
Instrucciones de
programación
CMXR
FTL elemental
Descripción
560317
es 1205c
[761539]
Edición ______________________________________________________ 1205c
Denominación _____________________________________ GDCP-CMXR-SW-ES
Nº de art. ___________________________________________________ 560317
 Festo AG & Co KG., D-73734 Esslingen, 2012
Internet:
http://www.festo.com
E-mail:
[email protected]
Sin nuestra expresa autorización, queda terminantemente prohibida la reproducción total
o parcial de este documento, así como su uso indebido y/o su exhibición o comunicación a
terceros. El incumplimiento de lo anterior obliga a pagar indemnización por daños y
perjuicios. Quedan reservados todos los derechos inherentes, en especial los de patentes,
de modelos registrados y estéticos.
Festo GDCP-CMXR-SW-ES es 1205c
3
Lista de revisiones
Autor:
Manual:
GDCP-CMXR-SW-ES
Nombre del archivo:
Lugar de almacenamiento del
archivo:
Nº de art.
Descripción
Indicador de
Fecha de modificación
revisión
001
Redacción
0805NH
25.06.2008
002
Adaptación a CMXR-C1 Versión 1.20
0909a
25.08.2009
003
Adaptación a CMXR-C2 Versión 1.0
1002b
24.03.2010
004
Adaptación a CMXR-C2 Versión 1.1
1205c
04/04/2012
4
Festo GDCP-CMXR-SW-ES es 1205c
ÍNDICE
ÍNDICE
1.
Introducción ........................................................................................................ 14
1.1
Validez .............................................................................................................. 14
2.
Medidas de seguridad......................................................................................... 15
2.1
Uso de la documentación................................................................................... 15
2.2
Condiciones de utilización conforme a lo previsto .............................................. 15
2.3
Personal cualificado .......................................................................................... 16
2.4
Medidas de seguridad de los productos ............................................................ 16
2.5
Medidas de seguridad de este manual ............................................................... 16
2.6
Medidas de seguridad para el producto descrito ............................................... 17
3.
Edición de programas.......................................................................................... 18
3.1
Información general ........................................................................................... 18
3.2
Intérprete .......................................................................................................... 18
3.3
Inicio del programa ............................................................................................ 18
3.4
Avance de proceso............................................................................................. 18
3.5
Estructura de programa ..................................................................................... 20
3.6
Proyectos FTL .................................................................................................... 20
3.6.1
Proyecto FTL global ............................................................................ 21
3.7
Programas FTL ................................................................................................... 21
3.7.1
Programas compartidos de proyecto .................................................. 21
3.8
Archivo de datos FTL “<nombre>.tid” .................................................................. 22
3.8.1
Datos de programa local .................................................................... 22
3.8.2
Datos compartidos de proyecto .......................................................... 22
3.8.3
Datos compartidos de sistema ........................................................... 23
3.8.4
Creación de instancias de variables .................................................... 24
4.
Estructura del lenguaje ....................................................................................... 26
4.1
Formateado ....................................................................................................... 26
4.2
Identificadores .................................................................................................. 26
4.3
Palabras clave ................................................................................................... 26
4.4
Constantes numéricas ....................................................................................... 27
4.5
Cadenas de caracteres ....................................................................................... 27
4.6
Operadores y caracteres de delimitación ........................................................... 27
4.6.1
Operadores aritméticos ...................................................................... 28
4.6.2
Operadores lógicos ............................................................................ 28
4.6.3
Operadores comparativos .................................................................. 28
Festo GDCP-CMXR-SW-ES es 1205c
5
ÍNDICE
4.6.4
4.6.5
Otros operadores ............................................................................... 29
Caracteres de delimitación ................................................................. 29
5.
Tipos de datos básicos ........................................................................................ 30
5.1
Tipo de datos booleano (BOOL) ......................................................................... 31
5.2
Tipos de número entero, tipo de datos REAL, tipos de patrón de bits ................ 32
5.3
Paréntesis ......................................................................................................... 32
5.4
Cadenas de caracteres (STRING) ........................................................................ 33
5.5
Tipos de datos estructurados ............................................................................ 33
5.6
Matrices ............................................................................................................ 33
5.6.1
Inicialización de matrices ................................................................... 35
5.6.2
Cómo determinar los límites de la matriz con LOW y HIGH .................. 35
5.7
Variables de referencia (mapeado) .................................................................... 37
5.7.1
Declaración de variables de referencia, <MAPTO> ................................ 38
5.7.2
Vinculación de variables de referencia, <MAP> .................................... 38
5.7.3
Comprobación de variables de referencia, <IS_MAPPED> .................... 38
6.
Declaración de variables ..................................................................................... 40
6.1
Inicialización...................................................................................................... 40
7.
Expresiones ........................................................................................................ 41
7.1
Secuencia de ejecución para expresiones .......................................................... 41
8.
Control de programa ........................................................................................... 42
8.1
Instrucciones ..................................................................................................... 42
8.2
Asignación de valor <:=> ..................................................................................... 42
8.3
Condiciones ....................................................................................................... 42
8.4
Bifurcación <IF…THEN> ....................................................................................... 43
8.5
Instrucciones de salto ........................................................................................ 44
8.5.1
Marca de salto <LABEL> ....................................................................... 45
8.5.2
Salto condicional <IF…GOTO> .............................................................. 45
Salto absoluto <GOTO> ....................................................................... 46
8.5.3
8.6
Bucles ............................................................................................................... 46
8.6.1
Instrucción WHILE <WHILE> ................................................................. 46
8.6.2
Instrucción LOOP <LOOP> .................................................................... 47
8.7
Subprogramas ................................................................................................... 48
8.7.1
Llamada de subprograma <CALL> ........................................................ 49
8.7.2
Retorno al programa <RETURN> ........................................................... 50
8.8
Programas paralelos .......................................................................................... 51
8.8.1
Ejecución del programa paralelo <RUN> .............................................. 52
8.8.2
Finalización del programa paralelo <KILL> ........................................... 52
6
Festo GDCP-CMXR-SW-ES es 1205c
ÍNDICE
8.9
Influencia del avance de proceso ....................................................................... 53
8.9.1
WAIT – Instrucción con tiempo <WaitTime> .......................................... 53
8.9.2
Instrucción condicional WAIT <WAIT>................................................... 54
8.9.3
WaitOnPath – Instrucción con tiempo <WaitOnPath> ........................... 56
8.9.4
WaitOnPos – Instrucción con tiempo <WaitOnPos> .............................. 57
8.9.5
WaitOnMainRun – Esperar a la ejecución principal
<WaitOnMainRun> ............................................................................... 58
8.10
Instrucción DO ................................................................................................... 59
8.11
Insertar comentarios <//> ................................................................................... 61
8.12
Desactivar línea de programa <##> ..................................................................... 61
9.
Instrucciones de movimiento .............................................................................. 63
9.1
Descripción de la posición ................................................................................. 63
9.1.1
Posición de eje ................................................................................... 64
9.1.2
Posición cartesiana ............................................................................ 66
9.1.3
Programación tipo teach-in de variable de posición ............................ 68
9.2
Movimiento punto a punto <Ptp> ........................................................................ 68
9.2.1
Programación tipo teach-in del movimiento Ptp ................................. 71
9.3
Movimiento punto a punto relativo <PtpRel>....................................................... 71
9.4
Movimiento de un eje, <MoveAxisPtp>, <MoveAxisCart> ..................................... 73
9.4.1
Programación tipo teach-in de la posición con MoveAxisPtp y
MoveAxisCart ..................................................................................... 75
9.5
Movimiento lineal <Lin> ...................................................................................... 77
9.5.1
Programación tipo teach-in del movimiento Lin .................................. 79
9.6
Movimiento lineal relativo <LinRel> ..................................................................... 79
9.7
Movimiento circular con punto de apoyo ........................................................... 81
9.7.1
Funcionamiento ................................................................................. 81
9.7.2
Definición de planos ........................................................................... 82
Instrucción circular con punto de apoyo <CircIp> ................................. 84
9.7.3
9.7.4
Instrucción circular con punto de apoyo, aproximación PTP
<PtpToCircIp> ...................................................................................... 86
9.7.5
Instrucción circular con punto de apoyo, avance lineal
<LinToCircIp> ....................................................................................... 88
9.7.6
Programación tipo teach-in de las instrucciones circulares ................. 89
9.8
Detención del movimiento <StopMove> .............................................................. 90
9.9
Detención del programa <StopProgram> ............................................................. 91
10.
Instrucciones de dinámica................................................................................... 92
10.1
Limitación automática de la dinámica, limitador de la dinámica ...................... 93
10.2
Velocidades <Vel> ............................................................................................... 94
10.3
Aceleración <Acc> .............................................................................................. 95
Festo GDCP-CMXR-SW-ES es 1205c
7
ÍNDICE
10.4
Sacudida <Jerk> .................................................................................................. 96
10.5
Override ............................................................................................................ 98
10.5.1 Override en la unidad de mando manual <Ovr> .................................... 98
10.5.2 Override dinámico <DynOvr> ............................................................. 100
10.6
Rampas de aceleración .................................................................................... 101
10.6.1 Ajuste de formas de rampa <Ramp> ................................................... 102
10.7
Conexión de la velocidad de trayectoria constante <VconstOn> ........................ 103
10.8
Desconexión de la velocidad de trayectoria constante <VconstOff> ................ 105
11.
Instrucciones de avance aproximado ................................................................ 106
11.1
Segmentos cero............................................................................................... 107
11.2
Área extrema ................................................................................................... 108
11.3
Avance aproximado por velocidad ................................................................... 109
11.3.1 Con factor porcentual <OvlVel> .......................................................... 109
11.4
Avance aproximado por geometría .................................................................. 111
11.4.1 Avance aproximado de los ejes X, Y y Z <OvlCart> .............................. 111
12.
Sistemas de referencia (desplazamiento del punto cero) ................................. 113
12.1
Relación del sistema de referencia ................................................................... 113
12.2
Datos del sistema de referencia ....................................................................... 114
12.3
Sistema de referencia con valores directos
12.4
Sistema de referencia con tres puntos <SetRefSys3P> .................................... 116
12.4.1 Programación tipo teach-in del sistema de referencia
SetRefSys3P ..................................................................................... 117
12.5
Sistema de referencia universal <SetRefSysWorld> ........................................... 119
12.6
Sistema de referencia dinámico <SetRefSysDyn> .............................................. 119
12.7
Ejemplo ........................................................................................................... 120
13.
Referenciación de una cinemática ..................................................................... 122
13.1
Recorrido de referencia <RefAxis> ..................................................................... 122
13.2
Recorrido de referencia asíncrono <RefAxisAsync> ............................................ 125
13.3
Espera al final del recorrido de referencia
13.4
Interrogación del estado de un eje
<SetRefSys> ................................ 115
<WaitRefFinished> ........................ 126
<IsAxisReferenced> .................................. 127
14.
Herramientas .................................................................................................... 128
14.1
Datos de herramienta ...................................................................................... 128
14.1.1 Datos del vector TCP ........................................................................ 128
14.2
Activación de datos de herramienta <Tool> ....................................................... 131
14.2.1 Efecto de los datos TCP .................................................................... 131
8
Festo GDCP-CMXR-SW-ES es 1205c
ÍNDICE
15.
Modo de la cinemática ...................................................................................... 136
15.1
Clasificación de los modos de cinemática, variables ........................................ 137
15.2
Ajuste del modo de la cinemática <SetRobotMode> .......................................... 138
15.3
Lectura del modo de la cinemática <GetRobotMode> ........................................ 139
15.4
Cambio del modo de la cinemática................................................................... 140
16.
Interface PROFIBUS .......................................................................................... 142
16.1
Entradas y salidas booleanas, plc_InBool, plc_OutBool.................................. 143
16.2
Variables enteras de 32 bits, plc_Dint .............................................................. 144
16.3
Posiciones, plc_AxisPos, plc_CartPos .............................................................. 145
16.4
Sistemas de referencia, plcRefSys ................................................................... 146
16.5
Pausa programada <ProgHold> ......................................................................... 147
17.
Interface FTL con PLC interno
(sólo para controlador multieje con CoDeSys) .................................................. 149
17.1
Variables del sistema FTL................................................................................. 149
17.1.1 Ejemplo con variables del sistema .................................................... 150
17.1.2 Ejemplo con variables de sistema e instrucción MAP ........................ 151
18.
Sistema de comunicación .................................................................................. 152
18.1
Textos de mensaje ........................................................................................... 152
18.2
Información <SetInfo> ....................................................................................... 154
18.3
Advertencia <SetWarning> ................................................................................ 155
18.4
Mensaje de error <SetError> ............................................................................. 156
19.
Funciones .......................................................................................................... 158
19.1
Lectura de la posición actual <ReadActualPos> ................................................. 158
19.2
Lectura de la posición de destino <ReadTargetPos> .......................................... 159
19.3
Memorización del valor de posición de manera permanente
<SavePosition> ................................................................................................. 160
19.4
Lectura de la fecha y hora del sistema <Time> ................................................... 160
19.5
Conversión de un valor de fecha y hora en texto <TimeToStr> ......................... 161
19.6
Seno <SIN>, <ASIN> ........................................................................................... 162
19.7
Coseno <COS>, <ACOS> ..................................................................................... 163
19.8
Tangente <TAN>, <ATAN> ................................................................................... 165
19.9
Cotangente <COT>, <ACOT> ................................................................................ 166
19.10 Tangente 2 <ATAN2> ......................................................................................... 167
19.11 Logaritmo <LN> ................................................................................................. 167
19.12 Exponente <EXP> .............................................................................................. 167
19.13 Valor absoluto <ABS> ....................................................................................... 168
Festo GDCP-CMXR-SW-ES es 1205c
9
ÍNDICE
19.14 Raíz cuadrada <SQRT> ...................................................................................... 168
19.15 Desplazamiento de bits <SHR>, <SHL> ............................................................... 169
19.16 Rotación de bits <ROR>, <ROL> .......................................................................... 170
19.17 Conversión de un valor en una cadena <STR>.................................................... 171
19.18 Conversión de un valor ASCII en un carácter
<CHR> ....................................... 171
19.19 Conversión de un carácter en un valor ASCII
<ORD> ....................................... 171
19.20 Establecer el bit en una variable WORD <SetBit> ............................................... 172
19.21 Borrar el bit en una variable WORD <ResetBit>.................................................. 173
19.22 Comprobar el bit en una variable WORD
<CheckBit> ...................................... 174
20.
Módulos ............................................................................................................ 175
20.1
Funciones ........................................................................................................ 176
20.2
Variable ........................................................................................................... 176
20.3
Comportamiento del tiempo de operación ....................................................... 177
20.3.1 Parámetro ovlEnable ........................................................................ 177
20.4
Módulo de entrada digital DIN ......................................................................... 178
20.4.1 Instanciación .................................................................................... 178
20.4.2 Métodos ........................................................................................... 180
20.4.3 Espera a estado, métodos Wait/WaitN ............................................. 181
20.4.4 Método Read para lectura de estado ................................................ 181
20.4.5 Método RisingEdge para flanco de subida ........................................ 181
20.4.6 Método ResetRisingEdge para borrar flancos ................................... 182
20.5
Módulo de salida digital DOUT......................................................................... 182
20.5.1 Instanciación .................................................................................... 182
20.5.2 Variable............................................................................................ 184
20.5.3 Métodos ........................................................................................... 185
20.5.4 Espera a estado, métodos Wait/WaitN ............................................. 186
20.5.5 Método Read para lectura de estado ................................................ 186
20.5.6 Flanco de subida, método RisingEdge .............................................. 186
20.5.7 Borrado de flancos, ResetRisingEdge ............................................... 187
20.5.8 Activación y borrado, métodos Set/Reset ......................................... 187
20.5.9 Activación de la salida, método Write ............................................... 188
20.5.10 Activación de la salida con una duración determinada,
método Pulse ................................................................................... 188
20.6
Módulo de entrada analógica AIN .................................................................... 189
20.6.1 Instanciación .................................................................................... 189
20.6.2 Variable............................................................................................ 191
20.6.3 Métodos ........................................................................................... 191
20.6.4 Espera a que el valor sea menor/mayor, métodos
WaitLss, WaitGrt ............................................................................... 192
10
Festo GDCP-CMXR-SW-ES es 1205c
ÍNDICE
20.6.5
20.6.6
Espera a que el valor entre/salga de un margen,
métodos WaitIns, WaitOuts ............................................................ 193
Interrogación del valor, método Read ............................................... 193
20.7
Módulo de salida analógica AOUT.................................................................... 194
20.7.1 Instanciación .................................................................................... 194
20.7.2 Variable............................................................................................ 195
20.7.3 Métodos ........................................................................................... 196
20.7.4 Escritura del valor de salida, método Write ....................................... 197
20.7.5 Espera a que el valor sea mayor/menor, métodos
WaitLss, WaitGrt ............................................................................... 197
20.7.6 Espera a que el valor entre/salga de un margen, métodos
WaitIns, WaitOuts ............................................................................ 198
20.7.7 Lectura del valor de salida, método Read ......................................... 198
20.8
Módulo de reloj CLOCK .................................................................................... 199
20.8.1 Instanciación .................................................................................... 199
20.8.2 Métodos ........................................................................................... 200
20.8.3 Puesta en marcha del reloj, método Start ......................................... 201
20.8.4 Parada del reloj, método Stop .......................................................... 201
20.8.5 Borrado del reloj, método Reset ....................................................... 201
20.8.6 Lectura del reloj, método Read ......................................................... 201
20.8.7 Convertir el valor de fecha y hora en una cadena de caracteres,
método ToStr ................................................................................... 202
20.9
Módulo de encoder ENCODER .......................................................................... 203
20.9.1 Instanciación .................................................................................... 203
20.9.2 Variable............................................................................................ 205
20.9.3 Métodos ........................................................................................... 205
20.9.4 Ajuste del encoder, método Set ........................................................ 205
20.9.5 Lectura del encoder, método Read ................................................... 206
20.10 Módulo CANopen COPDEVICE .......................................................................... 207
20.10.1 Instanciación .................................................................................... 207
20.10.2 Métodos ........................................................................................... 208
20.10.3 Escritura de SDO, método WriteSDO ................................................ 208
20.10.4 Lectura de SDO, método ReadSDOSigned ........................................ 209
20.10.5 Lectura de SDO, método ReadSDOUnsigned .................................... 210
21.
Señales de periféricos ....................................................................................... 211
21.1
Empleo de las entradas y salidas digitales ....................................................... 211
21.2
Empleo de las entradas y salidas analógicas.................................................... 211
22.
Programación de eventos .................................................................................. 213
22.1
Eventos soportados ......................................................................................... 213
22.2
Utilización del registro de instrucciones FTL..................................................... 214
22.3
Control temporal ............................................................................................. 215
Festo GDCP-CMXR-SW-ES es 1205c
11
ÍNDICE
22.4
Evento arranque del control, <onstartup> ......................................................... 215
22.5
Eventos del control de programa ..................................................................... 215
22.5.1 Comportamiento del tiempo de ejecución durante
el funcionamiento ............................................................................ 216
22.5.2 Solapamiento de eventos de programa ............................................ 217
22.5.3 Utilización de diferentes proyectos/programas ................................ 217
22.5.4 Ejemplo: Activación de un aplicador al encolar ................................. 218
22.6
Eventos para las teclas F1 y F2 ......................................................................... 220
22.7
Instrucciones FTL especiales para su aplicación con eventos ......................... 222
22.7.1 Consulta del modo de funcionamiento activo,
<GetAutoModeActive, GetManualModeActive> .................................. 222
22.7.2 Cargar programa FTL, <LoadProgram> ............................................... 223
22.8
Mensajes de los programas de eventos ........................................................... 224
23.
Puntos de conmutación simples ........................................................................ 226
23.1
Punto de conmutación simple con instrucción de movimiento, <DO> .............. 226
23.2
Punto de conmutación simple, <OnPosition> .................................................... 227
23.3
Comportamiento en el área de avance aproximado .......................................... 227
23.4
Comportamiento del tiempo de ejecución de la instrucción DO ..................... 228
24.
Puntos de conmutación de la trayectoria .......................................................... 229
24.1
Segmento de la trayectoria .............................................................................. 229
24.2
Comportamiento en el área de avance aproximado .......................................... 230
24.3 Punto de conmutación con desplazamiento porcentual,
<OnParameter> ............................................................................................................ 231
24.4 Punto de conmutación en cualquier lugar de la trayectoria,
<OnDistance> .............................................................................................................. 232
24.5
Punto de conmutación en un plano de conmutación, <OnPlane> ..................... 235
24.5.1 Programación tipo teach-in de la posición respecto al plano de
conmutación .................................................................................... 237
24.6
Offset de tiempo opcional ................................................................................ 238
24.6.1 Reacción del sistema en caso de valor temporal no permitido .......... 239
24.7
Condiciones generales ..................................................................................... 240
24.7.1 Funcionamiento paso a paso ............................................................ 240
24.7.2 Instrucciones de espera que influyen en la ejecución principal ......... 240
24.7.3 Fijación del indicador de frase .......................................................... 240
24.7.4 Influencia del override ...................................................................... 241
24.7.5 Trabajar en modo manual con velocidad reducida ............................ 242
24.7.6 Interrupción del programa ................................................................ 242
24.8
Puntos de conmutación no ejecutados ............................................................ 243
12
Festo GDCP-CMXR-SW-ES es 1205c
ÍNDICE
25.
Ejemplos ........................................................................................................... 244
25.1
Detención de movimientos .............................................................................. 244
25.2
Empleo de los módulos de entrada y salida ..................................................... 247
25.3
Control del avance de proceso ......................................................................... 248
25.4
Empleo de pinzas ............................................................................................ 249
25.4.1 Pinzas por vacío ............................................................................... 250
25.4.2 Pinzas paralelas neumáticas ............................................................ 253
25.4.3 Unidad giratoria con pinzas neumáticas ........................................... 256
25.5
Empleo de la interface PLC ............................................................................... 260
25.5.1 Tarea ................................................................................................ 260
25.5.2 Interface PLC .................................................................................... 260
25.5.3 Programa secuencial ........................................................................ 261
A.
Lista de instrucciones FTL ................................................................................. 263
B.
Árbol de menús de las instrucciones FTL........................................................... 268
C.
Términos utilizados........................................................................................... 273
D.
Índice ................................................................................................................ 274
Festo GDCP-CMXR-SW-ES es 1205c
13
1. Introducción
1.
Introducción
En este documento se describe el juego de instrucciones FTL (Festo Teach Language) del
control multieje CMXR de Festo. La programación del control CMXR se realiza con el editor
FTL en el plugin correspondiente de Festo Configuration Tool (FCT) o con la unidad de
mando manual CDSA-D1-VX.
Control CMXR-C1
Plugin FCT con editor FTL
Control CMXR-C2
Unidad de mando manual CDSA-D1-VX
FTL es un lenguaje de programación con un juego de instrucciones concebido para la
creación de programas por parte del usuario de la máquina. Este lenguaje de gran
simplicidad permite crear ciclos de máquina sencillos sin necesidad de amplios
conocimientos de programación.
1.1 Validez
Condicionados por las diferentes capacidades de procesamiento de los controles CMXR,
los registros de instrucciones de los controles CMXR varían entre sí.
El manual contiene el estado válido de las instrucciones FTL en el momento de la
realización. No obstante, se pueden producir discrepancias debido a versiones diferentes.
El apéndice 0 incluye un resumen de todas las instrucciones con la versión
correspondiente y las plataformas de control.
14
Festo GDCP-CMXR-SW-ES es 1205c
2. Medidas de seguridad
2.
2.1
Medidas de seguridad
Uso de la documentación
Este documento está concebido para los usuarios y programadores de robots que funcionan con el sistema CMXR de Festo. Existe una introducción al manejo y a la programación.
La formación correspondiente del personal es condición previa indispensable.
2.2
Condiciones de utilización conforme a lo previsto
Advertencia
El sistema CMXR de Festo no está diseñado para tareas de control
relacionadas con la seguridad (p. ej., parada en caso de emergencia o monitorización de velocidades reducidas).
Conforme a EN-13849-1, el sistema CMXR de Festo es sólo de
categoría B y, por tanto, no es suficiente para realizar funciones de
seguridad de protección del personal.
Para problemas de control relativos a la seguridad o para la seguridad de las personas deberán aplicarse medidas de protección
externas que garanticen un estado operativo seguro del sistema
completo, incluso en caso de fallo.
En caso de producirse daños como consecuencia de la inobservancia de este manual de
instrucciones, Festo no asume ninguna responsabilidad.
Nota
Lea en su totalidad los capítulos Medidas de seguridad 2.3 y ss.
antes de la puesta en marcha.
Si la documentación en el idioma presentado no se entiende a la perfección, diríjase al
proveedor y notifíqueselo.
El funcionamiento perfecto y seguro del sistema de mando requiere un transporte,
almacenamiento, montaje e instalación en condiciones adecuadas y profesionales, así
como un esmerado manejo y mantenimiento.
Festo GDCP-CMXR-SW-ES es 1205c
15
2. Medidas de seguridad
2.3
Personal cualificado
Nota
Los trabajos en los equipos eléctricos únicamente pueden ser
llevados a cabo por personal debidamente formado y cualificado.
2.4
Medidas de seguridad de los productos
Advertencia
¡PELIGRO!
Observe las disposiciones en materia de eliminación de residuos
especiales al eliminar las baterías gastadas.
Aunque las baterías son de baja tensión, en caso de cortocircuito
pueden liberar suficiente corriente como para hacer arder
materiales inflamables. Por tanto, no deben eliminarse junto con
materiales conductores (como, p. ej., virutas de hierro, lana de
acero sucia de aceite, etc.).
ESD
Elementos sensibles a las descargas electrostáticas: Estos
componentes pueden dañarse si no se manejan correctamente.
Advertencia
¡PELIGRO!
¡Movimientos peligrosos!
Peligro de muerte, lesiones graves y daños materiales por movimiento accidental de los ejes.
2.5
Medidas de seguridad de este manual
Advertencia
¡PELIGRO!
La inobservancia puede tener como consecuencia daños materiales
y lesiones físicas graves.
Atención
La inobservancia puede tener como consecuencia daños materiales
graves.
16
Festo GDCP-CMXR-SW-ES es 1205c
2. Medidas de seguridad
2.6
Medidas de seguridad para el producto descrito
Advertencia
¡PELIGRO!
Peligro de muerte por equipos de PARADA DE EMERGENCIA
deficientes.
Los equipos de PARADA DE EMERGENCIA deben mantener su eficacia y estar siempre al alcance en todos los modos de funcionamiento de la instalación. El d0esbloqueo del equipo de PARADA DE
EMERGENCIA no debe provocar ningún arranque incontrolado.
Antes de conectar debe comprobarse primero la cadena de PARADA
DE EMERGENCIA.
Advertencia
¡PELIGRO!
Peligro para el personal y el material.
Pruebe todos los programas nuevos antes de poner en marcha la
instalación.
Advertencia
¡PELIGRO!
La instalación posterior de componentes y las modificaciones del
sistema pueden reducir la seguridad.
Ello puede provocar lesiones físicas y daños materiales o ambientales graves. Por tanto, para la instalación posterior de componentes o las modificaciones de la instalación con accesorios de
equipo de otros fabricantes debe contarse con la autorización de
Festo.
Advertencia
¡PELIGRO!
Peligro por alta tensión.
Los trabajos de mantenimiento deben efectuarse siempre, si no se
indica lo contrario, con la instalación desconectada. Para ello, la
instalación debe asegurarse contra la reconexión no autorizada o
involuntaria.
Si es necesario realizar trabajos de medición o de comprobación en
la instalación, deberán ser efectuados por un electricista.
Atención
Sólo deben utilizarse repuestos autorizados por Festo.
Festo GDCP-CMXR-SW-ES es 1205c
17
3. Edición de programas
3.
3.1
Edición de programas
Información general
FTL es la sigla que se obtiene de Festo Teach Language. FTL es un lenguaje de programación y sirve para programar los controles CMXR.
FTL es un lenguaje de programación para robótica y sistemas de manipulación muy completo pero fácil de aprender y dominar. Con él, el usuario puede programar de manera
orientada a su aplicación. Las instrucciones de este lenguaje se basan en el idioma inglés.
3.2
Intérprete
Los programas FTL no son compilados sino convertidos por un intérprete. Dicho intérprete
lee, al inicio, los programas estructurados en la memoria para procesarlos de manera
óptima. Este proceso requiere un breve tiempo de respuesta dependiendo de la longitud
del programa. Por esta razón es recomendable cargar el programa antes del inicio para
poder arrancar el programa con rapidez.
3.3
Inicio del programa
Para iniciar un programa es necesario cargarlo primero en el proyecto correspondiente. La
carga puede efectuarse mediante la unidad de mando manual o a través de un control
externo mediante una interface de control.
Nota
Sólo puede cargarse un único proyecto de usuario. Además, el
proyecto de sistema global está siempre cargado.
La ejecución del programa comienza tras la señal de arranque en la posición actual del
contador de programa.
Si el contador de programa se encuentra en la última línea del programa secuencial, el
programa termina pero permanece cargado. Si durante la secuencia deben arrancarse
programas paralelos, el programa principal permanece activo hasta que éstos terminan.
3.4
Avance de proceso
Para conseguir un procesamiento rápido del programa, el intérprete calcula un número de
instrucciones de movimientos por adelantado. El cálculo por adelantado se realiza en
marcha al mismo tiempo que se ejecuta el programa y se trata en el sistema. La magnitud
del avance de proceso, es decir, el número de instrucciones de movimiento calculado por
adelantado, se guarda en el sistema.
18
Festo GDCP-CMXR-SW-ES es 1205c
3. Edición de programas
Nota
El avance de proceso hace referencia a las instrucciones de movimiento. Otras instrucciones situadas entre las instrucciones de
movimiento como, p. ej., la modificación de valores dinámicos o la
modificación de variables, no se ven afectadas.
En este avance de proceso se descodifican las instrucciones de FTL y se preparan para los
cálculos posteriores. Además, también se planifica la trayectoria del movimiento, calculada a partir de los valores dinámicos ajustados.
Con algunas instrucciones FTL es posible influir en el avance de proceso, es decir, éste
puede detenerse en determinadas circunstancias. Ello puede darse, p. ej., en caso de la
bifurcación de un programa donde se decide por señales de entrada de los periféricos.
Si el avance de proceso se detiene, el conjunto de instrucciones calculado por adelantado
se procesa y la cinemática detiene el movimiento. Después se calcula la decisión de la
bifurcación del programa y se ejecutan las instrucciones de movimiento siguientes.
Nota
La detención del avance de proceso mediante la instrucción
correspondiente puede provocar, en ocasiones, paradas
indeseadas en la trayectoria. Con este tipo de instrucciones no es
posible el avance aproximado de los movimientos.
Proceso
principal
Lin(Pos1)
Lin(Pos2)
Lin(Pos3)
Lin(Pos4)
Lin(Pos5)
Lin(Pos6)
Lin(Pos7)
Lin(Pos8)
Avance de
proceso
Lin(Pos9)
La figura muestra un extracto de un programa FTL. La flecha superior indica la instrucción
actual que se está ejecutando. La flecha inferior marca la instrucción activa del cálculo por
adelantado de proceso. La distancia entre las dos flechas es el avance de proceso.
Más información y ejemplos sobre el avance de proceso se describen en el capítulo 25.3
Control del avance de proceso.
Festo GDCP-CMXR-SW-ES es 1205c
19
3. Edición de programas
3.5
Estructura de programa
Todos los programas FTL están guardados en la tarjeta de memoria (Compact Flash Card)
del control multieje CMXR en el directorio “application\control\teachcontrol” (en adelante
denominado “directorio de aplicación”). Los programas se disponen en una estructura de
carpetas. Un proyecto contiene los programas de movimientos asignados. El número de
proyectos y programas está limitado por el tamaño de la tarjeta de memoria.
Estructuras de programa:
3.6
Proyectos FTL
Un proyecto FTL se guarda como subdirectorio en el directorio de aplicación. El nombre de
directorio es el título del proyecto y tiene la extensión “tt”.
Ejemplos de títulos de proyecto:
Proyecto “_global“"
Proyecto “cube"
Proyecto “PickPlace”
20
Festo GDCP-CMXR-SW-ES es 1205c
3. Edición de programas
En un proyecto se reúnen todos los programas FTL. Por tanto, todos los programas son
elementos de un proyecto. No está permitido crear más subdirectorios dentro de un
directorio de proyecto.
Nota
La estructura y administración de proyecto se generan y gestionan
automáticamente mediante el software gráfico de la unidad de
mando manual y el editor del software FCT.
3.6.1
Proyecto FTL global
Además de todos los proyectos FTL, existe un proyecto FTL global que recibe el nombre
“_global”. Este nombre es fijo y no se puede modificar. Este proyecto sirve para todos los
proyectos. Todos los datos y programas guardados en él son accesibles desde el resto de
los proyectos. Si es necesario utilizar datos o programas en varios proyectos, éstos se
guardan en el proyecto global. De ese modo se garantiza la coherencia de los datos.
El proyecto global “_global” se carga y activa automáticamente al arrancar el CMXR.
3.7
Programas FTL
Todos los programas FTL que pertenecen a un proyecto se guardan en el directorio de
proyecto asignado. Un programa se compone del código de programa y de los datos
correspondientes. Éstos se guardan en archivos diferentes con el mismo nombre pero con
una extensión diferente (file extension):

<nombre>.tip Nombre de archivo para código de programa

<nombre>.tid Nombre de archivo para datos de programa
Ejemplo:
Para un programa con el nombre “Load” se crea el archivo “Load.tip”. El nombre del
archivo de los datos locales de programa es “Load.tid”.
Si el programa se guarda mediante la unidad de mando manual CDSA o mediante el editor
FTL de Festo (en Festo Configuration Tool), el archivo de datos locales de programa se
genera automáticamente. Si la generación de programa se efectúa con otro software, debe
observar que se guarde el archivo de datos correspondiente para cada programa.
3.7.1
Programas compartidos de proyecto
El proyecto compartido de sistema “_global” puede contener programas además de datos.
Dichos programas pueden ser utilizados por todos los programas en todos los proyectos.
Estos programas globales destacan por su gran comodidad de uso. Así, los programas que
dependen de la cinemática utilizada pueden definirse y guardarse independientemente de
los proyectos de aplicación. Si una cinemática no posee posiciones fijas, como, p. ej., una
posición de seguridad, el desplazamiento a esta posición puede guardarse una vez en el
proyecto global.
Festo GDCP-CMXR-SW-ES es 1205c
21
3. Edición de programas
3.8
Archivo de datos FTL “<nombre>.tid”
En el sistema de mando CMXR, los datos sirven como variable y para la comunicación.
La estructura de proyecto permite guardar los datos de una manera clara y limitar el
acceso a ellos. Un archivo de datos se reconoce por la extensión de archivo “tid” y, como
el archivo de programa, está basado en texto. En el sistema puede haber:

Datos locales de programa dentro de los programas individuales

Datos compartidos de proyecto para cada proyecto

Datos compartidos de sistema para todos los proyectos
Esta distribución permite seleccionar quién tiene acceso a los datos. La comunicación
entre los programas o los proyectos se puede controlar también de este modo. Con datos
compartidos de proyecto puede establecerse una comunicación entre los programas y, con
datos compartidos de sistema, entre los proyectos.
3.8.1
Datos de programa local
Los datos de programa local son conocidos únicamente dentro del programa. Otros programas o proyectos no tienen acceso a estos datos.
Nota
Los datos de programa local son conocidos y válidos únicamente
dentro del programa asignado. Otros programas o proyectos no
tienen acceso a estos datos.
En la figura siguiente se muestran los programas “Fill” y “Sort”. Cada uno de estos
programas posee datos locales y datos de programa guardados en los archivos
correspondientes.
3.8.2
Datos compartidos de proyecto
Los datos compartidos de proyecto sirven para la comunicación entre cada uno de los
programas dentro de un proyecto. Otros programas fuera del proyecto correspondiente no
tienen acceso a estos datos.
Los datos compartidos de proyecto se guardan en un archivo propio con el nombre
“_globalvars.tid”. Si un proyecto se guarda mediante la unidad de mando manual CDSA o
con el editor de programación FTL, este archivo de datos compartidos de proyecto se crea
automáticamente. Si la generación de programa se efectúa con otro software, p. ej., con
software de programación del cliente, debe observar que se cree este archivo de datos.
22
Festo GDCP-CMXR-SW-ES es 1205c
3. Edición de programas
Nota
Si el programa se genera mediante un software de otra marca debe
observarse que se cree el archivo “_globalvars.tid” en el directorio
de proyecto.
En la figura siguiente se muestran los proyectos “FillPalett” y “FeedParts”. Cada uno de
estos proyectos dispone de datos compartidos de proyecto guardados en el archivo
“_globalvars.tid” y en el directorio de proyecto.
3.8.3
Datos compartidos de sistema
Los datos compartidos de sistema son conocidos en todo el sistema, en todos los
programas de todos los proyectos. Estos datos compartidos de sistema están asignados al
proyecto global “_global” y guardados dentro de él en el archivo de datos
“_globalvars.tid”.
Nota
Como todos los programas tienen acceso a los datos compartidos
de sistema, estos datos deben utilizarse con cuidado. El acceso
simultáneo de varios programas a estos datos debe organizarse
cuidadosamente. Si es necesario, bloquéelos con las medidas
necesarias en la aplicación.
En la figura siguiente se muestra el proyecto global “_global” enlazado con datos
compartidos de proyecto y locales. Además, en el área de objetos compartidos de sistema
también se muestran programas compartidos de sistema.
Festo GDCP-CMXR-SW-ES es 1205c
23
3. Edición de programas
3.8.4
Creación de instancias de variables
Las variables se declaran de la manera siguiente dentro del archivo de datos
“<nombre>.tid”:
Sintaxis
<nombre de variable> : <tipo de variable> := <valor>
El nombre de las variables se puede asignar libremente teniendo en cuenta las reglas del
capítulo 4.3 Palabras clave. En todo caso, sólo es posible crear una variable por línea.
Ejemplo:
cpos1 : CARTPOS := (100, 50, 100, 0, 0, 0)
cpos2 : CARTPOS := (600, 550, 100, 180, 0, 0)
index : DINT := 17
Los tipos de variables posibles se describen en los capítulos siguientes.
Atención
Los valores de variables que se modifican en el programa durante el
tiempo de ejecución no se escriben en el archivo de datos de la
tarjeta de memoria y sólo se mantienen mientras que el proyecto/
programa está cargado. Al descargar el proyecto/ programa o en
caso de caída de tensión de alimentación se pierden los datos
modificados en el programa.
24
Festo GDCP-CMXR-SW-ES es 1205c
3. Edición de programas
Nota
Para guardar de manera permanente los valores de posición en la
tarjeta de memoria puede utilizarse la instrucción FTL “SavePosition”.
Festo GDCP-CMXR-SW-ES es 1205c
25
4. Estructura del lenguaje
4.
4.1
Estructura del lenguaje
Formateado
Los archivos FTL son archivos de texto legibles. Las instrucciones o declaraciones se
separan por retornos de carro. Por lo general se diferencia entre mayúsculas y minúsculas.
4.2
Identificadores
Los identificadores sirven para identificar proyectos, programas, módulos, variables,
constantes y tipos. Un identificador es una secuencia de letras, cifras y el símbolo “_”.
Nota
Los caracteres permitidos son a…z, A…Z, 0…9 y _ (guión bajo).
Todos los demás caracteres son inadmisibles.
Los identificadores distinguen entre mayúsculas y minúsculas, es decir, las variables
deben escribirse siempre igual (con las mismas mayúsculas o minúsculas).
Ejemplo:
Una variable con el identificador “Index” no es la misma que las variables con el
identificador “INDEX”. En este caso se trata de dos variables distintas.
Nota
A diferencia de los identificadores, los nombres de programa y los
títulos de proyecto no distinguen entre mayúsculas y minúsculas.
4.3
Palabras clave
Las palabras clave forman parte del lenguaje FTL. Todas las palabras clave de FTL se
escriben en mayúsculas y no deben utilizarse como nombres de programa, variables ni
tipos.
Lista de todas las palabras clave:
CALL
IF
THEN
END_IF
ELSIF
ELSE
GOTO
LABEL
WHILE
DO
END_WHILE LOOP
END_LOOP
RETURN
RUN
KILL
OR
XOR
MOD
AND
NOT
MAP
MAPTO
WAIT
BOOL
DINT
DWORD
REAL
STRING
ARRAY
El resto de tipos de datos creados a partir de estas claves también son palabras clave.
26
Festo GDCP-CMXR-SW-ES es 1205c
4. Estructura del lenguaje
Lista de todas las funciones:
SIN
COS
TAN
COT
LN
ABS
SQRT
EXP
ASIN
ACOS
ATAN
ATAN2
ACOT
SHR
SHL
ROR
ROL
STR
CHR
ORD
LOW
HIGH
También son válidas las restricciones mencionadas para todos los nombres de instrucción,
por ejemplo Lin, Vel, SetError, etc.
4.4
Constantes numéricas
Se diferencia entre números enteros y reales. Los enteros pueden escribirse en
representación decimal, binaria o hexadecimal.
Ejemplos de números enteros válidos:
Notación decimal
100
-100
Notación binaria
2#1010
-2#1010
Notación hexadecimal
16#1ABF
-16#1ABF
Los números reales (valores en coma flotante) pueden representarse con coma decimal o
con notación exponencial. Los valores con coma decimal deben poseer como mínimo una
posición tras la coma.
Ejemplos de números reales válidos:
Notación decimal:
1.01
178.473
Notación exponencial:
1.99E4
1.99e+8
4.5
1e-8
Cadenas de caracteres
Las cadenas de caracteres, los denominados strings, se abren y cierran con el carácter".
Pueden incluir todos los caracteres imprimibles. La longitud de una cadena está limitada a
255 caracteres. Son válidos todos los caracteres ASCII.
Ejemplo de una cadena de caracteres válida:
"Control multieje CMXR-C1"
4.6
Operadores y caracteres de delimitación
Los operadores se utilizan en expresiones y describen cómo conectar los valores de
variables y las constantes numéricas.
Festo GDCP-CMXR-SW-ES es 1205c
27
4. Estructura del lenguaje
4.6.1
Operadores aritméticos
Operador
Significado
+
Adición
-
Sustracción
*
Multiplicación
/
División
MOD
Módulo operación
Tabla 4.1 Operadores aritméticos
4.6.2
Operadores lógicos
Estos operadores pueden utilizarse en valores de verdad y en números enteros. Con los
números enteros funcionan en bits.
Operador
Significado
AND
Operación Y
OR
Operación O
XOR
Operación O
NOT
Negación
Tabla 4.2 Operadores lógicos
4.6.3
Operadores comparativos
Operador
Significado
<
Menor que
<=
Menor o igual que
=
Igual a
<>
No igual a
>=
Mayor o igual que
>
Mayor que
Tabla 4.3 Operadores comparativos
28
Festo GDCP-CMXR-SW-ES es 1205c
4. Estructura del lenguaje
4.6.4
Otros operadores
Operador
Significado
.
Operador punto para acceder a los elementos de la
estructura
[]
Operadores corchetes para acceder a matrices
()
Paréntesis para, p. ej., listas de parámetros y para la
estructuración de la ejecución en expresiones
Tabla 4.4 Otros operadores
4.6.5
Caracteres de delimitación
Operador
Significado
:=
Asignación de valor para variables
:
Carácter de separación para crear instancias de
variables
,
Carácter de enumeración en listas de parámetros para
acceder a funciones o instrucciones FTL
Tabla 4.5 Caracteres de delimitación
Festo GDCP-CMXR-SW-ES es 1205c
29
5. Tipos de datos básicos
5.
Tipos de datos básicos
FTL soporta cinco tipos de datos:
 Datos booleanos
 Números enteros
 Patrón de bits
 Números variables de coma flotante
 Cadenas de caracteres
Dentro de estos cinco tipos de datos se derivan tipos de datos elementales en FTL. En función del significado del tipo de datos se realiza una asignación para un margen de valores
determinado y las operaciones correspondientes.
Tipo de
datos
Interpretación
Capacidad de
memoria
Margen de valores
BOOL
Bit
8 bits
TRUE o FALSE
DINT
Número entero
32 bits
-2.147.483.648 … +2.147.483.647
DWORD
Patrón de bits
32 bits
32 bits
REAL
Número variable 32 bits
Conforme a IEEE
de coma flotante
STRING
Cadena de
Máx. 255 bytes
Máx. 255 caracteres
caracteres
Tabla 5.1 Tipos de datos básicos
Según el tipo de datos es posible efectuar operaciones distintas.
Tipo de
datos
Operaciones
BOOL
Operaciones lógicas AND, OR, XOR, NOT
DINT
Operaciones aritméticas, operaciones de comparación
DWORD
Operaciones de bits AND, OR, XOR, NOT, SHL, SHR, ROL, ROR, =, <>
REAL
Operaciones aritméticas, operaciones de comparación
STRING
Operaciones de comparación, +
Tabla 5.2 Operaciones posibles
30
Festo GDCP-CMXR-SW-ES es 1205c
5. Tipos de datos básicos
En principio, para asignar valores, los tipos de datos deben ser equivalentes. Sin embargo,
FTL soporta también parcialmente la asignación de tipos de datos diferentes. En este caso
se realiza una conversión de tipo automática. Con determinados tipos de datos, para la
asignación se deben utilizar las funciones integradas STR, CHR y ORD.
De\a
BOOL
Números
enteros
Patrón de bits
REAL
STRING
BOOL
Sí
---
---
---
STR
Números
---
Sí
Sí
Sí
STR, CHR
Patrón de bits
---
Sí
Sí
---
STR, CHR
REAL
---
Sí
---
Sí
STR
STRING
---
ORD
ORD
---
Sí
enteros
Tabla 5.3 Conversiones posibles
Dependiendo del tipo de datos, se pueden realizar las siguientes conversiones:
Función
Operación
STR
Convierte cualquier tipo de datos en una cadena de caracteres.
CHR
Convierte un valor ASCII en un único carácter.
ORD
Convierte un único carácter en un valor ASCII.
Tabla 5.4 Funciones integradas
5.1
Tipo de datos booleano (BOOL)
El tipo de datos booleano tiene el valor TRUE o FALSE. Se utiliza sobre todo para
operaciones lógicas y también en combinación con señales de periféricos, p. ej., entradas
de sensores y salidas de actuadores.
Ejemplo:
Variables:
pos1
: BOOL
pos2
: BOOL
pos3
: BOOL
min1PosValid : BOOL
allPosValid
: BOOL
Código de programa:
allPosValid
:= NOT pos1 AND NOT pos2 AND NOT pos3
min1PosValid := pos1 XOR pos2 XOR pos3
Festo GDCP-CMXR-SW-ES es 1205c
31
5. Tipos de datos básicos
5.2
Tipos de número entero, tipo de datos REAL, tipos
de patrón de bits
El lenguaje de programación FTL soporta enteros, tipos de datos de números variables de
coma flotante y de patrones de bits. Según el caso pueden asignarse entre sí estos tipos
de datos (véase el capítulo 5
Tipos de datos básicos en la página 30). Con este
modelo de asignación, el sistema convierte internamente los tipos de manera automática.
Según la clase de conversión de tipos, puede perderse en precisión, p. ej., para convertir
de REAL a DINT, el sistema elimina las posiciones decimales.
Ejemplos de conversiones de tipos:
Variables:
pressure : REAL
index
: DINT
Código de programa:
pressure := 1.53
index
:= pressure
// conversión REAL->DINT
La variable “index” recibe el valor “1” después de la conversión.
Nota
Las conversiones de tipos sólo deben utilizarse cuando la
consecuencia está perfectamente clara (véase el ejemplo más
arriba).
5.3
Paréntesis
Los paréntesis se utilizan para agrupar cálculos de acuerdo con el orden de
procesamiento. Los paréntesis son procesados de dentro a fuera.
Ejemplo:
:
IF (Index < 10) AND (Index > 5) THEN
:
END_IF
:
Distance := (xRow + 10) * Index
:
32
Festo GDCP-CMXR-SW-ES es 1205c
5. Tipos de datos básicos
5.4
Cadenas de caracteres (STRING)
Las cadenas de caracteres se describen con el tipo de datos STRING. La longitud de una
cadena está limitada a 255 caracteres. Las cadenas de caracteres, también denominadas
strings, pueden asignarse entre sí y conectarse fácilmente con ayuda del operador +.
Ejemplo:
Variable:
message : STRING
part
: STRING
Código de programa:
message := “cylinder “
part
:= “DNC “
message := message + part + “is extended“
5.5
Tipos de datos estructurados
Por tipos de datos estructurados se entiende una agrupación fija de tipos de datos básicos
en un tipo de datos nuevo.
Los tipos de datos estructurados no pueden crearse a nivel de usuario. Éstos (sólo) se
utilizan como tipos de datos en instrucciones FTL. Una aplicación es, p. ej., la
representación de posiciones. Con el tipo de datos “AXISPOS” se describe una posición de
eje compuesta por seis variables del tipo de datos básicos REAL en una secuencia
determinada. Véase el capítulo 9.1 Descripción de la posición en la página 63.
5.6
Matrices
Las matrices se utilizan para agrupar tipos de datos iguales en una unidad ordenada.
El acceso a cada uno de los elementos de la matriz se realiza con un índice. Los límites de
la matriz están sometidos a control. Si se realiza una operación que rebasa el tamaño de la
matriz, aparece un aviso.
Declaración de matrices:
Sintaxis
VAR
<nombre> : ARRAY [ <tamaño de la matriz> ] OF <tipo de datos>
:= ( <inicialización>)
END_VAR
Festo GDCP-CMXR-SW-ES es 1205c
33
5. Tipos de datos básicos
En el parámetro “tamaño de la matriz” se especifica:

El tamaño de la matriz

El índice de rango de la matriz

Las dimensiones de la matriz
Tamaño de la matriz
El tamaño de la matriz se indica por medio de una constante (número entero). El tamaño
de la matriz no se puede indicar con una variable.
// Matriz con 10 elementos
Matrix1 : ARRAY [10] OF DINT
// Matriz con 12 elementos
Matrix2 : ARRAY [12] OF CARTPOS
Índice de rango
El índice de rango de la matriz comienza normalmente por 0 y termina por el tamaño de
matriz definido menos 1. Si, por ejemplo, se define una matriz de 10 elementos, el índice
de la matriz irá de 0 a 9. Mediante el índice de la matriz se accede al elemento individual
de la matriz.
Si se requiere un índice de matriz especial, puede especificarse en la declaración de la
matriz.
Sintaxis
VAR
<nombre> : ARRAY [<comienzo del índice> ... <final del índice> ] OF
<tipo de datos> := ( <inicialización>)
END_VAR
El siguiente ejemplo muestra una matriz de 10 elementos cuyo índice va de 3 a 12:
Matrix3 : ARRAY [3...12] OF DINT
Dimensiones
Toda matriz tiene, por lo menos, una dimensión, pero también puede tener varias dimensiones. Las matrices multidimensionales se indican especificando sus dimensiones entre
corchetes y separadas por comas.
34
Festo GDCP-CMXR-SW-ES es 1205c
5. Tipos de datos básicos
Sintaxis
VAR
<nombre> : ARRAY [<tamaño 1> , <tamaño 2>, <tamaño 3>, ... ] OF
<tipo de datos> := ( <inicialización>)
END_VAR
Los siguientes ejemplos muestran la declaración de matrices multidimensionales:
// Matriz de 2 dimensiones con 3 elementos cada una = 9
elementos
Matrix1 : ARRAY [3, 3] OF DINT
// Matriz de 3 dimensiones con 3 elementos o 2 elementos = 18
elementos
Matrix2 : ARRAY [3, 3, 2] OF DINT
Si es necesario, en las matrices multidimensionales también se puede indicar un índice de
rango. El siguiente ejemplo muestra una matriz de 3 x 3 elementos, cada uno con un índice
de rango distinto:
Matrix3 : ARRAY [1..3, 5..7, 0..2] OF DINT
5.6.1
Inicialización de matrices
El sistema inicializa las matrices con el valor 0. Si se desea una inicialización distinta,
puede indicarse entre paréntesis después del tipo de matriz.
Ejemplo:
Matrix1 : ARRAY [7] OF DINT := (0, 1, 2, 3, , , )
Matrix2 : ARRAY [3, 3] OF DINT := ((1, , 9), (3, , 7), (, , 6))
Cada campo de la matriz se introduce con una coma. Si no se desea inicializar este campo,
no debe indicarse. No obstante, la coma es imprescindible para que los demás elementos
se inicialicen correctamente.
5.6.2
Cómo determinar los límites de la matriz con LOW y HIGH
Con la palabra clave LOW se puede averiguar el índice de rango más bajo de una matriz
y con la palabra clave HIGH, el índice de rango más alto.
Sintaxis
<variable : DINT> := LOW( <variable de matriz> )
<variable : DINT> := HIGH( <variable de matriz> )
Festo GDCP-CMXR-SW-ES es 1205c
35
5. Tipos de datos básicos
A las funciones LOW y HIGH se les transfiere una variable de matriz. Si es preciso averiguar
los límites de una matriz unidimensional, solamente se transfiere el nombre de la matriz.
En el caso de las matrices multidimensionales, se debe indicar siempre la dimensión desde
la cual se deben transmitir los límites.
Matrix : ARRAY [5, 19, 10..34] OF REAL
Los límites de rango de la matriz son:

De 0 a 4 para la primera dimensión
o Abrir LOW da como resultado 0
o Abrir HIGH da como resultado 4

De 0 a 18 para la segunda dimensión
o Abrir LOW da como resultado 0
o Abrir HIGH da como resultado 18

De 10 a 34 para la tercera dimensión
o Abrir LOW da como resultado 10
o Abrir HIGH da como resultado 34
Nota
Si se transmite a LOW o a HIGH una variable que no es una matriz,
aparece un mensaje de error.
Ejemplos:
Matrix1 : ARRAY [1..4] OF DINT
Matrix2 : ARRAY [3,8] OF DINT
Index
: DINT
// El índice tiene el valor 1
Index := LOW(Matrix1)
// El índice tiene el valor 4
Index := HIGH(Matrix1)
// El índice tiene el valor 0
Index := LOW(Matrix2)
// El índice tiene el valor 2
Index := HIGH(Matrix2)
// El índice tiene el valor 0
Index := LOW(Matrix2[0])
// El índice tiene el valor 7
Index := HIGH(Matrix2[0])
36
Festo GDCP-CMXR-SW-ES es 1205c
5. Tipos de datos básicos
5.7
Variables de referencia (mapeado)
El mecanismo de mapeado permite definir variables como referencias a un determinado
tipo. Estas variables se pueden vincular posteriormente con objetos de ese tipo.
De esas variables de referencia se dice que están “mapeadas” a un objeto o que ese
objeto está asignado a las variables de referencia. Un uso directo de las variables de
referencia equivale por tanto a utilizar el objeto que ha sido asignado a ellas a través del
mecanismo de mapeado.
Si se utiliza directamente una variable de referencia que no tiene asignado ningún objeto,
se produce un error.
Las variables de referencia solamente utilizan la memoria estrictamente necesaria para
establecer un enlace con el objeto asignado. La memoria utilizada es independiente del
tipo de objeto asignado.
La siguiente gráfica muestra el mecanismo de mapeado:
Variables de programa
Variable de referencia
Index_A
Ref_Index
Index_B
Index_C
Mapeado de Ref_Index
a Index_C
Si en el programa se utiliza la variable de referencia Ref_Index, esta variable funcionará
con la zona de memoria y el contenido propios de la variable Index_C.
Ejemplo: La instrucción Ref_Index := 10 describe la variable Index_C con el valor 10.
Nota
Al leer una variable mapeada, se lee la variable asignada. De igual
modo, al escribir en una variable mapeada, se escribe en la
variable asignada.
Festo GDCP-CMXR-SW-ES es 1205c
37
5. Tipos de datos básicos
5.7.1
Declaración de variables de referencia, <MAPTO>
La declaración de una variable de referencia se puede realizar con cualquier tipo de datos,
por ejemplo DINT o REAL. La declaración se lleva a cabo anteponiendo la palabra clave
MAPTO al tipo de datos propiamente dicho. Las variables de referencia no se pueden
inicializar.
Sintaxis
<variable> : MAPTO <tipo de datos>
Ejemplo:
Index : MAPTO DINT
Level : MAPTO REAL
Home
: MAPTO CARTPOS
En este ejemplo se han declarado 3 variables de referencia que tienen asignados distintos
tipos de datos.
5.7.2
Vinculación de variables de referencia, <MAP>
Para vincular las variables de referencia a otras variables se utiliza la palabra clave MAP. A
la hora de efectuar esta operación, debe recordarse que sólo es posible vincular variables
que tengan el mismo tipo de datos que las variables de referencia.
Sintaxis
<variable> : = MAP( <variable> )
Ejemplo:
MyIndex := MAP(Index)
5.7.3
Comprobación de variables de referencia, <IS_MAPPED>
Con la función IS_MAPPED se puede comprobar si una variable de referencia está
vinculada a una variable. Si en el programa se utiliza una variable de referencia que no
está vinculada, se producirá un error.
Sintaxis
IS_MAPPED (<variable de referencia>) : BOOL
38
Festo GDCP-CMXR-SW-ES es 1205c
5. Tipos de datos básicos
Valores devueltos:
TRUE
La variable de referencia está vinculada
FALSE
La variable de referencia no está vinculada
Esta función se utiliza, por ejemplo, al emplear variables de referencia en un subprograma,
en cuyo caso la vinculación de variables se realiza fuera de dicho subprograma.
Ejemplo:
IF IS_MAPPED(Level) THEN
:
:
ELSIF
SetError(“Not mapped”)
END_IF
Festo GDCP-CMXR-SW-ES es 1205c
39
6. Declaración de variables
6.
Declaración de variables
La declaración de variables se efectúa en los archivos correspondientes con la extensión
“tid”. En ellos se fija el nombre de la variable y el tipo de datos. El nombre y el tipo de
datos se separan entre sí con dos puntos.
Sintaxis
<nombre> : <tipo>
Ejemplos de declaraciones de variable válidas:
offset
: REAL
flag
: BOOL
index
: DINT
name
: STRING
6.1
Inicialización
Todas las variables FTL se inicializan automáticamente. Las variables de números enteros
y las variables reales se inicializan con 0, las cadenas de caracteres (strings) con una
cadena vacía “ ” y la variable booleana con FALSE.
Además de la inicialización automática también es posible inicializar variables con un valor
determinado. Ello también se denomina inicialización explícita. El valor inicial se introduce
según la indicación de tipo en forma de asignación en el archivo de datos. Las variables
reales también pueden inicializarse con valores enteros.
Ejemplo de inicializaciones válidas:
index
: DINT := 1
pi
: REAL := 3.1415
radius
: REAL := 10
flag
: BOOL := TRUE
message : STRING := “Hello"
40
Festo GDCP-CMXR-SW-ES es 1205c
7. Expresiones
7.
Expresiones
Una expresión describe un valor asignado a un tipo de datos determinado. Una expresión
puede contener variables y funciones. Las partes integrantes de una expresión se
conectan con operadores.
valor := SQRT(a) – 2*a*b + SQRT(b)
7.1
Secuencia de ejecución para expresiones
Los operadores de una expresión se procesan en una secuencia determinada:
1. ( )
(Paréntesis)
2. []
(Índice de matriz)
3. NOT
(Negación)
4. * / MOD AND
(Multiplicación, división, módulo, Y lógico)
5. + - OR XOR
(Adición, sustracción, O/EXOR lógicos)
6. < <= = <> >= >
(Operaciones de comparación)
Festo GDCP-CMXR-SW-ES es 1205c
41
8. Control de programa
8.
Control de programa
8.1
Instrucciones
Los programas FTL se componen de una sucesión de instrucciones separadas por retornos
de carro. Instrucciones reconocidas por FTL:
1. Asignación de valor
2. Bifurcaciones:
IF, IF .. GOTO, GOTO .. LABEL, RETURN
3. Bucles:
WHILE, LOOP
4. Ejecución de rutinas:
CALL, llamada a instrucción, RUN, KILL
5. Instrucción de sincronización:
WAIT
8.2
Asignación de valor <:=>
La asignación de valor se compone de un carácter de variable a la izquierda del operador,
el propio operador de asignación := y una expresión a la derecha del operador. El tipo de
datos de la expresión debe poder asignarse al tipo de datos de la variable.
Sintaxis
<variable > := <expresión>
Ejemplos:
i := 1
x := a + b * 2
8.3
Condiciones
Dentro de instrucciones, bifurcaciones o bucles es posible formular condiciones. Éstas
pueden contener operandos booleanos (p. ej., AND, OR) o un operando comparativo
(p. ej., >, <=,=). El enlace de varias comparaciones se estructura mediante los
correspondientes niveles entre paréntesis.
Para los ejemplos siguientes se utilizan las variables indicadas a continuación:
Marker :
BOOL
Flag1
:
BOOL
Flag2
:
BOOL
Flag3
:
BOOL
Index
:
DINT
42
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Ejemplos de condiciones:
Marker := Index < 10
Marker := Flag1 AND Flag2 OR Flag3
IF Index < 10 THEN
:
END_IF
WHILE Index < 5 DO
:
END_WHILE
WHILE NOT Flag1 AND Flag3 OR Flag2 DO
:
END_WHILE
Ejemplos de condiciones con paréntesis:
Marker := (Index < 10) AND (Index < 0)
Marker := Flag1 AND (Index < 7)
IF (Index < 10) AND (Index > 5) THEN
:
END_IF
8.4
Bifurcación <IF…THEN>
La instrucción IF permite realizar bifurcaciones dependientes de condiciones en la
ejecución del programa. La condición debe ser del tipo de datos BOOL y puede estar
compuesta por varios operandos. Con la instrucción ELSIF pueden formularse varias
condiciones. Con la instrucción ELSE es posible definir instrucciones que pueden saltarse
si las condiciones no son pertinentes. La instrucción IF se cierra con la instrucción END_IF.
Festo GDCP-CMXR-SW-ES es 1205c
43
8. Control de programa
Sintaxis
IF <condición> THEN
<instrucciones>
ELSIF <condición> THEN
<instrucciones>
ELSE
<instrucciones>
END_IF
La instrucción ELSEIF puede aparecer varias veces.
Ejemplo:
Un equipo de medición emite dos señales que admiten evaluación de calidad.
partOk
Señal de pieza buena
partBad
Señal de pieza desechable
En el ejemplo de FTL siguiente se introduce una bifurcación al detectar una pieza buena o
una pieza desechable. Si las señales no están definidas, es decir, las dos señales tienen el
estado TRUE o FALSE, se avanza a la posición PosStart.
IF partOk AND NOT partBad THEN
// pieza buena
Lin(pos12)
Lin(pos13)
ELSIF NOT partOk AND partBad THEN // pieza desechable
Lin(pos3)
Lin(pos4)
ELSE
Lin(posStart)
// ninguna señal definida
END_IF
8.5
Instrucciones de salto
En los programas FTL es necesario efectuar saltos con frecuencia. Estos saltos pueden ser
condicionales o incondicionales. Para realizar un salto, se requiere un punto inicial y un
destino.
44
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Condición de salto
:
IF teilOk GOTO lblHome
Lin(pos15)
Lin(pos16)
LABEL lblHome
Lin(pos5)
Lin(pos6)
Destino del salto
:
Nota
El destino del salto debe situarse dentro del programa activo. No
está permitido realizar un salto dentro de un bloque de instrucciones con IF..THEN, WHILE o LOOP. Sin embargo, sí es posible
saltar desde un bloque de instrucciones semejante.
8.5.1
Marca de salto <LABEL>
Una marca de salto debe declararse como destino de un salto. Una marca de salto se
compone de un nombre que puede elegir libremente usuario. La marca de salto es
inequívoca y sólo debe aparecer una vez dentro de un programa. Para que el sistema
detecte una marca de salto, la palabra clave LABEL se coloca delante.
Sintaxis
LABEL <marca de salto>
Con las instrucciones de salto descritas a continuación puede saltarse a la marca de salto.
Nota
Si la programación se efectúa con el CDSA, primero debe definirse
el destino del salto (LABEL). Sólo entonces puede programarse la
instrucción GOTO.
8.5.2
Salto condicional <IF…GOTO>
Con la instrucción IF…GOTO se ejecutan saltos condicionales. Esta instrucción requiere,
como la bifurcación del programa IF…THEN, una condición que debe cumplir el tipo de
datos BOOL.
Festo GDCP-CMXR-SW-ES es 1205c
45
8. Control de programa
Sintaxis
IF <condición> GOTO <marca de salto>
Si la condición se cumple, es decir, si el resultado es TRUE, se ejecuta el salto. Si la condición no se cumple, es decir, si el resultado es FALSE, se ejecutan las instrucciones de las
siguientes líneas de programa.
8.5.3
Salto absoluto <GOTO>
A diferencia de la instrucción de salto condicional IF…GOTO, la instrucción GOTO es absoluta. Ello significa que no hay instrucción condicional.
Sintaxis
GOTO <marca de salto>
Con la instrucción GOTO pueden saltarse partes del programa con gran facilidad. Ésta es
apropiada para saltar desde bucles de programa.
Nota
Si la programación se efectúa con el CDSA, primero debe definirse
el destino del salto (LABEL). Sólo entonces puede programarse la
instrucción GOTO.
8.6
Bucles
Los bucles son instrucciones del programa que repiten una parte definida del mismo de
manera condicional o incondicional. Con ellos es posible abreviar considerablemente los
programas dependiendo de la tarea, p. ej., extracción de piezas de una paleta cuyas
posiciones pueden calcularse partiendo de la disposición conocida.
Atención
La programación de bucles sin fin puede reducir el comportamiento
de operación del control CMXR. Los bucles sin fin deben poseer
instrucciones como Wait o WaitTime para no bloquear el control
CMXR.
8.6.1
Instrucción WHILE <WHILE>
La instrucción WHILE sirve para repetir una secuencia de instrucciones si se cumple una
condición. El resultado de la condición del bucle debe ser del tipo de datos BOOL. El bucle
puede contener un número ilimitado de instrucciones. La instrucción WHILE se cierra con
la palabra clave END_WHILE.
46
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Nota
Si un bucle va a pasar con mucha frecuencia y no contiene instrucciones WAIT, puede entorpecer la ejecución de otros programas
FTL. En un caso así, por lo general el control está configurado para
activar una advertencia y detener brevemente el programa no
cooperativo.
Sintaxis
WHILE <condición> DO
<instrucciones>
END_WHILE
Ejemplo:
WHILE index < 5 DO
Lin(pos1)
Lin(pos2)
Lin(pos3)
index := index + 1
END_WHILE
8.6.2
Instrucción LOOP <LOOP>
La instrucción LOOP sirve para repetir una secuencia de instrucciones. El usuario puede
introducir directamente el número de repeticiones de las instrucciones. Para cada instrucción LOOP se crea automáticamente una variable de bucle interna que se inicializa a 1 al
ejecutar el bucle. El bucle se ejecuta hasta que el valor de las variables de bucle internas
supera el valor final. Si el valor final es inferior a 1, el bucle no se ejecuta sino que se salta.
Después de cada ciclo, el valor de las variables de bucle suma uno y el valor final se
calcula de nuevo.
El bucle puede contener un número ilimitado de instrucciones.
Sintaxis
LOOP <número> DO
<instrucciones>
END_LOOP
Festo GDCP-CMXR-SW-ES es 1205c
47
8. Control de programa
Ejemplos:
LOOP 10 DO
// 10 ciclos
index := index + 13
END_LOOP
j := 0
...
LOOP j DO
// se salta, ya que j = 0
index := index + 13
END_LOOP
:
8.7
Subprogramas
En un programa es posible llamar a otros programas. Estos programas deben encontrarse
en el mismo proyecto que el programa activo o en el proyecto global (_global, véase el
capítulo 3.6.1 Proyecto FTL global en la página 21). Los programas llamados se
denominan subprogramas.
Nota
Un subprograma no requiere ningún identificador especial, se crea
de la misma manera que cualquier otro programa y se guarda en un
proyecto. La diferencia entre programa y subprograma radica en
que este último se activa desde un programa y no directamente
desde el proyecto.
Proceso:
Mientras se procesa el subprograma, el programa que lo ha llamado espera a que acabe.
Al finalizar el subprograma se retorna automáticamente al programa superior, que se
reanuda.
48
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Esquema de secuencias:
Programa principal
Subprograma
Sprungziel
En este ejemplo, el programa “feed” llama al subprograma “movehome”. Si el programa
“movehome” ha finalizado el proceso, el programa “feed” reanuda su operación.
Ventajas:
La creación de programas con subprogramas permite programar de una manera clara y
eficiente. El código de programa para tareas parciales se guarda por separado y puede ser
utilizado por varios programas. Ello mejora el mantenimiento y la coherencia de los
programas.
8.7.1
Llamada de subprograma <CALL>
El subprograma se llama con la instrucción CALL. No es posible transferir parámetros de
programa al subprograma. Si es necesario transferir datos, esto deberá efectuarse a través
de las variables globales. Antes de la llamada, estas variables reciben los valores correspondientes y se procesan dentro del subprograma.
No es posible realizar llamadas recursivas de programas. Por tanto, un programa no se
puede llamar a sí mismo. Además, tampoco es posible llamar al programa que está
llamando.
Sintaxis
CALL <nombre del programa> ( )
Festo GDCP-CMXR-SW-ES es 1205c
49
8. Control de programa
Ejemplo:
:
variant := 17
// Variable para el programa Pegar
directionRight := TRUE
// Variable para el programa Pegar
directionLeft := FALSE
// Variable para el programa Pegar
CALL Glueing()
// Subprograma Pegar
CALL MoveStart()
// Subprograma Moverse hasta la
posición inicial
:
8.7.2
Retorno al programa <RETURN>
En principio, un subprograma termina con la última instrucción. La instrucción RETURN
sirve para terminar un subprograma antes de la última instrucción. Con ella se termina el
subprograma antes de tiempo y se retorna al programa que ha efectuado la llamada para
su reanudación.
Sintaxis
RETURN
No es posible devolver los valores al programa de nivel superior. Si fuera necesario, se
pueden utilizar las variables globales correspondientes.
Nota
Si la instrucción RETURN se ejecuta en el programa principal, éste
se detiene y termina.
Al llamar a RETURN en un programa paralelo o en un subprograma,
éstos terminan. El programa principal se reanuda.
Ejemplo:
:
CALL CheckPart()
// Llamar al subprograma CheckPart
IF NOT partOk THEN
partStatus := 10
// Variable global para el valor de retorno
RETURN
// Adelanto del fin de programa
END_IF
Lin(pos3)
:
50
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
8.8
Programas paralelos
Un programa del proyecto activo o del proyecto global también puede iniciarse como
proceso paralelo. El sistema operativo del CMXR se encarga del proceso en paralelo de
estos programas gracias al sistema interno multitarea.
Nota
Las instrucciones de desplazamiento en una cinemática sólo son
posibles en un programa paralelo si un programa principal no ha
dado una instrucción de desplazamiento. Si la instrucción de
desplazamiento se realiza desde un programa principal o paralelo,
el sistema genera un error.
Aplicación:
Los programas paralelos permiten crear procesos asíncronos o de sincronía parcial con el
programa principal. Un ejemplo es el control de una unidad de alimentación de piezas o de
expulsión controlada con entradas/salidas. En este caso, la secuencia puede describirse
con instrucciones lógicas y el procesamiento de las entradas/salidas. Según el requerimiento, una sincronización con el programa principal puede realizarse mediante variables
globales.
Esquema de secuencias:
Programa principal
Programa paralelo
Sprungziel
En este ejemplo, el programa “feed” llama al programa paralelo “calculate”. El programa
“calculate” espera primero a una señal e incrementa el contador. Mientras tanto, el
programa principal “feed” sigue procesando.
Festo GDCP-CMXR-SW-ES es 1205c
51
8. Control de programa
Nota
Si se programa un bucle sin fin en un programa paralelo, debe
garantizarse que ello no bloquee la ejecución de los otros
programas. El reparto de la capacidad de procesamiento con otros
programas se garantiza con una instrucción Wait o WaitTime.
8.8.1
Ejecución del programa paralelo <RUN>
Un programa paralelo se ejecuta con la instrucción RUN. No es posible transferir
parámetros al programa que se va a ejecutar. Para transferir datos pueden utilizarse las
variables globales.
Sintaxis
RUN <nombre del programa>
Un programa activo no puede ejecutarse simultáneamente como programa paralelo.
8.8.2
Finalización del programa paralelo <KILL>
Un programa paralelo activo puede terminarse con la instrucción “KILL” emitida desde el
programa que lo ha llamado. Primero se detienen el programa y la cinemática, luego el
programa finaliza.
Sintaxis
KILL <nombre del programa>
La instrucción RETURN en programas paralelos también provoca su terminación.
52
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
8.9
Influencia del avance de proceso
Para recorrer los movimientos de forma eficiente y detectar situaciones críticas como, por
ejemplo, la superación de la dinámica máx. de accionamiento, la trayectoria debe
calcularse por adelantado. No obstante, en algunas situaciones es necesario que el cálculo
por adelantado del programa se sincronice con la ejecución. Con esta finalidad, en la
programación FTL se ofrecen diferentes instrucciones que detienen el cálculo por
adelantado y, por consiguiente, generan una parada del movimiento o esperan el
momento óptimo para la ejecución del programa para no influir en la dinámica del
movimiento. En las páginas siguientes se describen estas instrucciones.
8.9.1
WAIT – Instrucción con tiempo <WaitTime>
La instrucción WAIT con indicación de tiempo permite programar un tiempo de espera.
Este tiempo de espera repercute en el comportamiento de movimiento y fuerza la
detención del cálculo por adelantado de proceso, que a su vez para el movimiento. El
tiempo de espera empieza a contar una vez ejecutada la instrucción anterior. Transcurrido
este tiempo se reanuda el programa.
Sintaxis
WaitTime (<timeMS >: DINT)
El tiempo se indica en milisegundos mediante un valor o una variable.
Nota
Para sincronizar el avance de proceso con el proceso principal,
utilice la instrucción WaitTime 0.
Ejemplo:
Un sistema de manipulación equipado con una pinza extrae piezas de una paleta. Para
agarrar las piezas con seguridad debe esperarse un tiempo determinado.
Extracto del programa de movimientos:
:
Lin(pos1)
// Avanzar sobre posición de sujeción
Lin(pos2)
// Avanzar a posición de la pinza
Gripper.Set()
// Cerrar pinza
WaitTime(70)
// Esperar 70 ms de tiempo de sujeción
Lin(pos1)
// Avanzar sobre posición de sujeción
:
Festo GDCP-CMXR-SW-ES es 1205c
53
8. Control de programa
Desarrollo del movimiento:
Velocidad de trayectoria
Tiempo de
espera 70 ms
pos1
8.9.2
pos2
Tiempo
pos1
Instrucción condicional WAIT <WAIT>
La instrucción WAIT condicional permite interrogar estados binarios. Este estado puede
estar compuesto por una única variable booleana, una combinación de interrogaciones o
una sola interrogación.
El procesamiento de la instrucción WAIT se efectúa en el avance de proceso, es decir
cuando el control CMXR calcula por adelantado. Si la condición no se cumple, el avance de
proceso (cálculo por adelantado) se detiene hasta que se cumpla la condición de la
instrucción WAIT.
Proceso
principal
Lin(pos1)
Lin(pos2)
Lin(pos1)
Lin(pos2)
Lin(pos3)
Lin(pos3)
Lin(pos4)
Lin(pos4)
Lin(pos5)
Lin(pos5)
Wait sensor
Lin(pos6)
Avance de
proceso
Proceso
principal
Avance de
proceso
Wait sensor
Lin(pos6)
Lin(pos7)
Lin(pos7)
Lin(pos8)
Lin(pos8)
Lin(pos9)
Lin(pos9)
Condición para WAIT cumplida, se
reanuda el cálculo del avance de
proceso.
Si la condición para WAIT no se cumple,
el avance de proceso se detiene hasta
que se cumple la condición.
Si el retardo temporal es tan grande que incluso la ejecución principal del programa de
movimientos alcanza la instrucción WAIT, ésta también se detiene y provoca la parada del
movimiento. El proceso y el cálculo por adelantado no se reanudarán hasta que cumpla la
condición de la instrucción WAIT.
54
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Nota
Como la interrogación de la condición en el avance de proceso se
realiza con éxito, la modificación efectuada por dicho avance después del procesamiento ya no se registra. Para realizar el registro
puede forzarse una sincronización con el proceso principal
ajustando previamente la instrucción WaitTime (véase el capítulo
8.9.1 WAIT – Instrucción con tiempo en la página 53).
En la condición de la instrucción WAIT pueden utilizarse los tipos de datos básicos BOOL,
REAL y DINT con operadores lógicos y operadores comparativos. No es posible utilizar los
operadores aritméticos ni de bits.
Sintaxis
WAIT <condición>
Ejemplo:
Se van a alimentar piezas en un plano inclinado a un sistema de manipulación. Un sensor
digital detecta la presencia de una pieza y el sistema de manipulación puede recogerla a
continuación.
Z
X
Pos2
Pinza por vacío
Pos3
Pos1
Pos4
Pieza
Sensor
Bandeja
El sensor detecta si hay una pieza sobre la bandeja. Si hay una pieza preparada, el sistema
de manipulación la recoge.
Festo GDCP-CMXR-SW-ES es 1205c
55
8. Control de programa
Extracto del programa de movimientos:
:
Lin(pos2)
// Avanzar sobre pieza
Vacuum.Set()
// Vacío conectado
WAIT sensor
// Esperar a que haya una pieza
Lin(pos1)
// Avanzar hasta pieza
Lin(pos2)
// Avanzar sobre pieza
Lin(pos3)
// Avanzar sobre bandeja
Lin(pos4)
// Posar pieza
WaitTime(0)
// Esperar a proceso principal
Vacuum.Reset()
// Vacío desconectado
Lin(pos3)
// Avanzar sobre bandeja
:
Si no hay ninguna pieza sobre la bandeja, el sistema de manipulación espera a la pieza y el
movimiento se detiene. Cuando el sensor indica “Presencia de pieza", el programa se
reanuda. Si al arrancar ya hay una pieza, el sistema de manipulación avanza
inmediatamente hasta ella sin interrumpir el movimiento.
8.9.3
WaitOnPath – Instrucción con tiempo <WaitOnPath>
La instrucción FTL WaitOnPath genera un tiempo de espera que solamente repercute sobre
el movimiento. Este tiempo de espera se incorpora directamente a la planificación de la
trayectoria y los ejes se frenan con la dinámica programada. Una vez transcurrido ese
tiempo, se continúa con la siguiente trayectoria. El avance de proceso del programa FTL no
se detiene.
Nota
La instrucción WaitOnPath no es apropiada para sincronizar
instrucciones (por ejemplo la conmutación de una salida o la
descripción de una variable) con la ejecución principal del
programa.
Sintaxis
WaitOnPath ( <timeMS> : DINT )
Parámetro
Significado
Unidad
time
Tiempo de espera
ms
Tabla 8.1 Parámetro de la instrucción WaitOnPath
56
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Ejemplo:
Con un troquel se estampa una marca sobre una pieza. Una vez alcanzada la posición de
estampado, para que se transfiera el color debe aguardarse un tiempo de espera de
150 ms. Sin embargo, el avance de proceso no se debe detener.
:
Lin(pos1)
// Avanzar a seguridad
Lin(printPos)
// Avanzar a posición de estampado
WaitOnPath(150)
// Esperar 150 ms
Lin(pos1)
// Avanzar a seguridad
:
Velocidad de trayectoria
Tiempo de
espera 150 ms
pos1
8.9.4
printPos
Tiempo
pos1
WaitOnPos – Instrucción con tiempo <WaitOnPos>
La instrucción FTL WaitOnPos detiene el avance de proceso hasta que se ejecuta el
porcentaje indicado del segmento actual. A continuación, el programa continúa
ejecutándose.
Sintaxis
WaitOnPos ( OPT <pos> : REAL )
Parámetro
Significado
Unidad
Pos
Valor porcentual de longitud del
Porcentaje
segmento de trayectoria
Tabla 8.2 Parámetro de la instrucción WaitOnPos
Si está activado un avance aproximado y la distancia hasta el punto de destino del avance
aproximado es lo bastante grande, el avance se ejecuta. El parámetro de la parte
porcentual es opcional. Si no se especifica, tendrá un valor de 100%. Esto tendrá como
consecuencia una parada en la trayectoria.
Festo GDCP-CMXR-SW-ES es 1205c
57
8. Control de programa
En el siguiente ejemplo se alcanzan posiciones y el avance de proceso se detiene hasta
que se recorre el 80% del segmento de la trayectoria. A continuación, en el ejemplo, la
variable Index adquiere el valor 10.
Lin(Pos1)
Lin(Pos2)
WaitOnPos(80)
Index := 10
Pos1
80%
Pos2
8.9.5
WaitOnMainRun – Esperar a la ejecución principal
<WaitOnMainRun>
La instrucción FTL WaitOnMainRun detiene el avance de proceso hasta que la ejecución
principal lo haya alcanzado. No obstante, esto no afecta a la dinámica de la trayectoria.
Esto significa que no repercute en un avance aproximado a una posición siguiente.
Sintaxis
WaitOnMainRun ( )
Esta instrucción permite una descripción lo más tardía posible o una evaluación de las
señales sin que ello afecte al movimiento. No se alcanza con exactitud una posición previa
programada debido al avance aproximado al segmento siguiente.
Ejemplo:
En la siguiente secuencia de movimientos, poco antes de alcanzarse la posición pos2, se
ejecuta la instrucción WaitOnMainRun y, a continuación, se describe la variable
plc_InBool[3], que va al PLC.
:
Lin(pos1)
// Ir a pos1
Lin(pos2)
// Ir a pos2
WaitOnMainRun()
// Esperar a la ejecución principal
plc_InBool[3] := TRUE
// Señal a PLC
58
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
Lin(pos3)
// Ir a pos3
:
El diagrama siguiente muestra la representación temporal de la ejecución de
WaitOnMainRun:
Velocidad de trayectoria
pos1
pos3
pos2
Ejecución principal
Tiempo
Avance
Ejecución de WaitOnMainRun antes
de alcanzar la posición pos2
8.10
Instrucción DO
Con la instrucción DO se puede forzar la ejecución de determinadas instrucciones FTL
durante la ejecución principal del programa. Esta instrucción tiene la siguiente sintaxis:
Sintaxis
<instrucción FTL> DO <instrucción FTL>
La instrucción FTL tras DO se ejecuta durante la ejecución principal del programa. La
instrucción DO no influye en el cálculo por adelantado del programa.
Tras una instrucción DO se puede utilizar un número limitado de instrucciones FTL. No se
permiten las instrucciones referidas a una cinemática, por ejemplo, una indicación de
dinámica o un recorrido de posicionado.
Nota
La instrucción DO se ejecuta después de que se ha ejecutado, en la
ejecución principal, la instrucción FTL situada antes de ella. La ejecución se realiza incondicionalmente. La línea de programa sólo
debe contener una instrucción DO, detrás de la cual puede haber
exactamente una instrucción FTL.
Festo GDCP-CMXR-SW-ES es 1205c
59
8. Control de programa
Con la instrucción DO se pueden, por ejemplo, describir variables o establecer salidas en
la ejecución principal del programa FTL. La instrucción DO se puede utilizar combinada con
todas las instrucciones de movimiento, por ejemplo Ptp o Lin.
Ejemplo de establecimiento de una salida:
Al alcanzarse la pos2 se establece la salida del módulo “Vacuum” (vacío).
:
Lin(pos1)
Lin(pos2) DO Vacuum.Set()
Lin(pos3)
:
Ejemplo de descripción de variables en el PLC:
:
Lin(pos1)
SetVel(dynCart, 1000)) DO plc_Dint[3] := 5
Lin(pos2)
:
60
Festo GDCP-CMXR-SW-ES es 1205c
8. Control de programa
8.11
Insertar comentarios <//>
Un comentario se abre con la secuencia de caracteres “//”. Ésta puede colocarse sola a
partir del comienzo de línea o después de una instrucción FTL y cerrar al final de línea.
Sintaxis
// <cualquier texto>
Una instrucción FTL puede comentarse con el carácter de comentario. Esta instrucción no
afecta de ningún modo al proceso del programa.
En la figura siguiente se muestra la máscara del programa de la unidad de mando manual
con un comentario y una instrucción del programa con aclaración:
8.12
Desactivar línea de programa <##>
Con la secuencia de caracteres “##” se desactivan las líneas de programa para el proceso
del programa pero se conserva la verificación de la sintaxis.
Nota
## <instrucción de programa>
Ello implica:
Una instrucción FTL no se procesa en el programa, es decir, el contenido no afecta de
ningún modo.
El contenido de la instrucción de programa se somete a la verificación de sintaxis del
compilador. Si, p. ej., se borra una variable utilizada, se emite un error al arrancar el
programa.
Festo GDCP-CMXR-SW-ES es 1205c
61
8. Control de programa
Nota
En el caso de las instrucciones de programa compuestas por varias
líneas, como, p. ej., IF..THEN…ELSE, deben desactivarse todas las
líneas de programa correspondientes.
En la figura siguiente se muestra la máscara del programa de la unidad de mando manual
con instrucciones del programa desactivas entre las líneas 8 y 10:
62
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
9.
Instrucciones de movimiento
Los movimientos de una cinemática se activan con instrucciones de movimiento. Dichas
instrucciones describen el movimiento desde la posición actual al punto de destino
indicado. Para el movimiento se tienen en cuenta valores ajustados previamente como,
p. ej., la velocidad, la aceleración o la orientación.
Existen diferentes tipos de movimientos, como los movimientos con interpolación de ejes
(movimiento punto a punto) y los movimientos en un espacio cartesiano. Los movimientos
cartesianos utilizan una transformación interna de la cinemática.
9.1
Descripción de la posición
Todas las posiciones se guardan en las denominadas variables de posición. Estas
variables de posición son necesarias para indicar las posiciones a las instrucciones de
movimiento. No es posible la indicación directa con constantes. Todas las variables de
posición se guardan en el archivo de datos correspondiente (véase el capítulo 3.8
Archivo de datos FTL en la página 22).
Una posición puede introducirse en el sistema de coordenadas de ejes o en un sistema de
coordenadas cartesianas. Dado que estas indicaciones de posición tienen orígenes
diferentes, existen 2 tipos de datos:
1. AXISPOS para la indicación en el sistema de coordenadas de ejes.
2. CARTPOS para la indicación en el sistema de coordenadas cartesianas.
El número de ejes en CMXR está limitado a seis. Estos ejes pueden distribuirse en ejes
cinemáticos y auxiliares. Las posiciones de todos los ejes se guardan en variables de
posición.
Así, el tipo de datos AXISPOS nueve contiene valores de coordenadas. Con un límite de
seis grados de libertad de movimiento como máximo, el tipo de datos CARTPOS contiene
asimismo nueve valores de coordenadas divididos en tres indicaciones de posición, tres
indicaciones de orientación y tres ejes auxiliares.
El número de valores de coordenadas en el entorno de programación del plugin FCT está
limitado al número de los ejes planificados, el resto está bloqueado.
Nota
Los dos tipos de datos, AXISPOS y CARTPOS, pueden utilizarse
para instrucciones de movimiento. El control CMXR ejecuta
conversiones automáticas si es necesario (transformaciones de
coordenadas). Para más información consulte la descripción de
instrucciones.
Los tipos de datos AXISPOS y CARTPOS son de tipo estructurado (véase el capítulo 5.5
Tipos de datos estructurados en la página 33).
Festo GDCP-CMXR-SW-ES es 1205c
63
9. Instrucciones de movimiento
9.1.1
Posición de eje
Una posición de eje se describe con el tipo de datos estructurados AXISPOS (véase el
capítulo 5.5 Tipos de datos estructurados de la página 33). Este tipo contiene nueve
posiciones de nueve ejes distintos cuyo valor de posición se introduce con el tipo de datos
REAL. En función del modelo cinemático seleccionado, los ejes seleccionados pueden ser
lineales, rotativos o una combinación de los dos. La posición se indica en mm o en grados.
Estructura:
El número máximo de ejes de una cinemática es de nueve. Por tanto, el tipo de datos
contiene nueve posiciones de ejes. Estos valores individuales de posición están guardados
en nueve variables REAL.
Tipo de datos AXISPOS:
a1
: REAL
Posición del eje cinemático 1
a2
: REAL
Posición del eje cinemático 2
a3
: REAL
Posición del eje cinemático 3
a4
: REAL
Posición del eje cinemático 4
a5
: REAL
Posición del eje cinemático 5
a6
: REAL
Posición del eje cinemático 6
a7
: REAL
Posición del eje auxiliar 1
a8
: REAL
Posición del eje auxiliar 2
a9
: REAL
Posición del eje auxiliar 3
El tipo de datos AXISPOS describe el alcance máximo posible de una posición de eje. Si no
hay ejes, la indicación de la posición de estos ejes es irrelevante. Por lo general, el valor de
posición indicado para estos ejes es 0. En el editor FCT se bloquean los campos de estos
ejes.
El nombre de cada posición permite acceder a cada uno de los valores de posición del tipo
AXISPOS.
Ejemplo:
Variable:
startPos : AXISPOS := (100, 50, 30, 0, 0, 0, 0, 0, 0)
posA1
: REAL
posA2
: REAL
Programa:
:
Lin(startPos)
// Avanzar a startPos
posA1 := startPos.a1
// Guardar en otra ubicación el valor
de eje 1
posA2 := startPos.a2
// Guardar en otra ubicación el valor
de eje 2
:
64
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
La asignación de ejes individuales a la estructura de datos de posición AXISPOS se efectúa
mediante una numeración. Esta numeración ya se ha realizado en la configuración de los
ejes cinemáticos. De manera análoga a esta numeración se asignan las indicaciones de
posición del tipo de datos AXISPOS a cada uno de los ejes.
Ejemplo:
Pórtico cartesiano con tres ejes lineales y un eje de rotación (giro de la pinza). En la
configuración se realizaron los ajustes siguientes:
Eje 1
=
Eje X
Eje 2
=
Eje Y
Eje 3
=
Eje Z
Eje 4
=
Eje de rotación de la pinza
Los ejes 5 y 6 no existen, no hay ejes auxiliares.
La asignación en el tipo de datos AXISPOS se realiza de manera análoga a esta numeración:
a1
: REAL
Posición eje 1 = Eje X
a2
: REAL
Posición eje 2 = Eje Y
a3
: REAL
Posición eje 3 = Eje Z
a4
: REAL
Posición eje 4 = Eje de rotación de pinza
a5
: REAL
Posición eje 5, no existe
a6
: REAL
Posición eje 6, no existe
a7
: REAL
Posición eje auxiliar 1, no existe
a8
: REAL
Posición eje auxiliar 2, no existe
a9
: REAL
Posición eje auxiliar 3, no existe
Festo GDCP-CMXR-SW-ES es 1205c
65
9. Instrucciones de movimiento
9.1.2
Posición cartesiana
A diferencia de la posición de eje del tipo de datos AXISPOS, el tipo de posición cartesiano
CARTPOS describe una posición en un sistema de coordenadas cartesiano.
Un cuerpo posee un máximo de seis grados de libertad de movimiento. Con ayuda de
estos valores puede definirse la posición y la orientación del cuerpo en el espacio. Estos
seis grados de libertad de movimiento se describen con seis indicaciones en el tipo de
datos CARTPOS. Además, se indica la posición de los tres ejes auxiliares, aunque dicha
indicación es una posición de ejes, ya que con los ejes auxiliares no pueden realizarse
desplazamientos cartesianos. Los ejes auxiliares se interpolan junto con los ejes
cinemáticos en la posición de destino, pero los primeros ejecutan una interpolación punto
a punto (Ptp).
Estructura:
Tipo de datos CARTPOS
x
: REAL
Desplazamiento a lo largo del eje X
y
: REAL
Desplazamiento a lo largo del eje Y
z
: REAL
Desplazamiento a lo largo del eje Z
a
: REAL
Indicación de orientación, rotación alrededor del eje Z
b
: REAL
Indicación de orientación, rotación alrededor del eje Y rotado
c
: REAL
Indicación de orientación, rotación alrededor del eje Z rotado
aux1
: REAL
Posición del eje auxiliar 1
aux2
: REAL
Posición del eje auxiliar 2
aux3
: REAL
Posición del eje auxiliar 3
No es posible realizar algunas indicaciones en una posición cartesiana debido a la
cinemática seleccionada o a su grado de libertad de movimiento. Las indicaciones de
posición individuales en el tipo de datos CARTPOS no están unidas a los ejes físicos de la
cinemática, sino a su grado de libertad de movimiento.
La posición cartesiana contiene las indicaciones para un máximo de seis grados de
libertad de movimiento. X, Y, Z son las posiciones de traslación, A, B y C describen la
orientación de la posición. La orientación se indica, como en todo el sistema, conforme al
método de Euler ZYZ.
Un tipo de datos CARTPOS está estructurado como el tipo de datos AXISPOS (véase el
capítulo 5.5 Tipos de datos estructurados de la página 33). El nombre de cada uno de
los valores del tipo de datos permite acceder a los valores de posición individuales.
Ejemplo:
Variable:
startPos : CARTPOS := (1050, 130, 30, 0, 0, 0, 0, 0, 0)
newPos
: CARTPOS := (0, 0, 0, 0, 0, 0, 0, 0, 0)
posX
: REAL
posY
: REAL
66
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Programa:
:
Lin(startPos)
// Avanzar a StartPos
newPos
// Copiar StartPos
:= startPos
newPos.x := newPos.x + 10
// Calcular X
newPos.x := newPos.x + 35.7
// Calcular Y
Lin(newPos)
// Avanzar a posición calculada
:
El efecto de las indicaciones de posición y orientación cartesianas depende de los grados
de libertad de movimiento de la cinemática.
Ejemplo:
Tenemos un manipulador de cinemática paralela (trípode) con tres ejes principales, sin
ejes manuales. Con los tres ejes principales se cubren los tres grados de libertad de
movimiento de traslación X, Y y Z. Como no hay ejes manuales, no es posible orientar la
herramienta. La programación de las variables a, b, c, aux1, aux2 o aux3 en la indicación
de posición del tipo de datos CARTPOS no tiene efecto alguno.
Festo GDCP-CMXR-SW-ES es 1205c
67
9. Instrucciones de movimiento
9.1.3
Programación tipo teach-in de variable de posición
Las diferentes variables de posición del tipo AXISPOS y CARTPOS se pueden programar
por teach-in con la ayuda de la unidad de mando manual o del software de emulación en el
monitor de variables.
Para programar por teach-in una variable de posición es necesario que el control multieje
CMXR esté situado en el modo de funcionamiento MANUAL y que la variable a programar
por teach-in esté marcada.
1.
Hacer clic en la variable
y se mostrará de color azul
2. Se activa la tecla de pantalla de programación
tipo teach-in
se guarda la posición actual en la variable indicada. En
Pulsando la tecla de pantalla
el caso de una variable del tipo CARTPOS, se guarda el valor cartesiano, mientras que en
una variable del tipo AXISPOS se guarda la posición del eje. La programación tipo teach-in
se realiza siempre en una variable de posición.
Nota
En la programación tipo teach-in de una posición cartesiana del
tipo CARTPOS, el valor siempre se programa por teach-in en el
sistema de referencia actualmente seleccionado. Éste se muestra
en el cuadro de selección en la página de posición. En la
programación tipo teach-in de una posición de eje del tipo
AXISPOS, el sistema de referencia seleccionado carece de
importancia.
9.2
Movimiento punto a punto <Ptp>
El movimiento punto a punto (PTP) es la opción más rápida para desplazar el extremo de
herramienta (TCP) a la posición deseada. El movimiento PTP es una instrucción de
desplazamiento síncrono punto a punto con posición de destino. Con esta instrucción se
arrancan simultáneamente todos los ejes y llegan a la posición de destino programada al
mismo tiempo. Para el movimiento se utilizan los valores dinámicos activos en ese
momento, p. ej., la velocidad y la aceleración. La dinámica efectiva se obtiene de la
combinación de las dinámicas de todos los ejes participantes. El eje más lento determina
la dinámica. El movimiento del TCP se obtiene en este caso de la combinación del
movimiento de ejes individuales. El movimiento en el TCP no está definido.
68
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Atención

Como el movimiento PTP no está restringido a una trayectoria,
sino que los ejes sólo se interpolan al destino, pueden producirse aceleraciones o velocidades inesperadas en la herramienta (TCP). Por tanto, los movimientos deben comprobarse
por si se producen pérdidas o daños en las piezas y/o en la
herramienta.

Debido a la interpolación axial, durante un movimiento PTP no
puede tenerse en cuenta ningún dato de herramienta. Por ello
es importante prestar siempre atención a las herramientas para
protegerlas contra daños.

Para minimizar el peligro de colisión, todos los movimientos
PTP deberían probarse con una velocidad reducida. Para ello se
puede utilizar p. ej. el override.
Sintaxis
Ptp ( <Pos> : AXISPOS o CARTPOS)
Parámetro
Significado
Unidad
Pos
Posición de destino
AXISPOS o CARTPOS
Tabla 9.1 Parámetro de la instrucción PTP
La indicación de posición puede ser cartesiana o en el sistema de coordenadas de ejes (en
relación con cada eje). El control multieje CMXR transforma las posiciones como
corresponde.
Ejemplo:
Debe posicionarse un pórtico cartesiano con tres ejes X, Y, Z y un eje de rotación con
pinza.
1 Eje Y
2 Eje Z
3 Eje de rotación
con pinza
1
2
4 Eje X
3
4
Festo GDCP-CMXR-SW-ES es 1205c
69
9. Instrucciones de movimiento
Variable:
pos1 : CARTPOS := (100, 50, 100, 0, 0, 0, 0, 0, 0)
pos2 : CARTPOS := (600, 550, 100, 180, 0, 0, 0, 0, 0)
Programa:
:
Ptp(pos1)
Ptp(pos2)
:
Y
Eje de rotación 180 grados
Eje de rotación 90 grados
Trayectoria en el eje Z
Eje de
rotación
0 grados
Trayectoria aproximada en el TCP
X
En el ejemplo se muestra la trayectoria del eje Z y del extremo de herramienta (TCP).
Debido a la colocación vertical de la cinemática cartesiana, la trayectoria en el eje Z es una
recta. Como la herramienta posee una asimetría con el eje Z, esta trayectoria se comporta
de un modo inesperado ya que, con la interpolación síncrona, todos los ejes se desplazan
juntos a su punto de destino sin tener en cuenta la trayectoria descrita.
70
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
9.2.1
Programación tipo teach-in del movimiento Ptp
La instrucción FTL Ptp posee la posición de destino como parámetro, que se puede
programar por teach-in con la ayuda de la unidad de mando manual o del software de
emulación.
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la instrucción o mediante la tecla de pantalla Modificar. Al marcar la
línea Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Hacer clic en el campo de
parámetros y se mostrará
de color azul
2. Se activa la tecla de pantalla de
programación tipo teach-in
se guarda la posición actual en la variable indicada. La
Pulsando la tecla de pantalla
programación tipo teach-in se realiza siempre en una variable de posición.
Nota
En la programación tipo teach-in de una posición cartesiana del
tipo CARTPOS, el valor siempre se programa por teach-in en el
sistema de referencia actualmente seleccionado. Éste se muestra
en el cuadro de selección en la página de posición. En la
programación tipo teach-in de una posición de eje del tipo
AXISPOS, el sistema de referencia seleccionado carece de
importancia.
9.3 Movimiento punto a punto relativo <PtpRel>
La instrucción PTP funciona de manera análoga a la instrucción PTP relativa, con la
diferencia de que la posición indicada es relativa a la posición inicial. La indicación de
posición se suma a la posición inicial.
Una aplicación posible es, p. ej., el posicionamiento relativo dentro de una retícula, como
con una paleta.
Sintaxis
PtpRel ( <Dist> : AXISDIST o CARTDIST)
Parámetro
Significado
Unidad
Dist
Distancia relativa que debe recorrerse
AXISDIST o CARTDIST
Tabla 9.2 Parámetro de la instrucción PtpRel
Festo GDCP-CMXR-SW-ES es 1205c
71
9. Instrucciones de movimiento
La indicación de distancia puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
Ejemplo:
En una aplicación de manipulación, la pieza se desplaza a cuatro posiciones, cada una a
una unidad de medición.
Eje Z
pos1
300
pos3
pos2
225
150
1
2
110
3
4
Eje X
100
207
850
Variable:
:
pos1
: CARTPOS := (100, 0, 300, 0, 0, 0, 0, 0, 0)
pos2
: CARTPOS := (207, 0, 225, 0, 0, 0, 0, 0, 0)
pos3
: CARTPOS := (850, 0, 300, 0, 0, 0, 0, 0, 0)
distX
: CARTDIST := (110, 0, 0, 0, 0, 0, 0, 0, 0)
distZpos : CARTDIST := (0, 0, 150, 0, 0, 0, 0, 0, 0)
distZneg : CARTDIST := (0, 0, -150, 0, 0, 0, 0, 0, 0)
:
Programa:
:
Ptp(pos1)
Ptp(pos2)
LOOP 3 DO
PtpRel(distZneg)
CALL Check()
72
// Llamada de ciclo de comprobación
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
PtpRel(distZpos)
PtpRel(distX)
END_LOOP
PtpRel(distZneg)
CALL Check()
// Llamada de ciclo de comprobación
PtpRel(distZpos)
PtpRel(distX)
Ptp(pos3)
:
El ciclo de medición de la pieza, así como su evaluación, se procesan en el subprograma
“verificar”. El contenido del subprograma no se representa para una mayor simplificación.
Atención
¡Riesgo de colisión!
Si durante el movimiento relativo se detiene e inicia de nuevo el
movimiento, se recorre en su totalidad la distancia de movimiento
programada.
9.4 Movimiento de un eje, <MoveAxisPtp>,
<MoveAxisCart>
Con las instrucciones MoveAxisPtp y MoveAxisCart se posiciona un eje de la cinemática
con un movimiento PTP o un movimiento cartesiano. Se indica la posición de destino
absoluta del eje.
Sintaxis
MoveAxisPtp ( <Axis> : AXIS, <Pos> : REAL)
MoveAxisCart ( <CartComp> : CARTCOMP, <Pos> : REAL)
Parámetros
Significado
Unidad
Axis
Eje físico seleccionado que
Enumeración con los valores A1
debe desplazarse
a A9 para los ejes 1 a 9
Posición de destino absoluta
Unidad de los ejes definidos
Pos
Tabla 9.3 Parámetros de la instrucción MoveAxisPtp
Festo GDCP-CMXR-SW-ES es 1205c
73
9. Instrucciones de movimiento
Parámetros
Significado
CartComp
Eje cartesiano seleccionado que Enumeración con los
Pos
Unidad
debe desplazarse
valores X Y Z ; A B C
Posición de destino cartesiana
Unidad de los ejes definidos
absoluta
Tabla 9.4 Parámetros de la instrucción MoveAxisCart
Como aquí se trata de un eje individual, el movimiento se efectúa teniendo en cuenta
posibles limitaciones, p. ej., override, con dinámica máxima de ejes.
Ejemplo:
Una cinemática cartesiana se compone de cuatro ejes:
 Eje 1 = Eje X.
 Eje 2 = Eje Y.
 Eje 3 = Eje Z.
 Eje 4 = Eje de rotación de la herramienta.
En el ejemplo debe recogerse una pieza en una posición y posarse en otra. Para ello, el eje
de rotación debe estar posicionado como corresponde.
Eje Z
pos1
pos2
250
145
50
Recogida arriba
Posado arriba
Recogida abajo
Posado abajo
Eje X
300
350
450
575
Variable:
:
pos1
: CARTPOS := (300, 0, 250, 0, 0, 0, 0, 0, 0)
takeAbove : CARTPOS := (350, 0, 145, 0, 0, 0, 0, 0, 0)
pos2
: CARTPOS := (575, 0, 250, 0, 0, 0, 0, 0, 0)
takePos
: REAL
:= 96.5
:
74
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Programa con movimientos PTP:
:
Ptp(pos1)
// Arrancar
Ptp(takeAbove)
// Recogida arriba
MoveAxisPtp(A4, takePos) // Girar pinza
MoveAxisPtp(A3, 50)
// Hacia abajo
Gripper.Set()
// Cerrar pinza
MoveAxisPtp(A3, 145)
// Hacia arriba
MoveAxisPtp(A1, 450)
// Posado arriba
MoveAxisPtp(A4, 180)
// Girar sobre bandeja
MoveAxisPtp(A3, 50)
// Posado abajo
Gripper.Reset()
// Abrir pinza
MoveAxisPtp(A3, 145)
// Posado arriba
Ptp(pos2)
// Arrancar
:
9.4.1
Programación tipo teach-in de la posición con
MoveAxisPtp y MoveAxisCart
La posición de la instrucción MoveAxisPtp y MoveAxisCart se puede programar por teachin con la ayuda de la unidad de mando manual o del software de emulación.
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la instrucción o mediante la tecla de pantalla Modificar. Al marcar la
línea Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Hacer clic en el campo
de parámetros y se
mostrará de color azul
2. Se activa la tecla de
pantalla de programación
tipo teach-in
Antes de cada programación tipo teach-in, se debe seleccionar el eje deseado del
parámetro CartComp (instrucción MoveAxisCart) o el eje (instrucción MoveAxisPtp). En
base a esta selección se determina la posición mediante la programación tipo teach-in y se
escribe en el parámetro Pos. Si se ha asignado una variable REAL al parámetro Pos, se
escribe el valor en esta variable.
Festo GDCP-CMXR-SW-ES es 1205c
75
9. Instrucciones de movimiento
Cuadro de selección de los diferentes ejes con
Cuadro de selección de los ejes cartesianos
la macro MoveAxisPtp. Sólo se muestran
con la macro MoveAxisCart
aquellos ejes que están disponibles
en la configuración
Nota
En la programación tipo teach-in de la posición cartesiana de la
instrucción MoveAxisCart, el valor siempre se programa por teachin en el sistema de referencia actualmente seleccionado. Éste se
muestra en el cuadro de selección en la página de posición. En la
programación por teach-in de la posición de eje de la instrucción
MoveAxisPtp, el sistema de referencia seleccionado carece de
importancia.
76
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
9.5 Movimiento lineal <Lin>
Con un movimiento lineal, el control multieje CMXR calcula una recta que lleva de la
posición actual (posición inicial) a la posición programada (posición de destino). Este
movimiento se calcula y ejecuta teniendo en cuenta los valores de trayectoria ajustados,
como, p. ej., la aceleración y la velocidad de trayectoria, la orientación y los datos de
herramienta. Si en la indicación de posición de destino se indica una modificación de la
orientación, el desplazamiento por esta trayectoria es continuo desde la orientación del
punto inicial hasta la orientación final.
El movimiento lineal es un movimiento cartesiano, es decir, éste se calcula con ayuda de la
función interna de transformación de coordenadas para la cinemática existente. La
posición se programa siempre en el extremo de la herramienta (TCP). Del mismo modo,
todos los valores dinámicos, como la aceleración y la velocidad de trayectoria, se alcanzan
directamente en el TCP. La ventaja radica en que los valores dinámicos en la herramienta
son limitados y conocidos. Por tanto, en la pinza actúan fuerzas repetibles.
Sintaxis
Lin ( <Pos> : AXISPOS o CARTPOS)
Parámetro
Significado
Unidad
Pos
Posición de destino
AXISPOS o CARTPOS
absoluta
Tabla 9.5 Parámetro de la instrucción Lin
La indicación de posición puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
Ejemplo:
Debe posicionarse un pórtico cartesiano con tres ejes X, Y, Z y un eje de rotación en la
pinza. El extremo de herramienta (TCP) está definido con un vector en el punto central de
la pinza (véase el capítulo 14 Herramientas en la página 128).
Eje Y
Eje Z
Eje X
Eje de rotación con pinza
Vector en el TCP
Festo GDCP-CMXR-SW-ES es 1205c
77
9. Instrucciones de movimiento
Variable:
:
pos1
: CARTPOS := (100, 50, 100, 0, 0, 0, 0, 0, 0)
pos2
: CARTPOS := (600, 550, 100, 180, 0, 0, 0, 0, 0)
gripper : TCPTOOL := (-100, 0, 97, 0, 0, 0,)
:
Programa:
:
Tool(gripper)
Lin(pos1)
Lin(pos2)
:
Y
Eje de rotación 180 grados
Eje de rotación 90 grados
Trayectoria
en el TCP
Eje de
rotación
0 grados
Trayectoria aproximada
en el eje Z
X
Como se muestra en la figura, el TCP (extremo de herramienta) describe la trayectoria con
un movimiento lineal. Todas las indicaciones de velocidad se refieren siempre al TCP,
definiéndose así la trayectoria. Sin embargo, no está previsto que la brida de herramienta
discurra por la trayectoria en el plano X-Y. Esta trayectoria se obtiene de la combinación de
la cinemática y del vector del TCP, y se calcula mediante la transformación interna de
coordenadas.
78
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
9.5.1
Programación tipo teach-in del movimiento Lin
La instrucción Lin posee la posición de destino como parámetro, que se puede programar
por teach-in con la ayuda de la unidad de mando manual o del software de emulación.
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la instrucción o mediante la tecla de pantalla Modificar. Al marcar la
línea Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Hacer clic en el campo de
parámetros y se mostrará
de color azul
2.
Se activa la tecla de pantalla
de programación tipo teach-in
se guarda la posición actual en la variable indicada. La
Pulsando la tecla de pantalla
programación tipo teach-in se realiza siempre en una variable de posición.
Nota
En la programación tipo teach-in de una posición cartesiana del
tipo CARTPOS, el valor siempre se programa por teach-in en el
sistema de referencia actualmente seleccionado. Éste se muestra
en el cuadro de selección en la página de posición. En la
programación tipo teach-in de una posición de eje del tipo
AXISPOS, el sistema de referencia seleccionado carece de
importancia.
9.6
Movimiento lineal relativo <LinRel>
La instrucción Lin relativa funciona de manera análoga a la instrucción Lin. La indicación de
posición se suma a la posición inicial.
Una aplicación posible es, p. ej., el posicionamiento relativo dentro de una retícula, como
con una paleta.
Sintaxis
LinRel (<Dist> : AXISDIST o CARTDIST)
Parámetro
Significado
Unidad
Dist
Posición de destino relativa
AXISDIST o CARTDIST
Tabla 9.6 Parámetro de la instrucción LinRel
Festo GDCP-CMXR-SW-ES es 1205c
79
9. Instrucciones de movimiento
La indicación de distancia puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
Ejemplo:
Un contorno contiene tramos repetibles. Estos tramos pueden describirse de manera
relativa. Este tipo de aplicación se resuelve con comodidad utilizando una programación
de bucles.
Eje Y
57
pos1
112
pos3
100
pos2
45
Eje X
98.5
387
1050
Variable:
:
pos1
: CARTPOS := (98,5, 100, 0, 0, 0, 0, 0, 0, 0)
pos2
: CARTPOS := (387, 100, 0, 0, 0, 0, 0, 0, 0)
distX
: CARTDIST := (57, 0, 0, 0, 0, 0, 0, 0, 0)
distYpos
: CARTDIST := (0, 112, 0, 0, 0, 0, 0, 0, 0)
distYneg
: CARTDIST := (0, -112, 0, 0, 0, 0, 0, 0, 0)
pos3
: CARTPOS := (1050, 45, 0, 0, 0, 0, 0, 0, 0)
direction : BOOL
:
Programa:
:
Lin(pos1)
Lin(pos2)
direction := TRUE
LOOP 5 DO
IF direction = TRUE THEN
LinRel(distYpos)
80
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
ELSE
LinRel(distYneg)
END_IF
LinRel(distX)
direction := NOT direction
END_LOOP
LinRel(distYneg)
Lin(pos3)
:
Con la variable “direction” se define el sentido del movimiento relativo del eje Y. De este
modo puede programarse el movimiento con un bucle.
Atención
¡Riesgo de colisión!
Si durante el movimiento relativo se detiene e inicia de nuevo el
movimiento, se recorre en su totalidad la distancia de movimiento
programada.
9.7
Movimiento circular con punto de apoyo
La interpolación circular se diferencia de la interpolación lineal no sólo por la forma
geométrica, sino también porque, además de los puntos inicial y final, debe indicarse un
punto de apoyo para definir el círculo de manera inequívoca.
9.7.1
Funcionamiento
El círculo se define a partir de un punto de apoyo, que debe encontrarse dentro de la
trayectoria circular, y del punto final de la trayectoria circular. En la trayectoria circular se
avanza primero hasta el punto de apoyo y después al punto final. El radio de la trayectoria
circular se obtiene a partir de un cálculo interno con punto inicial, punto de apoyo y punto
final de la trayectoria circular.
Festo GDCP-CMXR-SW-ES es 1205c
81
9. Instrucciones de movimiento
En la figura siguiente se muestra un movimiento circular utilizando un punto de apoyo:
Punto de apoyo
Punto final
Punto de apoyo
Punto inicial
Punto inicial
Punto final
El círculo se mueve de manera que el TCP se desplaza desde el punto inicial pasando por
el punto de apoyo hasta el punto final. El punto de apoyo se encuentra siempre, por
definición, entre los puntos inicial y final.
Limitaciones:
Se recibe un mensaje de error si por lo menos dos posiciones que definen el círculo tienen
la misma posición, o si todos los puntos se encuentran sobre una recta. En estos casos no
es posible calcular la trayectoria circular matemáticamente.
Con este método no se puede describir un círculo completo (360°). Para describir un
círculo completo deben unirse dos semicírculos.
La orientación del punto de apoyo no se tiene en cuenta para interpolar el arco. La
interpolación se efectúa exclusivamente entre los puntos inicial y final. Si es necesario
cambiar orientaciones dentro de un arco, es posible segmentar el arco en varias partes
para ajustar las orientaciones en los puntos inicial y final.
9.7.2
Definición de planos
La trayectoria circular se efectúa en un plano definido a partir de los tres puntos: punto
inicial, punto de apoyo y punto final. Con esta definición se extiende el plano en el espacio
donde se va a describir la trayectoria circular.
82
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Plano formado por tres puntos
Punto de
apoyo
Punto inicial
Punto final
En la figura se muestra una trayectoria circular con sus tres puntos de apoyo, que definen
un plano en el espacio donde se encuentra la trayectoria circular.
Nota
La trayectoria circular siempre está en un plano. No es posible
realizar una interpolación helicoidal con una interpolación
adicional perpendicular al plano.
Festo GDCP-CMXR-SW-ES es 1205c
83
9. Instrucciones de movimiento
9.7.3
Instrucción circular con punto de apoyo <CircIp>
La instrucción circular con punto de apoyo tiene la sintaxis de programa siguiente:
Sintaxis
CircIp
( <IpPos> : AXISPOS o CARTPOS,
<Pos> : AXISPOS o CARTPOS)
Parámetros
Significado
Unidad
IpPos
Punto de apoyo en el círculo
AXISPOS o CARTPOS
Pos
Posición final del arco
AXISPOS o CARTPOS
Tabla 9.7 Parámetros de la instrucción CircIp
La indicación de posiciones puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
Advertencia
La instrucción círculo requiere la indicación del punto de apoyo y el
final. El punto inicial se corresponde con el punto final del
movimiento anterior. Si este punto se desplaza, la trayectoria
circular sufre una modificación. Ésta puede ser incontrolada y
provocar una colisión. La modificación del punto inicial no genera
necesariamente un mensaje de error, ya que el resultado del
cálculo es correcto.
84
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Ejemplo:
Se debe recorrer el contorno siguiente con una cinemática:
Eje Y
Posición pos1
500
Punto de apoyo IpPos
400
300
Punto final EndPos
Posición pos2
Eje X
455
950 1050
El eje Z permanece en la coordenada 0. La aproximación al punto inicial del arco se efectúa
mediante una instrucción de desplazamiento aparte, p. ej. Ptp o Lin.
Variables:
:
pos1
: CARTPOS := (950, 500, 0, 0, 0, 0, 0, 0, 0)
pos2
: CARTPOS := (455, 300, 0, 0, 0, 0, 0, 0, 0)
IpPos
: CARTPOS := (1050, 400, 0, 0, 0, 0, 0, 0, 0)
EndPos : CARTPOS := (950, 300, 0, 0, 0, 0, 0, 0, 0)
:
Programa:
:
Lin(pos1)
// Aproximar a punto inicial
CircIp(IpPos, EndPos)
// Movimiento circular en punto
final
Lin(pos2)
// Retirada
:
Festo GDCP-CMXR-SW-ES es 1205c
85
9. Instrucciones de movimiento
9.7.4
Instrucción circular con punto de apoyo,
aproximación PTP <PtpToCircIp>
A diferencia de la instrucción circular CircIp, esta instrucción tiene el punto inicial del arco
en la lista de parámetros. Ello tiene la ventaja de que el arco se describe de manera
coherente. La aproximación al punto inicial del arco se efectúa con una instrucción PTP.
Por lo demás, el comportamiento es igual que el de la instrucción CircIp.
Como la aproximación al punto inicial es un movimiento PTP y la interpolación circular es
un movimiento cartesiano, no es posible ni un avance aproximado geométrico ni una
velocidad de trayectoria constante. El avance aproximado se efectúa en función de las
posibilidades que ofrece un movimiento PTP.
Sintaxis
PtpToCircIp ( <StartPos> : AXISPOS o CARTPOS,
<IpPos> : AXISPOS o CARTPOS,
<Pos> : AXISPOS o CARTPOS)
Parámetros
Significado
Unidad
StartPos
Punto inicial del arco
AXISPOS o CARTPOS
IpPos
Punto de apoyo del arco
AXISPOS o CARTPOS
Pos
Punto final del arco
AXISPOS o CARTPOS
Tabla 9.8 Parámetros de la instrucción PtpToCircIp
La indicación de posiciones puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
86
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Ejemplo:
Se debe recorrer el contorno siguiente con una cinemática:
Eje Y
Startposition StartPos
500
Punto de apoyo IpPos
400
300
Punto final EndPos
Posición pos1
Eje X
455
950 1050
El movimiento tiene lugar en el plano XY, el valor del eje Z es 0. La aproximación al punto
inicial del arco se realiza con un movimiento PTP (punto a punto). El punto inicial se
transmite con la instrucción PtpToCircIp.
Variables:
:
StartPos : CARTPOS := (950, 500, 0, 0, 0, 0, 0, 0, 0)
IpPos
: CARTPOS := (1050, 400, 0, 0, 0, 0, 0, 0, 0)
EndPos
: CARTPOS := (950, 300, 0, 0, 0, 0, 0, 0, 0)
Pos1
: CARTPOS := (455, 300, 0, 0, 0, 0, 0, 0, 0)
:
Programa:
:
// Aproximación PTP, movimiento circular cartesiano
PtpToCircIp(StartPos, IpPos, EndPos)
Lin(Pos1)
// Retirada
:
Festo GDCP-CMXR-SW-ES es 1205c
87
9. Instrucciones de movimiento
9.7.5
Instrucción circular con punto de apoyo, avance lineal
<LinToCircIp>
Como la instrucción PtpToCircIp, la instrucción LinToCircIp contiene el punto inicial de la
trayectoria circular. El recorrido de la trayectoria circular sólo puede ser cartesiano. Ello
significa que el movimiento en el punto inicial y la trayectoria circular en caso de avance
aproximado puede ser geométrico. También es posible una velocidad de trayectoria
constante.
Sintaxis
LinToCircIp (<StartPos> : AXISPOS o CARTPOS,
<IpPos> : AXISPOS o CARTPOS,
<Pos> : AXISPOS o CARTPOS)
Parámetros
Significado
Unidad
StartPos
Punto inicial del arco
AXISPOS o CARTPOS
IpPos
Punto de apoyo del arco
AXISPOS o CARTPOS
Pos
Punto final del arco
AXISPOS o CARTPOS
Tabla 9.9 Parámetros de la instrucción LinToCircIP
La indicación de posiciones puede ser cartesiana o relativa a cada eje. El control multieje
CMXR transforma las posiciones como corresponde.
Ejemplo:
Se debe recorrer el contorno siguiente con una cinemática:
Eje Y
Posición inicial StartPos
500
Punto de apoyo IpPos
400
300
Punto final EndPos
Posición Pos1
Eje X
455
950 1050
El movimiento tiene lugar en el plano XY, el valor del eje Z es 0. La aproximación al punto
inicial del arco se realiza con un movimiento lineal. El punto inicial se transmite con la
instrucción LinToCirc.
88
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
Variables:
:
StartPos : CARTPOS := (950, 500, 0, 0, 0, 0, 0, 0, 0)
IpPos
: CARTPOS := (1050, 400, 0, 0, 0, 0, 0, 0, 0)
EndPos
: CARTPOS := (950, 300, 0, 0, 0, 0, 0, 0, 0)
Pos1
: CARTPOS := (455, 300, 0, 0, 0, 0, 0, 0, 0)
:
Programa:
:
// Aproximación lineal, movimiento circular cartesiano
LinToCircIp(StartPos, IpPos, EndPos)
Lin(Pos1)
// Retirada
:
9.7.6
Programación tipo teach-in de las instrucciones circulares
Las instrucciones circulares incluyen según el tipo 2 o bien 3 parámetros. Dichos parámetros se pueden programar por teach-in con la ayuda de la unidad de mando manual o
del software de emulación.
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la instrucción o mediante la tecla de pantalla Modificar. Al marcar la
línea Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Hacer clic en el campo de
parámetros y se mostrará
de color azul
2.
Se activa la tecla de pantalla
de programación tipo teach-in
Pulsando la tecla de pantalla
se guarda la posición actual en la variable indicada. La
programación tipo teach-in se realiza siempre en una variable de posición. Para la
programación tipo teach-in de otras posiciones, debe hacerse clic en la posición
correspondiente para marcarla.
Festo GDCP-CMXR-SW-ES es 1205c
89
9. Instrucciones de movimiento
Nota
En la programación tipo teach-in de una posición cartesiana del
tipo CARTPOS, el valor siempre se programa por teach-in en el
sistema de referencia actualmente seleccionado. Éste se muestra
en el cuadro de selección en la página de posición. En la
programación tipo teach-in de una posición de eje del tipo
AXISPOS, el sistema de referencia seleccionado carece de
importancia.
9.8
Detención del movimiento <StopMove>
Con la instrucción StopMove se detiene la cinemática y se descartan todos los datos de
trayectoria ya calculados. La instrucción influye en el avance de proceso.
La cinemática se detiene con la máxima rampa de frenado definida para detener la
cinemática. La reducción de la dinámica por un override no afecta a la detención.
Sintaxis
StopMove()
Una aplicación de esta parada es, p. ej., el desplazamiento hasta un obstáculo detectado
por un sensor. Una vez detectado el estado, la instrucción StopMove detiene el
movimiento. En el capítulo 25.1
Detención de movimientos de la página 244 se da un
ejemplo de utilización de la instrucción StopMove.
90
Festo GDCP-CMXR-SW-ES es 1205c
9. Instrucciones de movimiento
9.9
Detención del programa <StopProgram>
La instrucción StopProgram detiene el programa, que a su vez pasa al estado de parada.
Esta instrucción corresponde a la tecla de parada de la unidad de mando manual. Para
continuar es necesario un nuevo inicio, p. ej., a través de la unidad de mando manual o
externamente a través de un control PLC.
La instrucción está activa en la ejecución principal, lo que significa que no se ejecuta a
través del avance de proceso. La ejecución de las instrucciones anteriores, calculadas a
través del avance de proceso, está garantizada.
La cinemática se detiene con la máxima rampa de frenado definida para detener la
cinemática. La reducción de la dinámica por un override no afecta a la detención.
Sintaxis
StopProgram()
Ejemplo:
:
Vel(dynCart, 1000)
Lin(pos1)
Lin(pos2)
SetInfo(“insert workpiece and press start”)
StopProgram()
Lin(pos3)
CALL Conture1
:
Festo GDCP-CMXR-SW-ES es 1205c
91
10. Instrucciones de dinámica
10.
Instrucciones de dinámica
Con las instrucciones de dinámica es posible programar la velocidad, la aceleración y la
sacudida para los movimientos de la cinemática. La dinámica de los movimientos punto a
punto (PTP) y los movimientos cartesianos puede ajustarse por separado.
Los valores dinámicos pueden modificarse en cualquiera de las líneas de programa.
Nota
En la configuración (Festo Configuration Tool) se indican los valores
iniciales de la dinámica. Estos valores se activan como valores
iniciales cuando se inicia un programa. Si en el programa no se
programa ninguna dinámica, se utilizan estos valores iniciales.
Dentro del programa, los valores pueden ser sustituidos en
cualquier momento por las siguientes instrucciones de dinámica.
Gráfica de ajustes previos de los valores dinámicos en Festo Configuration Tool:
Valores estándares
Punto a punto:
Estándar
Reposicionamiento:
Pulsación:
Unidad
Velocidad
Aceleración
Sacudida
Cartesiano:
Velocidad
Aceleración
Sacudida
92
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
10.1
Limitación automática de la dinámica, limitador
de la dinámica
Para mantenerse fiel a la trayectoria, es necesario comparar los valores dinámicos
nominales con los valores dinámicos físicos posibles. Eso evitará que se rebasen los
valores máximos posibles de cada uno de los ejes. Estos valores son: velocidad,
aceleración y sacudida. Estos valores máximos están guardados en la configuración de los
diferentes ejes.
El control CMXR cuenta con un limitador de los valores dinámicos que recibe el nombre de
“limitador de la dinámica”. Este limitador opera en el cálculo por adelantado del programa
FTL y compara constantemente los valores dinámicos que se deben recorrer con la máxima
dinámica posible de cada eje.
Nota
El limitador de dinámica está continuamente activado. No es
necesario activarlo.
El que el limitador de dinámica intervenga depende de los siguientes factores:
- Tamaño de la dinámica programada
- Configuración de la trayectoria de movimiento de la cual se derivan los valores
dinámicos de los diferentes ejes.
Si se sobrepasa el máximo de por lo menos un eje debido a la dinámica programada o a la
modificación de la trayectoria de movimiento, la dinámica de dicha trayectoria se reducirá
de manera que el eje afectado se desplace hasta sus límites. La trayectoria no se
abandona. Una vez que la cinemática abandone las trayectorias de movimiento críticas y
sea posible una dinámica más alta, el sistema lo detectará y acelerará hasta el valor
programado.
En el siguiente ejemplo se alcanza el límite de un eje y eso hace que se reduzca
automáticamente la velocidad de la trayectoria para garantizar la fidelidad a dicha
trayectoria. Una vez que el eje ha abandonado el rango crítico, se produce una aceleración
hasta alcanzar el valor programado.
Velocidad de
trayectoria
Límite del eje
Festo GDCP-CMXR-SW-ES es 1205c
Reducción de la velocidad de
la trayectoria
Límite del eje individual
alcanzado
93
10. Instrucciones de dinámica
10.2
Velocidades <Vel>
Con la instrucción Vel puede indicarse la velocidad para un movimiento cartesiano o PTP.
El control reduce los valores indicados a las velocidades máximas permitidas de cada uno
de los ejes participantes. Si la velocidad máxima permitida da lugar a alguna limitación, se
emite un mensaje.
Sintaxis
Vel ( <Mode> : DYNAMICTYPE, <Value> : REAL)
Parámetros
Significado
Unidad
Mode
Tipo de velocidad
Enumeración: dynPtp, dynCart
Value
Valor de velocidad
En función del modo elegido
Tabla 10.1 Parámetros de la instrucción Vel
Parámetros de
enumeración Mode
Tipo de movimiento
Unidad
dynPtp
Punto a punto
%
dynCart
Cartesiano
mm/s
Tabla 10.2 Unidades del parámetro Value
Ejemplo:
Variable:
:
axis0 : AXISPOS := (-60, -60, 0, 0, 0, 0, 0, 0, 0)
axis1 : AXISPOS := (60, 60, 0, 0, 0, 0, 0, 0, 0)
axis2 : AXISPOS := (100, 60, 0, 0, 0, 0, 0, 0, 0)
:
Programa:
:
Vel(dynPtp, 30)
// Velocidad para PTP al 30 %
Ptp(axis0)
Vel(dynCart, 500)
// Velocidad de trayectoria a 500 mm/s
Lin(axis1)
speed := 85
Vel(dynPtp, speed)
// Velocidad para PTP al 85%
Ptp(axis3)
:
94
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
10.3
Aceleración <Acc>
Ajuste de la aceleración y la deceleración para movimientos PTP y cartesianos de los ejes
manuales. Las instrucciones siguientes se reducen al valor indicado. El control reduce
automáticamente la aceleración o la deceleración al sobrepasar el valor límite de eje.
Sintaxis
Acc ( <Mode> : DYNAMICTYPE, <Acc> : REAL, OPT <Dec> : REAL)
Parámetros
Significado
Unidad
Mode
Tipo de aceleración
Enumeración: dynPtp, dynCart
Acc
Valor de aceleración
En función del modo seleccionado
Dec
Valor de deceleración, indicación opcional
En función del modo seleccionado
Tabla 10.3 Parámetros de la instrucción Acc
Parámetros de
enumeración Mode
Tipo de movimiento
Unidad
dynPtp
Punto a punto
%
dynCart
Cartesiano
mm/s²
Tabla 10.4 Unidades de los parámetros ValueAcc, ValueDec
Nota
Si no se indica el parámetro opcional ValueDec (para la rampa de
frenado), el valor del parámetro ValueAcc (para la aceleración) se
utilizará para la rampa de frenado. En ese caso, el perfil es
simétrico.
Ejemplo:
Variable:
:
pos0 : AXISPOS := (-60, -60, 0, 0, 0, 0, 0, 0, 0)
pos1 : AXISPOS := (60, 60, 0, 0, 0, 0, 0, 0, 0)
pos2 : AXISPOS := (100, 60, 0, 0, 0, 0, 0, 0, 0)
:
Programa:
:
Ptp(pos0)
Acc(dynPtp, 30, 30)
// Aceleración para PTP al 30%
Ptp(pos1)
Festo GDCP-CMXR-SW-ES es 1205c
95
10. Instrucciones de dinámica
Acc(dynCart, 100)
// Aceleración de trayectoria a
100 mm/s²
Lin(pos2)
:
10.4
Sacudida <Jerk>
Ajuste de la sacudida para movimientos PTP y cartesianos. Las instrucciones siguientes se
reducen al valor indicado. El control reduce automáticamente la sacudida al sobrepasarse
el valor límite de eje.
Sintaxis
Jerk ( <Mode> : DYNAMICTYPE, <Value> : REAL)
Parámetros
Significado
Unidad
Mode
Tipo de movimiento
Enumeración: dynPtp, dynCart
Value
Tipo de sacudida
En función del modo elegido
Tabla 10.5 Parámetros de la instrucción Jerk
Parámetros de
enumeración Mode
Tipo de movimiento
Unidad
dynPtp
Punto a punto
%
dynCart
Cartesiano
mm/s³
Tabla 10.6 Unidades del parámetro Value
Ejemplo:
Variable:
:
pos0 : AXISPOS := (-60, -60, 0, 0, 0 ,0, 0, 0, 0)
pos1 : AXISPOS := (60, 60, 0, 0, 0, 0, 0, 0, 0)
pos2 : AXISPOS := (100, 60, 0, 0, 0, 0, 0, 0, 0)
:
96
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
Programa:
:
Ptp(pos0)
Jerk(dynPtp, 50)
// Sacudida para PTP al 50%
Ptp(pos1)
Jerk(dynCart, 5000) // Sacudida en la trayectoria a 5000 mm/s³
Lin(pos2)
:
Festo GDCP-CMXR-SW-ES es 1205c
97
10. Instrucciones de dinámica
10.5
Override
Con un override pueden ajustarse todos los valores dinámicos en porcentajes. Ello permite
influir fácilmente en los valores de aceleración, velocidad y sacudida. La trayectoria
programada no se modifica.
Nota
Para reducir únicamente la velocidad, debe modificarse directamente la indicación del valor de velocidad. Si la reducción se
efectúa mediante el override, influye también en la aceleración y en
la sacudida. Ello reduce el aprovechamiento de la dinámica del eje
y ralentiza el movimiento en la suma.
Hay dos tipos de override diferentes:
 Override dinámico: influye en los valores ajustados de velocidad, aceleración y
sacudida.
 Override en la unidad de mando manual.
Funcionamiento del override
Dinámica = dinámica programada * override dinámico
10.5.1 Override en la unidad de mando manual <Ovr>
El override coincide con el ajuste efectuado en la unidad de mando manual CDSA-D1-VX
mediante las teclas V+, V-. El override se indica en porcentajes siendo 100% la dinámica
máxima programada. Una reducción del override ralentiza la dinámica pero no modifica la
trayectoria.
En la figura se muestran las teclas V- y V+ utilizadas para
ajustar el override en la unidad de mando manual
CDSA-D1-VX.
El override es muy útil para la puesta a punto. Sin embargo, en modo automático debe
estar al 100% para poder aprovechar al máximo la dinámica. Las adaptaciones correspondientes de dinámica deben efectuarse directamente con las instrucciones de velocidad y
aceleración.
Con la instrucción Ovr puede ajustarse directamente un valor de override en el programa.
Éste tiene el mismo efecto que una modificación efectuada con las teclas de la unidad de
mando manual.
98
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
Sintaxis
Ovr ( <Value> : REAL)
Parámetro
Significado
Unidad
Value
Valor de override
Porcentaje
Tabla 10.7 Parámetro de la instrucción Ovr
Nota
Para aprovechar la dinámica máxima de la cinemática, el valor del
override en modo automático debe estar siempre al 100%. Las
adaptaciones de dinámica deben efectuarse directamente con las
instrucciones correspondientes.
Funcionamiento:
Cualquier modificación del override en la unidad de mando manual repercute inmediatamente sobre el movimiento. Debido al cálculo por adelantado del programa, el override no
se puede modificar de forma inmediata a través de la instrucción Ovr. El uso de Ovr
detiene por tanto el cálculo por adelantado, lo que a su vez provoca una parada en la
trayectoria. No es posible un avance aproximado hasta el siguiente segmento de la
trayectoria.
Ejemplo:
// Ajuste del override al 100%
Ovr(100)
Lin(pos1)
Lin(pos2)
// Ajuste del override al 60%
Ovr(60)
Lin(pos3)
Lin(pos4)
Festo GDCP-CMXR-SW-ES es 1205c
99
10. Instrucciones de dinámica
Velocidad de trayectoria
100%
60%
Tiempo
pos1
pos2
pos3
pos4
La modificación del override
con Ovr detiene el movimiento
10.5.2 Override dinámico <DynOvr>
Con la instrucción DynOvr se influye en los valores dinámicos ajustados o programados
adoptando el override ajustado en la unidad de mando manual.
Sintaxis
DynOvr ( <Value> : REAL)
Parámetro
Significado
Unidad
Value
Valor del override dinámico
Porcentaje
Tabla 10.8 Parámetro de la instrucción DynOvr
Nota
El override no modifica la trayectoria descrita. El valor programado
no repercute sobre el cálculo por adelantado del programa.
100
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
10.6 Rampas de aceleración
Con la instrucción Ramp puede ajustarse una forma de rampa para la aceleración o la
deceleración. El usuario puede elegir entre cuatro formas de rampa. Al arrancar se activa la
rampa de seno al cuadrado.
Figura con las cuatro formas de rampa:
Trapez
Trapecio
Seno
1,2
Beschleunigung
Aceleración
1
Aceleración
0,8
0,6
0,4
0,2
0
0,000
0,333
Tiempo
Zeit
0,667
1,000
Tiempo
Minjerk
Aceleración
Aceleración
Seno al cuadrado
Tiempo
Tiempo
Rampa trapezoidal
Con la rampa trapezoidal, la trayectoria de aceleración describe una forma trapezoidal. Por
tanto, la sacudida describe una forma rectangular. Con la rampa trapezoidal se obtienen
los tiempos de ejecución de la trayectoria más cortos.
Con un parámetro opcional puede influirse en la forma de rampa. Éste puede ser > 0 y
<= 0,5. Con un valor 0,5 se obtiene un triángulo de aceleración. Si el valor es, p. ej., 0,1,
la rampa adopta casi un perfil rectangular.
Aceleración
Forma de rampa trapezoidal con
un factor aproximado de 0,1
Forma de rampa trapezoidal
con el factor 0,5
Tiempo
Si no se indica el parámetro opcional, éste se ajusta automáticamente al factor 0,5 y se
obtiene el triángulo de aceleración.
Festo GDCP-CMXR-SW-ES es 1205c
101
10. Instrucciones de dinámica
Rampa sinusoidal
La rampa sinusoidal tiene la ventaja de que no sólo la trayectoria de aceleración es
sinusoidal, sino también la de sacudida. Así, la trayectoria de aceleración es más suave
que la de la rampa trapezoidal. Sin embargo, el tiempo de ejecución para alcanzar la
velocidad es ligeramente superior.
Rampa de seno al cuadrado
La rampa de seno al cuadrado describe la trayectoria más suave de todas, pero también es
la que más tiempo de ejecución requiere.
Rampa de sacudida mínima
La rampa de sacudida mínima es una forma de rampa especial en la que se obtiene un
término medio entre tiempo de ejecución y suavidad del movimiento. La trayectoria
descrita por la aceleración es semejante a un perfil sinusoidal, pero la trayectoria de
sacudida no es sinusoidal sino en forma de diente de sierra. Ello permite realizar un
movimiento suave con un tiempo corto de ejecución.
Nota
La utilización de un tipo de rampa depende de la cinemática
empleada y de la aplicación. Tras seleccionar la forma de rampa,
debe probarse en el movimiento. Como valor inicial se ha
establecido la rampa de seno cuadrado.
10.6.1
Ajuste de formas de rampa <Ramp>
Con la instrucción Ramp puede seleccionarse una forma de rampa. Ésta se utilizará para
todos los movimientos de todas las instrucciones de movimiento que se realicen a
continuación.
Sintaxis
Ramp( <Ramptype> : RAMPTYPE, OPT <Param> : REAL)
Parámetros
Significado
Unidad
Ramptype
Tipo de rampa, selecciona la forma de
Enumeración:
rampa
TRAPEZOID
SINE
SINESQUARE
MINJERK
Param
Parámetro para rampas trapezoidales
-----
Tabla 10.9 Parámetros de la instrucción Ramp
102
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
Ejemplo:
:
Ramp(TRAPEZOID)
// Selección de la rampa trapezoidal
Lin(pos1)
Lin(pos2)
WaitTime(1000)
Ramp(SINE)
// Selección de la rampa sinusoidal
Lin(pos3)
Lin(pos4)
:
10.7 Conexión de la velocidad de trayectoria constante
<VconstOn>
Con esta instrucción se conecta la monitorización de la velocidad de trayectoria constante.
Ésta sólo afecta a instrucciones cartesianas como, p. ej., LIN y CIRC. Dicha instrucción no
afecta de ningún modo a los movimientos PTP.
Sintaxis
VconstOn (<Tolerance> : REAL, <StopOnViolation> : BOOL)
Parámetros
Significado
Tolerance
Valor porcentual del bajón permitido de la velocidad de Valor porcentual del 0% al
StopOnViolation
Unidad
trayectoria
100%
Si es TRUE, se emite un error por incumplimiento de la
Interruptor: TRUE o FALSE
tolerancia
Tabla 10.10 Parámetros de la instrucción Vconst
Nota
Si se requiere una velocidad de trayectoria constante, debe tenerse
en cuenta que para el área de avance aproximado se haya ajustado
un avance aproximado geométrico (véase el capítulo 11.4
Avance aproximado por geometría en la página 111). Un
avance aproximado basado en la velocidad porcentual provoca la
modificación de la velocidad de trayectoria en el área de avance
aproximado.
El control multieje CMXR calcula la velocidad posible de trayectoria basándose en la
trayectoria y en los valores dinámicos máximos de la mecánica. El límite de la velocidad
posible de trayectoria lo determina la dinámica de la mecánica. Si es necesario programar
segmentos de trayectoria que, debido a los límites de dinámica, no se pueden recorrer a
Festo GDCP-CMXR-SW-ES es 1205c
103
10. Instrucciones de dinámica
una velocidad de trayectoria constante, en estos puntos se producen bajones de la
velocidad de trayectoria.
Con el parámetro Tolerance puede indicarse un valor porcentual para obtener bajones
permitidos de la velocidad de trayectoria. Si el valor de tolerancia indicado es el 100%, la
monitorización se desconecta.
Nota
La monitorización de velocidad de la trayectoria no tiene en cuenta
el override ajustado en la unidad de mando manual. Esto significa
que si la cinemática no alcanza toda su velocidad porque un
override la limita, se activará dicha monitorización y se producirá
un error.
Ejemplo:
Programa:
:
Lin(pos1)
VconstOn(25, TRUE)
Lin(pos2)
Lin(pos3)
VconstOff ( )
:
104
Festo GDCP-CMXR-SW-ES es 1205c
10. Instrucciones de dinámica
10.8
Desconexión de la velocidad de trayectoria
constante <VconstOff>
Con esta instrucción se desconecta una velocidad de trayectoria constante.
Sintaxis
VconstOff ( )
Nota
La interrupción del programa de usuario no provoca la desconexión
automática de la monitorización de la velocidad de trayectoria. Al
volver a arrancar el programa de usuario debe desconectarse
siempre primero la monitorización.
Festo GDCP-CMXR-SW-ES es 1205c
105
11. Instrucciones de avance aproximado
11.
Instrucciones de avance aproximado
Como avance aproximado se entiende la aceleración de los ejes para aproximarse a la
posición siguiente aunque aún no se hubiese alcanzado la posición anterior. A menudo no
es necesario alcanzar con precisión una posición, sino realizar el movimiento de manera
rápida y suave, es decir, con el menor esfuerzo posible de la mecánica. La función de
avance aproximado permite ajustar la precisión de alcance de un punto y la dureza del
movimiento.
En la figura siguiente se muestra el funcionamiento del avance aproximado.
Posición 2
Posición 1
Áreas de avance
aproximado, curvas de
polinomio
Trayectoria de la
cinemática
El programa de movimiento contiene un posicionamiento en la posición 1 y luego en la
posición 2. Mediante la función de avance aproximado, que se ajusta por medio de una
instrucción de programa, las distintas posiciones no se alcanzan con exactitud. Los perfiles
dinámicos para aproximarse a cada una de las posiciones se pasan a las áreas de avance
aproximado, lo que aumenta la dinámica.
Nota
Al cargar un programa no hay ningún avance aproximado activo, es
decir, el equipo se aproxima a las posiciones exactas. El avance
aproximado debe activarse con las funciones correspondientes.
El avance aproximado se efectúa de dos maneras:
1. Avance aproximado por velocidad basado en la velocidad.
2. Avance aproximado por posición basado en una distancia predefinida.
En las páginas siguientes se describen estos tipos.
106
Festo GDCP-CMXR-SW-ES es 1205c
11. Instrucciones de avance aproximado
Nota
En el área de avance aproximado, la trayectoria viene dada por una
curva de polinomio resultante de unos cálculos matemáticos. Esta
curva da lugar a un aumento continuo de la dinámica y, por
consiguiente, a un comportamiento no perjudicial para el sistema
mecánico. Este comportamiento no se puede lograr con un
redondeo por medio del radio. Por consiguiente, el avance
aproximado no permite redondear los segmentos de trayectoria.
11.1
Segmentos cero
Si se programa un segmento cero, es decir, el nuevo posicionamiento sobre la posición ya
alcanzada, no es posible el avance aproximado. Esto provoca un frenado seguido de una
aceleración sobre la trayectoria.
Ejemplo:
Lin(pos1)
Lin(pos2)
// Nuevo posicionamiento en pos2 = no es posible el avance
aproximado
Lin(pos2)
Lin(pos3)
Puesto que la posición pos2 se ha programado más de una vez, en este punto del
programa se produce una parada en la trayectoria.
Festo GDCP-CMXR-SW-ES es 1205c
107
11. Instrucciones de avance aproximado
11.2
Área extrema
Si la distancia entre dos puntos es menor que la necesaria para avanzar entre la
trayectoria de avance aproximado parametrizada, el control reduce automáticamente el
área de avance aproximado entre los puntos para describir el mejor valor de avance
aproximado posible.
Área de avance aproximado
que se solapa
Área de avance
aproximado
programada
Área de avance aproximado
generada por el control
Trayectoria recorrida
En la figura se muestran en línea discontinua los círculos del área de avance aproximado
obtenida a partir de la parametrización. Los círculos se solapan porque la distancia entre
las posiciones A y B no es suficiente para recorrer este perfil. El control calcula
automáticamente el área de avance aproximado máximo posible, representado por los
círculos grises.
Nota
El avance aproximado está limitado al 50% de la longitud del
segmento de trayectoria. Si el área de avance aproximado es mayor
que el límite máximo permitido, el control multieje CMXR la reduce
automáticamente al 50% de la longitud del segmento de trayectoria.
Nota
Si la longitud del segmento de trayectoria es demasiado corta, se
pueden producir bajones de dinámica incontrolados si se redujo el
área de avance aproximado definida. Para evitarlo debe adaptarse
la trayectoria o el área de avance aproximado.
108
Festo GDCP-CMXR-SW-ES es 1205c
11. Instrucciones de avance aproximado
11.3
Avance aproximado por velocidad
Para el avance aproximado por velocidad se solapan los perfiles dinámicos de la
trayectoria. Con ello se obtiene un movimiento a la posición siguiente dentro del área de
avance aproximado.
11.3.1 Con factor porcentual <OvlVel>
Para el avance aproximado por velocidad se define previamente un grado de avance
aproximado con un valor porcentual. El margen de valores va del 0% al 200%.
Sintaxis
OvlVel (<Value> : REAL)
Parámetro
Significado
Unidad
Value
Valor de avance
Porcentaje
aproximado
Tabla 11.1 Parámetro de la instrucción OvlVel
Parámetros:
Porcentaje
Parámetros de avance aproximado en %
0%
Sin avance aproximado
100%
Aprovechamiento máximo de las aceleraciones de ejes
100..200%
Sin pérdida de tiempo, movimiento más suave con un área de avance
aproximado más grande
Los valores menores que 100 % provocan desviaciones de la posición pero requieren más
tiempo de movimiento ya que la velocidad debe reducirse. Con un valor del 100 %, se
aprovechan al máximo las reservas de aceleración de los ejes teniendo en cuenta una
desviación lo más pequeña posible de la posición. Si se indican valores entre 100 % y
200 %, las desviaciones de la posición aumentan y las aceleraciones de los ejes se
reducen, al contrario que con un ajuste del 100 %.
La siguiente figura muestra los perfiles de velocidad de un desplazamiento hasta las
posiciones 1 y 2. Para el área de avance aproximado se han definido distintos valores.
Festo GDCP-CMXR-SW-ES es 1205c
109
11. Instrucciones de avance aproximado
1) Sin solapamiento
0%
Sentido Y
Tiempos de ciclo
2) Solapamiento parcial
50%
Área de avance
aproximado
Sentido X
Tiempos de ciclo
3) Solapamiento completo
100%
Tiempos de ciclo
La gráfica 1 muestra un perfil de velocidad donde no se ha producido solapamiento. Los
ejes frenan dentro de la trayectoria; de este modo se alcanzan las posiciones 1 y 2 con
precisión. La gráfica central representa un solapamiento parcial. La gráfica inferior
muestra un solapamiento total (100%) de los perfiles de velocidad.
Nota
En el área de avance aproximado se trabaja con la dinámica de ejes
máxima. Ello significa que el tramo que se encuentra dentro del
área de avance aproximado no es un radio, sino una curva de
polinomio que se deriva de los valores dinámicos actuales de los
ejes.
Ejemplo:
:
OvlVel(100)
// Avance aproximado al 100 %
Lin(pos1)
Lin(pos2)
OvlVel(75)
// Avance aproximado al 75%
Lin(pos3)
:
110
Festo GDCP-CMXR-SW-ES es 1205c
11. Instrucciones de avance aproximado
11.4
Avance aproximado por geometría
En el avance aproximado por geometría se fijan las desviaciones de la posición final
programada. A diferencia del avance aproximado por velocidad, la asimetría es
geométrica, es decir, se indica en unidades de longitud o de ángulos.
En el avance aproximado por geometría se diferencia entre el avance aproximado de los
ejes cartesianos X, Y y Z y el de los ejes de orientación.
Nota
El avance aproximado por geometría sólo puede utilizarse con
movimientos cartesianos. Los movimientos PTP no se pueden
efectuar con este tipo de avance aproximado.
No es adecuado para redondear esquinas, ya que la forma
geométrica en el área de avance aproximado no es un radio, sino
una curva de polinomio. Los radios no son adecuados para el
avance aproximado, ya que provocan un aumento brusco de la
aceleración.
11.4.1 Avance aproximado de los ejes X, Y y Z <OvlCart>
El avance aproximado de movimientos cartesianos con fijación geométrica se define
indicando una distancia del TCP en la trayectoria hasta el punto de destino.
Esfera con área
de avance
aproximado
El movimiento de avance aproximado se inicia al entrar en la esfera y finaliza en el punto
donde la esfera vuelve a cortarse con el tramo de trayectoria siguiente. Esta curva es
tangencial con respecto a los 2 tramos de trayectoria en cuestión. El límite del área de
avance aproximado forma la mitad del más corto de los segmentos de trayectoria
implicados.
La trayectoria en el área de avance aproximado no es un radio, sino un polinomio de
quinto grado. Este polinomio genera la trayectoria suave máxima posible, lo que no puede
hacerse con un arco de círculo.
Sintaxis
OvlCart (<Distance> : REAL)
Festo GDCP-CMXR-SW-ES es 1205c
111
11. Instrucciones de avance aproximado
Parámetro
Significado
Unidad
Distance
Área de avance aproximado, distancia hasta
Unidad de longitud ajustada
el punto final
Tabla 11.2 Parámetro de la instrucción OvlCart
Nota
El avance aproximado se necesita muy a menudo en combinación
con una velocidad de trayectoria constante. Ésta se ajusta con la
instrucción VconstOn (véase el capítulo 10.7 Conexión de la
velocidad de trayectoria constante en la página 103).
Ejemplo:
Un contorno debe recorrerse a una velocidad de trayectoria constante y con un área de
avance aproximado de 5 mm.
p1
p2
Área de
avance
aproximado
p6
p3
p4
p5
Vel(dynCart, 300)
// Velocidad de trayectoria a 300 mm/s
VconstOn(25, TRUE)
// Conectar vel. trayectoria const.
OvlCart(5)
// Ajustar área de avance aproximado
Lin(p1)
Lin(p2)
Lin(p3)
Lin(p4)
Lin(p5)
Lin(p6)
112
Festo GDCP-CMXR-SW-ES es 1205c
12. Sistemas de referencia (desplazamiento del punto cero)
12. Sistemas de referencia (desplazamiento del
punto cero)
Los sistemas de referencia son sistemas de coordenadas cartesianas con tres grados de
libertad de movimiento de traslación y tres de rotación. La orientación se define a partir
del método de Euler ZYZ.
Nota
Como los sistemas de referencia son de tipo cartesiano, no afectan
al punto cero de los ejes individuales del sistema de coordenadas
de ejes. Éstos sólo afectan al sistema de coordenadas cartesianas.
Al inicio de un programa está activado el sistema de coordenadas universales.
12.1
Relación del sistema de referencia
Un sistema de referencia toma como referencia el punto cero cartesiano de un sistema de
coordenadas ya definido. Los valores definidos del sistema de referencia nuevo provocan
un desplazamiento en los seis grados de libertad de movimiento.
Z
Y
Z
X
Desplazamiento 1
Y
Z
Z
Y
Y
X
Punto cero del sistema de
coordenadas universales
X
Desplazamiento 2
X
Desplazamiento aditivo al
desplazamiento 2
Como se aprecia en la figura, es posible definir varios sistemas de referencia en el punto
cero cartesiano de otro sistema de referencia, pero sólo una referencia puede estar activa.
Nota
El encadenado de sistemas de referencia debe efectuarse con
precaución. En ocasiones este mecanismo es útil para una
programación eficiente aunque dificulta la lectura del programa y el
anidamiento descuidado puede provocar colisiones.
Festo GDCP-CMXR-SW-ES es 1205c
113
12. Sistemas de referencia (desplazamiento del punto cero)
Nota
El desplazamiento del sistema de referencia consiste en una
traslación y una rotación (orientación). Durante la ejecución se
realiza primero el desplazamiento y después la rotación.
12.2
Datos del sistema de referencia
Los datos de un sistema de referencia se componen de una traslación tridimensional y de
una indicación de orientación tridimensional. La orientación se define a partir del método
de Euler ZYZ.
Estos datos se guardan en una variable de tipo de dato estructurado. El usuario puede
elegir el nombre del sistema de referencia.
Existen diferentes posibilidades para definir los datos de un sistema de referencia:
1. Indicación directa de los valores.
2. Indicación a través de tres puntos cartesianos
Además de los valores del sistema de referencia también es posible establecer una
referencia en otro sistema de referencia. Además, en cada uno de los tipos de datos
estructurados es posible establecer una relación con otro sistema de referencia con el
parámetro RefSys. Con el parámetro RefSys puede indicarse cualquier tipo de datos.
A continuación se describen las instrucciones para activar un sistema de referencia.
114
Festo GDCP-CMXR-SW-ES es 1205c
12. Sistemas de referencia (desplazamiento del punto cero)
12.3
Sistema de referencia con valores directos
<SetRefSys>
La instrucción SetRefSys activa un sistema de referencia cuyos datos absolutos están
registrados en la estructura de los datos de la variable transferida.
Sintaxis
SetRefSys(<refSys> : REFSYSDATA)
Parámetro
Significado
Unidad
refSys
Sistema de referencia definido por los valores de
Unidades de longitud y de
desplazamiento
ángulo
Tabla 12.1 Parámetro de la instrucción SetRefSys
Con la indicación directa del valor se revelan los valores directamente con la variable
transferida. Los datos ya transferidos sólo pueden modificarse realizando de nuevo la
llamada.
Estructura del tipo de datos REFSYSDATA:
baseRs : REFSYS
Referencia a otro sistema de referencia
x
: REAL
Desplazamiento a lo largo del eje X
y
: REAL
Desplazamiento a lo largo del eje Y
z
: REAL
Desplazamiento a lo largo del eje Z
a
: REAL
Orientación según método de Euler, rotación alrededor del eje Z
b
: REAL
Orientación según método de Euler, rotación alrededor del eje Y
rotado
c
: REAL
Orientación según método de Euler, rotación alrededor del eje Z
rotado
Con el parámetro baseRs puede indicarse otra referencia, la cual tiene efecto aditivo en el
sistema de referencia. Para relacionar la cinemática con el sistema de coordenadas
universales, se debe establecer una referencia con la variable de sistema world.
Ejemplo:
Datos:
refsysdata0 : REFSYSDATA := (MAP(world), 100, 150, 0, 0, 0, 0)
Programa:
SetRefSys(refsysdata0)
Festo GDCP-CMXR-SW-ES es 1205c
115
12. Sistemas de referencia (desplazamiento del punto cero)
12.4
Sistema de referencia con tres
puntos <SetRefSys3P>
Con la instrucción siguiente, SetRefSys3P, se activa un sistema de referencia cuyos datos
se determinan mediante tres posiciones en el espacio.
Sintaxis
SetRefSys3P(<refSys> : REFSYS3P)
Parámetro
Significado
Unidad
refSys
Sistema de referencia determinado por tres posiciones
Longitud (mm)
Tabla 12.2 Parámetro de la instrucción SetRefSys3P
Aplicación:
Este tipo de descripción de un sistema de referencia permite realizar la programación tipo
teach-in mediante tres posiciones. Estas tres posiciones son de tipo cartesiano y tienen
seis grados de libertad de movimiento.
Significado de las posiciones:

La primera posición determina el origen del sistema de referencia.

La segunda posición determina un punto por el que discurre el eje X positivo
cartesiano del sistema de referencia.

La tercera posición determina un punto en el plano XY.
Nota
La orientación de las posiciones es irrelevante. Para los cálculos se
necesitan sólo las posiciones cartesianas.
Estructura del tipo de datos REFSYS3P:
baseRs : REFSYS
Referencia a otro sistema de referencia
p0
: CARTPOS
Origen del sistema de referencia que se va a definir
px
: CARTPOS
Posición a lo largo del eje X
pxy
: CARTPOS
Posición en el plano X-Y
Con el parámetro baseRs puede indicarse otra referencia, la cual tiene efecto aditivo en el
sistema de referencia. Para relacionar la cinemática con el sistema de coordenadas
universales, se debe establecer una referencia con la variable de sistema world.
116
Festo GDCP-CMXR-SW-ES es 1205c
12. Sistemas de referencia (desplazamiento del punto cero)
Ejemplo:
Datos:
refsys3p0 : REFSYS3P := (MAP(world),
(100.0, 100.0, 0.0),
(200.0, 100.0, 0.0),
(200.0, 200.0, 0.0))
Programa:
SetRefSys3P(refsys3p0)
12.4.1 Programación tipo teach-in del sistema de referencia
SetRefSys3P
La programación tipo teach-in del sistema de referencia SetRefSys3P supone ventajas
decisivas en la aplicación. Con este sistema se programa por teach-in directamente el
punto cero, p. ej., de una paleta. De este modo se compensa la posible imprecisión, p. ej.,
debido al montaje o a la propia cinemática. Además, no es necesaria una laboriosa
determinación del punto cero, p. ej., mediante medición y cálculo en el espacio.
No obstante, para la programación tipo teach-in del sistema de referencia SetRefSys3P se
debe seguir un orden:
Primer punto = origen
Tercer punto = plano XY positivo
Segundo punto = eje X positivo
Tercer punto = plano XY positivo
Atención
El tercer punto determina el plano XY positivo. El tercer punto
puede, dependiendo de su posición longitudinal, provocar un giro
del sistema de coordenadas, por ejemplo, un giro de 180 grados
del eje Z.
Estos tres parámetros se pueden programar por teach-in con la ayuda de la unidad de
mando manual o del software de emulación.
Festo GDCP-CMXR-SW-ES es 1205c
117
12. Sistemas de referencia (desplazamiento del punto cero)
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la instrucción o mediante la tecla de pantalla Modificar. Al marcar la
línea Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Selección del sistema de referencia donde
se realizará la programación tipo teach-in
2.
Hacer clic en el campo de
parámetros y se mostrará de
color azul
3.
Se activa la tecla de pantalla
de programación tipo teach-in
No obstante, antes de la programación tipo teach-in de las posiciones se debe comprobar
que se haya seleccionado una referencia válida al sistema de referencia deseado mediante
el parámetro baseRs. En este sistema de referencia se programarán por teach-in las
posiciones siguientes. Si el sistema de referencia deseado aún no existe, deberá crearse
antes.
Pulsando la tecla de pantalla
se guarda la posición cartesiana actual en la variable
indicada. La programación tipo teach-in se realiza siempre en una variable de posición.
Para la programación tipo teach-in de otra posición, deberá marcarse haciendo clic en ella.
Nota
El sistema de referencia seleccionado en la página de posición
carece de importancia con la instrucción SetRefSys3P. La referencia
al sistema de referencia se establece mediante el parámetro
baseRs.
118
Festo GDCP-CMXR-SW-ES es 1205c
12. Sistemas de referencia (desplazamiento del punto cero)
12.5 Sistema de referencia universal
<SetRefSysWorld>
Con esta instrucción se activa el sistema de referencia universal cuyo origen está
guardado en la configuración de la cinemática.
Sintaxis
SetRefSysWorld()
Si un sistema de referencia se activa con la instrucción SetRefSys o SetRefSys3P y se
desea desactivar dicho sistema en un punto determinado del programa, se utiliza la
instrucción SetRefSysWorld.
12.6
Sistema de referencia dinámico <SetRefSysDyn>
Como complemento a los sistemas de referencia estáticos, existe la instrucción
SetRefSysDyn para definir un sistema de referencia dinámico (móvil). Este sistema de
referencia móvil se necesita para la realización de la función de seguimiento.
Sintaxis
SetRefSysDyn(<refSys> : CARTREFSYSVAR)
Parámetro
Significado
Unidad
refSys
Sistema de referencia que obtiene los valores a través del
Unidades de longitud y de
PLC interno
ángulo
Tabla 12.3 Parámetro de la instrucción SetRefSysDyn
Nota
Esta instrucción sólo funciona en combinación con el PLC
integrado. Se puede encontrar más información sobre la
instrucción y la función de seguimiento a ella asociada en la
documentación especial “Programación FTL - Seguimiento”.
Festo GDCP-CMXR-SW-ES es 1205c
119
12. Sistemas de referencia (desplazamiento del punto cero)
12.7
Ejemplo
En el ejemplo siguiente deben vaciarse dos paletas y alimentar las piezas en una máquina.
Sensor para
detección de
espacio libre
Y
Paleta 1
Alimentación de la
máquina
Paleta 2
300
300
1500
X
Las dos paletas tienen el mismo contenido y las mismas dimensiones. Para no complicar la
programación, se activa un sistema de referencia para cada paleta y el programa de las
paletas se formula en un subprograma.
Para el sistema de referencia de la paleta 1 se utiliza la variable RefPal1 y RefPal2 para la
paleta 2.
Datos:
:
refPal1 : REFSYSDATA := (MAP(world), 0, 0, 0, 0, 0, 0)
refPal2 : REFSYSDATA := (MAP(world), 0, 0, 0, 0, 0, 0)
pos1 : CARTPOS := (100, 80, 70, 0, 0, 0, 0, 0, 0)
:
Programa:
:
refPal1.x := 300
// Desplazamiento de paleta 1 en X
refPal1.y := 300
// Desplazamiento de paleta 1 en Y
refPal2.x := 1500
// Desplazamiento de paleta 2 en X
refPal2.y := 300
// Desplazamiento de paleta 2 en Y
Lin(pos1)
// Avance a seguridad en el sistema
universal
SetRefSys(refPal1)
// Activar desplazamiento de paleta 1
120
Festo GDCP-CMXR-SW-ES es 1205c
12. Sistemas de referencia (desplazamiento del punto cero)
CALL Feed()
// Llamar subprograma de alimentación
de piezas
SetRefSys(refPal2)
// Activar desplazamiento de paleta 2
CALL Feed()
// Llamar subprograma de alimentación
de piezas
SetRefSysWorld()
// Activar sistema universal
Lin(pos1)
:
Festo GDCP-CMXR-SW-ES es 1205c
121
13. Referenciación de una cinemática
13.
13.1
Referenciación de una cinemática
Recorrido de referencia <RefAxis>
La instrucción RefAxis permite referenciar ejes. El recorrido de referencia se ejecuta
siempre con un único eje.
Sintaxis
RefAxis(<axis>:AXIS, OPT <refData>:REFDATA, OPT <timeout>:REAL)
Parámetros Significado
Unidad
Axis
Enumeración A1, A2, hasta
Eje seleccionado que se va a referenciar
A9
refData
Conjunto de datos del recorrido de referencia, p. ej., cómo se va
Ninguna
a referenciar
timeout
Tiempo para el desarrollo de la operación (después se emite un
Segundos
mensaje de error, la referenciación se interrumpe)
Tabla 13.1 Parámetros de la instrucción RefAxis
Durante el recorrido de referencia debe observarse que los ejes participantes pueden
moverse con libertad. El movimiento ejecutado es axial. Según el tipo de cinemática, la
disposición de los ejes en la herramienta puede provocar movimientos incontrolados.
Nota
Los parámetros refData y timeout son opcionales. Si no se indican,
la posición real actual se toma como posición de referencia (DS 402
- método 35).
Atención
Durante el recorrido de referencia debe observarse que los ejes
participantes pueden moverse con libertad. Además, deben
seleccionarse los valores dinámicos apropiados para estos
movimientos de modo que el recorrido de referencia sea razonable.
En este caso, unos valores dinámicos elevados no son razonables.
122
Festo GDCP-CMXR-SW-ES es 1205c
13. Referenciación de una cinemática
La referenciación requiere algunos datos para su ejecución. Estos datos se indican en un
conjunto de datos de referencia del tipo REFDATA.
Parámetros
Tipo
Significado
method
DINT
Método de recorrido de referencia conforme a CANopen
DS 402
offset
REAL
Offset de la posición de referencia [mm]
velSwitch
REAL
Velocidad de referenciación (aproximación al interruptor)
velZero
REAL
Velocidad de avance lento (búsqueda del flanco)
acc
REAL
Aceleración del recorrido de referencia
saveOffsetToEncoder
BOOL
Memorización del referenciado en el codificador del
motor
Tabla 13.2 Estructura del tipo de datos REFDATA
Nota
Si se especifica el método de recorrido de referencia 99, se
utilizarán los parámetros de recorrido de referencia tal como fueron
guardados en el accionamiento mediante Festo Configuration Tool
(FCT). En ese caso, el recorrido de referencia se realiza igual que
durante la puesta en funcionamiento de los diferentes ejes. Todos
los demás parámetros, tales como offset, velSwitch, zeroSwitch y
acc serán irrelevantes.
Nota
Con la función “saveOffsetToEncoder” es posible guardar de forma
fija el referenciado del eje correspondiente en el codificador del
motor. Así, este se conserva al reiniciar el control. Para disponer de
esta función se deben utilizar motores con codificadores MultiTurn.
Método del recorrido de referencia
El método del recorrido de referencia puede realizarse de varias maneras, p. ej., a un
detector de final de carrera negativo con evaluación de impulso de puesta a cero, a un
detector de final de carrera positivo con evaluación de impulso de puesta a cero o un
recorrido de referencia a un detector de final de carrera. Todos estos métodos se
encuentran en la correspondiente documentación del CANopen de cada regulador de
accionamiento.
La tabla siguiente muestra los métodos de referenciación para equipos CANopen
conforme a DS 402.
Valor
Sentido
Destino
Punto de referencia para cero
-18
Positiva
Tope
Tope
-17
Negativa
Tope
Tope
-2
Positiva
Tope
Impulso cero
-1
Negativa
Tope
Impulso cero
Festo GDCP-CMXR-SW-ES es 1205c
123
13. Referenciación de una cinemática
Valor
Sentido
Destino
Punto de referencia para cero
1
Negativa
2
Positiva
7
Positiva
11
Negativa
17
Negativa
18
Positiva
23
Positiva
27
Negativa
33
Negativa
Impulso cero
Impulso cero
34
Positiva
Impulso cero
Impulso cero
35
-
Ningún recorrido
Posición real actual
99
-
-
Ejecución definida como en el
Detector de final de
carrera
Detector de final de
carrera
Interruptor de
Interruptor de
Impulso cero
referencia
Detector de final de
carrera
Detector de final de
Interruptor de
referencia
Interruptor de
referencia
Impulso cero
Impulso cero
referencia
carrera
Impulso cero
Detector de final de carrera
Detector de final de carrera
Interruptor de referencia
Interruptor de referencia
proyecto FCT del controlador del
motor
Tabla 13.3 Métodos del recorrido de referencia
Desplazamiento de la posición de referencia
Con el parámetro offset puede definirse un desplazamiento del punto cero en relación a la
posición de referencia. Después de la referenciación se suma este valor de offset al punto
cero de referencia. La indicación del valor real del eje afectado se actualiza como
corresponde.
Velocidad de referenciación, velocidad de avance lento, aceleración
Con la velocidad de referenciación y la aceleración se ajusta la dinámica de los ejes para
la referenciación. Ésta es relevante desde el inicio del recorrido de referencia hasta
alcanzar el flanco del interruptor correspondiente. Cuando se detecta el flanco, se
conmuta a velocidad de avance lento y se finaliza el recorrido de referencia conforme al
método seleccionado.
124
Festo GDCP-CMXR-SW-ES es 1205c
13. Referenciación de una cinemática
13.2
Recorrido de referencia asíncrono <RefAxisAsync>
Con esta instrucción es posible referenciar varios ejes de robot al mismo tiempo. La
instrucción no espera a que el recorrido de referencia finalice, sino que la ejecución del
programa se reanuda una vez iniciada la instrucción de referenciación. Para determinar si
la referenciación ha acabado o para leer su estado se utilizan las instrucciones
WaitRefFinished e IsAxisReferenced.
Sintaxis
RefAxisAsync(<axis>:AXIS, OPT <refData>:REFDATA, OPT
<timeout>:REAL)
Parámetros Significado
Unidad
Axis
Enumeración A1, A2, hasta
Eje seleccionado que se va a referenciar
A9
refData
Conjunto de datos del recorrido de referencia, p. ej., cómo se va Ninguna
a referenciar
timeout
Tiempo para el desarrollo de la operación (después se emite un
Segundos
mensaje de error, la referenciación se interrumpe)
Tabla 13.4 Parámetros de la instrucción RefAxisAsync
Durante el recorrido de referencia debe observarse que los ejes participantes pueden
moverse con libertad. El movimiento ejecutado es axial. Según el tipo de cinemática, la
disposición de ejes en la herramienta puede provocar movimientos incontrolados.
Nota
Los parámetros refData y timeout son opcionales. Si no se indican,
la posición real actual se toma como posición de referencia (DS 402
- método 35).
Atención
Durante el recorrido de referencia debe observarse que todos los
ejes pueden moverse con libertad. Además, deben seleccionarse
los valores dinámicos apropiados para estos movimientos de modo
que el recorrido de referencia sea razonable. En este caso, unos
valores dinámicos elevados no son razonables.
Los parámetros y su funcionamiento se corresponden con la instrucción RefAxis.
Festo GDCP-CMXR-SW-ES es 1205c
125
13. Referenciación de una cinemática
Nota
Si se especifica el método de recorrido de referencia 99, se
utilizarán los parámetros de recorrido de referencia tal como fueron
guardados en el accionamiento mediante Festo Configuration Tool
(FCT). En ese caso, el recorrido de referencia se realiza igual que
durante la puesta en funcionamiento de los diferentes ejes. Todos
los demás parámetros, tales como offset, velSwitch, zeroSwitch y
acc serán irrelevantes.
13.3
Espera al final del recorrido de referencia
<WaitRefFinished>
Con esta instrucción se espera a que finalicen todos los recorridos de referencia
asíncronos iniciados.
Sintaxis
WaitRefFinished( ) : BOOL
La instrucción espera a que finalicen los recorridos de referencia asíncronos (se espera a la
ejecución principal) o a que aparezca un error en un recorrido de referencia.
Si no aparece ningún error en el recorrido de referencia se emite TRUE, de lo contrario,
FALSE.
Programa:
:
RefAxisAsync(A1, refdata0)
RefAxisAsync(A2, refdata0)
RefAxisAsync(A3, refdata0)
RefAxisAsync(A4)
boolReference := WaitRefFinished()
IF NOT boolReference THEN
SetError("Error homing”)
END_IF
Atención
A la hora de ejecutar la instrucción RefAxisAsync, es obligatorio
utilizar la instrucción WaitRefFinished para garantizar la ejecución
subsiguiente del programa. Si no se aguarda al final del recorrido
de referencia, el cálculo por adelantado del programa puede dar
lugar a instrucciones que provoquen errores.
126
Festo GDCP-CMXR-SW-ES es 1205c
13. Referenciación de una cinemática
13.4
Interrogación del estado de un eje
<IsAxisReferenced>
Con esta instrucción se interroga si un eje está referenciado.
Sintaxis
IsAxisReferenced(axis : AXIS ) : BOOL
Parámetro
Significado
Unidad
Axis
Eje seleccionado objeto de la interrogación
Enumeración A1,
A2, hasta A9
Tabla 13.5 Parámetro de la instrucción IsAxisReferenced
Si el eje indicado está referenciado se emite TRUE, de lo contrario, FALSE.
Festo GDCP-CMXR-SW-ES es 1205c
127
14. Herramientas
14.
Herramientas
El control multieje CMXR permite definir los datos de longitud de una herramienta. Estos
datos se describen en forma de un vector de seis dimensiones. De ese modo puede
asignarse una orientación a la herramienta, además de las dimensiones. La orientación se
define a partir del método de Euler ZYZ. El origen del vector es el punto cero en la brida de
la herramienta. El extremo de la herramienta, denominado TCP (Tool Center Point), fija el
punto final. Con los datos de herramienta se determina el sistema de coordenadas de
herramienta.
Sistema de coordenadas de
vector de seis dimensiones
con origen en la brida
Brida de
herramienta
X
Y
Z
14.1
Datos de herramienta
14.1.1 Datos del vector TCP
Los datos de herramienta están guardados en el tipo de datos estructurados TCPTOOL.
Éste contiene los datos de los seis grados de libertad de movimiento.
Estructura:
Tipo de datos TCPTOOL
x
: REAL
Desplazamiento a lo largo del eje X
y
: REAL
Desplazamiento a lo largo del eje Y
z
: REAL
Desplazamiento a lo largo del eje Z
a
: REAL
Indicación de orientación, rotación alrededor del eje Z
b
: REAL
Indicación de orientación, rotación alrededor del eje Y rotado
c
: REAL
Indicación de orientación, rotación alrededor del eje Z rotado
128
Festo GDCP-CMXR-SW-ES es 1205c
14. Herramientas
Los tres valores de traslación X, Y y Z definen el TCP en el espacio estando todos los ejes
en posición inicial. De este modo se desplaza el sistema de coordenadas de la herramienta
al TCP. Éste también puede girarse indicando su orientación (parámetros A, B y C) en el
espacio.
Ejemplo de datos TCP:
Un pórtico cartesiano tiene un eje giratorio neumático en el extremo del eje Z con una
pinza por vacío. La herramienta está montada en sentido del eje Z. La orientación del TCP
no cambia respecto al sistema original de coordenadas del sistema.
Eje X
Eje Z
Longitud de
herramienta
Se obtienen los siguientes datos TCP:
X=
0
Y=
0
Z=
Longitud de herramienta
A=
0
B=
0
C=
0
X
Y
Z
Ahora la herramienta, que dispone de un eje giratorio neumático, se ha inclinado
30 grados en el espacio. El TCP se calcula con el ángulo del movimiento giratorio.
Se obtienen los siguientes datos:
Eje X
Ángulo de 30°
Eje Z
X = Longitud de herramienta x sin(30°)
Y=0
Z = Longitud de herramienta x cos(30°)
A=0
Asimetría
en Z
X
B=0
C=0
Asimetría en X
Y
Z
Festo GDCP-CMXR-SW-ES es 1205c
La orientación del sistema de coordenadas
de herramienta no cambia. Si es necesario,
deberá ajustarse con los parámetros A, B y C.
129
14. Herramientas
Además, la orientación del sistema de coordenadas de herramienta debe apuntar en el
sentido de la herramienta rotada. Para rotar se emplea el método de Euler ZYZ.
Eje X
Eje Z
Ángulo
Se obtienen los siguientes datos:
X = Longitud de herramienta x
sin(30°)
Y=0
X
Asimetría en Z
Y
Asimetría en X
Z
Z = Longitud de herramienta x
cos(30°)
A=0
B = 30
C=0
Estas descripciones de herramienta se guardan en variables. Para una herramienta pueden
definirse un número ilimitado de variables TCP, pero sólo puede estar activado un conjunto de datos. Las diferentes descripciones se utilizan cuando una herramienta tiene
diferentes puntos de referencia que deben intercambiarse durante el funcionamiento
dependiendo de la tarea.
Como los datos de herramienta están guardados como variable en la memoria, su número
está limitado por la capacidad de la memoria.
El programador debe asegurarse de asignar correctamente los datos TCP a la herramienta.
El control multieje CMXR no conoce ninguna referencia de los datos de herramienta en
relación a la herramienta física.
Atención
Si los datos TCP son inadecuados o incorrectos hay peligro de
colisión.
130
Festo GDCP-CMXR-SW-ES es 1205c
14. Herramientas
14.2
Activación de datos de herramienta <Tool>
Con la instrucción siguiente pueden activarse los datos de un Tool Center Point (TCP)
dentro de un programa FTL. Esta instrucción Tool activa datos TCP nuevos para la cinemática. De este modo se modifica el punto de trabajo de la cinemática.
Sintaxis
Tool (<ToolData> : TCPTOOL)
Los datos para el TCP se encuentran en la variable a transferir. Estos datos se leen en el
avance de proceso del intérprete FTL y se introducen a partir de este punto en la planificación de la trayectoria del movimiento. Estos datos TCP se tienen en cuenta en todas las
instrucciones siguientes.
Parámetro
Significado
Unidad
ToolData
Datos de herramienta
TCPTOOL
Tabla 14.1 Parámetro de la instrucción Tool
La llamada de la instrucción Tool no provoca ningún movimiento de posicionado, sino que
sólo da a conocer los datos TCP ahora activos. En la próxima instrucción de desplazamiento cartesiano se incluyen estos datos en el cálculo y se tienen en cuenta en la
ejecución del movimiento.
Si se salta una instrucción Tool en el programa FTL, en la unidad de mando manual o el
indicador de frase para ejecución del programa está posicionado de manera que no se
puede ejecutar dicha instrucción, pueden provocarse lesiones físicas o daños en la
máquina. La orientación siguiente de herramienta podría no ser adecuada para el
movimiento, con lo que se corre peligro de colisión.
Advertencia
Al modificar la instrucción Tool se efectúa un salto en la trayectoria
cartesiana del TCP. Si el contador de programa de la unidad de
mando manual está posicionado de manera que puede saltar una
instrucción Tool, ello puede provocar reacciones incontroladas
durante el movimiento cartesiano.
14.2.1 Efecto de los datos TCP
Los datos TCP se activan con una instrucción en el programa FTL y se leen en el avance de
proceso del intérprete. Estos datos TCP actuales se incluyen en el cálculo de la planificación de trayectoria de las instrucciones de movimiento siguientes. A continuación se
presenta un ejemplo en el que se describe el comportamiento de los datos de herramienta
aplicados a un eje giratorio neumático.
Festo GDCP-CMXR-SW-ES es 1205c
131
14. Herramientas
Ejemplo:
Un sistema de manipulación tiene un eje giratorio neumático en la brida de herramienta.
Con ayuda de este eje puede girarse la herramienta a una posición fija. Este movimiento
giratorio modifica la orientación de la herramienta. Para que el control multieje CMXR
pueda calcular un movimiento cartesiano en el espacio teniendo en cuenta la posición del
TCP debe indicarse la orientación nueva después del movimiento giratorio.
Las dos orientaciones posibles de la herramienta limitan los TCP a dos y, por tanto, a dos
conjuntos de datos: tool1 y tool2.
Orientación 1, herramienta vertical:
Z
Y
X
Longitud de
herramienta
Eje de rotación
Pinza por vacío
TCP
La longitud de la herramienta vertical discurre a lo largo del eje Z del sistema de
coordenadas de herramienta. De este modo, el TCP sólo dispone de una traslación en
sentido del eje Z, las indicaciones de orientación son 0.
Datos de herramienta para tool1:
X
=0
Desplazamiento a lo largo del eje X
Y
=0
Desplazamiento a lo largo del eje Y
Z
= Longitud de
herramienta
Desplazamiento a lo largo del eje Z
A
=0
Orientación según método de Euler, rotación alrededor
del eje Z
B
=0
Orientación según método de Euler, rotación alrededor
del eje Y rotado
C
=0
Orientación según método de Euler, rotación alrededor
del eje Z rotado
132
Festo GDCP-CMXR-SW-ES es 1205c
14. Herramientas
Orientación 2, herramienta girada:
Z
Y
X
Pinza por vacío
TCP
Eje de rotación
Longitud de herramienta
Con el movimiento giratorio, el TCP se desplaza hacia un lado. La orientación de la
herramienta se ha modificado.
La cinemática de la figura es de sistema cartesiano. En éste, la posición del sistema de
coordenadas cartesiano de los ejes de base X, Y y Z coinciden con el sistema de
coordenadas de herramienta cartesianas. Si se aplica la regla de la mano derecha para
determinar la orientación, la herramienta gira alrededor del eje Y en dirección positiva.
Datos de herramienta para tool2:
X
= Longitud x sin(30°) Desplazamiento a lo largo del eje X
Y
=0
Z
= Longitud x cos(30°) Desplazamiento a lo largo del eje Z
A
=0
Orientación según método de Euler, rotación alrededor
del eje Z
B
= 30
Orientación según método de Euler, rotación alrededor
del eje Y rotado
C
=0
Orientación según método de Euler, rotación alrededor
del eje Z rotado
Desplazamiento a lo largo del eje Y
Ejemplo de programa:
Nuestra cinemática cartesiana debe desplazarse con la herramienta vertical de una
posición 1 a otra 2. A continuación, el eje giratorio gira la herramienta. Ahora, la
herramienta girada debe desplazarse a la posición 2.
Desplazamiento de pos1 a pos2:
Tool(tool1)
Lin(pos1)
Lin(pos2)
Festo GDCP-CMXR-SW-ES es 1205c
133
14. Herramientas
Z
Z
Y
X
pos1
Pieza
pos2
En el caso de las instrucciones de desplazamiento cartesiano de pos1 a pos2, el control
tiene en cuenta automáticamente los datos activos de herramienta tool1.
Giro del eje giratorio:
:
Tool(tool1)
Lin(pos1)
Lin(pos2)
CALL Rotate()
// Llamar subprograma
:
Z
Y
X
pos1
Pieza
pos2
El movimiento giratorio provoca que el Tool Center Point (TCP) se desplace hacia arriba.
Debido al eje neumático, el control no puede efectuar automáticamente movimientos de
compensación. Para aproximarse a la posición 2 debe definirse la orientación nueva de la
herramienta.
134
Festo GDCP-CMXR-SW-ES es 1205c
14. Herramientas
Nuevo desplazamiento desde pos2 con tool2:
:
Tool(tool1)
Lin(pos1)
Lin(pos2)
CALL Rotate()
// Llamar subprograma
Tool(tool2)
Lin(pos2)
:
Z
Y
Z
X
Movimiento
de compensación
Pieza
pos2
La segunda vez que se efectúa el desplazamiento desde la posición 2 se orienta el TCP a la
posición 2 con sus datos nuevos. Según el caso, puede realizarse un movimiento de
compensación con todos los ejes como máximo.
Nota
Si se utiliza un eje giratorio eléctrico procesado como grado de
libertad de movimiento en la cinemática cartesiana, no es
necesario modificar la orientación de herramienta al contrario que
si se utiliza el eje giratorio neumático.
Con el eje giratorio eléctrico se programa la orientación deseada
dentro de una instrucción de desplazamiento.
A continuación, el control CMXR calcula automáticamente la
posición de los ejes teniendo en cuenta la orientación programada.
Festo GDCP-CMXR-SW-ES es 1205c
135
15. Modo de la cinemática
15.
Modo de la cinemática
Debido a la construcción mecánica de las cinemáticas se dan posiciones en las que solo se
puede alcanzar una parte de la zona de trabajo. En caso de este tipo de posición se habla
de modo de la cinemática. Estas posiciones o modos pueden solaparse y se puede avanzar
hasta algunas de ellas también desde diferentes modos.
Nota
Si una cinemática dispone de un solo modo, este está activo
automáticamente. El ajuste y consideración de los modos en el
programa FTL no es relevante para estas cinemáticas.
Si una cinemática dipone de varios modos, estos deben indicarse durante la
programación. Esto es necesario para que el control pueda calcular una posición
inequívoca de la cinemática.
Ejemplo con una cinemática Scara:
Modo de la cinemática
Modo de la cinemática “ElbowLeft”
“ElbowRight”
En función de la definición del modo de la cinemática “ElbowRight” o “ElbowLeft” cambia
el espacio operativo de la cinemática. El control desplaza la cinemática automáticamente
dentro de la posición definida. Todos los puntos cero se mantienen siempre.
La indicación del modo se realiza con el macro SetRobotMode en el programa FTL. Todas
las posiciones cartesianas se refieren a esta indicación.
El modo de la cinemática es solo para movimientos de interpolación cartesianos como p.
ej. movimientos lineales o circulares. Para movimientos punto a punto el modo es
irrelevante.
Atención
La modificación del modo de la cinemática debe realizarse
mediante un movimiento PTP (punto a punto). Una interpolación
cartesiana, p. ej. lineal, no es posible. Atención: durante un
movimiento PTP pueden generarse trayectorias y valores dinámicos
inesperados en la herramienta.
136
Festo GDCP-CMXR-SW-ES es 1205c
15. Modo de la cinemática
15.1
Clasificación de los modos de cinemática, variables
El modo de la cinemática se determina con 3 parámetros para cada articulación de la
cinemática:

Muñeca (Wrist),

codo (Elbow) y

hombro (Shoulder)
Para leer o guardar el modo de la cinemática en el programa se utilizan 3 tipos de
variables. Las variables son enumeraciones que puede describirse con nombres fijos.
Cada articulación de la cinemática ofrece diferentes posibilidades de ajuste que están
representadas en la siguiente tabla:
Articulación
Significado
Tipo de variable
Enumeración,
posibilidades
Wrist
Posición de la muñeca
WRISTMODE
WristNotSet,
WristFlip
WristNoFlip
Elbow
Posición del codo
ELBOWMODE
ElbowNotSet,
ElbowLeft,
ElbowRight
Hombro
Posición del hombro
SHOULDERMODE
ShoulderNotSet,
ShoulderLeft,
ShoulderRight
Tabla 15.1 Clasificación de los modos
Las opciones ajustables dependen de la cinemática empleada.
Festo GDCP-CMXR-SW-ES es 1205c
137
15. Modo de la cinemática
15.2
Ajuste del modo de la cinemática <SetRobotMode>
Con el macro SetRobotMode se define el modo de la cinemática para las instrucciones de
movimiento cartesianas que siguen en el programa FTL.
Sintaxis
SetRobotMode (<Wrist> : WRISTMODE, <Elbow> : ELBOWMODE,
<Shoulder> : SHOULDERMODE)
Parámetros
Significado
Unidad
Wrist
Modo de los ejes manuales Enumeración WRISTMODE
Elbow
Modo del codo
Enumeración ELBOWMODE
Hombro
Modo del hombro
Enumeración SHOULDERMODE
Tabla 15.2 Parámetros de la instrucción SetRobotMode
Las opciones de ajuste de los parámetros se encuentran en el capítulo 15.1 Clasificación
de los modos de cinemática, variable de la página 137.
Ejemplo:
:
// activar el modo del codo derecha
SetRobotMode(WristNoMode, ElbowRight, ShoulderNoMode)
// Movimiento PTP en la zona de trabajo del modo ElbowRight
Ptp(StartPosModeRight)
// movimientos cartesianos dentro del modo
Lin(pos1)
Lin(pos2)
:
138
Festo GDCP-CMXR-SW-ES es 1205c
15. Modo de la cinemática
15.3
Lectura del modo de la cinemática
<GetRobotMode>
El modo de la cinemática se determina en el programa FTL con el macro GetRobotMode.
Con este macro se lee la posición de las articulaciones de la mano, del codo y del hombro.
Los valores leídos se emiten las variables transferidas.
Sintaxis
GetRobotMode (OPT <Wrist> : WRISTMODE,
OPT <Elbow> : ELBOWMODE,
OPT <Shoulder> : SHOULDERMODE)
Parámetros
Significado
Unidad
Wrist
Modo de los ejes manuales Enumeración WRISTMODE
Elbow
Modo del codo
Enumeración ELBOWMODE
Hombro
Modo del hombro
Enumeración SHOULDERMODE
Tabla 15.3 Parámetros de la instrucción GetRobotMode
Las opciones de ajuste de los parámetros se encuentran en el capítulo 15.1 Clasificación
de los modos de cinemática, variable de la página 137.
En base a las informaciones leídas es posible, por ejemplo, tomar medidas para posicionar
la cinemática en un modo especial.
El siguiente ejemplo determina el modo del codo en un robot Scara. A causa de los
obstáculos en el espacio operativo se requiere el modo ElbowRight.
Ejemplo:
:
// lectura del modo del codo, otros parámetros son opcionales
GetRobotMode(, modeElbow)
IF modeElbow = ElbowLeft THEN
// desplazar el eje Z hacia arriba
MoveAxisCart(Z, 0)
// activar el modo del codo derecha
SetRobotMode(WristNoMode, ElbowRight, ShoulderNoMode)
// Movimiento PTP en la zona de trabajo del modo ElbowRight
Ptp(StartPosModeRight)
END_IF
Festo GDCP-CMXR-SW-ES es 1205c
139
15. Modo de la cinemática
// inicio de los movimientos cartesianos en el nuevo modo
Lin(pos1)
Lin(pos2)
:
15.4
Cambio del modo de la cinemática
Para que el control pueda calcular una posición cartesiana en necesaria la información del
modo. Las instrucciones de desplazamiento cartesianas, como interpolaciones lineales o
circulares, solo son posibles dentro del modo activo. El cambio entre los modos es posible
únicamente con un macro punto a punto. Antes de cada instrucción de desplazamiento
cartesiano se compara el modo actual, en el que se encuentra la cinemática, con el modo
activado por macro. Si los modos no coinciden, se emite un mensaje de error.
Ejemplo:
En el espacio operativo de un robot SCARA se encuentran 2 piezas sobre las que se debe
aplicar pegamento. Sin embargo, en un modo el SCARA solo puede alcanzar una pieza.
Para llegar a la segunda se debe llevar a cambio un cambio de modo. Para este cambio de
modo se define una posición en el espacio operativo del modo correspondiente, que
avanzará hasta el cambio de modo.
PosModeRight
Modo de la cinemática
“ElbowRight”
PosModeLeft
Modo de la cinemática “ElbowLeft”
:
// activar el modo del codo derecha
SetRobotMode(WristNoMode, ElbowRight, ShoulderNoMode)
// Movimiento PTP en la zona de trabajo del modo ElbowRight
Ptp(PosModeRight)
// aplicar objeto 1
SetRefSys(Object1)
CALL ApplyGlue
140
Festo GDCP-CMXR-SW-ES es 1205c
15. Modo de la cinemática
Lin(SafePosObject1)
// activar el modo del codo izquierda
SetRobotMode(WristNoMode, ElbowLeft, ShoulderNoMode)
// Movimiento PTP en la zona de trabajo del modo ElbowLeft
Ptp(PosModeLeft)
// aplicar objeto 2
SetRefSys(Object2)
CALL ApplyGlue
Lin(SafePosObject2)
:
Festo GDCP-CMXR-SW-ES es 1205c
141
16. Interface PROFIBUS
16.
Interface PROFIBUS
El CMXR puede ser controlado por una unidad de control de nivel superior (PLC/IPC)
mediante la interface PROFIBUS. Además, a través de ella pueden escribirse y leerse datos
en forma de variables. Todos estos datos son datos compartidos de sistema y están a
disposición de todos los programas FTL. La comunicación con la unidad de control de nivel
superior se efectúa cíclicamente en el ciclo de actualización de PROFIBUS.
Con el nuevo arranque del sistema se ajustan todos los valores a cero. La unidad de
control de nivel superior debe enviar los datos necesarios para procesar los programas
antes de arrancar el programa.
Nota
Si en un programa se necesitan datos coherentes, es importante
copiarlos como datos locales antes de su procesamiento.
Nota
Los datos de interface no se guardan en el buffer y todos tienen el
valor cero cuando se arranca el sistema de nuevo. Los datos
necesarios para el procesamiento deben escribirse antes de
arrancar.
142
Festo GDCP-CMXR-SW-ES es 1205c
16. Interface PROFIBUS
Indicaciones sobre el procesamiento de señales
Las variables FTL de la interface PLC tratadas en los siguientes capítulos se calculan, como
otras variables, siempre en el cálculo por adelantado (avance de proceso) del programa
FTL. Si es necesario ejecutar variables durante la ejecución de la línea de programa activa
(ejecución principal), debe tomarse una serie de medidas adicionales. Una posibilidad
consiste en utilizar la instrucción DO.
La siguiente gráfica explica las diferencias que existen en el procesamiento de señales:
Ejecución
principal
Avance
Lin(pos1)
Lin(pos2)
Ejecución
principal
Lin(pos1)
Lin(pos2)
Lin(pos3)
Lin(pos3)
Lin(pos4)
Lin(pos4)
Lin(pos5)
Lin(pos5) DO plc_Dint[1] := 1
plc_Dint[1] := 2
Lin(pos6)
Lin(pos6)
Lin(pos7) DO plc_DInt[3] := 2
Lin(pos7)
Lin(pos8)
Lin(pos8)
Avance
Lin(pos9)
Lin(pos9)
Lin(pos10)
La variable se ejecuta
en el avance de
proceso
Uso de la instrucción DO, la
variable se procesa en la
ejecución principal
16.1 Entradas y salidas booleanas, plc_InBool,
plc_OutBool
La interface dispone de 16 señales de entrada y salida digitales que en adelante se verán
siempre desde la perspectiva del CMXR. Las señales están disponibles en forma de
variable booleana en el control. Estas señales booleanas se intercambian cíclicamente con
la unidad de control de nivel superior.
Nota
Las variables booleanas se transmiten automáticamente a la
unidad de control de nivel superior o son leídas por dicha unidad a
través del ciclo de PROFIBUS.
Las variables booleanas están guardadas en una matriz a la que se accede a través de los
índices 0 a 15.
Festo GDCP-CMXR-SW-ES es 1205c
143
16. Interface PROFIBUS
Sintaxis
plc_InBool [ <Arrayindex> ] : BOOL
plc_OutBool [ <Arrayindex> ] : BOOL
En las variables de matriz plc_InBool están guardadas todas las señales de entrada.
La variable de matriz plc_OutBool contiene todos los datos de salida.
Ejemplo:
:
plc_OutBool[9] := FALSE
// Bit 9 a PLC en FALSE
IF plc_InBool[5] THEN
// Comprobar bit 5 de PLC
Lin(pos1)
Lin(pos2)
END_IF
plc_OutBool[9] := TRUE
// Bit 9 a PLC en TRUE
:
16.2
Variables enteras de 32 bits, plc_Dint
La interface dispone de 256 variables enteras del tipo DINT, que comprende 32 bits. Estas
variables no se someten a un intercambio de datos cíclico y el control externo puede
escribirlas o leerlas según sea necesario.
Nota
Las variables enteras no son leídas por la unidad de control de
nivel superior ni se envían a dicha unidad automáticamente. Si es
necesario deberán ser enviadas a la unidad de control de nivel
superior o ser leídas por ésta.
Las variables enteras están guardadas en una matriz a la que se accede a través de los
índices 0 a 255.
Sintaxis
plc_Dint [ <Arrayindex> ] : DINT
144
Festo GDCP-CMXR-SW-ES es 1205c
16. Interface PROFIBUS
Ejemplo:
:
IF plc_Dint[3] = 13 THEN
:
:
END_IF
16.3
Posiciones, plc_AxisPos, plc_CartPos
La interface soporta dos tipos de datos de posición. Desde el control externo es posible
enviar posiciones de eje y posiciones cartesianas al control multieje CMXR. El número
máximo es de 256 posiciones de eje y 256 posiciones cartesianas. Estas variables no se
someten a un intercambio de datos cíclico y el control externo puede escribirlas o leerlas
según sea necesario.
Nota
Las variables de posición no son leídas por la unidad de control de
nivel superior ni se envían a dicha unidad automáticamente. Si es
necesario deberán ser enviadas por el control externo o ser leídas
por éste.
Las variables de posición están guardadas en matrices. El acceso a ellas se realiza a través
de los índices 0 a 255.
Nota
plc_AxisPos [ <Arrayindex> ] : AXISPOS
plc_CartPos [ <Arrayindex> ] : CARTPOS
La variable de interface plc_AxisPos contiene 256 posiciones del tipo de datos AXISPOS;
la variable plc_CartPos contiene 256 posiciones del tipo de datos CARTPOS.
Ejemplo:
:
Ptp(plc_AxisPos[17])
Lin(plc_AxisPos[18])
Lin(plc_AxisPos[19])
Lin(plc_CartPos[1])
:
Festo GDCP-CMXR-SW-ES es 1205c
145
16. Interface PROFIBUS
16.4
Sistemas de referencia, plcRefSys
A través de la interface externa puede definirse un máximo de 16 sistemas de referencia.
Estas variables son del tipo REFSYSDATA y pueden utilizarse con la instrucción SetRefSys.
Estas variables no se someten a un intercambio de datos cíclico y el control externo puede
escribirlas o leerlas según sea necesario.
Nota
Los sistemas de referencia no son leídos por la unidad de control
de nivel superior ni se envían a dicha unidad automáticamente. Si
es necesario deberán ser enviadas por el control externo o ser
leídas por éste.
Los sistemas de referencia están guardados en una matriz a la que se accede a través de
los índices 0 a 15.
Sintaxis
plc_RefSys [ <Arrayindex> ] : REFSYSDATA
El tipo de datos REFSYSDATA permite relacionar un sistema de referencia con otro de
forma aditiva. La interface permite esta operación, pero sólo dentro de la propia interface,
es decir, no se puede activar ninguna referencia a los sistemas de referencia ya existentes
en el sistema. La referencia a otro sistema de referencia se basa en una asignación
numérica predefinida de 0 a 15 efectuada por el control externo. Si el valor establecido es
-1, se activa la referencia respecto al sistema de coordenadas universales de la cinemática.
Nota
Los sistemas de referencia que se establecen a través de la
interface externa sólo pueden enlazarse dentro de los sistemas de
referencia de la interface. No es posible referenciar a un sistema de
referencia definido fuera de la interface.
Ejemplo:
:
Lin(pos2)
SetRefSys(plc_RefSys[3])
Lin(pos3)
Lin(pos4)
:
146
Festo GDCP-CMXR-SW-ES es 1205c
16. Interface PROFIBUS
16.5
Pausa programada <ProgHold>
Esta instrucción opera en combinación con la señal HALTENA de la interface PLC. Es adecuada para fines de prueba o puesta en funcionamiento y se puede agregar a cualquier
línea de programa para detenerse en ella a petición del programa.
Si la señal HALTENA está activada en la interface, es decir, si tiene el estado TRUE, el
programa de movimientos se detiene al llamar la instrucción ProgHold. Solamente se
detendrá el programa en el que se encuentra la instrucción ProgHold. Los demás
programas, como los programas paralelos, continuarán ejecutándose. Si el PLC asigna a la
señal HALTENA el valor de estado FALSE, el programa detenido continuará ejecutándose.
Nota
Si con la instrucción ProgHold se detienen varios programas (p. ej.
programas paralelos), el estado de señal FALSE hará que todos
ellos vuelvan a ponerse en marcha en conjunto. No es posible
poner en marcha programas específicos seleccionados de entre
aquellos que se han detenido.
Sintaxis
ProgHold ( )
Para llamar a la instrucción no se requiere ningún parámetro.
Ejemplo:
:
OvlVel(100)
// Avance aproximado completo
Lin(pos1)
Lin(pos2)
ProgHold()
// Pausa programada
Lin(pos3)
Lin(pos4)
ProgHold()
// Pausa programada
Lin(pos5)
:
El programa del ejemplo se aproxima a diferentes posiciones estando ajustado un avance
aproximado por velocidad del 100%. Si la señal de la pausa programada está activada, el
programa se para en este punto. Con ello se obtiene el siguiente desarrollo de velocidad:
Festo GDCP-CMXR-SW-ES es 1205c
147
16. Interface PROFIBUS
Desarrollo con pausa programada:
Tiempo entre la parada y la reanudación de la marcha
Velocidad
Tiempo
pos1
pos2
pos3
pos4
pos5
Desarrollo sin pausa programada:
Velocidad
Tiempo
pos1
148
pos2
pos3
pos4
pos5
Festo GDCP-CMXR-SW-ES es 1205c
17. Interface FTL con PLC interno (sólo para controlador multieje con CoDeSys)
17. Interface FTL con PLC interno (sólo para
controlador multieje con CoDeSys)
Para poder crear también procesos individuales en paralelo a los programas de movimientos, el control CMXR posee un PLC CoDeSys integrado, que permite una programación
según IEC 61131-3. La descripción de rendimiento que figura en el manual del sistema del
correspondiente control CMXR detalla en qué medida se admite esta función.
Este capítulo describe la interface entre el control de movimientos y procesos desde el
punto de vista de la programación FTL. Esta interface está caracterizada por variables FTL,
que pueden ser descritas y leídas por el PLC CoDeSys.
17.1
Variables del sistema FTL
Todas las variables FTL necesarias para la interface ya están almacenadas como variable
del sistema y están disponibles de inmediato. Las variables existen como tipo de datos
básicos BOOL, DWORD, DINT y REAL, así como variable de posición de los tipos AXISPOS
y CARTPOS.
Todas las variables están caracterizadas como ARRAY con un tamaño de 256 elementos.
Para facilitar el uso de los datos, para cada tipo de datos existe una matriz de entrada y
otra de salida. Desde el punto de vista de la programación FTL, esta denominación es:
-
Los datos de entrada son datos descritos por el PLC (complemento de nombre In).
-
Los datos de salida son datos leídos por el PLC (complemento de nombre Out).
Nota
Los datos que espera el PLC deben extraerse de los datos de entrada. Los datos que se envían al PLC deben escribirse siempre en
los datos de salida. Si se confunden las áreas de datos, se producirán estados de programa erróneos.
La siguiente tabla muestra la extensión de las variables de interfaz FTL disponibles:
Tipo de datos Datos de entrada
Datos de salida
BOOL
plc_InBool : ARRAY[256] OF BOOL
plc_OutBool : ARRAY[256] OF BOOL
DINT
plc_InDint : ARRAY[256] OF DINT
plc_OutDint : ARRAY[256] OF DINT
REAL
plc_InReal : ARRAY[256] OF REAL
plc_OutReal : ARRAY[256] OF REAL
DWORD
plc_InDword : ARRAY[256] OF DWORD
plc_OutDword : ARRAY[256] OF DWORD
AXISPOS
plc_InAxisPos : ARRAY[256] OF AXISPOS
plc_OutAxisPos : ARRAY[256] OF AXISPOS
CARTPOS
plc_InCartPos : ARRAY[256] OF CARTPOS
plc_OutCartPos : ARRAY[256] OF CARTPOS
Tabla 17.1 Variables de sistema FTL interfaz a PLC
Festo GDCP-CMXR-SW-ES es 1205c
149
17. Interface FTL con PLC interno (sólo para controlador multieje con CoDeSys)
17.1.1
Ejemplo con variables del sistema
Un programa FTL puede procesar un tipo A y B. Estos son seleccionados mediante una
especificación a través del PLC. Al terminar, el programa FTL envía un acuse de recibo al
PLC. Además las variables de interfaz FTL se clasifican de la siguiente manera:
-
plc_OutBool[0]
Mensaje de respuesta cuando el programa termina
-
plc_InBool[0]
Señal de inicio para ejecución del programa
-
plc_InBool[1]
Selección del tipo de pieza A
-
plc_InBool[2]
Selección del tipo de pieza B
Para que la ejecución del programa funcione de manera segura, el PLC debe garantizar
que antes de la señal de inicio se haya realizado correctamente la selección de las piezas
mediante las dos señales plc_InBool[1] y plc_InBool[2].
:
OvlVel(100)
// Avance aproximado completo
Lin(Home)
plc_OutBool[0] := FALSE
// Confirmación de tareas resueltas
= FALSE
WAIT plc_InBool[0]
// Esperar a señal de inicio
IF plc_InBool[1] THEN
// Procesar pieza A
CALL PartTypeA
ELSIF plc_InBool[2] THEN
// Procesar pieza B
CALL PartTypeB
END_IF
plc_OutBool[0] := TRUE
// Confirmación de tareas resueltas
= TRUE
Lin(Home)
:
La instrucción WAIT detiene el cálculo por adelantado del programa hasta que la señal
plc_InBool[0] presenta el estado TRUE.
Nota
El programa FTL siempre se calcula por adelantado. Esto también
es aplicable a todas las variables de interface programadas. Por
este motivo, desde el PLC debe procurarse que todos los datos
necesarios estén a disposición del programa FTL en el momento
adecuado. De ser necesario, deben implementarse medidas como,
p. ej., esperar a datos especiales y, de este modo, detener el
cálculo por adelantado.
150
Festo GDCP-CMXR-SW-ES es 1205c
17. Interface FTL con PLC interno (sólo para controlador multieje con CoDeSys)
17.1.2
Ejemplo con variables de sistema e instrucción MAP
Las variables de sistema poseen nombres establecidos. Para asignar nombres
convenientes a las señales de interfaz, definidos libremente, se utiliza la instrucción MAP.
Con la instrucción MAP se crean referencias que se vinculan entonces a las variables
propiamente dichas.
De forma análoga al ejemplo anterior:
Variable FTL:
// Declaración y vinculación de las señales a cada variable
CycleFinished : MAPTO BOOL := MAP(plc_OutBool[0])
StartFromPlc : MAPTO BOOL := MAP(plc_InBool[0])
JobPartA : MAPTO BOOL := MAP(plc_InBool[1])
JobPartB : MAPTO BOOL := MAP(plc_InBool[2])
Programa FTL:
:
// Avance aproximado completo
OvlVel(100)
Lin(Home)
CycleFinished := FALSE
// Confirmación de tareas resueltas
= FALSE
WAIT StartFromPlc
// Esperar a señal de inicio
IF JobPartA THEN
// Procesar pieza A
CALL PartTypeA
ELSIF JobPartB THEN
// Procesar pieza B
CALL PartTypeB
END_IF
CycleFinished := TRUE
// Confirmación de tareas resueltas
= TRUE
Lin(Home)
:
Nota
Gracias al uso de variables de referencia y de la instrucción se
mejora la lectura de los programas.
Festo GDCP-CMXR-SW-ES es 1205c
151
18. Sistema de comunicación
18.
Sistema de comunicación
Desde el programa de movimientos pueden generarse mensajes. Se distinguen los
siguientes tipos de mensaje:
-
Información
-
Advertencia
-
Error
Estos mensajes se introducen en la memoria de mensajes del control y se archivan como
corresponde. Los mensajes se borran acusando recibo de ellos en la unidad de mando
manual o a través de un control externo.
Figura de la memoria de mensajes en la unidad de mando manual:
18.1
Textos de mensaje
La programación en FTL (Festo Teach Language) permite generar mensajes de información,
advertencia y error desde el programa de movimientos. El propio usuario define libremente los textos de mensaje como cadena de caracteres (STRING). Esta cadena de
caracteres también puede contener entradas variables en forma de dos parámetros como
máximo (p. ej., DINT, REAL, STRING, BOOL). Los dos parámetros opcionales se colocan
introduciendo un símbolo de porcentaje y un número en el texto de mensaje.
%1
equivale al primer parámetro opcional
%2
equivale al segundo parámetro opcional
152
Festo GDCP-CMXR-SW-ES es 1205c
18. Sistema de comunicación
Si se indican tipos, como posiciones de eje, sólo se inserta el nombre de variable en la
cadena de caracteres. Los tipos de datos estructurados no pueden representarse en un
texto de mensaje.
Nota
El contenido de las variables se inserta en el texto de mensaje al
transferir los tipos de variable DINT, REAL y STRING. El tipo de
variable BOOL se inserta en el texto de mensaje dependiendo de si
el estado es TRUE o FALSE.
Ejemplo:
En un programa se crean dos variables con valores asignados. Estos valores se emiten con
la instrucción SetInfo.
Variables:
param1 : DINT := 7
param2 : REAL := 3.48
Código de programa:
SetInfo(“Sensor %1, pressure %2 bar“, param1, param2)
Se visualiza el siguiente texto informativo: “Sensor 7, pressure 3,48 bar”.
Festo GDCP-CMXR-SW-ES es 1205c
153
18. Sistema de comunicación
18.2
Información <SetInfo>
La instrucción SetInfo coloca un mensaje de información en el sistema de comunicación.
Sintaxis
SetInfo(
<text> : STRING,
OPT <param1> : ANY,
OPT <param2> : ANY)
Parámetros
Significado
Unidad
text
Texto del mensaje de información
STRING
param1
1. parámetro posible
ANY
Param2
2. parámetro posible
ANY
Tabla 18.1 Parámetros de la instrucción SetInfo
La composición del texto de mensaje se describe en el capítulo 18.1
de la página 152.
Un mensaje de información se marca con el símbolo
control multieje CMXR.
Textos de mensaj
en la memoria de errores del
Nota
Un mensaje de información no influye en el movimiento de ningún
modo. Sólo sirve para informar.
Ejemplo:
pressure := Sensor.Read();
// Leer un valor de presión
cycle
// Contar ciclo
:= cycle + 1
SetInfo ("Cycle %1 finished, Value %2", cycle, pressure)
Indicación en la unidad de mando manual:
154
Festo GDCP-CMXR-SW-ES es 1205c
18. Sistema de comunicación
18.3
Advertencia <SetWarning>
La instrucción SetWarning coloca un mensaje de advertencia en el sistema de
comunicación.
Sintaxis
SetWarning( <text> : STRING,
OPT <param1> : ANY,
OPT <param2> : ANY)
Parámetros
Significado
Unidad
text
Texto del mensaje de advertencia
STRING
param1
1. parámetro posible
ANY
Param2
2. parámetro posible
ANY
Tabla 18.2 Parámetros de la instrucción SetWarning
La composición del texto de mensaje se describe en el capítulo 18.1
de la página 152.
Un mensaje de advertencia se marca con el símbolo
control multieje CMXR.
Textos de mensaj
en la memoria de errores del
Nota
Un mensaje de advertencia no influye en el movimiento de ningún
modo. Sólo sirve para informar.
Ejemplo:
pressure := Sensor.Read();
// Leer un valor de presión
cycle
// Contar ciclo
:= cycle + 1
SetWarning("Cycle %1 finished, Value %2",cycle, pressure)
Indicación en la unidad de mando manual:
Festo GDCP-CMXR-SW-ES es 1205c
155
18. Sistema de comunicación
18.4
Mensaje de error <SetError>
La instrucción SetError coloca un mensaje de error en el sistema de comunicación. Esta
instrucción influye en el procesamiento del programa, parándolo. Los movimientos que se
estén efectuando se detienen. Acusando recibo del mensaje de error se puede reanudar el
programa. Para ello se deben habilitar los controladores del motor y se debe iniciar
nuevamente el programa.
Sintaxis
SetError(
<text> : STRING,
OPT <param1> : ANY,
OPT <param2> : ANY)
Parámetros
Significado
Unidad
Text
Texto del mensaje de error
STRING
param1
1. parámetro posible
ANY
Param2
2. parámetro posible
ANY
Tabla 18.3 Parámetros de la instrucción SetError
Un mensaje de error se marca con el símbolo
multieje CMXR.
en la memoria de errores del control
Nota
La edición de un mensaje de error provoca la detención del
movimiento. La cinemática no puede continuar el recorrido hasta
que se acuse recibo del mensaje de error.
Ejemplo:
pressure := Sensor.Read();
// Leer un valor de presión
cycle
// Contar ciclo
:= cycle + 1
SetError("Cycle %1 error, pressure %2", cycle, pressure)
Indicación en la unidad de mando manual:
156
Festo GDCP-CMXR-SW-ES es 1205c
18. Sistema de comunicación
Si aparece un mensaje de error, el texto de error se visualiza también en la cabecera de la
unidad de mando manual. Además, el LED de error de la unidad de mando manual se
ilumina en rojo.
Festo GDCP-CMXR-SW-ES es 1205c
157
19. Funciones
19.
Funciones
19.1
Lectura de la posición actual <ReadActualPos>
Lectura de la posición actual de la cinemática.
Sintaxis
ReadActualPos (<Pos> : POSITION)
La posición actual del robot se escribe en la variable transferida. Si la variable transferida
es del tipo CARTPOS, la posición se guarda como valor cartesiano. Si se transfiere una
variable del tipo AXISPOS, la posición se guarda en coordinadas de ejes.
Parámetro
Significado
Unidad
Pos
Variable de destino de la posición
AXISPOS o CARTPOS
leída
Tabla 19.1 Parámetro de la instrucción ReadActualPos
Atención
Un valor de posición guardado en una variable sólo se conserva
mientras el programa o el proyecto está cargado. Los valores de
variable no se guardan en el archivo de datos de la tarjeta de
memoria. Los valores se pierden cuando se deselecciona el
programa/proyecto.
Para guardar la posición puede utilizarse la instrucción
SavePosition.
Ejemplo:
El programa del ejemplo lee la posición actual, recorre los movimientos programados en
las instrucciones y, al final, regresa a la posición leída.
Variable:
startPos :
AXISPOS := (0, 0, 0, 0, 0, 0, 0, 0, 0)
axis0
:
AXISPOS := (0, 0, 0, 0, 0, 0, 0, 0, 0)
axis1
:
AXISPOS := (60, -120, 0, 0, 0, 0, 0, 0, 0)
axis2
:
AXISPOS := (-120, -120, -250, 0, 0, 0, 0, 0, 0)
158
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
Programa:
ReadActualPos(startPos)
PTP(axis0)
PTP(axis1)
PTP(axis2)
PTP(startPos)
19.2 Lectura de la posición de destino
<ReadTargetPos>
Lectura de la posición de destino programada de la cinemática.
Sintaxis
ReadTargetPos (<Pos> : POSITION)
La posición de destino actual programada del robot se escribe en la variable transferida. Si
la variable transferida es del tipo CARTPOS, la posición se guarda como valor cartesiano.
Si se transfiere una variable del tipo AXISPOS, la posición se guarda en coordinadas de
ejes.
Parámetro
Significado
Unidad
Pos
Variable de destino de la posición
AXISPOS o CARTPOS
leída
Tabla 19.2 Parámetro de la instrucción ReadTargetPos
Atención
Un valor de posición guardado en una variable sólo se conserva
mientras el programa o el proyecto está cargado. Los valores no se
guardan en el archivo de datos de la tarjeta de memoria. Los
valores se pierden cuando se deselecciona el programa o proyecto.
Para guardar la posición puede utilizarse la instrucción
SavePosition.
Festo GDCP-CMXR-SW-ES es 1205c
159
19. Funciones
19.3 Memorización del valor de posición de manera
permanente <SavePosition>
La instrucción FTL guarda un valor de posición de manera permanente en la tarjeta de
memoria.
Sintaxis
SavePosition (<Pos> : POSITION)
Con la instrucción SavePosition se guardan los valores de la variable <Pos> en el archivo de
datos de la tarjeta de memoria. De este modo, la posición puede restablecerse al volver a
arrancar el control.
Parámetro
Significado
Unidad
Pos
Posición que se desea guardar
AXISPOS o CARTPOS
Tabla 19.3 Parámetro de la instrucción SavePosition
Atención
La vida útil de la tarjeta de memoria se reduce si se utiliza con
frecuencia para escribir posiciones. La instrucción SavePosition no
debe llamarse cíclicamente en ningún caso y puede utilizarse para
realizar ajustes ocasionales de la aplicación.
19.4
Lectura de la fecha y hora del sistema <Time>
Lectura de la fecha y hora del sistema en segundos desde las 00:00 horas del 01.01.1970.
Sintaxis
(<valor de fecha y hora> : DINT) := Time ( )
Esta instrucción lee la fecha y hora del sistema del control y lo devuelve como valor DINT.
Ejemplo:
value := Time()
160
// Leer la hora y la fecha actuales
del sistema
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
19.5 Conversión de un valor de fecha y hora en texto
<TimeToStr>
Conversión de un valor de fecha y hora en texto.
Sintaxis
(<cadena de fecha y hora> : STRING) := TimeToStr (OPT sysTime :
DINT)
Esta instrucción puede convertir la fecha y la hora (parámetro sysTime) en un texto con el
formato “DDD mon dd hh:mm:ss yyyy”. Sin el parámetro sysTime, la fecha y hora actuales
del sistema se devuelven formateadas.
El parámetro sysTime indica la fecha y hora en segundos desde las 00:00 del 01.01.1970.
Parámetros:
Parámetro
Significado
Unidad
sysTime
Indicación opcional, valor de fecha y
Segundos
hora que debe convertirse
Tabla 19.4 Parámetro de la función TimeStr
Ejemplo:
str_Time := TimeToStr()
// Leer la hora y la fecha actuales
del sistema
Devolución:
str_Time = “Mon Feb 13 11:23:44 2006“
Festo GDCP-CMXR-SW-ES es 1205c
161
19. Funciones
19.6 Seno <SIN>, <ASIN>
La función seno establece la razón matemática entre un ángulo y los lados de un triángulo
rectángulo.
Fórmula de seno:
sin(alfa) = cateto opuesto / hipotenusa
sin(alfa) = a / c
La indicación del ángulo se realiza en grados.
Sintaxis
(<valor de seno> : REAL) := SIN(<ángulo> : REAL)
Aplicación:
La función seno sirve para calcular tramos desconocidos en un triángulo rectángulo. El tramo desconocido se calcula conociéndose el ángulo y el cateto opuesto o la hipotenusa.
Si no se conoce el ángulo, el CMXR prepara la función arco seno. Esta función calcula el
ángulo contenido, p. ej., alfa, a partir del cateto opuesto y de la hipotenusa.
Sintaxis
(<ángulo en grados> : REAL) := ASIN(<valor de seno>)
La indicación del ángulo se realiza en grados.
162
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
Ejemplo:
a
:= 30
// Cateto opuesto
alpha := 23.5
// Ángulo alfa
c
:= a / SIN(alpha)
// Cálculo de la hipotenusa
a
: = 45.89
// Cateto opuesto
c
:= 145.67
// Hipotenusa
value := a / c
alpha := ASIN(value)
19.7
// Cálculo del ángulo
Coseno <COS>, <ACOS>
La función coseno establece la razón matemática entre un ángulo y los lados de un
triángulo rectángulo.
Fórmula de coseno:
cos(alfa) = cateto adyacente / hipotenusa
cos(alfa) = b / c
La indicación del ángulo se realiza en grados.
Sintaxis
(<valor de coseno> : REAL) := COS( <ángulo>)
Aplicación:
La función coseno sirve para calcular tramos desconocidos en un triángulo rectángulo. El
tramo desconocido se calcula conociéndose el ángulo y el cateto adyacente o la
hipotenusa.
Si no se conoce el ángulo, el CMXR prepara la función arco coseno. Esta función calcula el
ángulo contenido, p. ej., alfa, a partir del cateto adyacente y de la hipotenusa.
Festo GDCP-CMXR-SW-ES es 1205c
163
19. Funciones
Sintaxis
(<ángulo en grados> : REAL) := ACOS(<valor de coseno>)
La indicación del ángulo se realiza en grados.
Ejemplo:
b
:= 30
// Cateto adyacente
alpha := 23.5
// Ángulo alfa
c
:= b / COS(alpha)
// Cálculo de la hipotenusa
b
:= 45.89
// Cateto adyacente
c
:= 145.67
// Hipotenusa
value := b / c
alpha := ACOS(value)
164
// Cálculo del ángulo
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
19.8
Tangente <TAN>, <ATAN>
La función tangente establece la razón matemática entre un ángulo y los lados de un
triángulo rectángulo.
Fórmula de tangente:
tan(alfa) = cateto opuesto / cateto adyacente
tan(alfa) = a / b
La indicación del ángulo se realiza en grados.
Sintaxis
(<valor de tangente> : REAL) := TAN( <ángulo>)
Aplicación:
La función tangente sirve para calcular tramos desconocidos en un triángulo rectángulo. El
tramo desconocido se calcula conociéndose el ángulo y el cateto adyacente o el cateto
opuesto.
Si no se conoce el ángulo, el CMXR prepara la función arco tangente. Esta función calcula
el ángulo contenido, p. ej., alfa, a partir del cateto adyacente y del cateto opuesto.
Sintaxis
(<ángulo en grados> : REAL) := ATAN(<valor de tangente>)
La indicación del ángulo se realiza en grados.
Festo GDCP-CMXR-SW-ES es 1205c
165
19. Funciones
Ejemplo:
a
:= 30
// Cateto opuesto
alpha := 23.5
// Ángulo alfa
b
:= a / TAN(alpha)
// Cálculo del cateto adyacente
a
:= 45.89
// Cateto opuesto
b
:= 145.67
// Cateto adyacente
value := a / b
alpha := ATAN(value) // Cálculo del ángulo contenido
19.9 Cotangente <COT>, <ACOT>
La función cotangente establece la razón matemática entre un ángulo y los lados de un
triángulo rectángulo.
Fórmula de cotangente:
Cotan(alfa) = cateto adyacente / cateto opuesto
cotan(alfa) = b / a
La indicación del ángulo se realiza en grados.
Sintaxis
(<valor de cotangente> : REAL) := COT(<ángulo>)
Aplicación:
La función cotangente sirve para calcular tramos desconocidos en un triángulo rectángulo.
El tramo desconocido se calcula conociéndose el ángulo y el cateto adyacente o el cateto
opuesto.
Si no se conoce el ángulo, el CMXR prepara la función arco cotangente. Esta función
calcula el ángulo contenido, p. ej., alfa, a partir del cateto adyacente y del cateto opuesto.
Sintaxis
(<ángulo en grados> : REAL) := ACOT(<valor de cotangente>)
La indicación del ángulo se realiza en grados.
166
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
Ejemplo:
a
:= 30
// Cateto opuesto
alpha := 23.5
// Ángulo alfa
b
:= a
// Cálculo del cateto adyacente
a
:= 45.89
// Cateto opuesto
b
:= 145.67
// Cateto adyacente
* COT(alpha)
value := b / a
alpha := ACOT(value)
19.10
// Cálculo del ángulo contenido
Tangente 2 <ATAN2>
Calcula el arco tangente con rango de + π a –π.
Sintaxis
(<argumento> : REAL) := ATAN2 (<y> : REAL, <x> : REAL)
19.11
Logaritmo <LN>
La función logaritmo calcula el logaritmo natural del argumento transferido.
Sintaxis
(<logaritmo natural> : REAL) := LN (<valor> : REAL)
19.12
Exponente <EXP>
La función exponencial calcula el valor e(x).
Sintaxis
(<resultado> : REAL) := EXP (<valor>:REAL)
Festo GDCP-CMXR-SW-ES es 1205c
167
19. Funciones
19.13
Valor absoluto <ABS>
La función valor absoluto devuelve el valor absoluto del valor REAL transferido. El valor
devuelto es siempre positivo. Los números negativos se devuelven como valor absoluto
(con signo positivo).
Sintaxis
(<valor absoluto> : REAL) := ABS (<valor> : REAL)
Ejemplo:
Level := 452.98
Level := ABS(Level) // Level tiene el valor absoluto 452.98
Level := -1056.61
Level := ABS(Level) // Level tiene el valor absoluto 1056.61
19.14
Raíz cuadrada <SQRT>
La función raíz halla el valor de la raíz cuadrada de una expresión.
Sintaxis
(<valor de raíz> : REAL) := SQRT (<valor> : REAL)
Ejemplo:
Cálculo de la longitud c en un triángulo rectángulo.
Teorema de Pitágoras:
C² = A² + B² o C = √(A² + B²)
Ejemplo de programa:
a
:= 152.67
// Longitud del cateto A
b
:= 63.12
// Longitud del cateto B
value := a * a + b * b
c
168
:= SQRT(value)
// Cálculo de la hipotenusa
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
19.15 Desplazamiento de bits <SHR>, <SHL>
Con las funciones SHR y SHL es posible desplazar bits de datos del tipo DWORD a la
derecha (función SHR) y a la izquierda (función SHL). Los bits “sobrantes” desplazados a
un lado de la variable se descartan. Los bits del otro lado se rellenan con el valor “0”.
Sintaxis
(<variable> :DWORD) := SHR (<valor : DWORD>, <count> : DINT)
(<variable> :DWORD) := SHL (<valor : DWORD>, <count> : DINT)
Ejemplo:
Con la instrucción
Mask := SHL(Mask, 3)
el contenido de la variable Mask se desplaza 3 bits a la izquierda. Por la derecha se
insertan 3 bits con el valor “0”.
Contenido de la variable:
1001 1111 0000 1100 1111 1111 1001 1100
Se obtiene el patrón de bits:
1111 1000 0110 0111 1111 1100 1110 0000
Con la instrucción
Mask := SHR(Mask, 3)
el contenido de la variable Mask se desplaza 3 bits a la derecha. Por la izquierda se
insertan 3 bits con el valor “0”.
Contenido de la variable:
1001 1111 0000 1100 1111 1111 1001 1100
Se obtiene el patrón de bits:
0001 0011 1110 0001 1001 1111 1111 0011
Festo GDCP-CMXR-SW-ES es 1205c
169
19. Funciones
19.16
Rotación de bits <ROR>, <ROL>
Con las funciones ROR y ROL es posible rotar bits de datos del tipo DWORD a la derecha
(función ROR) y a la izquierda (función ROL). Al rotar el patrón de bits, el bit que se pierde
se vuelve a insertar en el otro lado.
Sintaxis
(<variable> : DWORD) := ROR (<valor : DWORD>, <count> : DINT)
(<variable> : DWORD) := ROL (<valor : DWORD>, <count> : DINT)
Ejemplo:
Con la instrucción
Mask := ROL(Mask, 4)
el contenido de la variable Mask gira 4 bits a la izquierda. En el lado derecho se insertan
de nuevo los 4 bits.
Contenido de la variable:
1011 1111 0110 1001 0011 000 1001 1010
Se obtiene el patrón de bits:
1111 0110 1001 0011 000 1001 1010 1011
Con la instrucción
Mask := ROR(Mask, 4)
el contenido de la variable Mask gira 4 bits a la derecha. En el lado izquierdo se insertan
de nuevo los 4 bits.
Contenido de la variable:
1011 1111 0110 1001 0011 000 1001 1010
Se obtiene el patrón de bits:
1010 1011 1111 0110 1001 0011 000 1001
170
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
19.17
Conversión de un valor en una cadena <STR>
Convierte cualquier tipo de datos en una cadena de caracteres.
Sintaxis
(<variable> : STRING) := STR (<valor> : ANY)
Ejemplo:
Con la instrucción STR se convierte el valor de la variable Real1 en una cadena.
Real1 := 25.5
String1 := STR(Real1)
String1 tiene ahora el valor “25.500000”.
19.18
Conversión de un valor ASCII en un carácter
<CHR>
Convierte un valor ASCII en un único carácter.
Sintaxis
(<variable> : STRING) := CHR (<valor> : DINT / DWORD)
Ejemplo:
Con la siguiente instrucción se asigna a la variable String1 el valor “a”.
String1 := CHR(97)
19.19
Conversión de un carácter en un valor ASCII
<ORD>
Convierte un único carácter en un valor ASCII.
Sintaxis
(<variable> : DINT / DWORD) := ORD (<valor> : STRING)
Ejemplo:
Con la siguiente instrucción se asigna a la variable Dint1 el valor 65.
Dint1 := ORD(“A”)
Festo GDCP-CMXR-SW-ES es 1205c
171
19. Funciones
19.20
Establecer el bit en una variable WORD
<SetBit>
La función SetBit establece un bit seleccionado en el valor TRUE dentro de una variable
DWORD. Si el bit ya posee un valor TRUE, el proceso no tendrá más consecuencias. El valor
modificado está disponible en el valor de retorno para su posterior procesamiento.
Sintaxis
SetBit ( <val> : DWORD, <bitNr> : DINT): DWORD
Métodos
Descripción
val
Valor que se debe modificar
bitNr
Número de bit en el parámetro Val que se establece
Tabla 19.5 Función variable SetBit
El número de bit se indica mediante el parámetro bitNr. El margen de valores permitido es
de 0 a 31 para referenciar los bits de la variable WORD (32 bits). El bit más bajo (LSB) se
activa con el número de bit = 0.
Valor de retorno
Salida del patrón de bits procesado de la variable Val.
Tratamiento de errores
Si se transmite un valor no permitido en el parámetro bitNr, se emite un error.
Ejemplo:
// Ajustar la variable a 0
mask := 16#0000
// Ajustar el tercer bit en TRUE
mask := SetBit(mask, 2)
// Mask posee el valor 2#0000 0100
172
Festo GDCP-CMXR-SW-ES es 1205c
19. Funciones
19.21 Borrar el bit en una variable WORD <ResetBit>
La función ResetBit establece un bit seleccionado en el valor FALSE dentro de una variable
DWORD. Si el bit ya posee un valor FALSE, el proceso no tendrá más consecuencias. El
valor modificado está disponible en el valor de retorno para su posterior procesamiento.
Sintaxis
ResetBit ( <val> : DWORD, <bitNr> : DINT): DWORD
Métodos
Descripción
val
Valor que se debe modificar
bitNr
Número de bit en el parámetro Val que se restablece
Tabla 19.6 Función variable ResetBit
El número de bit se indica mediante el parámetro bitNr. El margen de valores permitido es
de 0 a 31 para referenciar los bits de la variable WORD (32 bits). El bit más bajo (LSB) se
activa con el número de bit = 0.
Valor de retorno
Salida del patrón de bits procesado de la variable Val.
Tratamiento de errores
Si se transmite un valor no permitido en el parámetro bitNr, se emite un error.
Ejemplo:
// Ajustar la variable a 2#0000 1111
mask := 16#000F
// Ajustar el primer bit en FALSE
mask := ResetBit(mask, 0)
// Mask posee el valor 2#0000 1110
Festo GDCP-CMXR-SW-ES es 1205c
173
19. Funciones
19.22
Comprobar el bit en una variable WORD
<CheckBit>
La función CheckBit comprueba el bit indicado en el número de bit y devuelve su valor en
el valor de retorno.
Sintaxis
CheckBit ( <val> : DWORD, <bitNr> : DINT): BOOL
Métodos
Descripción
val
Valor que se debe comprobar
bitNr
Número de bit en el parámetro Val que se comprueba
Tabla 19.7 Función variable CheckBit
El número de bit se indica mediante el parámetro bitNr. El margen de valores permitido es
de 0 a 31 para referenciar los bits de la variable WORD (32 bits). El bit más bajo (LSB) se
activa con el número de bit = 0.
Valor de retorno
TRUE
El bit está fijado.
FALSE
El bit no está fijado.
Tratamiento de errores
Si se transmite un valor no permitido en el parámetro bitNr, se emite un error.
Ejemplo:
IF CheckBit(mask, 1) THEN
// Estado TRUE
SetInfo("Bit 1 está fijado”)
ELSE
// Estado FALSE
SetInfo("Bit 1 no está fijado”)
END_IF
174
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.
Módulos
El lenguaje FTL permite utilizar módulos. Además de datos, los módulos contienen
también componentes en forma de código de programa para conseguir una funcionalidad
determinada. Para la comunicación con módulos en FTL, dichos módulos contienen datos
de entrada y de salida.
Representación gráfica de un módulo:
Módulo: valor analógico
Datos de entrada
del módulo
Código interno de
programa
Datos de salida
del módulo
El número de datos de entrada y salida de un módulo se guarda en FTL en un tipo de
datos. Un módulo debe declararse para ser utilizado en la aplicación. En el caso de los
módulos, esto se denomina instanciación. En esta operación se guarda una copia del
paquete de módulo con un nombre definido por el usuario (identificador). El paquete de
módulo contiene los datos de entrada y salida, así como datos internos de programa. En la
práctica sólo existe un código de programa.
Sistema operativo
Programa FTL
Tipo de módulo
Valor analógico
Presión: tipo valor analógico
Peso: tipo valor analógico
Instanciación de módulo en el programa de aplicación
Declaración de una instancia de módulo
<nombre de instancia> : <tipo de instancia> (parámetro)
Festo GDCP-CMXR-SW-ES es 1205c
175
20. Módulos
Al igual que las variables, las instancias se guardan en el archivo de datos correspondiente.
Ejemplo de una instancia
Sensor : AIN(…)
Según el tipo de módulo se asignan datos con la declaración, p. ej., el nombre de una
señal de hardware. La documentación sobre los módulos se encuentra en los capítulos
siguientes.
20.1
Funciones
Las funciones de módulo sirven para acceder a los datos de un módulo o utilizar
funcionalidades. Para acceder a las funciones del módulo se necesita el nombre de
instancia y el operador punto.
Acceso a las funciones de módulo
<nombre de instancia> . <nombre de función>
En el ejemplo se accede a la función de módulo Read de la instancia Sensor:
marca := Sensor.Read()
En algunas funciones pueden transferirse parámetros. Consulte la descripción de cada uno
de los módulos en los capítulos siguientes.
20.2
Variable
Además de funciones, los módulos pueden contener variables. Con estas variables puede
accederse a los datos del módulo. Para acceder a las variables del módulo se necesita el
nombre de instancia y el operador punto.
Acceso a variables de módulo
<nombre de instancia> . <nombre de variable>
Para acceder a los datos de algunos módulos pueden utilizarse variables o funciones
indistintamente. Cada tipo de acceso requiere un tiempo de ejecución diferente. En el
capítulo dedicado a cada módulo se ofrece más información.
176
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
En el ejemplo se accede a la variable de módulo State de la instancia Sensor:
IF Sensor.state THEN
Lin(pos1)
ELSE
Lin(pos2)
END_IF
Recomendación:
Si el acceso puede efectuarse mediante una variable, debe
utilizarse preferentemente dicha variable, ya que requiere menos
tiempo de ejecución.
20.3
Comportamiento del tiempo de operación
El programa FTL no se ejecuta cíclicamente sino que se procesa secuencialmente instrucción a instrucción. Este comportamiento es insuficiente para algunas aplicaciones. P. ej.,
una prueba para verificar si se ha cambiado el flanco en una entrada al mismo tiempo que
se ejecuta un programa de movimientos tendría que efectuarse en un programa paralelo,
con el trabajo añadido que ello implicaría. A fin de mejorar la comodidad de edición de un
módulo, algunos módulos funcionan cíclicamente en el sistema operativo. Así, el usuario
puede acceder a los resultados del módulo con los métodos o variables.
20.3.1
Parámetro ovlEnable
Algunos métodos de los módulos siguientes poseen un parámetro opcional denominado
ovlEnable. Este parámetro regula el momento de interrogación de la señal de entrada
digital. El parámetro es del tipo BOOL y puede tener el estado TRUE o FALSE.
Estado FALSE
El avance de proceso se detiene en este punto. Si el proceso principal alcanza esta
instrucción de programa, la señal se lee o se ejecuta. El movimiento se detiene y vuelve a
acelerarse después de la instrucción. No es posible el avance aproximado a los
movimientos siguientes.
Estado TRUE
Si el parámetro ovlEnable devuelve el estado TRUE, la señal se lee o se ejecuta a más
tardar en el último punto donde aún sea posible reanudar el movimiento. El movimiento
no se detiene sino que avanza continuamente. No es posible el avance aproximado a los
movimientos siguientes.
Nota
Si no se especifica el parámetro, se supone FALSE.
Festo GDCP-CMXR-SW-ES es 1205c
177
20. Módulos
20.4
Módulo de entrada digital DIN
El módulo DIN sirve para interrogar y administrar una entrada digital.
20.4.1 Instanciación
Para instanciar el módulo de entrada digital se requiere la referencia de hardware de la
entrada digital. Ésta se indica con el parámetro <input> durante la instanciación.
Sintaxis
<nombre de instancia> .DIN( <timeout> : DINT,
<RisingEdge> : BOOL,
<Input> : MAPTO DINPORT)
Es posible indicar otros parámetros para, p. ej., realizar ajustes previos. Sin embargo, esto
no es necesario para la instanciación y puede efectuarse en el programa.
Ejemplo:
Un sensor se guarda como instancia de módulo:
Instanciación en el archivo de datos
Sensor : DIN := (-1, FALSE, MAP(Input1))
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:> (DIN) e
introduciendo el <identificador:> (sensor). En la línea <MAPTO DINPORT> se activa la
referencia real a una entrada digital configurada.
178
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Instanciación con la unidad de mando manual
La instanciación del módulo de entrada digital por medio de la unidad de mando manual
se realiza en la máscara de variables seleccionando el tipo de datos DIN. La entrada se
guarda automáticamente en el archivo de datos.
El módulo de entrada digital posee las variables siguientes:
Variable
Tipo
Significado
Estado al crear
Timeout
REAL
Timeout para esperar a las instrucciones Wait y WaitN.
-1
-1 = Ningún timeout (espera sin límite de tiempo)
0 = Comprobación inmediata
>0 = Timeout en milisegundos
RisingEdge
BOOL
Estado del flanco de subida
FALSE
Input
DINPORT
Referencia a la entrada de hardware
---
Tabla 20.1 Variables del módulo de entrada digital
Timeout
Con el parámetro timeout puede definirse un tiempo de espera. El método del módulo
espera al estado de señal requerido durante el tiempo ajustado.

Si el valor es -1, la espera no tiene límite.

Si se introduce un valor > 0, la espera se reduce a este tiempo máximo. La ejecución
del programa se reanuda si el tiempo de espera finaliza sin aparecer el estado de
señal deseado. El propio programa secuencial debe generar un mensaje de error.

Si se indica el valor 0, se realiza una comprobación inmediatamente. Si la señal no
tiene el valor deseado, el programa secuencial debe generar un mensaje de error.
Más información y ejemplos para generar mensajes de error se describen en el
capítulo 25.2 Empleo de los módulos de entrada y salida.
Festo GDCP-CMXR-SW-ES es 1205c
179
20. Módulos
RisingEdge
Aunque no se ha llamado al módulo, éste guarda el estado de un flanco de subida. Dicho
estado puede evaluarse en el programa.
Input
La variable input describe la referencia a la entrada de hardware del módulo.
20.4.2 Métodos
El módulo dispone de varios métodos:
Métodos
Descripción
Wait
Esperar a que la entrada tenga el estado TRUE
WaitN
Esperar a que la entrada tenga el estado FALSE
Read
Leer el estado de la entrada
RisingEdge
Leer el estado del flanco de subida
ResetRisingEdge
Borrar el estado del flanco de subida
Tabla 20.2 Métodos del módulo de entrada digital DIN
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Digital Inputs”.
En la figura se muestra la selección de métodos del módulo DIN de la unidad de mando
manual.
180
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.4.3 Espera a estado, métodos Wait/WaitN
En el programa FTL, los métodos Wait y WaitN permiten esperar a que la entrada tome el
valor TRUE o FALSE. Si hay un timeout, se espera a que finalice.
Sintaxis
<nombre de instancia>.Wait (OPT ovlEnable : BOOL)
<nombre de instancia>.WaitN (OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
Ptp(pos0)
sensor.Wait()
// Esperar a señal TRUE, movimiento
detenido
Ptp(pos1)
sensor.WaitN(TRUE)
// Esperar a señal FALSE, sin parada
Ptp(pos2)
20.4.4 Método Read para lectura de estado
Con el método Read puede leerse el estado actual de la entrada. Los valores de retorno
son los estados TRUE o FALSE.
Sintaxis
<nombre de instancia>.Read (OPT ovlEnable: BOOL) : BOOL
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
value := sensor.Read()
20.4.5 Método RisingEdge para flanco de subida
Con el método RisingEdge se interroga si hubo un flanco de subida en la entrada, guardado a continuación. El valor de retorno sigue siendo TRUE aunque la entrada hubiese
cambiado entre tanto a FALSE. El estado del flanco se determina independientemente del
ciclo del programa FTL y se ejecuta en un ciclo propio.
Festo GDCP-CMXR-SW-ES es 1205c
181
20. Módulos
Sintaxis
<nombre de instancia>.RisingEdge (OPT ovlEnable: BOOL) : BOOL
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
value := sensor.RisingEdge()
20.4.6 Método ResetRisingEdge para borrar flancos
Este método borra la marca interna del flanco de subida. Ello es necesario para comprobar
un flanco de subida con el método RisingEdge.
Sintaxis
<nombre de instancia>.ResetRisingEdge()
Nota
Si la entrada digital está activada en el momento en que se ejecuta
esta instrucción, el estado de detección del flanco se borra y no se
activa de nuevo hasta que no vuelve a aparecer un flanco positivo
(modificación de estado de la entrada de 0 a 1) en la entrada.
Ejemplo:
sensor.ResetRisingEdge()
value := sensor.RisingEgde()
20.5 Módulo de salida digital DOUT
El módulo DOUT sirve para interrogar y administrar una salida digital.
20.5.1 Instanciación
Para instanciar el módulo de salida digital se requiere la referencia de hardware de la
salida digital. Ésta se indica con el parámetro <output> durante la instanciación.
Sintaxis
<nombre de instancia> .DOUT(
<timeout> : DINT,
<RisingEdge> : BOOL,
<Output> : MAPTO DOUTPORT)
182
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Es posible indicar otros parámetros para, p. ej., realizar ajustes previos. Sin embargo, esto
no es necesario para la instanciación y puede efectuarse en el programa.
Ejemplo:
Un cilindro se guarda como instancia de módulo:
Instanciación en el archivo de datos
cylinder : DOUT := (-1,FALSE, MAP(Output3))
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:> (DOUT)
e introduciendo el <identificador:> (cilindro). En la línea <MAPTO DOUTPORT> se activa la
referencia real a una salida digital configurada.
Instanciación con la unidad de mando manual
La instanciación del módulo de salida digital por medio de la unidad de mando manual se
realiza en la máscara de variables seleccionando el tipo de datos DOUT.
La instanciación en la unidad de mando manual guarda automáticamente la entrada en el
archivo de datos.
Festo GDCP-CMXR-SW-ES es 1205c
183
20. Módulos
20.5.2 Variable
El módulo de salida digital posee las variables siguientes:
Variable
Tipo
Significado
Estado al crear
Timeout
REAL
Timeout para esperar a las instrucciones Wait y WaitN.
-1
-1 = Ningún timeout (espera sin límite de tiempo)
0 = Comprobación inmediata
>0 = Timeout en milisegundos
RisingEdge
BOOL
Estado del flanco de subida
FALSE
Output
DOUTPORT
Referencia a la salida de hardware
---
Tabla 20.3 Variables del módulo de salida digital
Timeout
Con el parámetro timeout puede definirse un tiempo de espera. El método del módulo
espera al estado de señal requerido durante el tiempo ajustado.

Si el valor es -1, la espera no tiene límite.

Si se introduce un valor > 0, la espera se reduce a este tiempo máximo. La ejecución
del programa se reanuda si el tiempo de espera finaliza sin aparecer el estado de
señal deseado. El propio programa secuencial debe generar un mensaje de error.

Si se indica el valor 0, se realiza una comprobación inmediatamente. Si la señal no
tiene el valor deseado, el programa secuencial debe generar un mensaje de error.
Más información y ejemplos para generar mensajes de error se describen en el
capítulo 25.2 Empleo de los módulos de entrada y salida.
RisingEdge
Aunque no se ha llamado al módulo, éste guarda el estado de un flanco de subida. Dicho
estado puede evaluarse en el programa.
Output
La variable output describe la referencia a la salida de hardware del módulo.
184
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.5.3 Métodos
El módulo dispone de varios métodos:
Métodos
Descripción
Wait
Esperar a que la salida tenga el valor TRUE
WaitN
Esperar a que la salida tenga el valor FALSE
Read
Leer el valor de salida
RisingEdge
Leer el estado del flanco de subida
ResetRisingEdge
Borrar el estado del flanco de subida
Set
Activar salida, estado TRUE
Reset
Borrar salida, estado FALSE
Write
Activar salida al valor indicado
Tabla 20.4 Métodos del módulo de salida digital DOUT
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Digital outputs”.
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la figura se muestra la selección de métodos del módulo DOUT de la unidad de mando
manual.
Festo GDCP-CMXR-SW-ES es 1205c
185
20. Módulos
20.5.4 Espera a estado, métodos Wait/WaitN
En el programa FTL, los métodos Wait y WaitN permiten esperar a que la salida adopte el
valor TRUE o FALSE. Si hay un timeout, se espera a que finalice.
Sintaxis
<nombre de instancia>.Wait (OPT ovlEnable : BOOL)
<nombre de instancia>.WaitN (OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
Ptp(pos0)
cylinder.Wait()
// Esperar a salida TRUE, movimiento
detenido
Ptp(pos1)
cylinder.WaitN(TRUE) // Esperar a salida FALSE, sin parada
Ptp(pos2)
20.5.5 Método Read para lectura de estado
Con el método Read puede leerse el estado actual de la salida. Los valores de retorno son
los estados TRUE o FALSE.
Sintaxis
<nombre de instancia>.Read (OPT ovlEnable: BOOL) : BOOL
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
value := cylinder.Read()
20.5.6 Flanco de subida, método RisingEdge
Con el método RisingEdge se interroga si hubo un flanco de subida en la salida, guardado
a continuación. El valor de retorno sigue siendo TRUE aunque la salida hubiese cambiado
entre tanto a FALSE. El estado del flanco se determina independientemente del ciclo del
programa FTL y se ejecuta en un ciclo propio.
Sintaxis
<nombre de instancia>.RisingEdge (OPT ovlEnable: BOOL) : BOOL
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
186
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Ejemplo:
value := cylinder.RisingEdge()
20.5.7 Borrado de flancos, ResetRisingEdge
Este método borra la marca interna del flanco de subida. Ello es necesario para comprobar
un flanco de subida con el método RisingEdge.
Sintaxis
<nombre de instancia>.ResetRisingEdge()
Nota
Si la salida digital está activada en el momento en que se ejecuta
esta instrucción, el estado de detección del flanco se borra y no se
activa de nuevo hasta que no vuelve a aparecer un flanco positivo
(modificación de estado de la salida de 0 a 1) en la salida.
Ejemplo:
cylinder.ResetRisingEdge()
value := cylinder.RisingEgde()
20.5.8 Activación y borrado, métodos Set/Reset
Con el método Set se activa una salida (estado TRUE) y con Reset se borra (estado FALSE).
Sintaxis
<nombre de instancia>.Set ( )
<nombre de instancia>.Reset ( )
Set y Reset se ejecutan en la ejecución principal. El módulo NO influye en el avance
aproximado.
Ejemplo:
Lin(pos1)
Lin(pos2)
cylinder.Set()
// Activa la salida cylinder a TRUE
Lin(pos3)
cylinder.Reset()
// Activa la salida cylinder a FALSE
Lin(pos4)
Festo GDCP-CMXR-SW-ES es 1205c
187
20. Módulos
20.5.9 Activación de la salida, método Write
Con el método Write es posible describir el estado de una salida. El estado TRUE o FALSE
se devuelve como parámetro. Write funciona igual que los métodos Set y Reset.
Sintaxis
<nombre de instancia>.Write (value: BOOL)
El método Write se procesa en la ejecución principal. El módulo NO influye en el avance
aproximado.
Ejemplo:
cylinder.Write(TRUE)
// Activa la salida cylinder a TRUE
state := FALSE
cylinder.Write(state)
20.5.10
// Activa la salida cylinder a FALSE
Activación de la salida con una duración determinada,
método Pulse
El método Pulse ajusta la salida a TRUE por un tiempo determinado. Pulse se ejecuta en la
ejecución principal y no influye en el avance aproximado.
Sintaxis
<nombre de instancia>.Pulse (timeMs :DINT;
OPT pauseAtInterrupt: BOOL)
Parámetros
Tipo
Significado
timeMs
DINT
Tiempo correspondiente a la longitud de impulso
en ms
pauseAtInterrupt
BOOL
Detención del tiempo de impulso cuando el
programa se para
Tabla 20.5 Parámetros del método Pulse
El método Pulse activa una salida digital con un impulso de una determinada longitud. La
longitud del impulso se indica en milisegundos. Al principio del impulso, la salida siempre
adquiere el estado TRUE y al final, el estado FALSE. No obstante, si la salida ya posee el
estado TRUE, este estado se restablece una vez transcurrido el tiempo del impulso.
188
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Con el parámetro opcional “pauseAtInterrupt” se puede indicar cuál debe ser la reacción
ante una parada del programa FTL. Si no se indica este parámetro, se establece internamente el estado FALSE.
pauseAtInterrupt = TRUE:
Con TRUE se detiene el tiempo del impulso y se asigna a la salida el estado FALSE. Si el
programa FTL continúa, durante el tiempo restante la salida volverá a tener el estado
TRUE. Una vez transcurrido el tiempo del impulso, se establecerá el estado FALSE.
pauseAtInterrupt = FALSE:
Si el parámetro opcional no está especificado o es FALSE, el impulso se ejecuta después
del inicio y hasta el final. La parada del programa FTL no tiene ninguna repercusión.
Nota
Si se carga un programa FTL detenido, la función de impulso
finalizará automáticamente y la salida adquirirá el estado FALSE.
Ejemplo:
// Activa la salida cylinder a TRUE durante 200 ms
cylinder.Pulse(200)
20.6
Módulo de entrada analógica AIN
El módulo AIN sirve para interrogar y administrar una entrada analógica.
20.6.1 Instanciación
Para instanciar el módulo de entrada analógica se requiere la referencia de hardware de la
entrada analógica. Ésta se indica con el parámetro input durante la instanciación.
Sintaxis
<nombre de instancia> .AIN( <timeout> : DINT, <port> : MAPTO
AINPORT)
El parámetro input es el nombre con el que se designa la entrada de hardware. Esta
asignación activa una relación entre el módulo y el hardware. Es posible indicar otros
parámetros para, p. ej., realizar ajustes previos. Sin embargo, esto no es necesario para la
instanciación y puede efectuarse en el programa.
Ejemplo:
Un sensor se guarda como instancia de módulo:
Festo GDCP-CMXR-SW-ES es 1205c
189
20. Módulos
Instanciación en el archivo de datos
temperature : AIN := (-1, MAP(Sensor1))
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:> (AIN) e
introduciendo el <identificador:> (ainTemperature). En la línea <MAPTO AINPORT> se activa
la referencia real a una entrada analógica configurada.
Instanciación con la unidad de mando manual
La instanciación del módulo de entrada analógica por medio de la unidad de mando
manual se realiza en la máscara de variables seleccionando el tipo de datos AIN.
La instanciación en la unidad de mando manual guarda automáticamente la entrada en el
archivo de datos.
190
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.6.2 Variable
El módulo de entrada analógica posee las variables siguientes:
Variable
Tipo
Significado
Estado al crear
Timeout
REAL
Timeout para esperar a las instrucciones WaitLss, WaitGrt,
-1
WaitIns y Waitouts.
-1 = Ningún timeout (espera sin límite de tiempo)
0 = Comprobación inmediata
>0 = Timeout en milisegundos
Input
AINPORT
Referencia a la entrada de hardware
---
Tabla 20.6 Variables del módulo de entrada analógica
Timeout
Con el parámetro timeout puede definirse un tiempo de espera. El método del módulo
espera al estado de señal requerido durante el tiempo ajustado.

Si el valor es -1, la espera no tiene límite.

Si se introduce un valor > 0, la espera se reduce a este tiempo máximo. La ejecución
del programa se reanuda si el tiempo de espera finaliza sin aparecer el estado de
señal deseado. El propio programa secuencial debe generar un mensaje de error.

Si se indica el valor 0, se realiza una comprobación inmediatamente. Si la señal no
tiene el valor deseado, el programa secuencial debe generar un mensaje de error.
Más información y ejemplos para generar mensajes de error se describen en el
capítulo 25.2 Empleo de los módulos de entrada y salida.
Input
La variable input describe la referencia a la entrada de hardware del módulo.
20.6.3 Métodos
El módulo dispone de varios métodos:
Métodos
Descripción
WaitLss
Esperar a que el valor de entrada sea menor que el indicado
WaitGrt
Esperar a que el valor de entrada sea mayor que el indicado
WaitIns
Esperar a que el valor de entrada se encuentre dentro del límite
indicado
WaitOuts
Esperar a que el valor de entrada se encuentre fuera del límite
indicado
Read
Leer el valor de entrada
Tabla 20.7 Métodos del módulo de entrada analógica
Festo GDCP-CMXR-SW-ES es 1205c
191
20. Módulos
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Analog Inputs”.
En la figura se muestra la selección de métodos del módulo AIN de la unidad de mando
manual.
20.6.4 Espera a que el valor sea menor/mayor, métodos
WaitLss, WaitGrt
Los métodos WaitLss y WaitGrt permiten interrogar una entrada analógica para conocer si
un estado es mayor o menor que el valor indicado. Si el módulo tiene un parámetro
timeout, éste se tiene en cuenta.
Sintaxis
<nombre de instancia>.WaitLss(value : REAL, OPT ovlEnable : BOOL)
<nombre de instancia>.WaitGrt(value : REAL, OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Parámetro
Tipo
Significado
value
REAL
Valor límite
Tabla 20.8 Parámetro de los métodos WaitLss, WaitGrt
Ejemplo:
Lin(pos1)
temperature.WaitLss(65.0, TRUE)
Lin(pos2)
192
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.6.5 Espera a que el valor entre/salga de un margen, métodos
WaitIns, WaitOuts
Con los métodos WaitIns y WaitOuts es posible esperar a que el valor de la entrada
analógica se encuentre dentro o fuera del margen de valores indicado. Si el módulo tiene
un parámetro timeout, éste se tiene en cuenta.
Sintaxis
<nombre de instancia>.WaitIns(
minValue : REAL,
maxValue : REAL,
OPT ovlEnable : BOOL)
<nombre de instancia>.WaitOuts(
minValue : REAL,
maxValue : REAL,
OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Parámetros
Tipo
Significado
minValue
REAL
Valor límite inferior
maxValue
REAL
Valor límite superior
Tabla 20.9 Parámetros de los métodos WaitIns, WaitOuts
Ejemplo
Lin(pos1)
// Esperar a que la temperatura se encuentre dentro de los
límites
temperature.WaitIns(50.0, 55.0, TRUE)
Lin(pos2)
20.6.6 Interrogación del valor, método Read
El método Read lee el valor actual de la entrada analógica.
Sintaxis
<nombre de instancia>.Read(OPT ovlEnable)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Festo GDCP-CMXR-SW-ES es 1205c
193
20. Módulos
Ejemplo:
Lin(pos1)
// Leer la temperatura sin parar la trayectoria
value := temperature.Read(TRUE)
Lin(pos2)
20.7
Módulo de salida analógica AOUT
El módulo AOUT sirve para interrogar y administrar una salida analógica.
20.7.1 Instanciación
Para instanciar el módulo de salida analógica se requiere la referencia de hardware de la
salida analógica. Ésta se indica con el parámetro <port> durante la instanciación.
Sintaxis
<nombre de instancia> .AOUT( <timeout> : DINT,
<port> : MAPTO AOUTPORT))
Es posible indicar otros parámetros para, p. ej., realizar ajustes previos. Sin embargo, esto
no es necesario para la instanciación y puede efectuarse en el programa.
Ejemplo:
Una cantidad se guarda como instancia de módulo:
Instanciación en el archivo de datos
quantity : AOUT := (-1, MAP(SetValue))
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:> (AOUT)
e introduciendo el <identificador:> (aoutQuantity). En la línea <MAPTO AOUTPORT> se
activa la referencia real a una salida analógica configurada.
194
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Instanciación con la unidad de mando manual
La instanciación del módulo de salida analógica por medio de la unidad de mando manual
se realiza en la máscara de variables seleccionando el tipo de datos AOUT.
La instanciación en la unidad de mando manual guarda automáticamente la entrada en el
archivo de datos.
20.7.2 Variable
El módulo de salida analógica posee las variables siguientes:
Variable
Tipo
Significado
Estado al crear
Timeout
REAL
Timeout para esperar a las instrucciones WaitLss, WaitGrt,
-1
WaitIns y Waitouts.
-1 = Ningún timeout (espera sin límite de tiempo)
0 = Comprobación inmediata
>0 = Timeout en milisegundos
Output
AOUTPORT
Referencia a la salida de hardware
---
Tabla 20.10 Variables del módulo de salida analógica
Timeout
Con el parámetro timeout puede definirse un tiempo de espera. El método del módulo
espera al estado de señal requerido durante el tiempo ajustado.

Si el valor es -1, la espera no tiene límite.

Si se introduce un valor > 0, la espera se reduce a este tiempo máximo. La ejecución
del programa se reanuda si el tiempo de espera finaliza sin aparecer el estado de
señal deseado. El propio programa secuencial debe generar un mensaje de error.

Si se indica el valor 0, se realiza una comprobación inmediatamente. Si la señal no
tiene el valor deseado, el programa secuencial debe generar un mensaje de error.
Más información y ejemplos para generar mensajes de error se describen en el
capítulo 25.2 Empleo de los módulos de entrada y salida.
Festo GDCP-CMXR-SW-ES es 1205c
195
20. Módulos
Output
La variable output describe la referencia a la salida de hardware del módulo.
20.7.3 Métodos
El módulo dispone de varios métodos:
Métodos
Descripción
Write
Escribir un valor en la salida analógica
WaitLss
Esperar a que el valor de salida sea menor que el indicado
WaitGrt
Esperar a que el valor de salida sea mayor que el indicado
WaitIns
Esperar a que el valor de salida se encuentre dentro del límite
indicado
WaitOuts
Esperar a que el valor de salida se encuentre fuera del límite
indicado
Read
Leer el valor de salida
Tabla 20.11 Métodos del módulo de salida analógica
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Analog Outputs”.
En la figura se muestra la selección de métodos del módulo AOUT de la unidad de mando
manual.
196
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.7.4 Escritura del valor de salida, método Write
Con el método Write se escribe una salida analógica. El valor nominal se devuelve en el
parámetro value.
Sintaxis
<nombre de instancia>.Write(value :REAL)
Parámetro
Tipo
Significado
value
REAL
Valor nominal para la salida analógica
Tabla 20.12 Parámetro del método Write
Ejemplo:
quantity.Write(110.0)
value := 1.3
quantity.Write(value)
// Ajusta la salida a 110.0
// Ajusta la salida a 1.3
20.7.5 Espera a que el valor sea mayor/menor, métodos
WaitLss, WaitGrt
Los métodos WaitLss y WaitGrt permiten interrogar una salida analógica para conocer si
un estado es mayor o menor que el valor indicado. Si el módulo tiene un parámetro
timeout, éste se tiene en cuenta.
Sintaxis
<nombre de instancia>.WaitLss(value : REAL, OPT ovlEnable : BOOL)
<nombre de instancia>.WaitGrt(value : REAL, OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Parámetro
Tipo
Significado
value
REAL
Valor límite
Tabla 20.13 Parámetro de los métodos WaitLss, WaitGrt
Ejemplo:
Lin(pos1)
// Esperar a que el valor sea menos de 110.0
quantity.WaitLss(110.0, TRUE)
Lin(pos2)
Festo GDCP-CMXR-SW-ES es 1205c
197
20. Módulos
20.7.6
Espera a que el valor entre/salga de un margen, métodos
WaitIns, WaitOuts
Con los métodos WaitIns y WaitOuts es posible esperar a que el valor de salida analógica
se encuentre dentro o fuera del margen de valores indicado. Si el módulo tiene un
parámetro timeout, éste se tiene en cuenta.
Sintaxis
<nombre de instancia>.WaitIns(minValue : REAL,
maxValue : REAL, OPT ovlEnable : BOOL)
<nombre de instancia>.WaitOuts(minValue : REAL,
maxValue : REAL, OPT ovlEnable : BOOL)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Parámetros
Tipo
Significado
minValue
REAL
Valor límite inferior
maxValue
REAL
Valor límite superior
Tabla 20.14 Parámetros de los métodos WaitIns, WaitOuts
Ejemplo:
Lin(pos1)
// Esperar a que la cantidad esté dentro de los límites
quantity.WaitIns(100.0, 110.0, TRUE)
Lin(pos2)
20.7.7 Lectura del valor de salida, método Read
El método Read lee el valor actual de la salida analógica.
Sintaxis
<nombre de instancia>.Read(OPT ovlEnable)
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Ejemplo:
Lin(pos1)
// Leer la cantidad sin parar sobre la trayectoria
value := quantity.Read(TRUE)
Lin(pos2)
198
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.8
Módulo de reloj CLOCK
El módulo de reloj (temporizador) puede utilizarse para cronometrar durante la ejecución
del programa. El tiempo se mide en milisegundos.
20.8.1 Instanciación
Para instanciar el módulo de reloj CLOCK se requiere el nombre del módulo. Dicho módulo
no tiene variables.
Instanciación
<nombre de instancia> : CLOCK
Instanciación en el archivo de datos:
Timer : CLOCK
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:>
(CLOCK) e introduciendo el <identificador:> (clkTimer).
Instanciación con la unidad de mando manual
La instanciación del módulo de reloj por medio de la unidad de mando manual se realiza
en la máscara de variables seleccionando el tipo de datos CLOCK.
Festo GDCP-CMXR-SW-ES es 1205c
199
20. Módulos
La instanciación en la unidad de mando manual escribe automáticamente la entrada en el
archivo de datos.
20.8.2 Métodos
El módulo de reloj dispone de los siguientes métodos:
Métodos
Descripción
Reset
Borrar la hora
Start
Poner en marcha el reloj
Stop
Detener el reloj
Read
Leer el tiempo detenido en ms
ToStr
Convertir el tiempo en una cadena de caracteres
Tabla 20.15 Métodos del módulo de reloj
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Timing Blocks”.
En la figura se muestra la selección de métodos del módulo CLOCK de la unidad de mando
manual.
200
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.8.3 Puesta en marcha del reloj, método Start
Con el método Start se pone en marcha el temporizador. El punto inicial se guarda
internamente en el módulo. Si se activa un Start en un temporizador ya parado, el
temporizador vuelve a ponerse en marcha y el tiempo sigue corriendo. El temporizador
solo se puede restablecer con la instrucción Reset.
Sintaxis
<nombre de instancia>.Start ( )
Ejemplo:
Timer.Start()
// El reloj se pone en marcha
20.8.4 Parada del reloj, método Stop
El método Stop detiene el cronometraje. El tiempo transcurrido se calcula en el módulo y
se visualiza para su lectura.
Sintaxis
<nombre de instancia>.Stop ( )
Ejemplo:
Timer.Stop()
// El reloj se detiene
20.8.5 Borrado del reloj, método Reset
Con el método Reset se pone a cero el temporizador. Si el método Reset se ejecuta cuando
el temporizador está en marcha, éste se pone a 0 y sigue funcionando.
Sintaxis
<nombre de instancia>.Reset ( )
Ejemplo:
Timer.Reset()
// El reloj se reinicia
20.8.6 Lectura del reloj, método Read
Con el método Read es posible leer el valor de fecha y hora en milisegundos (ms).
Festo GDCP-CMXR-SW-ES es 1205c
201
20. Módulos
Sintaxis
<nombre de instancia>.Read(OPT ovlEnable : BOOL) : DINT
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Valor de retorno: tiempo medido en milisegundos (ms)
Ejemplo:
Datos:
value
: DINT
Programa:
:
Lin(pos1)
value := Timer.Read()
// Leer con parada de la trayectoria
Lin(pos2)
value := Timer.Read(TRUE)
// Leer en el proceso principal
Lin(pos3)
:
20.8.7 Convertir el valor de fecha y hora en una cadena
de caracteres, método ToStr
Con el método ToStr se convierte el valor de fecha y hora actuales en una cadena de
caracteres con la estructura siguiente <días> <horas>:<minutos>:<segundos>:<milisegundos>.
Sintaxis
<nombre de instancia>.ToStr(OPT ovlEnable : BOOL) : STRING
Para la descripción del parámetro ovlEnable, véase el capítulo 20.3.1 de la página 177.
Valor de retorno: cadena de caracteres con la información de fecha y hora con formato dd
hh:mm:ss:ms
Ejemplo:
Datos:
time : STRING
202
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Programa:
Lin(pos1)
time := Timer.ToStr()
// Leer con parada de la
trayectoria
Lin(pos2)
time := Timer.ToStr(TRUE)
// Leer en el proceso principal
Lin(pos3)
20.9
Módulo de encoder ENCODER
El módulo de encoder puede utilizarse en el programa para leer, como máximo, los dos
encoder incrementales conectados.
20.9.1 Instanciación
Para instanciar el módulo de encoder se requiere la referencia de hardware de la entrada.
Ésta se indica con el parámetro <port> durante la instanciación.
Sintaxis
<nombre de instancia> .ENCODER( <timeout> : DINT,
<port> : MAPTO ENCPORT))
Es posible indicar otros parámetros para, p. ej., realizar ajustes previos. Sin embargo, esto
no es necesario para la instanciación y puede efectuarse en el programa.
Ejemplo:
Un encoder se guarda como instancia de módulo:
Instanciación en el archivo de datos
enc0 : ENCODER := (-1, MAP(Encoder_0))
Festo GDCP-CMXR-SW-ES es 1205c
203
20. Módulos
Instanciación con el editor FTL
La instanciación se efectúa en el diálogo para crear variables seleccionando <tipo:>
(ENCODER) e introduciendo el <identificador:> (encTrack). En la línea <MAPTO ENCPORT>
se activa la referencia real a una entrada de encoder configurada.
Instanciación con la unidad de mando manual
La instanciación del módulo de encoder por medio de la unidad de mando manual se
realiza en la máscara de variables seleccionando el tipo de datos ENCODER.
La instanciación en la unidad de mando manual guarda automáticamente la entrada en el
archivo de datos.
204
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
20.9.2 Variable
El módulo de encoder posee las variables siguientes:
Variable
Tipo
Significado
Estado al crear
timeout
REAL
Tiempo de espera
-1
port
ENCPORT
Referencia a la entrada de hardware
---
Tabla 20.16 Variables del módulo de encoder
Timeout – (desocupado actualmente en este módulo)
Con el parámetro timeout puede definirse un tiempo de espera. El método del módulo
espera al estado de señal requerido durante el tiempo ajustado. En la actualidad, el
módulo de encoder no dispone de métodos para tener en cuenta el timeout.
Port
La variable Port describe la referencia a la entrada de hardware.
20.9.3 Métodos
El módulo de encoder dispone de los métodos siguientes:
Métodos
Descripción
Set
Ajustar manualmente el valor del encoder incremental
Read
Leer el valor del encoder incremental
Tabla 20.17 Métodos del módulo de encoder
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “Incrementalencoder”.
En la figura se muestra la selección de métodos del módulo de encoder de la unidad de
mando manual.
20.9.4 Ajuste del encoder, método Set
Con el método Set, el programa de usuario puede ajustar un valor de encoder incremental.
Festo GDCP-CMXR-SW-ES es 1205c
205
20. Módulos
Sintaxis:
<ENCODER>.Set ( OPT <count> : DINT,
OPT <mode> : SETCOUNTMODE)
Parámetros
Tipo
Significado
count
DINT
Valor al que se debe ajustar el encoder incremental (incrementos)
mode
SETCOUNTMODE
Parámetro para ajustar el punto de activación
Tabla 20.18 Parámetros del método Set
El módulo activa el valor en sincronía con la ejecución principal pero no detiene el
desarrollo. Con el parámetro mode puede definirse el punto de la activación.
mode
Significado
DIRECT
El valor se activa en el próximo ciclo de
sistema E/S
ZEROPULSE
El valor se activa con el próximo impulso cero
del encoder
Tabla 20.19 Modos del método Set
Ejemplo:
enc0.Set(1000, DIRECT)
20.9.5 Lectura del encoder, método Read
Con el método Read, el programa de usuario puede leer el valor del encoder incremental.
Sintaxis:
<ENCODER>.Read ( OPT <ovlEnable> : BOOL) : DINT
Parámetro
Tipo
Significado
ovlEnable
BOOL
Parámetro para ajustar el punto de interrogación
Tabla 20.20 Parámetro del método Read
El método devuelve el valor incremental del encoder. Éste no se computa con el valor de
conversión. Para leer el valor estándar se utiliza el elemento Value para acceder
directamente al puerto de la entrada de encoder.
206
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Ejemplo de lectura de un valor estándar:
value := enc0.port.value
Ejemplo de lectura de un valor incremental:
value := enc0.Read()
20.10 Módulo CANopen COPDEVICE
El módulo CANopen puede utilizarse en el programa para activar equipos conectados con
el CMXR a través del bus CAN de periféricos.
Atención
En el bus CAN de periféricos pueden controlarse equipos CANopen
pero estos equipos no están sujetos al comportamiento de PARADA
DE EMERGENCIA de la cinemática. Los actuadores auxiliares no se
frenan de manera controlada. Si el bus CAN de periféricos se
controla desde un programa paralelo, éste no se detiene en caso
de PARADA DE EMERGENCIA.
Nota
Para activar equipos individuales conectados por bus CAN con el
CMXR, consulte la documentación correspondiente del fabricante
del participante de bus.
20.10.1 Instanciación
La instanciación del módulo CANopen se efectúa automáticamente debido a la
configuración E/S del control y no puede realizarse manualmente.
Para acceder a los equipos CANopen conectados, se utiliza un nombre inequívoco definido
previamente con el software de configuración FCT. El nombre indicado en FCT no puede
utilizarse directamente, sino que se le añade la terminación “_copd”. Esto es válido tanto
para los actuadores conectados en el DriveBus como para los equipos CANopen del bus
CAN de periféricos.
Ejemplo:
El eje 1 de la cinemática se denomina “Axis1” en la configuración DriveBus del FCT. El
acceso se efectúa con Axis1_copd.BausteinMethode( ).
Configuración de CANopen:
[IO.ONBOARD.SLOTCAN:0.FX200A:0.CAN:0.COPDEVICE:1]
name="Axis1"
// Nombre del dispositivo COP
Festo GDCP-CMXR-SW-ES es 1205c
207
20. Módulos
Código de programa:
Axis1_copd.WriteSDO(16#6060,0,7,eight_bits)
20.10.2 Métodos
El módulo CANopen dispone de los métodos siguientes:
Métodos
Descripción
WriteSDO
Escribir SDO
ReadSDOUnsigned
Leer SDO sin signo
ReadSDOSigned
Leer SDO con signo
Tabla 20.21 Métodos del módulo CANopen
En el editor FTL se visualiza automáticamente una lista con los métodos disponibles
introduciendo el punto. Los métodos pueden seleccionarse en dicha lista.
En la unidad de mando manual, los métodos pueden seleccionarse mediante el árbol de
menú en el punto “CANopen Devices”.
En la figura se muestra la selección de métodos del módulo CANopen de la unidad de
mando manual.
20.10.3 Escritura de SDO, método WriteSDO
Con el método WriteSDO es posible escribir conjuntos de datos en el bus CAN.
Sintaxis:
<COPDEVICE>.WriteSDO ( <index> : DINT,
<subindex> : DINT,
<data> : DINT,
<type> : SdoDataType ) : BOOL
208
Festo GDCP-CMXR-SW-ES es 1205c
20. Módulos
Parámetros
Tipo
Significado
index
DINT
Índice de SDO
subindex
DINT
Subíndice de SDO
data
DINT
Datos que se van a escribir
type
SdoDataType
Tipo de datos (Enum)
eight_bits
(8 bits)
sixteen_bits
(16 bits)
thirtytwo_bit
(32 bits)
Tabla 20.22 Parámetros del método WriteSDO
Si el conjunto se escribe con éxito se devuelve TRUE, de lo contrario se devuelve FALSE.
Ejemplo:
oData := 12000
Axis3_copd.WriteSDO(16#6085, 0, oData, thirtytwo_bits)
20.10.4 Lectura de SDO, método ReadSDOSigned
Con el método ReadSDOSigned, el bus CAN puede leer conjuntos de datos con signo.
Sintaxis:
<COPDEVICE>.ReadSDOSigned (<index> : DINT,
<subindex> : DINT,
<data> : DINT) : BOOL
Parámetros
Tipo
Significado
index
DINT
Índice de SDO
subindex
DINT
Subíndice de SDO
data
DINT
Datos que se van a leer
Tabla 20.23 Parámetros del método ReadSDOSigned
Si el conjunto se lee con éxito se devuelve TRUE, de lo contrario se devuelve FALSE.
Ejemplo:
dint_iData : DINT := 0
Programa:
Axis3_copd.ReadSDOSigned(16#6098, 0, dint_iData)
SetInfo("método de recorrido de referencia leído: %1",
dint_iData)
:
Festo GDCP-CMXR-SW-ES es 1205c
209
20. Módulos
20.10.5 Lectura de SDO, método ReadSDOUnsigned
Con el método ReadSDOUnsigned es posible leer conjuntos de datos en el bus CAN. El
método detecta automáticamente la longitud de los datos leídos por el bus CAN. Éstos se
devuelven sin signo como valor de 32 bits.
Sintaxis:
<COPDEVICE>.ReadSDOUnsigned (<index> : DINT,
<subindex> : DINT,
<data> : DWORD) : BOOL
Parámetros
Tipo
Significado
index
DINT
Índice de SDO
subindex
DINT
Subíndice de SDO
data
DWORD
Datos que se van a leer
Tabla 20.24 Parámetros del método ReadSDOUnsigned
Si el conjunto se lee con éxito se devuelve TRUE, de lo contrario se devuelve FALSE.
210
Festo GDCP-CMXR-SW-ES es 1205c
21. Señales de periféricos
21.
Señales de periféricos
21.1
Empleo de las entradas y salidas digitales
Las señales digitales se ajustan con la configuración. En ella se define un nombre para
cada señal de hardware. Estos nombres pueden utilizarse en el programa de movimientos
para la interrogación o el control.
Cada señal digital tiene forma del tipo de datos estructurados y contiene los datos:
State : BOOL
Estado de la señal TRUE o FALSE
Error
Información sobre un error de la señal
: BOOL
Para acceder a estos datos se utiliza el nombre de hardware y el operador punto.
Ejemplo:
Una señal de entrada de sensor se denomina “GripperOpen”. El acceso al estado del
sensor se declara:
GripperOpen.State
Esta expresión es del tipo de datos BOOL y puede utilizarse como una variable booleana
en el programa.
21.2
Empleo de las entradas y salidas analógicas
Las señales analógicas se ajustan con la configuración. En ella se define un nombre para
cada señal de hardware. El nombre puede utilizarse como una variable en el programa de
movimientos y, p. ej., un valor analógico puede ser empleado para el cálculo.
Cada señal analógica tiene forma de tipo de datos estructurados y contiene los datos:
Value : REAL
Valor de la señal
Error
Información sobre un error de la señal
: BOOL
Para acceder a estos datos se utiliza el nombre de hardware y el operador punto.
Festo GDCP-CMXR-SW-ES es 1205c
211
21. Señales de periféricos
Ejemplo:
Una señal de entrada analógica se denomina “Level”. El acceso al estado del sensor se
declara:
Level.Value
Esta expresión es del tipo de datos REAL y puede utilizarse como una variable en el
programa.
212
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
22.
Programación de eventos
El lenguaje FTL ofrece la posibilidad de reaccionar a eventos – como, p. ej., inicio o parada
de un programa. Para ello, al producirse este evento, se inicia y procesa un programa FTL
con un nombre fijo acordado.
Nota
El tiempo de respuesta hasta el inicio de programas de eventos se
sitúa aprox. en 5-20 ms y no es determinante. Se pueden ejecutar
más eventos mediante su programación en el PLC integrado.
Todos los programas de eventos deben almacenarse en el proyecto global “GLOBAL”. No
deben “cargarse”. Poseen nombres fijos acordados.
22.1
Eventos soportados
La tabla siguiente muestra un resumen de los posibles eventos:
Nombre del evento = Nombre del
programa
Ejecución del programa de evento
onstartup
Una vez tras arrancar el control
onprogstart
Inicio del programa
onproginterrupt
Interrumpir el programa activo
onprogcontinue
Continuar el programa interrumpido
onprogend
Fin del programa
onf1keypressed
Al pulsar la tecla F1 de la unidad de control manual CDSA
onf1keyreleased
Al soltar la tecla F1 de la unidad de control manual CDSA
onf2keypressed
Al pulsar la tecla F2 de la unidad de control manual CDSA
onf2keyreleased
Al soltar la tecla F2 de la unidad de control manual CDSA
Tabla 22.1 Resumen de los eventos FTL
Los nombres de eventos/programas mencionados en la tabla deben respetarse
estrictamente.
En la imagen siguiente, se han creado los 3 eventos
-
onf1keypressed,
-
onprogstart,
-
onstartup
en el proyecto “GLOBAL”. Sólo se puede reaccionar a estos eventos.
Festo GDCP-CMXR-SW-ES es 1205c
213
22. Programación de eventos
¡Atención!
En caso de incumplirse las convenciones de nombres, no será
posible ejecutar el programa de eventos. También se puede emitir
un mensaje de diagnóstico. Por consiguiente, los eventos se deben
comprobar por separado con cada puesta en funcionamiento.
Nota
Los nombres de los programas siempre se escriben en minúsculas
debido al sistema de archivos del CMXR.
Nota
Si durante la ejecución de un programa de eventos se produce un
error, esto conllevará una parada y la cancelación de este
programa. El programa no se puede volver a ejecutar.
Nota
Las variables que se utilizan en los programas de eventos también
deben declararse en el proyecto global “GLOBAL”. También está
permitido el uso de variables del sistema adecuadas.
22.2
Utilización del registro de instrucciones FTL
Dentro de los programas de eventos se puede utilizar un número limitado de instrucciones
FTL. Las instrucciones siguientes no están permitidas explícitamente:
-
Instrucciones de desplazamiento, p. ej. Ptp, Lin,
-
Instrucciones que influyen en las instrucciones de desplazamiento, p. ej. Tool,
SetRefSys,
-
Instrucciones que influyen en los datos cinemáticos, p. ej. Vel, Acc,
-
Bucles sin fin,
214
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
-
Subprogramas y programas paralelos
¡Atención!
Dentro de los programas de eventos no están permitidas las
instrucciones de desplazamiento ni de otro tipo que influyan en las
instrucciones de desplazamiento o los datos cinemáticos. En caso
de utilizar instrucciones no permitidas, se emitirá el error
correspondiente y se cancelará el evento.
22.3
Control temporal
En todos los programas de eventos se controla el tiempo de ejecución. En caso de
superarse un tiempo fijado de 1 segundo, se emite un error y se cancela el programa de
eventos activo.
22.4
Evento arranque del control, <onstartup>
Tras el arranque del control multieje CMXR se ejecuta una vez el programa de eventos
“onstartup”. Una posible aplicación para este evento es, p. ej., la carga automática de un
programa FTL.
Ejemplo:
:
// Carga del programa main del proyecto sorting
LoadProgram("sorting", “main”)
:
22.5
Eventos del control de programa
Con la ayuda de los “eventos de programa” se puede reaccionar, p. ej., al inicio o a la
parada de programas FTL. Un posible caso de aplicación puede ser el cierre/apertura de
un aplicador en el caso de una parada de programa y reinicio. En la tabla siguiente se
detallan todos los eventos disponibles para el control de programa.
Festo GDCP-CMXR-SW-ES es 1205c
215
22. Programación de eventos
Nombres de eventos
Frecuencia de
llamada
Llamada del evento
onprogstart
una vez
Al iniciar el programa FTL.
onproginterrupt
si es necesario
Al parar el programa FTL p. ej. mediante la tecla de parada en
la unidad de mando manual, la interface PLC.
onprogcontinue
si es necesario
Al reiniciar un programa parado.
onprogend
una vez
Cuando el programa se termina.
Tabla 22.2 Resumen de eventos de control de programa
22.5.1 Comportamiento del tiempo de ejecución durante
el funcionamiento
En función de los diferentes eventos, se producen tiempos de reacción correspondientes
en el programa FTL, así como en los respectivos programas de eventos. La figura siguiente
muestra la ejecución temporal de los diferentes eventos de programa:
Parada de programa,
los ejes frenan
Inicio del programa
Nuevo inicio del
Fin del programa
programa
Si es necesario,
reposicionamiento del
robot en la trayectoria
onprogstart
Tiempo
Programa
Programa
onprogcontinue
onproginterrupt
onprogend
Si tras una interrupción de programa se ha situado la cinemática, p. ej., en funcionamiento
manual, antes del evento “onprogcontinue” se ejecuta la operación de reposicionamiento
en la trayectoria.
¡Atención!
La ejecución de los programas de eventos “onproginterrupt” y
“onprogend” tiene lugar tras alcanzar los estados de programa.
Esto también incluye la parada de los ejes. Los eventos
“onprogstart” y “onprogcontinue” se llaman antes de la ejecución
del programa.
Por consiguiente, en caso de utilizar estos eventos, siempre debe
tenerse en cuenta la fijación temporal.
216
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
22.5.2 Solapamiento de eventos de programa
El solapamiento de eventos de programa, es decir, sucede un evento mientras el programa
de eventos actual aún no ha finalizado, está bloqueado. Los eventos iniciados finalizan
siempre antes de que se active otro evento.
¡Atención!
Para no bloquear temporalmente los posibles eventos posteriores,
en un programa de eventos sólo debe programarse lo
estrictamente necesario.
La gráfica siguiente muestra un inicio de programa dentro del evento de programa aún
activo “onproginterrupt”:
Parada de programa,
los ejes frenan
Inicio del programa
Fin del programa
Nuevo inicio
del programa
Desplazamiento
temporal del inicio
Programa
onprogstart
Tiempo
Programa
onprogcontinue
onproginterrupt
onprogend
El inicio siguiente del programa se retarda hasta que el evento de programa
“onproginterrupt” se ha ejecutado.
22.5.3 Utilización de diferentes proyectos/programas
Cuando funcionan diferentes proyectos y programas también se llaman los mismos
programas de eventos. Si las instrucciones dentro del programa de eventos deben
depender de un programa iniciado, esto debe programarse explícitamente. Esto puede
realizarse mediante el uso de variables globales.
Nota
Al iniciar diferentes programas, debe tenerse en cuenta el orden
arriba indicado para la ejecución de los programas de eventos y de
los programas normales desencadenantes.
Festo GDCP-CMXR-SW-ES es 1205c
217
22. Programación de eventos
Programa “onprogstart”
// Ajustar la variable a 0 para la identificación
ProgCode := 0
:
Manejo del programa FTL
// Ajustar la variable a 1 para la identificación
ProgCode := 1
:
Alimentación del programa FTL
// Ajustar la variable a 2 para la identificación
ProgCode := 2
:
Programas “onproginterrupt”, “onprogcontinue” o “onprogend”
// Comprobar la identificación del programa
IF(ProgCode = 1) THEN
// Manejo del programa
:
ELSIF(ProgCode = 2) THEN
// Alimentación del programa
:
END_IF
22.5.4 Ejemplo: Activación de un aplicador al encolar
En un programa FTL, un aplicador para diferentes trayectorias de encolado se activa y
desactiva según sea el caso. Para cerrar el aplicador en el caso de una parada del
programa y volver a abrirlo al reiniciar el programa, se pueden utilizar las funciones de
eventos.
En este sentido, el aplicador se activa con una salida digital, que a su vez se activa a través
del módulo instanciado Glue.
Si el programa FTL se detiene, en el evento “onproginterrupt” se almacena el estado
actual de la salida digital en la variable GlueOpened y el aplicador se cierra.
Programa “onproginterrupt”
// Recordar estado de aplicación
218
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
GlueOpened := Glue.State
// Cerrar aplicador
Glue.Reset()
Si se reinicia el programa FTL parado, se ejecuta el programa de eventos
“onprogcontinue”, donde se comprueba el estado de la variable GlueOpened y, en caso
necesario, se vuelve a abrir el aplicador.
Festo GDCP-CMXR-SW-ES es 1205c
219
22. Programación de eventos
Programa “onprogcontinue”
// Comprobar si el aplicador estaba abierto
IF(GlueOpened)THEN
// Abrir aplicador
Glue.Set()
END_IF
// Borrar la variable para recordar el estado
GlueWasOpen := FALSE
Para cerciorarse, se puede cerrar el aplicador con el evento “onprogend”.
Programa “onprogend"
// Cerrar aplicador
Glue.Reset()
// Borrar la variable para recordar el estado
GlueWasOpen := FALSE
¡Atención!
La activación y desactivación del aplicador no se realiza de forma
sincrónica respecto del movimiento de la trayectoria. Por
consiguiente, en el punto de interrupción se pueden producir
mermas de calidad en forma, p. ej., de revestimiento excesivo o
insuficiente.
22.6
Eventos para las teclas F1 y F2
La unidad de mando manual CDSA dispone de 2 teclas de función con la designación F1 y
F2 situadas en la parte izquierda de la barra inferior de teclas de función.
Con la ayuda de los eventos de programa
-
onf1keypressed,
-
onf1keyreleased,
-
onf2keypressed,
-
onf2keyreleased
se pueden utilizar estas dos teclas en la aplicación.
220
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
Teclas F1 y F2
Una posible aplicación para estas teclas podría ser abrir y cerrar una pinza en
funcionamiento manual.
Ejemplo:
En funcionamiento manual, con la tecla F1 se debe abrir una pinza y se debe cerrar al
volver a pulsar la tecla. Puesto que la pinza también se utiliza en un programa FTL, se debe
tener en cuenta el estado en el caso de una parada de programa. Además, en el caso de
reiniciar el programa, se debe restaurar el estado de la pinza.
Interrupción de programa:
En caso de interrupción del programa, el estado de la pinza se almacena en una variable
para poder restaurar el estado de la pinza en el caso de un eventual reinicio del programa.
Programa “onproginterrupt”
// Recordar estado pinza
GripperOpen := OpenGripper.State
Al continuar el programa (nueva instrucción de inicio), la pinza se sitúa en el estado en el
que se encontraba al interrumpirse el programa.
Programa “onprogcontinue”
// Comprobar si la pinza estaba abierta
IF(GripperOpen)THEN
// Abrir pinza
OpenGripper.Set()
ELSE
// Cerrar pinza
OpenGripper.Reset()
END_IF
Festo GDCP-CMXR-SW-ES es 1205c
221
22. Programación de eventos
En funcionamiento manual, la pinza se abre o se cierra pulsando la tecla F1. Para ello debe
consultarse el modo de funcionamiento activo con la instrucción GetManualModeActive.
Programa “onf1keypressed”
// Comprobar si funcionamiento manual
IF(GetManualModeActive())THEN
// Comprobar si la pinza está abierta
IF(OpenGripper.State)THEN
// Cerrar pinza
OpenGripper.Reset()
ELSE
// Abrir pinza
OpenGripper.Set()
END_IF
END_IF
22.7 Instrucciones FTL especiales para su aplicación
con eventos
Las instrucciones siguientes están pensadas para su utilización dentro de los eventos.
22.7.1
Consulta del modo de funcionamiento activo,
<GetAutoModeActive, GetManualModeActive>
Con esta instrucción se puede consultar si el modo de funcionamiento activo es
automático o manual.
Sintaxis
GetAutoModeActive( ): BOOL
GetManualModeActive( ): BOOL
Valores devueltos:
FALSE
Modo de funcionamiento no activo
TRUE
Modo de funcionamiento activo
222
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
22.7.2 Cargar programa FTL, <LoadProgram>
Mediante la instrucción “LoadProgram” se carga un programa FTL desde la tarjeta de
memoria en la memoria de trabajo, donde está disponible para su ejecución. Con la
ejecución finalizan todos los demás programas ya cargados, que se descargan de la
memoria. El propio programa de eventos no finaliza y se ejecuta hasta el final.
Sintaxis
LoadProgram ( <project>:STRING, <program>:STRING):BOOL
Métodos
Descripción
project
Nombre del proyecto de donde proviene el programa
program
Nombre del programa que se carga
Tabla 22.3 Instrucción “LoadProgram”
Llamada desde un programa en curso
Valor de retorno
TRUE
El programa se ha cargado
FALSE
No ha podido cargarse el programa
Tratamiento de errores
Si el programa no se ha podido cargar debido a un error, p. ej., porque no existe, se genera
y emite un mensaje correspondiente.
¡Atención!
Si se ejecuta la instrucción “LoadProgram” fuera de un programa
de eventos, esto provocará la parada y descarga del programa. De
este modo, todas las líneas de programa siguientes ya no se
ejecutarán.
Festo GDCP-CMXR-SW-ES es 1205c
223
22. Programación de eventos
22.8
Mensajes de los programas de eventos
Todos los mensajes de los programas de eventos pertenecen al componente 50. Se
pueden emitir los mensajes siguientes:
Nota
La clase de mensaje Error siempre conlleva una parada de todos
los programas FTL y, por consiguiente, una parada de los ejes
cinemáticos.
Número de mensaje
1260
Clase de mensaje
Error
Mensaje
Proyecto no válido con la instrucción “LoadProgram”. <Nombre de
proyecto/programa con número de línea>
Efecto
La instrucción LoadProgram no se puede ejecutar.
Causa
El proyecto indicado en la instrucción “LoadProgram” no existe o no es
válido.
Medida
Comprobar los parámetros de la macro LoadProgram, proporcionar el
proyecto/programa a la tarjeta CF, comprobar que el programa no tenga
errores.
Número de mensaje
1261
Clase de mensaje
Error
Mensaje
Programa no válido con la instrucción “LoadProgram”. <Nombre de
proyecto/programa con número de línea>
Efecto
La instrucción “LoadProgram” no se puede ejecutar.
Causa
El programa indicado en la instrucción “LoadProgram” no existe o no es
válido.
Medida
Comprobar los parámetros de la macro LoadProgram, proporcionar el
proyecto/programa a la tarjeta CF, comprobar que el programa no tenga
errores.
Número de mensaje
1262
Clase de mensaje
Error
Mensaje
Instrucción de robot en el evento: <Nombre de evento> no permitida.
<Nombre de proyecto/programa con número de línea>
Efecto
Se cancela el evento de programa.
Causa
No está permitido utilizar instrucciones que influyan en la cinemática, p. ej.
instrucciones de desplazamiento, datos dinámicos en programas de eventos.
Medida
224
Eliminar las instrucciones no permitidas del programa de eventos.
Festo GDCP-CMXR-SW-ES es 1205c
22. Programación de eventos
Número de mensaje
1263
Clase de mensaje
Error
Mensaje
Evento: <Nombre del evento> ha sobrepasado el límite de tiempo de: <Valor
de tiempo> ms.
Efecto
Se cancela el evento de programa.
Causa
El evento de programa requiere demasiado tiempo. Posiblemente se han
programado demasiadas instrucciones, una instrucción en espera (WaitTime)
o un bucle sin fin.
Medida
Comprobar el programa y eliminar las instrucciones no permitidas.
Festo GDCP-CMXR-SW-ES es 1205c
225
23. Puntos de conmutación simples
23.
Puntos de conmutación simples
Los puntos de conmutación son posiciones en una ruta de movimiento o en una propia
posición, donde se ejecuta una acción. Estas acciones se ejecutan en función de la
trayectoria de movimientos. Los posibles casos de aplicación podrían ser, p. ej.:
-
Abrir y cerrar un aplicador, p. ej., para encolar o recubrir
-
Modificación del caudal de un medio añadido, p. ej., agente de estanqueización
-
Activación de sensores inteligentes, p. ej., sistema de visión
23.1
Punto de conmutación simple con instrucción
de movimiento, <DO>
Un punto de conmutación simple se puede crear mediante una instrucción DO (véase
capítulo 8.10 Instrucción DO) junto con una instrucción de movimiento. En este sentido,
se asigna a la instrucción DO una instrucción de movimiento. Para ello se pueden aplicar
todas las instrucciones de movimiento como PTP o movimientos cartesianos lineales y
circulares.
Sintaxis
<Instrucción de movimiento> DO < Instrucción >
Con la instrucción DO se pueden llevar a cabo operaciones de conmutación sencillas. Estas
operaciones se realizan en la ejecución principal del FTL. En este caso no se pueden
compensar los posibles tiempos de conmutación. No se produce ninguna conexión con la
velocidad de trayectoria. Esto significa que el comportamiento de conmutación, referido a
la trayectoria, se puede modificar cambiando la dinámica de dicha trayectoria. La
ejecución de la instrucción se realiza incondicionalmente.
Ejemplo:
En el siguiente contorno se debe conectar una salida digital en los tramos rectos y se debe
desconectar dicha salida en los arcos de círculo.
Pos1
Pos2
Ipos1
Ipos2
Pos4
226
Pos3
Festo GDCP-CMXR-SW-ES es 1205c
23. Puntos de conmutación simples
:
Lin(Pos1) DO Applicator.Set()
Lin(Pos2) DO Applicator.Reset()
CircIp(Ipos1,Pos3) DO Applicator.Set()
Lin(Pos4) DO Applicator.Reset()
CircIp(Ipos2,Pos1)
:
23.2
Punto de conmutación simple, <OnPosition>
Junto con la instrucción DO, con la macro OnPosition también se puede programar una
acción de conmutación simplificada. No obstante, en este caso no tiene lugar un vínculo
con una instrucción de movimiento. La macro OnPosition espera hasta que se alcanza la
última posición programada y entonces ejecuta la instrucción DO.
Sintaxis
OnPosition() DO < Instrucción >
Ejemplo:
En el ejemplo siguiente se accede a un subprograma donde están las instrucciones de
movimiento. Tras alcanzar la última posición, la macro OnPosition ejecuta la instrucción
DO y fija la variable SequenceReady en TRUE.
:
Lin(Pos1)
Lin(Pos2)
CALL Sort
OnPosition() DO SequenceReady := TRUE
Lin(Home) DO Applicator.Reset()
:
23.3 Comportamiento en el área de avance
aproximado
Si el avance aproximado está activado, no se podrá ejecutar la instrucción DO al alcanzar
el punto programado, ya que el avance aproximado impedirá que se alcance dicho punto.
En este caso, el punto de conmutación se proyecta sobre la trayectoria del área de avance
aproximado y se ejecuta. De este modo se pueden producir imprecisiones, cuyo alcance se
desconoce y que se deben determinar mediante una puesta en funcionamiento.
Festo GDCP-CMXR-SW-ES es 1205c
227
23. Puntos de conmutación simples
Nota
Si los segmentos de movimiento desembocan tangencialmente uno
en otro, el avance aproximado no influirá en modo alguno en la
ejecución de la instrucción DO.
La instrucción DO se
ejecuta aquí.
1
1
P1´
1
1
1
1
1
1
23.4
P2
P1
P0
Comportamiento del tiempo de ejecución
de la instrucción DO
En caso de utilizar la instrucción DO, debe tenerse en cuenta que ésta presenta una
especie de proceso paralelo. De este modo se pierde la linealidad real del programa FTL
que se ejecuta de arriba abajo. En caso de utilizar la instrucción DO, debe tenerse en
cuenta que los programas FTL siempre se calculan por adelantado.
El ejemplo siguiente muestra una ejecución de programa que no brinda el resultado
deseado:
:
Started := FALSE
Lin(Home)
Lin(Pos2) DO Started := TRUE
IF Started THEN
:
ELSE
:
END_IF
:
Debido al cálculo por adelantado del programa FTL, la instrucción IF siempre ejecutará la
derivación ELSE.
228
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
24.
Puntos de conmutación de la trayectoria
Los puntos de conmutación de la trayectoria se calculan en la trayectoria descrita. Puede
tratarse de movimientos PTP, lineales y/o circulares. Para la programación de los puntos
de conmutación de la trayectoria se utiliza la macro correspondiente junto con la
instrucción DO.
Sintaxis
< Macro de punto de conmutación > DO < Instrucción >
Una línea de programa sólo puede incluir una instrucción DO, detrás de la cual puede
haber como máximo una instrucción.
Los puntos de conmutación de la trayectoria existen en múltiples ejecuciones, que van
desde operaciones de conmutación simples hasta la compensación de tiempos de
conmutación. Estas variantes se describen en las páginas siguientes.
¡Atención!
Los puntos de conmutación de la trayectoria se calculan con el
cálculo por adelantado del programa. Para ejecutarlos
correctamente es siempre necesario un override del 100 % (véase
el capítulo 24.7.4 Influencia del override). Un override modificado
resulta en una ejecución errónea.
24.1
Segmento de la trayectoria
Se denomina segmento de la trayectoria al tramo entre un punto inicial y un punto de
destino. En los segmentos de trayectoria se ejecutan los puntos de conmutación de la
trayectoria. Para la ejecución existen diferentes tipos que se describen en las páginas
siguientes. En función del tipo de ejecución de los puntos de conmutación de la
trayectoria, dichos puntos pueden desplazarse en el segmento según una posición o un
tiempo.
La gráfica siguiente explica la definición del segmento:
P1
Segmento de trayectoria entre
P1 y P2
P3
P2
Fin de segmento
Inicio de segmento
Punto de conmutación
Festo GDCP-CMXR-SW-ES es 1205c
229
24. Puntos de conmutación de la trayectoria
Nota
Por cada segmento de trayectoria se puede programar un máximo
de 8 puntos de conmutación. En caso de sobrepasarse este límite,
se emitirá un mensaje de error y se parará el programa.
24.2 Comportamiento en el área de avance
aproximado
En función de parámetros como valores de avance aproximado, offset de posición o
tiempo del punto de conmutación, la posición del punto de conmutación puede estar
situada en el área de avance aproximado. El cálculo del punto de conmutación tiene lugar
en los segmentos de trayectoria que se han calculado sin avance aproximado. A continuación, en el área de avance aproximado se proyecta este punto en la curva de
trayectoria del área de avance aproximado. En función del tamaño del área de avance
aproximado, se producirán imprecisiones de los valores programados.
Nota
Si estas imprecisiones no son aceptables en el área de avance
aproximado, debe garantizarse que los puntos de conmutación
estén fuera de esta área. Esto puede realizarse, p. ej., mediante la
inserción de segmentos circulares que desemboquen de forma
tangencial.
P3
Punto de conmutación
proyectado y ejecutado
P2
P1
Punto de conmutación programado,
desplazado desde P2
230
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
24.3
Punto de conmutación con desplazamiento
porcentual, <OnParameter>
Con la macro de punto de conmutación OnParameter, el punto de conmutación se puede
desplazar porcentualmente en el siguiente segmento de trayectoria. La posición del punto
de conmutación se calcula mediante la longitud del segmento, que se deriva de los puntos
programados, así como el valor porcentual indicado.
Sintaxis
OnParameter( <percent> : REAL
OPT <timeMs> : DINT) DO < Instrucción >
Parámetros
Significado
Unidad
percent
Valor porcentual para el cálculo del punto
Porcentaje
de conmutación
0..100%
Desplazamiento temporal del punto de
ms
timeMs
conmutación
Tabla 24.1 Parámetros de la instrucción OnParameter
La instrucción OnParameter se puede aplicar a movimientos PTP y cartesianos, así como
todas las instrucciones con modificación de orientación. La programación de OnParameter
siempre tiene lugar entre 2 instrucciones de movimiento que describen el segmento de la
trayectoria.
Además del desplazamiento porcentual del punto de conmutación también es posible un
desplazamiento con un offset de tiempo. El efecto del offset de tiempo (parámetro
timeMs) se trata en el capítulo 24.6
Offset de tiempo opcional de la página 238.
Ejemplo:
Se recorre una trayectoria y, tras un recorrido del 70% de la longitud del segmento entre la
posición P0 y P1, debe abrirse una pinza.
:
Lin(P0)
La instrucción DO se
ejecuta aquí.
1
1
P2
OnParam(70) DO Gripper.Set()
Lin(P1)
1
1
P0
:
1
1
1
1
Festo GDCP-CMXR-SW-ES es 1205c
0%
1
1
70%
1
1
P1
100%
231
24. Puntos de conmutación de la trayectoria
24.4
Punto de conmutación en cualquier lugar
de la trayectoria, <OnDistance>
Con la macro de punto de conmutación OnDistance se puede definir un punto de
conmutación que esté situado en el siguiente segmento de la trayectoria. Este punto de
conmutación se puede desplazar con un offset respecto al inicio o el fin del segmento.
Opcionalmente, también se puede indicar un tiempo para desplazar temporalmente el
punto de conmutación, p. ej., para la compensación de tiempos de conmutación.
Sintaxis
OnDistance( <type> : DISTANCETYPE,
<offset> : REAL,
OPT <timeMs> : DINT ) DO < Instrucción >
Parámetros
Significado
Unidad
type
Valor de enumeración para diferenciar la
-
distancia desde el inicio o el fin del movimiento.
Están disponibles los valores FROMBEGIN y
FROMEND.
offset
Offset de posición referido al inicio o al fin, tal
mm
como se indica en el parámetro type.
timeMs
Offset de tiempo para desplazar el punto de
ms
conmutación.
Tabla 24.2 Parámetros de la instrucción OnDistance
Nota
La instrucción OnDistance sólo se puede utilizar junto con
movimientos cartesianos (p. ej. Lin y CircIP). No es posible su uso
con movimientos PTP. En caso de uso antes de instrucciones de
desplazamiento PTP, se emite una advertencia.
El efecto del offset de tiempo (parámetro timeMs) se trata en el capítulo 24.6 Offset de
tiempo opcional de la página 238.
232
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
type
El parámetro type especifica si el punto de conmutación hace referencia al fin o al inicio
del segmento.
OnDistance (FROMBEGIN, 0) se activa al inicio del segmento:
Inicio del segmento = Punto de conmutación
P1
P3
P2
Fin de segmento
OnDistance (FROMEND, 0) se activa al fin del segmento:
Inicio de segmento
P1
P2
P3
Fin del segmento = Punto de
conmutación
offset
El desplazamiento del punto de conmutación tiene lugar siempre en el segmento de
trayectoria en cuestión. En este sentido, mediante el parámetro type se puede especificar
si este offset se refiere al inicio o al fin del segmento.
Si se selecciona una referencia al inicio del segmento, el offset se prolonga en el segmento
en dirección al fin del segmento. En el caso de una referencia al fin del segmento, el offset
se compensa en dirección al inicio del segmento.
Nota
El parámetro offset debe especificarse como valor positivo. Si se
especifica un valor negativo, se emitirá un mensaje
correspondiente.
Festo GDCP-CMXR-SW-ES es 1205c
233
24. Puntos de conmutación de la trayectoria
Ejemplo de punto de conmutación con distancia desde el fin del segmento:
:
Lin(P1)
OnDistance(FROMBEGIN, 30) DO <Instrucción>
Lin(P2)
Lin(P3)
:
Inicio de segmento
Punto de conmutación
P1
P2
P3
Fin de segmento
Offset = 30 mm
Ejemplo de punto de conmutación con distancia desde el fin del segmento:
:
Lin(P1)
OnDistance(FROMEND, 30) DO <Instrucción>
Lin(P2)
Lin(P3)
:
Inicio de segmento
Punto de conmutación
P1
P2
P3
Fin de segmento
Offset = 30 mm
234
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
24.5 Punto de conmutación en un plano de
conmutación,
<OnPlane>
La macro del punto de conmutación permite la ejecución de una instrucción al atravesar un
plano programable en el espacio. El plano de conmutación debe atravesarse en el
segmento de la instrucción de desplazamiento cartesiano siguiente. El plano está situado
a una distancia parametrizable en paralelo a un plano del sistema de referencia actual.
Sintaxis
OnPlane( <plane> : PLANETYPE,
<pos> : REAL,
OPT <timeMs> : REAL ) DO < Instrucción >
Parámetros
Significado
Unidad
plane
Selección del plano XYPLANE, YZPLANE,
-
XZPLANE.
pos
Desplazamiento en paralelo del plano respecto
mm
del punto cero del sistema de referencia activo.
timeMs
Desplazamiento temporal del punto de
conmutación programado
Tabla 24.3 Parámetros de la instrucción OnPlane
El efecto del offset de tiempo (parámetro timeMs) se trata en el capítulo 24.6 Offset de
tiempo opcional de la página 238.
Nota
La elección del plano de conmutación XY, YZ o XZ mediante el
parámetro plane se define en el sistema de referencia activo.
Al cambiar a otro sistema de referencia debe tenerse en cuenta que
podría cambiar la situación de los planos.
Nota
El plano de conmutación sólo puede activarse mediante movimientos cartesianos. Si es atravesado por un movimiento PTP, se
emitirá una advertencia, puesto que el punto de conmutación no se
puede calcular con un movimiento PTP.
Festo GDCP-CMXR-SW-ES es 1205c
235
24. Puntos de conmutación de la trayectoria
Ejemplo:
En el ejemplo siguiente se define un plano paralelo al plano XZ del sistema de referencia
activo. Puesto que el plano está situado en el punto cero del sistema de referencia, debe
desplazarse correspondientemente en paralelo con el parámetro pos.
1
1
P2
X
1
1
100 mm
Z
1
1
P0
P1´
1
1
1
1
Plano XZ
P1
Y
:
// Ida
Lin(P0)
OnPlane(XZPLANE, 100) DO mySignal := TRUE
Lin(P1)
Lin(P2)
// Vuelta
Lin(P1)
OnPlane(XZPLANE, 100) DO mySignal := FALSE
Lin(P0)
:
236
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
24.5.1 Programación tipo teach-in de la posición respecto
al plano de conmutación
Para facilitar el trabajo, junto con la introducción de un valor, la posición respecto al plano
de conmutación también se puede programar por teach-in. Esto se realiza con la ayuda de
la unidad de mando manual o del software de emulación.
En el modo de funcionamiento MANUAL, se abre la máscara de parámetros de la
instrucción al crear la macro o mediante la tecla de pantalla Modificar. Al marcar la línea
Posición, se activa la tecla de pantalla y se puede utilizar.
1.
Hacer clic en el campo
de parámetros y se
mostrará de color azul
2.
Se activa la tecla de
pantalla de programación
tipo teach-in
La programación tipo teach-in de la posición depende del plano seleccionado mediante el
parámetro plane. Se programan por teach-in los siguientes valores cartesianos:
Plano seleccionado, parámetro plane
Eje cartesiano que se programa por
teach-in
XYPlane
Z
XZPlane
Y
YZPlane
X
Tabla 24.4 Parámetros de teach-in plane
Pulsando la tecla de pantalla
se ejecuta la programación tipo teach-in. Se determina el valor cartesiano del eje correspondiente (véase tabla) y se escribe en el parámetro
pos. Si se ha asignado una variable a este parámetro, se escribe el valor en esta variable.
Nota
El valor siempre se programa por teach-in en el sistema de referencia seleccionado. Éste se muestra en el cuadro de selección en
la página de posición.
Festo GDCP-CMXR-SW-ES es 1205c
237
24. Puntos de conmutación de la trayectoria
24.6
Offset de tiempo opcional
En las macros descritas de punto de conmutación OnParameter, OnDistance y OnPlane, se
puede indicar opcionalmente un offset de tiempo. Con este offset de tiempo se pueden
desplazar temporalmente acciones de conmutación en el segmento de la trayectoria.
Un valor temporal positivo desplaza la acción de conmutación al futuro, mientras que un
valor temporal negativo activa antes la acción de conmutación. Para un offset negativo se
permite un máx. de 300 ms, mientras que para un offset positivo el máximo es 1 s.
Nota
Si no se indica el offset de tiempo opcional, éste se inicializa con el
valor 0. La indicación del valor temporal se realiza en ms.
Ejemplo con offset de tiempo negativo:
:
Lin(P1)
Offset de tiempo negativo
OnDistance(FROMEND, 0, -55) DO Lamp.Set()
P1
P2
Lin(P2)
:
Punto de
Offset
conmutación
Ejemplo de offset de tiempo negativo en el segmento:
:
Offset de tiempo negativo
Lin(P1)
OnDistance(FROMEND, 0, -250) DO Lamp.Set()
P2
P1
Lin(P2)
:
Punto de
conmutación
Offset
Ejemplo con offset de tiempo positivo:
:
Offset de tiempo positivo
Lin(P1)
OnDistance(FROMEND, 0, 250) DO
Lamp.Set()
P2
P1
Lin(P2)
:
238
Offset
Punto de
conmutación
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
Nota
El offset de tiempo negativo máximo es un valor limitado que
puede ascender a 300 ms como máximo, mientras que el valor
positivo máximo es 1 s. En caso de valores no permitidos, se emite
un mensaje de advertencia para indicar que el punto de
conmutación de la trayectoria posee un valor temporal no
permitido.
24.6.1 Reacción del sistema en caso de valor temporal
no permitido
Si al indicar el valor temporal se infringen los valores máximos permitidos, se emite un
mensaje de advertencia. Dentro de este mensaje se incluye la macro de punto de
conmutación con la indicación del programa y de la línea de programa en cuestión.
Festo GDCP-CMXR-SW-ES es 1205c
239
24. Puntos de conmutación de la trayectoria
24.7
Condiciones generales
24.7.1 Funcionamiento paso a paso
Si en el modo manual, en la unidad de mando manual se selecciona el funcionamiento
paso a paso para la ejecución de programas, no se ejecutan los puntos de conmutación
programados de la trayectoria. Debido a la parada tras cada línea de programa, no es
posible un cálculo y una ejecución de los puntos de conmutación de la trayectoria.
Nota
La selección del funcionamiento paso a paso se realiza mediante la
tecla
, que está situada en la ventana de la vista de
programa. Dentro de la vista de programa, el estado activo se
muestra en la cabecera del programa.
24.7.2 Instrucciones de espera que influyen en la ejecución
principal
En las partes del programa donde se utilicen puntos de conmutación de la trayectoria no
se pueden utilizar instrucciones de espera como, p. ej., WaitTime, WaitOnPos,
WaitOnPath, WaitOnMainRun. Estas instrucciones influyen en el cálculo por adelantado
del programa y, por consiguiente, en el cálculo de los puntos de conmutación de la
trayectoria. En caso de usar estas instrucciones, se mostrará un mensaje al respecto.
24.7.3 Fijación del indicador de frase
Si el indicador de frase (flecha azul) se fija en una macro de conmutación de trayectoria del
tipo OnDistance, OnParameter u OnPlane, ésta no se ejecutará al iniciar el programa. La
ejecución no podrá realizarse hasta que se haya alcanzado el punto inicial del primer
segmento de trayectoria completo y se haya activado el movimiento en dirección al punto
de destino.
Nota
Los puntos de conmutación de trayectoria programados antes de
un primer segmento de trayectoria no tienen efecto. La ejecución
no se puede realizar hasta encontrarse dentro de un segmento de
trayectoria iniciado. El sistema genera un mensaje de advertencia
para indicar que estos puntos de conmutación no pueden
ejecutarse.
Si se inicia el programa mostrado en la imagen siguiente, no se puede ejecutar el punto
de conmutación programado donde está situado el indicador de programa.
240
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
El punto de conmutación
no puede ejecutarse
24.7.4 Influencia del override
Con el override se puede reducir porcentualmente la velocidad actual de la cinemática.
Esta modificación tiene efectos inmediatos en el movimiento actual e influye sobre él
correspondientemente. Para garantizar una ejecución segura de los puntos de
conmutación de trayectoria, el override debe poseer un valor constante durante la
ejecución. Una modificación del override durante la ejecución de los puntos de
conmutación de trayectoria puede provocar imprecisiones.
Si se desea que el programa se ejecute siempre con un determinado override, p. ej. 100%,
se puede insertar la macro Ovr (véase capítulo 10.5.1 Override en la unidad de mando
manual <Ovr>). De este modo el override se fija una vez mediante el programa FTL. Se
puede realizar una modificación manual en cualquier momento.
Ejemplo:
:
// Ajuste del override al 100%
Ovr(100)
Lin(HomePos)
Lin(pos1)
// Punto de conmutación
OnDist(FROMEND, Offset, -55) DO Gripper.Set()
Lin(pos2)
Lin(pos3)
:
Festo GDCP-CMXR-SW-ES es 1205c
241
24. Puntos de conmutación de la trayectoria
24.7.5 Trabajar en modo manual con velocidad reducida
Los puntos de conmutación de la trayectoria también pueden ejecutarse y probarse en
accionamiento manual con velocidad reducida. No obstante, la ejecución del programa
debe llevarse a cabo en funcionamiento continuo; una ejecución en funcionamiento paso a
paso no es posible (véase el capítulo 24.7.1 Funcionamiento paso a paso).
La velocidad reducida se utiliza como valor máximo para la velocidad de trayectoria
programada. Ésta se emplea para el cálculo de los puntos de conmutación de trayectoria
durante la ejecución. De este modo, la velocidad de trayectoria reducida tiene influencia
en la precisión de conmutación de los puntos de conmutación de trayectoria.
Sin embargo, si se utiliza el avance aproximado por velocidad (macro OvlVel), cambia el
comportamiento de avance aproximado, puesto que se calcula dinámicamente en función
de la velocidad de trayectoria. Si los puntos de conmutación de trayectoria están situados
en el área de avance aproximado, puede producirse una diferencia de la posición de los
puntos de conmutación en comparación con el modo automático.
La utilización del avance aproximado geométrico (macro OvlCart) no se ve influida por la
velocidad de trayectoria reducida.
¡Atención!
Si un punto de conmutación de trayectoria esta situado en el área
de avance aproximado, debido a la velocidad de trayectoria
reducida, pueden producirse diferencias en la posición de
conmutación respecto al modo automático (velocidad completa).
Por consiguiente, el comportamiento de conmutación debe
verificarse y optimizarse siempre en modo automático.
24.7.6 Interrupción del programa
Un programa activo se puede parar y, por consiguiente, interrumpir mediante una parada
a través de la tecla de parada de la unidad de mando manual o a través de un PLC. Al reiniciar, el programa continúa y se ejecutan los eventuales puntos de conmutación de trayectoria siguientes. Si este inicio y/o parada se produce durante la ejecución de un punto de
conmutación de trayectoria, puede provocar imprecisiones en el comportamiento de
conmutación.
¡Atención!
Si al parar el programa ya se están calculando puntos de
conmutación de trayectoria, esto repercutirá en la ejecución y, por
consiguiente, en la precisión al volver a iniciar el programa. Esto
puede provocar mermas de calidad.
242
Festo GDCP-CMXR-SW-ES es 1205c
24. Puntos de conmutación de la trayectoria
24.8
Puntos de conmutación no ejecutados
Al final de cada segmento se comprueba si se han ejecutado todos los puntos de conmutación programados. Si sucede que no se ha ejecutado algún punto de conmutación, p. ej.,
no se ha atravesado un plano definido, se emite un mensaje de advertencia para cada
trigger no ejecutado.
Este mensaje incluye la información siguiente:
-
Nombre de la macro de punto de conmutación del programa FTL
-
Nombre de proyecto y programa
-
Número de línea
Festo GDCP-CMXR-SW-ES es 1205c
243
25. Ejemplos
25.
Ejemplos
En los capítulos siguientes aparecen ejemplos de utilización del lenguaje de
programación.
Advertencia
Todos los ejemplos sirven para explicar la utilización del lenguaje
de programación y no pretenden una exposición completa y veraz
ni proporcionar un ejemplo de aplicación lista para funcionar. Si en
una aplicación se incluyen partes del programa de los ejemplos,
éstas deberán comprobarse en relación a su propósito y el funcionamiento debe asegurarse con la puesta a punto correspondiente.
La inobservancia de lo anteriormente mencionado puede ocasionar
daños personales y materiales.
25.1
Detención de movimientos
Un robot manipulador debe recoger una placa de chapa de una pila y posarla sobre una
vía de rodillos. La altura exacta de la pila es desconocida. El sistema de pinzas está
equipado con un sensor que permite interrogar si la herramienta prensora avanza en
dirección a un obstáculo. Este sensor se utiliza para detectar la placa de chapa superior.
Para detectar si una pila de chapa está mecanizada existe otro sensor (para detectar pilas
vacías).
y
x
z
Sistema de pinzas con
detección de avance
Entrada: inCollision
Vía de rodillos
Pila de chapa
Sensor para detectar pilas vacías
Entrada: inStackNotEmpty
244
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
El programa de movimientos tiene las posiciones siguientes:
Descripción
Nombre de la variable de
posición
Posición de recogida en la pila de chapa
takePosStack
Posición de seguridad sobre la pila de chapa
safetyPosStack
Posición de seguridad sobre la vía de rodillos
safetyDepositPos
Posición de posado sobre la vía de rodillos
depositPos
Posición modificable frente a la pila de chapa
prePosition
Tabla 25.1 Tabla de posicionamiento
Para esta aplicación pueden utilizarse más posiciones, pero el ejemplo se limita a las
indicadas.
safetyDepositPos
safetyPosStack
depositPos
takePosStack
Como la altura de pila varía, la altura de recogida es desconocida y se fija debajo de la pila.
Festo GDCP-CMXR-SW-ES es 1205c
245
25. Ejemplos
Programa de movimientos:
:
Vel(dynCart, 200)
// Velocidad lenta
prePosition := safetyPosStack
WHILE TRUE DO
Lin(safetyPosStack)
WAIT inStackNotEmpty.State
// Comprobar si hay piezas
en la pila
Lin(prePosition)
Vel(dynCart, 200)
// Velocidad lenta
Lin(takePosStack)
WAIT inCollision.State
// Esperar a la señal de avance
del sensor
StopMove()
// Detener el movimiento
// Determinar la posición real sobre la pila
ReadActualPos(prePosition)
// Calcular la distancia de seguridad sobre la pila
prePosition.z := prePosition.z - 10
gripper.Set()
// Cerrar pinza
Vel(dynCart, 1000)
// Velocidad rápida
Lin(safetyPosStack)
Lin(safetyDepositPos)
Lin(depositPos)
gripper.Reset()
// Abrir pinza
Lin(safetyDepositPos)
END_WHILE
:
Funcionamiento
La cinemática avanza hasta la posición de recogida hasta que la pinza se encuentra sobre
la placa de chapa y el sensor de detección de avance emite la señal correspondiente. Esto
se efectúa a velocidad lenta para impedir que se produzcan daños en el sistema.
Para alcanzar una posición lo más aproximada posible sobre la pila en el ciclo siguiente, se
guarda la posición real sobre la pila. Esta posición se complementa con una distancia de
seguridad. Así, en el ciclo siguiente puede avanzarse a mayor velocidad sobre la pila.
A continuación se conmuta a una velocidad lenta hasta hacer contacto con la pieza.
246
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
25.2
Empleo de los módulos de entrada y salida
Al instanciar módulos de entrada o salida puede definirse un timeout. P. ej., si la función
Wait del módulo se utiliza en la ejecución, el programa de usuario debe evaluar el timeout
que pueda aparecer.
Programa de movimientos:
:
inSensor.Wait()
IF inSensor.Read() = FALSE THEN
// Interrumpir ejecución
SetError(“Timeout over”)
RETURN
END_IF
// Reanudar ejecución
Lin(pos)
:
Nota
La edición de un mensaje de error provoca la detención del
movimiento. No es posible reanudar la ejecución hasta que se
acuse recibo del mensaje de error.
Festo GDCP-CMXR-SW-ES es 1205c
247
25. Ejemplos
25.3
Control del avance de proceso
A continuación se explica con ejemplos cómo el cálculo puede influir en el avance de
proceso.
1. Espera a la señal de entrada digital
La instrucción WAIT activa la espera a una señal de entrada digital durante la ejecución del
programa. Si el estado de la entrada digital es FALSE, el avance de proceso se detiene.
Si el estado es TRUE, el cálculo se reanuda. Ello se muestra en la figura siguiente.
Proceso
principal
Avance de
proceso
Lin(Pos1)
Lin(Pos2)
Proceso
principal
Lin(Pos1)
Lin(Pos2)
Lin(Pos3)
Lin(Pos3)
Lin(Pos4)
Lin(Pos4)
WAIT Sensor.State
WAIT Sensor.State
Lin(Pos5)
Lin(Pos5)
Lin(Pos6)
Lin(Pos6)
Lin(Pos7)
Lin(Pos7)
Lin(Pos8)
Lin(Pos9)
Avance de
proceso
Lin(Pos8)
Lin(Pos9)
2. Contador de bucles
Una parte del programa se repite 10 veces con un bucle contador. Los ciclos se cuentan
con un contador de bucles. El avance de proceso interpreta el programa secuencial e
incrementa el contador de bucles. De este modo, el avance de proceso alcanza
rápidamente el fin de programa y el contador de bucles alcanza el valor 10. En este
tiempo, el proceso principal ha alcanzado primero la instrucción Lin(Pos1).
Si el contador de bucles visualiza el ciclo real, el avance de proceso debe interrumpirse
con una instrucción WaitTime. El contador de bucles se incrementará siempre al alcanzar
la Pos3. Ello se muestra en la figura siguiente.
248
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
Proceso
principal
count := 0
Lin(Pos1)
Lin(Pos1)
Lin(Pos2)
LOOP 10 DO
LOOP 10 DO
Lin(Pos3)
Lin(Pos3)
Lin(Pos4)
END_LOOP
25.4
count := 0
Lin(Pos2)
count:=count + 1
Avance de
proceso
Proceso
principal
Lin(Pos5)
Avance de
proceso
WaitTime(1)
count:=count + 1
Lin(Pos4)
END_LOOP
Lin(Pos5)
Empleo de pinzas
En los sistemas de manipulación se utiliza una gran cantidad de pinzas diferentes. El procedimiento de sujeción requiere tiempo para cerrar o abrir la pinza y, por tanto, puede
influir de manera importante en el tiempo de ciclo.
Nota
Los tiempos de sujeción aumentan el tiempo de ciclo y, por ello,
deben tenerse siempre en cuenta. Algunas pinzas requieren
también un tiempo de espera en el programa FTL para garantizar su
apertura o cierre.
Nota
Los tiempos de espera para el estado cerrado o abierto de las
pinzas neumáticas dependen siempre de la presión ajustada. Si la
presión cambia, los tiempos también deben adaptarse. Por lo
general no es necesario ajustar tiempos de espera si el sistema de
pinzas cuenta con sensores para posiciones finales.
En los capítulos siguientes se explica la integración de diferentes tipos de pinza en el
sistema CMXR.
Festo GDCP-CMXR-SW-ES es 1205c
249
25. Ejemplos
25.4.1 Pinzas por vacío
El tipo de pinzas por vacío permite una ejecución muy rápida de los ciclos. Estas pinzas
requieren vacío que puede generarse, p. ej., con toberas Venturi.
El vacío debe existir en el momento de aceptación de la pieza. Cuando la pieza se posa,
además de desconectarse el vacío debe ejecutarse un impulso de eyección para eliminar el
vacío creado en la pinza. Los generadores de vacío, como VN-..-H-...-A, ejecutan automáticamente el impulso de eyección al desconectarse el vacío. Con otros tipos, el impulso de
eyección se controla desde una señal digital adicional.
Pinza por vacío ESG
Generador de vacío VN-..-H-...-A con
impulso de eyección incorporado
Ejemplo:
Una pieza debe transportarse desde la posición pos2 a la posición pos4.
pos1
pos2
pos3
pos4
Como generador de vacío se utiliza una tobera Venturi. Ésta se controla a través de una
salida digital del CMXR. Para ello se crea un módulo de salida digital.
250
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
Variables:
vacuum : DOUT := (...)
// Módulo de salida digital
Programa:
Vel(dynCart, 1500)
// Velocidad de trayectoria = 1500 mm/s
Acc(dynCart, 5000)
// Aceleración de trayectoria = 5000 mm/s²
OvlVel(75)
// Avance aproximado por velocidad al 75%
Lin(pos1)
vacuum.Set()
// Conectar inmediatamente el vacío
Lin(pos2)
// Posición de aceptación
WaitTime(10)
// 10 ms de tiempo de espera para tiempo de
sujeción
Lin(pos1)
Lin(pos3)
// Sobre posición de posado
Lin(pos4)
// Posición de posado
vacuum.Reset()
// Desconectar el vacío en el punto
inferior
WaitTime(20)
// 20 ms de tiempo de espera para tiempo de
sujeción
Lin(pos3)
Funcionamiento:

Dado que en la pinza no hay acuses de recibo, es necesario introducir un tiempo de
espera para el cierre y la apertura. Éste se determina y optimiza con ayuda de la
puesta a punto.

Los movimientos se recorren con un avance aproximado por velocidad al 75%. Una
excepción son las posiciones de aceptación pos2 y de posado pos4. La instrucción
siguiente WaitTime impide el avance aproximado ya que el cálculo por adelantado
de proceso se detiene en este punto y se reanuda transcurrido el ciclo.
Festo GDCP-CMXR-SW-ES es 1205c
251
25. Ejemplos
Perfil de movimiento:
pos1
pos3
Área de avance
aproximado
pos4
pos2
Comportamiento en la línea temporal:
Velocidad
pos2
pos4
Tiempo
pos1
pos1
pos3
pos3
Tiempo de espera
252
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
25.4.2 Pinzas paralelas neumáticas
Las pinzas paralelas poseen mordazas que se cierran en paralelo. Las mordazas pueden
adaptarse individualmente a la aplicación.
Por lo general, las pinzas paralelas se controlan con dos salidas separadas para la apertura y el cierre. Opcionalmente pueden integrarse sensores en las pinzas para recibir los
acuses de recibo a través de las posiciones finales (abierto o cerrado).
Ejemplo:
Una pieza debe transportarse desde la posición pos2 a la posición pos4.
pos1
pos2
pos3
pos4
Se utiliza una pinza paralela con técnica de sensores de posición final. Se obtienen las
señales digitales siguientes y se integran en forma de módulos en la programación FTL.
Festo GDCP-CMXR-SW-ES es 1205c
253
25. Ejemplos
Variables:
outGripperOpen
: DOUT := (...)
// Módulo de salida digital
outGripperClose : DOUT := (...)
// Módulo de salida digital
inGripperOpen
: DIN
:= (...)
// Módulo de entrada digital
inGripperClosed : DIN
:= (...)
// Módulo de entrada digital
Programa:
Vel(dynCart, 1500)
// Velocidad de trayectoria = 1500 mm/s
Acc(dynCart, 5000)
// Aceleración de trayectoria = 5000 mm/s²
OvlVel(75)
// Avance aproximado por velocidad al 75%
Lin(pos1)
outGripperClose.Reset()
outGripperOpen.Set()
// Abrir pinza
inGripperOpen.Wait(TRUE) // Esperar a que se abra
Lin(pos2)
// Posición de aceptación
outGripperOpen.Reset()
outGripperClose.Set()
inGripperClosed.Wait()
// Cerrar pinza
// Esperar a que se cierre
Lin(pos1)
Lin(pos3)
Lin(pos4)
// Posición de posado
outGripperClose.Reset()
outGripperOpen.Set()
// Abrir pinza
inGripperOpen.Wait()
// Esperar a que se abra
Lin(pos3)
Funcionamiento:

Si se dispone de sensores para acusar recibo de las posiciones finales de sujeción,
no es necesario un tiempo de espera.

Los movimientos se recorren con un avance aproximado por velocidad al 75%. El
método de módulo Wait introduce una espera al acuse de recibo de la posición
final que evita un avance aproximado a las posiciones de aceptación y posado. El
cálculo por adelantado de proceso se detiene en este punto y se reanuda al
conmutarse la señal de entrada digital.
254
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
Perfil de movimiento:
pos1
pos3
Área de avance
aproximado
pos4
pos2
Comportamiento en la línea temporal:
Velocidad
pos2
pos4
Tiempo
pos1
pos1
Tiempo de espera hasta acusar
recibo del cierre de la pinza
Festo GDCP-CMXR-SW-ES es 1205c
pos3
pos3
Tiempo de espera hasta acusar
recibo de la apertura de la pinza
255
25. Ejemplos
25.4.3 Unidad giratoria con pinzas neumáticas
La unidad giratoria con pinzas neumáticas HGDS de Festo reúne una pinza paralela con un
actuador giratorio en una sola unidad.
Unidad giratoria con pinzas
HGDS con pinza paralela
La unidad HGDS permite montar sensores de detección de posiciones finales de la pinza y
del actuador giratorio. Los sensores se requieren para el control seguro de la aplicación.
Ejemplo:
Una pieza debe transportarse desde la posición pos2 a la posición pos4 describiendo un
giro de 90 grados.
pos1
pos3
Giro de 90 grados
pos2
pos4
Se utiliza la unidad HGDS, que dispone de los sensores correspondientes para detectar las
posiciones finales. Se obtienen las señales digitales siguientes y se integran en forma de
módulos en la programación FTL.
256
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
Variables:
outGripperOpen
: DOUT := (...)
// Módulo de salida digital
outGripperClose : DOUT := (...)
// Módulo de salida digital
outPos0Degree
: DOUT := (...)
// Módulo de salida digital
outPos90Degree
: DOUT := (...)
// Módulo de salida digital
inGripperOpen
: DIN
:= (...)
// Módulo de entrada digital
inGripperClose
: DIN
:= (...)
// Módulo de entrada digital
inPos0Degree
: DIN
:= (...)
// Módulo de entrada digital
inPos90Degree
: DIN
:= (...)
// Módulo de entrada digital
Programa:
Vel(dynCart, 1500)
// Velocidad de trayectoria = 1500 mm/s
Acc(dynCart, 5000)
// Aceleración de trayectoria = 5000 mm/s²
OvlVel(75)
// Avance aproximado por velocidad al 75%
Lin(pos1)
// Avanzar sobre pieza
outGripperClose.Reset() // Abrir pinza
outGripperOpen.Set()
outPos0Degree.Set()
// Girar a 0 grados
outPos90Degree.Reset()
inGripperOpen.Wait()
// Esperar a pinza abierta
inPos0Degree.Wait()
// Esperar a 0 grados
Lin(pos2)
// Posición de aceptación
outGripperOpen.Reset()
outGripperClose.Set()
// Cerrar pinza
inGripperClose.Wait()
// Esperar a pinza cerrada
Lin(pos1)
outPos0Degree.Reset()
// Girar a 90 grados
outPos90Degree.Set()
Lin(pos3)
inPos90Degree.Wait(TRUE) // Esperar a 90 grados con avance
aproximado
Lin(pos4)
// Posición de posado
outGripperClose.Reset() // Abrir pinza
outGripperOpen.Set()
inGripperOpen.Wait()
// Esperar a pinza abierta
Lin(pos3)
Festo GDCP-CMXR-SW-ES es 1205c
257
25. Ejemplos
Funcionamiento

Con los sensores integrados no es necesario un tiempo de espera para acusar
recibo de los movimientos de la pinza ni de giro.

La interrogación del movimiento de giro de 90 grados se ejecuta con posibilidad de
realizar el avance aproximado. Ello significa que si no existe acuse de recibo del
giro de 90 grados al avanzar a la pos4, el movimiento se detiene y se espera hasta
que se acusa recibo. Si el acuse de recibo ya se ha efectuado, se ejecuta
directamente un movimiento de avance aproximado a la pos4.
Perfil de movimiento:
El acuse de recibo del movimiento de giro de 90 grados se detecta antes de alcanzar la
posición pos3. Se ejecuta un movimiento de avance aproximado a la pos4.
pos1
pos3
Área de avance
aproximado
pos4
pos2
El acuse de recibo del movimiento de giro de 90 grados no se ha detectado antes de
alcanzar la posición pos3. Se espera al acuse de recibo en la posición pos3 y no se ejecuta
el movimiento de avance aproximado a la pos4.
pos1
pos3
Área de avance
aproximado
pos2
258
pos4
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
Comportamiento en la línea temporal:
El acuse de recibo del movimiento de giro de 90 grados tuvo lugar antes de alcanzar la
posición pos3. Se ejecuta un movimiento de avance aproximado a la pos4.
Acuse de recibo del giro
de 90 grados
Velocidad
pos2
pos4
Tiempo
pos1
pos1
pos3
Tiempo de espera hasta acusar
recibo del cierre de la pinza
pos3
Tiempo de espera hasta acusar recibo
de la apertura de la pinza
No hay acuse de recibo del giro de 90 grados en la posición pos3. Se espera a recibirlo.
Velocidad
pos2
pos3
pos4
Tiempo
pos1
pos1
Tiempo de espera hasta acusar
recibo del cierre de la pinza
pos3
Tiempo de espera hasta acusar
recibo de la apertura de la pinza
Tiempo de espera hasta acusar recibo del giro de 90 grados
Festo GDCP-CMXR-SW-ES es 1205c
259
25. Ejemplos
25.5
Empleo de la interface PLC
25.5.1 Tarea
En el ejemplo siguiente se van a recoger piezas en la posición “posRecogida” y se van a
transportar a la posición de posado “posPosado”. La posición de recogida es dinámica.
Las coordenadas exactas son calculadas en cada ciclo mediante un sistema de visión y son
enviadas al control a través de la interface PLC PROFIBUS.
A partir de las posiciones inicial y final, van a calcularse para el ciclo dos posiciones
intermedias dinámicas que se utilizarán como puntos de apoyo en el ciclo.
Si el PLC no suministra los datos a tiempo, el ciclo se detiene en la posición “posEspera”
hasta que el PLC esté preparado.
sobrePosRecogida
posEspera
sobrePosPosado
posRecogida
posPosado
25.5.2 Interface PLC
El intercambio de datos entre el control CMXR y el PLC se efectúa con dos bits de
sincronización. En el primer paso, el PLC señaliza que se han enviado los datos. En el
momento en que el CMXR recibe los datos, se lo indica al PLC. A continuación se borran las
dos señales de interface. La secuencia se muestra en el diagrama de flujo siguiente.
Señal del PLC
Datos preparados
plc_inboolreg[0]
Señal al PLC
Datos leídos
plc_outboolreg[0]
Aceptar posición
Se ha transmitido
la posición nueva
260
Posicionamiento
efectuado
Fin de
transmisión
Festo GDCP-CMXR-SW-ES es 1205c
25. Ejemplos
25.5.3 Programa secuencial
Variables:
waitPos
: CARTPOS := (...)
pickPos
: CARTPOS := (...)
depositPos
: CARTPOS := (...)
abovePickPos
: CARTPOS := (...)
aboveDepositPos : CARTPOS := (...)
gripper
: DOUT := (...)
Programa:
// Inicialización
Acc(dynCart, 4000)
Vel(dynCart, 100)
Lin(waitPos)
WHILE TRUE DO
// Handshake
WAIT plc_inboolreg[0] // PLC señaliza una posición nueva
pickPos := plc_cposreg[0]
abovePickPos.x := plc_cposreg[0].x
abovePickPos.y := plc_cposreg[0].y
plc_outboolreg[0] := TRUE // Confirma la recepción
WAIT NOT plc_inboolreg[0] // Esperar a la respuesta del PLC
plc_outboolreg[0] := FALSE
// Avanzar a la posición de aceptación
Lin(abovePickPos)
Lin(pickPos)
// Agarrar
gripper.Set()
WaitTime(200)
// Avanzar a la posición de posado
Lin(abovePickPos)
Lin(aboveDepositPos)
Festo GDCP-CMXR-SW-ES es 1205c
261
25. Ejemplos
Lin(depositPos)
// Posar
gripper.Reset()
WaitTime(200)
// Avanzar a la posición de espera
Lin(aboveDepositPos)
Lin(waitPos)
END_WHILE
262
Festo GDCP-CMXR-SW-ES es 1205c
A. Lista de instrucciones FTL
A.
Lista de instrucciones FTL
La tabla siguiente muestra la disponibilidad de las macros FTL en los diferentes sistemas,
junto con la versión de sistema operativo correspondiente.
CMXR-C1
Instrucciones FTL
CMXR-C2
Versión 1.06
Versión 1.25
Versión 1.0.0
Versión 1.1.0
BOOL
√
√
√
√
REAL
√
√
√
√
DINT
√
√
√
√
DWORD
√
√
√
√
STRING
√
√
√
√
( )
-
√
√
√
ARRAY
-
√
√
√
LOW
-
√
√
√
HIGH
-
√
√
√
MAPTO
-
√
√
√
MAP
-
√
√
√
IS_MAPPED
-
√
√
√
IF … THEN, ELSIF…. THEN, ELSE
√
√
√
√
LABEL
√
√
√
√
IF … GOTO
√
√
√
√
GOTO
√
√
√
√
WHILE …. DO
√
√
√
√
LOOP
√
√
√
√
CALL
√
√
√
√
RUN
√
√
√
√
RETURN
√
√
√
√
KILL
√
√
√
√
WaitTime
√
√
√
√
WAIT
√
√
√
√
WaitOnPath
-
√
√
√
WaitOnPos
-
√
√
√
WaitOnMainRun
-
-
√
√
Ptp
√
√
√
√
PtpRel
√
√
√
√
Tipos de datos
Funciones, instrucciones
Control de programa, bucles
Instrucciones de movimiento
Festo GDCP-CMXR-SW-ES es 1205c
263
A. Lista de instrucciones FTL
CMXR-C1
Instrucciones FTL
CMXR-C2
Versión 1.06
Versión 1.25
Versión 1.0.0
Versión 1.1.0
MoveAxisPtp
√
√
√
√
Lin
√
√
√
√
LinRel
√
√
√
√
MoveAxisCart
√
√
√
√
CircIp
√
√
√
√
PtpToCircIp
√
√
√
√
LinToCircIP
√
√
√
√
StopMove
√
√
√
√
StopProgram
√
√
√
√
Vel
√
√
√
√
Acc
√
√
√
√
Jerk
√
√
√
√
Ovr
√
√
√
√
DynOvr
√
√
√
√
Ramp
√
√
√
√
VconstOn
√
√
√
√
VconstOff
√
√
√
√
OvlVel
√
√
√
√
OvlCart
√
√
√
√
SetRefSys
√
√
√
√
SetRefSys3P
√
√
√
√
SetRefSysWorld
√
√
√
√
SetRefSysDyn
-
-
√
√
RefAxis
√
√
√
√
RefAxisAsync
√
√
√
√
WaitRefFinished
√
√
√
√
IsAxisReferenced
√
√
√
√
√
√
√
√
SetRobotMode
-
-
-
√
GetRobotMode
-
-
-
√
Instrucciones de dinámica
Instrucciones de avance aproximado
Sistemas de referencia
Recorrido de referencia
Herramientas
Tool
Modo cinemático
Interface Profibus, variables de sistema, funciones
264
Festo GDCP-CMXR-SW-ES es 1205c
A. Lista de instrucciones FTL
CMXR-C1
Instrucciones FTL
CMXR-C2
Versión 1.06
Versión 1.25
Versión 1.0.0
Versión 1.1.0
plc_InBool : ARRAY[16] OF
BOOL
√
√
-
-
plc_OutBool : ARRAY[16] OF
BOOL
√
√
-
-
plc_Dint : ARRAY[256] OF DINT
√
√
-
-
plc_AxisPos : ARRAY[256] OF
AXISPOS
√
√
-
-
plc_CartPos : ARRAY[256] OF
CARTPOS
√
√
-
-
plc_RefSys : ARRAY[16] OF
REFSYSDATA
√
√
-
-
ProgHold
√
√
√
√
Interface de variables con PLC interno (CoDeSys)
plc_InBool : ARRAY[256] OF
BOOL
-
-
√
√
plc_OutBool : ARRAY[256] OF
BOOL
-
-
√
√
plc_InDword : ARRAY[256] OF
DWORD
-
-
√
√
plc_OutDword : ARRAY[256] OF
DWORD
-
-
√
√
plc_InDint : ARRAY[256] OF DINT
-
-
√
√
plc_OutDint : ARRAY[256] OF
DINT
-
-
√
√
plc_InReal : ARRAY[256] OF Real
-
-
√
√
plc_OutReal : ARRAY[256] OF
Real
-
-
√
√
plc_InAxisPos : ARRAY[256] OF
AXISPOS
-
-
√
√
plc_OutAxisPos : ARRAY[256] OF
AXISPOS
-
-
√
√
plc_InCartPos : ARRAY[256] OF
CARTPOS
-
-
√
√
plc_OutCartPos : ARRAY[256] OF
CARTPOS
-
-
√
√
SetInfo
√
√
√
√
SetWarning
√
√
√
√
SetError
√
√
√
√
ReadActualPos
√
√
√
√
ReadTargetPos
√
√
√
√
SavePosition
√
√
√
√
Sistema de comunicación
Funciones
Festo GDCP-CMXR-SW-ES es 1205c
265
A. Lista de instrucciones FTL
CMXR-C1
Instrucciones FTL
CMXR-C2
Versión 1.06
Versión 1.25
Versión 1.0.0
Versión 1.1.0
SIN, ASIN
√
√
√
√
COS, ACOS
√
√
√
√
TAN, ATAN
√
√
√
√
COT, ACOT
√
√
√
√
ATAN2
√
√
√
√
LN
√
√
√
√
EXP
√
√
√
√
ABS
√
√
√
√
SQRT
√
√
√
√
GetAutoModeActive
√
√
GetManualModeActive
√
√
Funciones del sistema
Time
√
√
√
√
TimeToStr
√
√
√
√
√
√
LoadProgram
Timer, CLOCK
√
√
√
√
Start
√
√
√
√
Stop
√
√
√
√
Reset
√
√
√
√
Read
√
√
√
√
ToStr
√
√
√
√
CheckBit
-
-
√
√
CHR
√
√
√
√
ORD
√
√
√
√
ResetBit
-
-
√
√
ROR, ROL
√
√
√
√
SetBit
-
-
√
√
SHR, SHL
√
√
√
√
STR
√
√
√
√
√
√
√
√
Wait, WaitN
√
√
√
√
Read
√
√
√
√
RisingEdge
√
√
√
√
ResetRisingEdge
√
√
√
√
√
√
√
√
√
√
√
√
Manipulación de bits
Módulos y métodos
Entrada digital, DIN
Salida digital, DOUT
Wait, WaitN
266
Festo GDCP-CMXR-SW-ES es 1205c
A. Lista de instrucciones FTL
CMXR-C1
Instrucciones FTL
CMXR-C2
Versión 1.06
Versión 1.25
Versión 1.0.0
Versión 1.1.0
Read
√
√
√
√
RisingEdge
√
√
√
√
ResetRisingEdge
√
√
√
√
Set, Reset
√
√
√
√
Write
√
√
√
√
Pulse
-
√
√
√
√
√
√
√
WaitLss, WaitGrt
√
√
√
√
WaitIns, WaitOuts
√
√
√
√
Read
√
√
√
√
√
√
√
√
Write
√
√
√
√
WaitLss, WaitGrt
√
√
√
√
WaitIns, WaitOuts
√
√
√
√
Read
√
√
√
√
√
√
√
√
Set
√
√
√
√
Read
√
√
√
√
√
√
√
√
WriteSDO
√
√
√
√
ReadSDOSigned
√
√
√
√
ReadSDOUnsigned
√
√
√
√
onstartup
-
-
√
√
onprogload
-
-
√
√
onproginterrupt
-
-
√
√
onprogcontinue
-
-
√
√
onprogend
-
-
√
√
onf1keypressed
-
-
√
√
onf1keyreleased
-
-
√
√
onf2keypressed
-
-
√
√
onf2keyreleased
-
-
√
√
DO
-
√
√
√
OnPosition
-
-
√
√
OnParameter
-
-
√
√
OnDistance
-
-
√
√
OnPlane
-
-
√
√
Entrada analógica, AIN
Salida analógica, AOUT
Encoder, ENCODER
CANOpen, COPDEVICE
Eventos
Puntos de conmutación
Festo GDCP-CMXR-SW-ES es 1205c
267
B. Árbol de menús de las instrucciones FTL
B.
Árbol de menús de las instrucciones FTL
Para facilitar la programación, en la unidad manual CDSA y en el editor de programación
FTL se muestra un árbol de menús que contiene todas las instrucciones FTL disponibles. A
continuación se muestran todas las instrucciones del conjunto de instrucciones “Base de
programación FTL”.
Representación del árbol de menús de la unidad de mando manual CDSA:
Interface PLC
 ProgHold
Funciones
 ABS
 ACOS
 ACOT
 ASIN
 ATAN
 ATAN2
 COS
 COT
 EXP
 LN
Funciones de posición
o ReadActualPos
o ReadTargetPos
o SavePosition
268
Festo GDCP-CMXR-SW-ES es 1205c
B. Árbol de menús de las instrucciones FTL
 SIN
 SQRT
 TAN
Referenciación
 IsAxisReferenced
 RefAxis
 RefAxisAsync
 WaitRefFinished
Instrucciones de movimiento

CircIp

Lin

LinRel

LinToCircIp

MoveAxisCart

MoveAxisPtp

PTP

PtpRel

PtpToCircIp

StopMove
Instrucciones de dinámica

Acc

DynOvr

Jerk

OvlCart

OvlVel

Ovr

Ramp

VconstOff

VconstOn

Vel
Instrucciones

… := …

CALL…

//
Festo GDCP-CMXR-SW-ES es 1205c
269
B. Árbol de menús de las instrucciones FTL

ELSE

ELSIF … THEN

GOTO…

IF…GOTO

IF … THEN … END_IF

KILL…

LABEL…

LOOP … DO … END_LOOP

RETURN

RUN…

StopProgram

WAIT…

WHILE … DO … END_WHILE

WaitOnMainRun

WaitOnPath

WaitOnPos

WaitTime
Instrucciones de robot
Sistemas de referencia
o SetRefSys
o SetRefSys3P
o SetRefSysDyn
o SetRefSysWorld
Modo de la cinemática
o SetRobotMode
o GetRobotMode
 Tool
Funciones del sistema
Cronometraje
o GetManualModeAcitve
o GetAutoModeActive
o Tiempo
o TimeToStr
o LoadProgram
270
Festo GDCP-CMXR-SW-ES es 1205c
B. Árbol de menús de las instrucciones FTL
o CLOCK.Read
o CLOCK.Reset
o CLOCK.Start
o CLOCK.Stop
o CLOCK.ToStr
Manipulación de bits
o CHR
o CheckBit
o ORD
o ROL
o ROR
o ResetBit
o SHL
o SHR
o STR
o SetBit
Sistema de comunicación

SetError

SetInfo

SetWarning
Módulos E/S
Entradas analógicas
o AIN.Read
o AIN.WaitGrt
o AIN.WaitIns
o AIN.WaitLss
o AIN.WaitOuts
Salidas analógicas
o AOUT.Read
o AOUT.WaitGrt
o AOUT.WaitIns
o AOUT.WaitLss
o AOUT.WaitOuts
o AOUT.Write
Festo GDCP-CMXR-SW-ES es 1205c
271
B. Árbol de menús de las instrucciones FTL
Dispositivos CANopen
o COPDEVICE.ReadSDOSigned
o COPDEVICE.ReadSDOUnsigned
o COPDEVICE.WriteSDO
Entradas digitales
o DIN.Read
o DIN.ResetRisingEdge
o DIN.RisingEdge
o DIN.Wait
o DIN.WaitN
Salidas digitales
o DOUT.Pulse
o DOUT.Read
o DOUT.Reset
o DOUT.ResetRisingEdge
o DOUT.RisingEdge
o DOUT.Set
o DOUT.Wait
o DOUT.WaitN
o DOUT.Write
Encoder incremental
o ENCODER.Read
o ENCODER.Set
Funciones tecnológicas
Seguimiento de objetos
o CONVEYOR.Begin
o CONVEYOR.End
o CONVEYOR.Done
o CONVEYOR.Wait
o CONVEYOR.WaitReachable
Puntos de conmutación de la trayectoria
o OnDistance
o OnParamter
o OnPlane
272
Festo GDCP-CMXR-SW-ES es 1205c
C. Términos utilizados
C.
Términos utilizados
La tabla siguiente incluye los términos utilizados en este documento:
Término
C
Significado
CDSA
Código de tipo Festo para la unidad de mando manual
CMXR-C1
Código de tipo Festo para el modelo básico CMXR C1
CMXR-C2
Código de tipo Festo para el modelo CMXR de la clase superior
CoDeSys
Nombre del control PLC integrado, que se puede programar según
IEC 61131-3 y que funciona en un procesador junto con la robótica.
F
FCT
Festo Configuration Tool, software básico para la configuración de los
controles CMXR, así como otros productos Festo, p. ej., accionamientos
eléctricos.
FTL
Festo Teach Language, lenguaje de programación textual de los programas
de movimiento
P
Plugin FCT
Módulo de software para el software básico FCT. Para determinados
productos Festo pueden instalarse plugins, que están disponibles en el
área de descargas de la página web de Festo www.festo.com.
T
Tarjeta CF
Tarjeta Flash compacta; se utiliza como soporte de memoria en CMXR.
Tracking
Seguimiento de objetos móviles, p. ej., piezas en una cinta transportadora.
Festo GDCP-CMXR-SW-ES es 1205c
273
D. Índice
D.
274
Índice
Festo GDCP-CMXR-SW-ES es 1205c
D. Índice
#
##........................................................ 62
/
// ........................................................ 62
_
_global.tt ............................................. 21
A
ABS ................................................... 170
Acc ...................................................... 96
ACOS ................................................. 165
ACOT ................................................. 168
AIN .................................................... 191
AOUT ................................................. 196
ASIN .................................................. 164
ATAN ................................................. 167
ATAN2 ............................................... 169
Avance de proceso ................ 54; 55; 250
AXISPOS .............................................. 64
Empleo de pinzas ........................... 251
WAIT con entrada digital .................. 56
ENCODER .......................................... 205
Error.................................................. 213
EXP ................................................... 169
F
FTL .......................................... 14; 18; 21
G
GetRobotMode.................................. 141
GOTO .................................................. 47
H
Herramientas .................................... 130
I
IF…GOTO ............................................. 46
IF…THEN ............................................. 44
Interface Profibus.............................. 144
IS_MAPPED ......................................... 38
IsReferenced ..................................... 129
C
J
CALL .................................................... 50
CARTPOS ............................................. 64
CheckBit ............................................ 176
CHR ................................................... 173
CircIp ................................................... 85
CLOCK ............................................... 201
Comentario.......................................... 62
Conversiones de tipos ......................... 32
COPDEVICE ........................................ 209
COS ................................................... 165
COT ................................................... 168
Jerk ..................................................... 97
D
DIN .................................................... 180
DO ....................................................... 60
DOUT ................................................. 184
DynOvr .............................................. 101
E
Ejemplo
Control del avance de proceso ........ 250
Detención de movimientos ............. 246
Empleo de la interface PLC.............. 262
Empleo de los módulos de entrada y
salida .......................................... 249
Festo GDCP-CMXR-SW-ES es 1205c
K
KILL ..................................................... 53
L
LABEL ................................................. 46
Lin....................................................... 78
LinRel.................................................. 80
LinToCircIp .......................................... 89
LN ..................................................... 169
LOOP .................................................. 48
LOW, HIGH .......................................... 35
M
MAP .................................................... 38
MAPTO ................................................ 38
Matriz ................................................. 33
Modo ................................................ 138
Modo de la cinemática ...................... 138
MoveAxisCart ...................................... 74
MoveAxisPtp ....................................... 74
O
ORD .................................................. 173
275
D. Índice
OvlCart .............................................. 112
OvlVel................................................ 110
Ovr .............................................. 99; 243
P
Palabras clave ..................................... 26
plc_AxisPos ....................................... 147
plc_CartPos ....................................... 147
plc_RefSys ......................................... 148
plc_VarDint........................................ 146
Posición cartesiana.............................. 67
Posición de eje .................................... 65
ProgHold ........................................... 149
PTP ...................................................... 69
PtpRel ................................................. 72
PtpToCircIp .......................................... 87
R
Ramp ................................................. 103
Read .................................................. 208
ReadActualPos .................................. 160
ReadSDOSigned ................................ 211
ReadSDOUnsigned ............................ 212
ReadTargetPos .................................. 161
RefAxis .............................................. 123
RefAxisAsync ..................................... 126
Registro del programa desactivado ..... 62
ResetBit............................................. 175
RETURN ............................................... 51
ROL ................................................... 172
ROR ................................................... 172
RUN ..................................................... 53
S
SavePosition ..................................... 162
Segmento cero .................................. 108
Set .................................................... 207
SetBit ................................................ 174
SetError ............................................. 158
SetInfo .............................................. 156
SetRefSys .......................................... 116
276
SetRefSys3P ..................................... 117
SetRefSysDyn ................................... 120
SetRefSysWorld ................................ 120
SetRobotMode .................................. 140
SetWarning ....................................... 157
SHL ................................................... 171
SHR................................................... 171
SIN .................................................... 164
SQRT................................................. 170
State ................................................. 213
StopMove ........................................... 91
StopProg ............................................. 92
STR ................................................... 173
T
TAN ................................................... 167
TCP ................................................... 130
tid ................................................. 21; 22
Tiempo de espera ............................... 54
Time.................................................. 162
TimeToStr ......................................... 163
tip ....................................................... 21
Tipos de datos .................................... 30
Tool .................................................. 133
V
Value ................................................ 213
VconstOff .......................................... 106
VconstOn .......................................... 104
Vel ...................................................... 95
W
WAIT ................................................... 55
WaitOnMainRun .................................. 59
WaitOnPath......................................... 57
WaitOnPos .......................................... 58
WaitRefFinished ................................ 128
WaitTime............................................. 54
WHILE ................................................. 47
WriteSDO .......................................... 210
Festo GDCP-CMXR-SW-ES es 1205c
Descargar