Академический Документы
Профессиональный Документы
Культура Документы
net
Doc. Nb:
LMC001
Knowledge Base
Motion Pro: Conceptos Bsicos
VERSION
Autores :
V6.3
Departamento:
Nombre:
Fecha:
D.C.I.
28-02-2008
Advertencia de la propiedad: Este documento contiene informacin propiedad de Schneider Electric S.A., y ni el documento ni la
informacin que contiene pueden ser publicadas, reproducidas, copiadas o usadas bajo ningn concepto salvo permiso escrito por un
representante vlido de la compaa.
Motion Pro: Conceptos Bsicos
pgina 1/180
Knowledge Base
www.infoPLC.net
Documentacin asociada
Control de versiones
Mes-Ao
Rev
Autor
1
03-09-2007 Santi Pava
2
12-09-2007 Santi Pava
3
13-09-2007 Santi Pava
4
25-09-2007 Santi Pava
5
6.1
6.2
6.3
Lista de cambios
Modificaciones
Primera revisin con formato estndar
Aadido Captulo relativo al CNC
Correccin y ampliacin del captulo CNC
Aadido captulo relativo a las tareas (se renumeran captulos)
Correccin apartado Marcas del captulo CNC
Aadido mtodo adicional para crear eje virtual
Se crea un captulo especfico para hablar del CNC
Aadido apartado dedicado a la inicializacin de parmetros
Aadido apartado dedicado a las macros
Aadido apartado uso de $valor$ en pantallas visualizacin.
Se reestructura captulo CNC
Aadida explicacin detallada bloques CNC
Aadido apartado relativo al SMC_NCDecoder
Aadido captulo referente a tablas CAM
Renumeracin captulos
Se traspasa lo referente a CAM y CNC de otros captulos a los nuevos.
Aadido captulo dedicado a las comunicaciones.
Aadido en el captulo Problemas y Errores el captulo 13.4
Adaptacin libreras a la versin V1940
Aadida indicacin librera necesaria en captulo 6.3.2
Revisin Captulo tablas CAM / Tappets
Aadido Captulo dedicado a la conexin de mltiples encoders
master.
Aadido en captulo El lenguaje SFC o Graphet explicacin relativa a
las acciones de entrada y salida de tareas.
Aadido en el captulo Problemas y Errores el subcaptulo La tabla
CAM hace que el eje Vibre
Modificados captulos tablas CAM sustituyendo referencias a
estructuras con tipos de variables UINT por LREAL ya que son ms
precisas.
Aadida explicacin de entrada dOverride para variar velocidad
trayectoria ONLINE en captulo El SMC_Interpolator.
Intercalado subcaptulo Creando estructuras propias en el captulo
Las Levas y las Tablas CAM
Dividido captulo Las variables de usuario en dos para explicar tanto
los tipos como la volatilidad de las variables.
pgina 2/180
Knowledge Base
www.infoPLC.net
INDICE DE CONTENIDOS
1.- CONFIGURACION BASICA MOTION PRO............................................. 6
1.1.- Cambiar idioma entorno de trabajo .........................................................................6
1.2.- Crear un nuevo proyecto con Lexium 05 ................................................................8
1.3.- Entorno de trabajo.....................................................................................................9
1.4.- Gestin de libreras imprescindibles.....................................................................11
1.5.- Otros ajustes (LREAL >> REAL).............................................................................11
pgina 3/180
Knowledge Base
www.infoPLC.net
pgina 4/180
Knowledge Base
www.infoPLC.net
pgina 5/180
Knowledge Base
www.infoPLC.net
pgina 6/180
Knowledge Base
www.infoPLC.net
Como se puede observar el entorno de trabajo se encuentra en ingls. Es posible cambiarla a castellano con
tan slo seguir los siguientes pasos:
1.- En men superior Project seleccionar opcin Options
NOTA: A partir de este punto se utilizar el entorno traducido al castellano en el resto del manual.
pgina 7/180
Knowledge Base
www.infoPLC.net
Se abren las opciones de configuracin existentes (slo hay una) y se escoge Lexium Controller V01.
Acto seguido aparecer una serie de subopciones. Se aceptan los valores por defecto pulsando sobre el
botn Aceptar.
Mediante la ejecucin de estos pasos se autoconfigurar el entorno de trabajo para poder trabajar con un
Lexium Controller apareciendo una ltima pantalla en la cual podr escogerse el lenguaje de programacin
con el cual se podr desarrollar la aplicacin.
Aunque es posible escoger entre seis tipos distintos de lenguajes de programacin se recomienda, para
empezar, escoger CFC pues est basado en bloques de funcin y resulta ms sencillo.
pgina 8/180
Knowledge Base
www.infoPLC.net
rea
Declaracin
Variables
rea
Navegador
Programa
rea Programacin
rea
Mensajes y
Avisos
Pestaas
Seleccin
Navegador
El entorno siempre es el mismo independientemente del tipo de lenguaje utilizado. A este entorno se le llama
CODESYS. Dicho entorno de desarrollo est dividido en varias zonas y quizs las ms importantes sean las
correspondientes al rea de Programacin, que es donde se desarrollar el programa, y al rea de
Navegacin del Programa, que es el que permitir ir accediendo a todas las funcionalidades del entorno
CODESYS.
pgina 9/180
Knowledge Base
www.infoPLC.net
Existen hasta cuatro tipos de navegadores segn se selecciones por las pestaas de seleccin:
pgina 10/180
www.infoPLC.net
Knowledge Base
SM_PLCOpen_V1940.lib
SM_Can_V1940.lib
LexiumCanDrive_V1940.lib
SM_Error_V1940.lib
SM_DriveBasic_V1940.lib
SysLibCallBack.lib
SysLibFileSubst.lib
SysLibTime.lib
LMC_Encoder_V1002.lib
3S_CanDrv.lib
LexiumControllerBusInterface_V1008.lib
LMC_SysBasic_V2001.lib
Standard.lib
(1)
(1)
(1)
(1)
(1)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(3)
Las libreras pueden encontrarse hasta en 3 carpetas distintas. Utilizar el siguiente cdigo identificativo:
1.- C:\Schneider Electric\Motion Control\CoDeSys V2.3\Targets\Schneider Electric\Shared Files\Library\Motion
2.- C:\Schneider Electric\Motion Control\CoDeSys V2.3\Targets\Schneider Electric\Lexium Controller V0103\Library
3.- C:\Schneider Electric\Motion Control\CoDeSys V2.3\Library
Segn si se desea realizar operaciones ms complejas como tablas CAM, utilidades CNC u otras debern
aadirse las libreras correspondientes. Estas son las mnimas.
pgina 11/180
Knowledge Base
www.infoPLC.net
=
=
=
=
=
Cano
Ab
3
500
SOU
3.- Apagamos y reencendemos el equipo para que los cambios tengan validez
4.- Dado que se han pasado a parmetros de fbrica previamente no olvidar de repetir el autotune tras
volver e encender el equipo siguiendo el siguiente proceso:
tun- -> Strt
5.- Tras pulsar la tecla INT el equipo empezar a realizar el proceso de autoajuste mostrando la palabra
donE tras finalizarlo correctamente.. El equipo ya quedar preparado para ser controlado va CANSync
desde el Motion Controller.
pgina 12/180
Knowledge Base
www.infoPLC.net
2.2.- Lexium 15 MP
Se trata de configurar un Lexium 15MP para poder ser controlado desde el puerto CANSync de la Lexium
Controller. Para este cometido se recomienda seguir los siguientes pasos:
1.- Asegurarse de pasar a parmetros por defecto mediante el uso del software Unilink MH. Tan slo se ha
de establecer comunicacin con el Lexium 15MP y pulsar sobre el botn Cargar Parmetros Default en la
RAM/EEPROM. Tras unos instantes el equipo quedar a sus valores de fbrica.
2.- Pulsamos el botn Configuracin bsica y nos aseguramos de que los parmetros de Drive y
Comunicacin son los adecuados. En este caso se ha cambiado Voltaje mx. de la red a 230V,
Alimentacin de potencia a Ningn Mensaje, Direccin a 5, Baudrate del bus CAN a 500kBaud y
Auto Enable a On .
pgina 13/180
Knowledge Base
www.infoPLC.net
3.- Nos aseguramos de escoger el tipo de motor adecuado prestando atencin a la posibilidad de si tiene o
no freno. El tipo de motor debe encontrase en la lista de motores disponibles:
4.- Nos aseguramos de escoger el tipo de realimentacin de velocidad adecuado segn el tipo de motor
utilizado:
pgina 14/180
Knowledge Base
www.infoPLC.net
5.- Es necesario que la palabra de control se encuentre a su valor por defecto. Si no lo estuviera deberemos
cambiarla a mano programando el valor 1575210 mediante el modo terminal (slo es posible cambiar la
configuracin con el equipo no habilitado):
6.- Para acabar, y aunque este proceso parece que tiene lugar automticamente tan pronto el drive detecta
trama CANSync tras ser encendido, cambiamos el OPMODE a modo 5: Tarea movim. Ext. Y finalmente
grabamos los cambios en la EEPROM:
pgina 15/180
Knowledge Base
www.infoPLC.net
Puerto RS485
(Necesario Cable PowerSuite Ref. VW3A8106)
Una vez establecida la conexin fsica entre el puerto serie del PC y el Lexium Controller es necesario
realizar una pequea configuracin en el entorno Motion Pro.
pgina 16/180
Knowledge Base
www.infoPLC.net
Este cuadro muestra todos los medios de comunicacin disponibles para acceder desde el PC hacia la
Lexium Controller. De momento, como se puede apreciar, no existe declarado ningn medio de
comunicacin. Para crear uno se ha de pulsar sobre el botn New
pgina 17/180
Knowledge Base
www.infoPLC.net
3.- Tras pulsar sobre el botn New aparece una nueva ventana donde podremos escoger el protocolo de
comunicaciones. En este caso el que emplearemos ser el RS232 tal cual por lo que seleccionaremos
Serial(RS232), modificaremos el nombre del protocolo a RS232 y pulsaremos sobre el botn OK.
NOTA : Escogemos un puerto RS232 aunque la LMC dispone de un puerto RS485 ya que el cable de
conexin a utilizar es en realidad un conversor RS232-RS485
Nombre de la conexin.
Cambiar el nombre
sugerido por RS232
Protocolo a seleccionar.
4.- Tras pulsar sobre el botn OK nos aparecer el nuevo protocolo dentro de la ventana de conexiones
disponibles:
Mediante este procedimiento ya es posible intentar la conexin desde el PC hacia la Lexium Controller. La
comunicacin RS485 mediante el puerto Modbus se encuentra disponible en toda la gama de Lexium
Controller.
pgina 18/180
Knowledge Base
www.infoPLC.net
Puerto Ethernet
DISPONIBLE
Puerto Ethernet
NO DISPONIBLE
Para la conexin va Ethernet se ha de preparar tanto la Lexium Controller como el propio PC pero vayamos
por partes, primero se ha de aadir el protocolo de conexin por Ethernet del mismo modo que se hizo para
el protocolo RS232 en el captulo anterior.
pgina 19/180
Knowledge Base
www.infoPLC.net
Esto es as porque previamente hemos tenido que configurar la conexin RS232 para poder, ahora,
despus de configurar la conexin Ethernet variar el nmero de IP de la Lexium Controller.
Evidentemente no podemos variar va Ethernet la IP para de ese modo conectar por puerto Ethernet
porque no podemos conectar por el puerto Ethernet hasta que cambiemos el valor de dicha IP por lo
que tendremos que hacerlo va RS232).
pgina 20/180
Knowledge Base
www.infoPLC.net
3.- Pulsaremos sobre el botn New y aparecer la ventana de seleccin de protocolos de comunicacin
donde escogeremos el Tcp/Ip (Level 2), modificaremos el nombre del protocolo a Ethernet y
pulsaremos sobre el botn OK.
Nombre de la conexin.
Cambiar el nombre
sugerido por Ethernet
Protocolo a seleccionar.
4.- Tras pulsar sobre el botn OK volveremos a la pantalla anterior donde deberemos especificar el
nmero de IP hacia la cual, cuando utilicemos el protocolo de comunicaciones Ethernet intentar
conectarse:
Asegurarse, por tanto, que la direccin IP sea 192.160.68.202 y que el tamao de los paquetes sea de
1400 (para mejorar la velocidad de comunicaciones).
NOTA: Esto no configura la Lexium Controller lo nico que hace es que el software Motion Pro
buscar va Ethernet una Lexium Controller cuyo IP sea 192.160.68.202. An falta programar la IP
dentro de la Lexium Controller para que coincida con la que se ha programado en la
configuracin del puerto Ethernet del software Motion Pro.
pgina 21/180
Knowledge Base
www.infoPLC.net
5.- Ahora disponemos de dos mtodos de conectar con la Lexium Controller: RS232 y Ethernet. Para
escoger uno u otro tan slo se ha de seleccionar en la ventana de protocolos de conexin y pulsar
sobre el botn OK. Seleccionamos el protocolo RS232.
6.- Utilizando el protocolo de comunicaciones RS232 deberemos ponernos ONLINE con el Lexium
Controller y una vez conectados nos dirigimos hacia la ventana Explorador PLC la cual tiene un
aspecto similar al mostrado por la siguiente figura:
Zona respuestas de
rdenes ejecutadas
Zona introduccin
rdenes.
pgina 22/180
Knowledge Base
www.infoPLC.net
Esta pantalla hace las veces de modo Terminal y nos permite introducir y ejecutar toda una serie de
instrucciones directas de entre las cuales se destacan las tres que utilizaremos para configurar el puerto
Ethernet:
ETHINF: Nos muestra la configuracin actual de Ethernet de la Lexium Controller. En la imagen anterior
vemos como se nos indica que la IP no se encuentra configurada (0.0.0.0).
IP: Nos permite introducir una nueva IP para la Lexium Controller:
Una vez introducida la IP y la Mscara podemos ejecutar de nuevo la instruccin ETHINF para
comprobar que dichos parmetros han sido aceptados:
NOTA: Llegados a este punto ya tenemos el Motion Pro configurado para buscar una Lexium
Controller cuya IP sea la 192.160.68.202 y la Lexium Controller configurada con una IP idntica
por lo que ya sera posible acceder a la Lexium Controller a travs de un cable Ethernet cruzado
estndar.
pgina 23/180
Knowledge Base
www.infoPLC.net
7.- Pero an falta configurar el PC de modo que el puerto Ethernet quede reservado para conectar con la
Lexium Controller, esto se hace del siguiente modo:
Clic con el botn derecho sobre el icono Conexin de rea local y seleccionar Propiedades
pgina 24/180
Knowledge Base
www.infoPLC.net
9.- Al entrar ONLINE el Motion Pro intentar conectar va Ethernet con la Lexium Controller.
pgina 25/180
www.infoPLC.net
Knowledge Base
Como se ha visto hasta el momento a la hora de estructurar una aplicacin se suele crear un programa que
contiene los diversos bloques de funciones dedicados a mover cada uno de los posibles ejes contenidos en
la aplicacin. Este programa debe encontrarse sincronizado con el bus sncrono o Motion Bus de modo que
cada cierto tiempo fijo vaya enviando a los diversos ejes la consigna de posicin que les correspondera
segn su marca de tiempo.
En este caso el programa, por contener todas las instrucciones de movimiento, debera dispararse cada
cierto tiempo de modo que se enven de forma simultnea a todos los ejes de la red las diversas consignas
de posicin.
As aparecen dos conceptos muy importantes:
Tiempo de ejecucin:
Tiempo de disparo:
Tiempo Ejecucin
Tiempo Disparo
Como se puede observar el ciclo de scan de un programa (tiempo disparo) es nico y fijo y debe ser siempre
mayor que el tiempo de ejecucin del cdigo contenido en l el cual depende a su vez de su nivel de
complejidad (el cual puede variar entre disparo y disparo).
NOTA : El tiempo de disparo debe ser obligatoriamente mayor que el tiempo de ejecucin o de lo contrario
se generar un error por intentar ejecutar un programa cuya ejecucin an no finaliz.
pgina 26/180
www.infoPLC.net
Knowledge Base
En la Lexium Controller es posible programar la ejecucin de programas con hasta 4 niveles distintos de
prioridad.
Un programa, por si mismo, salvo el programa de nombre especial PLC_PRG, no se ejecutan por si mismos
sino que deben vincularse previamente a una tarea. Es mediante la configuracin del nivel de prioridad de
dicha tarea como es posible modificar la prioridad del programa. Los diferentes niveles de prioridad de una
tarea, ordenados de mayor a menor son:
EVENT TASK 1
EVENT TASK 2
MOTION BUS
AUXILIARY (Tareas Cclicas)
En caso de que encontrndose ejecutando una tarea determinada se activara una tarea de mayor prioridad
la ejecucin de la primera quedara congelada en tanto se ejecute la de mayor prioridad. Ver el siguiente
diagrama para entenderlo mejor (no aparece la tarea Auxiliary pero sera la de menor prioridad).
Interuption EVT 2
Event TASK 1
Event TASK 2
Event input 2
Event input 1
Como se observa en el diagrama de tiempos existe una tarea denominada Motion Task que se va
ejecutando cclicamente cada cierto tiempo. Si en un momento determinado se dispara una tarea de
prioridad superior, por ejemplo la Event Task 2, la tarea Motion Task queda momentneamente congelada
y se pasa a atender la tarea Event Task2, al acabar de ejecutarse la tarea Event Task 2 se continua
ejecutando la tarea Motion Task desde el punto en que qued congelada. Si mientras nos encontramos
ejecutando la tarea Event Task 2 aparece la orden de ejecucin de una tarea de prioridad superior, la Event
Task 1, se repite el proceso: La tarea Event Task 2 queda congelada mientras se ejecuta la Event Task 1,
al acabar esta se prosigue la ejecucin de la Event Task 2 y slo al finalizar dicha tarea se finaliza la
ejecucin de la Motion Task.
pgina 27/180
Knowledge Base
www.infoPLC.net
Ir a pestaa Recursos
Doble clic sobre Configuracin de Tareas
Clic con botn derecho sobre icono Configuracin de tareas
Clic sobre opcin Anexar Tarea
pgina 28/180
Knowledge Base
www.infoPLC.net
Tras ello aparecer una nueva tarea a la cual le podemos dar un nombre cualquiera.
Observar que aunque existe una casilla para establecer el nivel de prioridad este slo puede ser 1 esto es
porque el nivel de prioridad no se establece de forma numrica sino especificando el tipo de prioridad:
Podemos decidir crear una tarea del tipo Cclico de modo que sea ejecutada cada intervalo de tiempo
determinado o bien crear una tarea que sea Controlada externamente por eventos de modo que esta se
inicie bien por entradas digitales de interrupcin %IX1.0 (Event Input 1) o %IX1.1 (Event Input 2) bien por
una marca de tiempo para la sincronizacin de varios ejes (Motion_Cycle)
NOTA : No es posible definir dos tareas controladas externamente por eventos del mismo tipo (por
ejemplo dos tareas Event Input 1) pero es posible definir tantas tareas cclicas como queramos pudiendo
ser el intervalo de disparo de las mismas igual o distinto entre si.
pgina 29/180
Knowledge Base
www.infoPLC.net
Como la tarea por si misma no sirve para nada si no va vinculada a un programa el siguiente paso sera
vincular un programa a la tarea en curso:
1. Pulsamos con el botn derecho sobre el icono de la tarea recin creada. Pulsaremos sobre la opcin
Anexar Llamada de programa del cuadro que aparecer:
2. Aparecer un cuadro de dilogo donde podremos introducir el nombre del programa, si es que lo
conocemos, que queramos vincular a la tarea el cual no debe encontrarse vinculado a otra tarea
para evitar ser llamado simultneamente desde dos tareas distintas. Si no nos acordamos de los
nombres de los programas disponibles podemos pulsar sobre el botn punteado apareciendo con
ello una lista de programas.
3. Seleccionar el nombre del programa que deseemos vincular con la tarea y pulsar sobre el botn
Aceptar:
pgina 30/180
Knowledge Base
www.infoPLC.net
Una tarea denominada TareaPrincipal que es la encargada de ejecutar el programa Principal() donde
figuran todas las instrucciones relacionadas con el control de los diversos ejes y dos tareas cclicas la
primera denominada TareaCiclica y configurada, por ejemplo, para llamar cada segundo a los programas
Supervisin() y Calculos() y la segunda, llamada TareaMediciones, que llamar al programa
Temporizadores()cada 10mseg
pgina 31/180
Knowledge Base
www.infoPLC.net
Mediante los dos bloques anteriores podemos determinar si un Axis Group determinado se encuentra o no
en error y en caso que as fuera intentar resetearlo.
Los dos bloques anteriores permiten crear dos estructuras de variables p1 y p2 que contienen informacin
relativa al estado o tiempos de ejecucin de, en este caso, la tarea que controla el Motion Bus
(Motion_Cycle) y la auxiliar o cclica disparada cada cierto tiempo.
As:
p1.dwCount
p1.dwCycleTime
p1.dwCycleTimeAvg
p1.dwCycleTimeMax
p1.dwCycleTimeMin
p1.wMode
p1.wStatus
pgina 32/180
Knowledge Base
www.infoPLC.net
En este punto podemos hacer varias cosas, o rellenar a mano la lista de parmetros o utilizar un fichero
externo creado a tal fin:
pgina 33/180
Knowledge Base
www.infoPLC.net
2. En la fila que se crear se ha de indicar cual es la direccin CAN del parmetro a modificar
indicando el ndice, Subndice as como la longitud del valor que se enviar en bytes y, por
supuesto, el valor que se desea para dicho parmetro. Por ejemplo, para modificar el parmetro
AT_Gain, sera:
3. Una vez creada toda la lista podramos guardarla en un fichero externo de modo que nos sirva de
Backup personal para, por ejemplo, clonar mquinas. Para ello tan slo se ha de pulsar sobre el
botn Escribir en archivo. El formato de guardado es XML con codificacin iso-8859-1.
pgina 34/180
Knowledge Base
www.infoPLC.net
Si lo quisiramos cargar la lista de parmetros mediante el uso de un archivo externo previamente creado:
1. Pulsar sobre el botn Leer de Archivo.
2. Buscamos el archivo XML que contiene la lista de parmetros. Este archivo debe no slo ser tipo
XML sino compatible con el formato de codificacin iso-8859-1 o de lo contrario no se cargaran los
parmetros:
3. Cuando hayamos encontrado el fichero adecuado pulsamos sobre el botn Abrir y aparecer toda la
lista de parmetros:
NOTA: Se dispone de un archivo XML con los valores por defecto de todos los parmetros de tipo R/W del
Lexium05A, pedidlo al autor de este documento si se necesitara.
pgina 35/180
Knowledge Base
www.infoPLC.net
pgina 36/180
Knowledge Base
www.infoPLC.net
6.- PROGRAMACION
6.1.- Los diferentes lenguajes de programacin
Existen hasta 7 tipos de lenguaje de programacin que el usuario puede utilizar a su criterio. Cada uno de
los cuales tiene sus ventajas y desventajas. La norma sera que cada cual utilizara el lenguaje con el que se
sienta ms cmodo segn sus necesidades.
No obstante hay tres lenguajes que pueden destacar sobre el resto: El SFC, el CFC y el ST.
El primero de ellos, el SFC, es un lenguaje de programacin ms conocido como Graphet y que permite
organizar el programa mediante un diagrama de flujo. La siguiente imagen muestra un ejemplo de ello:
En la imagen anterior vemos la estructura bsica de un programa realizado en SFC. Este ejemplo tiene
varios elementos comunes a cualquier tipo de programa y que son:
Tarea Init: Esta tarea se ejecuta al iniciar el programa y en principio, salvo que se realice una llamada
posterior, no vuelve a ejecutarse.
El triangulito negro indica que
hay algn programa dentro de la
tarea
pgina 37/180
Knowledge Base
www.infoPLC.net
Condiciones de entrada: Son variables tipo Bool que permiten, cuando su valor es TRUE, que el programa
pase de una tarea a otra:
Estas variables tipo Bool deben ser tratadas en la tarea precedente de modo que nicamente una de ellas se
activara a TRUE mientras que el resto deben permanecer a FALSE (para evitar entrar en dos tareas
simultneamente). En este caso el condicionante de entrada Gear se encuentra a TRUE (puede observarse
porque su color es azul) y eso ha dado paso a que pueda ejecutarse el programa de la tarea Modo_Gear
(sabemos que se est ejecutando dicho programa porque la tarea que lo contiene se encuentra resaltada en
azul).
Condiciones de salida: Son variables tipo Bool que permiten, cuando su valor es TRUE, que el programa
abandone la tarea que se encuentra ejecutando en ese momento y el programa siga fluyendo. En caso que
el valor de la variable de salida sea FALSE el programa de la tarea activa en ese momento seguir
ejecutndose cclicamente.
Saltos: Permiten, cuando se cumplan las condiciones de entrada, que el programa salte a una tarea
anterior.
Indicativo de salto
Condicionante de
entrada al salto
En el caso de la imagen anterior cuando la condicin Parado sea TRUE el programa se dirigir hacia la
tarea Init. Una vez en la tarea Init debera tenerse la precaucin de volver a poner a FALSE la variable
Parado ya que de lo contrario, si el valor de la variable Parado no se resetea nunca, al volver a pasar por la
zona de salto este se producir automticamente de forma, quizs, indeseada.
pgina 38/180
Knowledge Base
www.infoPLC.net
Tareas paralelas: Son tareas que se ejecutan paralelamente al flujo de programa, pueden existir tantas
como queramos pero hemos de tener en cuanta que cuantas ms creemos ms recursos se consumirn. Su
utilidad podra ser, por ejemplo, la de gestionar las alarmas del sistema.
pgina 39/180
Knowledge Base
www.infoPLC.net
Acciones de entrada: Es posible ejecutar un programa una sola vez, cuando se entra en una tarea
determinada, mediante la inclusin de una accin de entrada. Para ello slo debemos hacer clic con el botn
derecho del ratn sobre la tarea y seleccionar la opcin Agregar Accin de entrada:
Posteriormente el sistema preguntar que tipo de lenguaje se desea utilizar para programar la/s acciones de
entrada deseadas:
Y tras este sencillo procedimiento la tarea (en este caso la tarea Manual) tendr asociado un programa
que se ejecutar nicamente al entrar en la tarea.
Haciendo doble clic sobre el cuadradito con la letra E podremos entrar a programar lo que deseemos.
Aquello que se programe ser lo primero que se ejecute tan pronto se entre en la tarea Manual.
pgina 40/180
Knowledge Base
www.infoPLC.net
Acciones de Salida: Es posible ejecutar un programa una sola vez, cuando se sale de una tarea
determinada, mediante la inclusin de una accin de salida. Para ello slo debemos hacer clic con el botn
derecho del ratn sobre la tarea y seleccionar la opcin Agregar Accin de Salida:
Posteriormente el sistema preguntar que tipo de lenguaje se desea utilizar para programar la/s acciones de
salida deseadas:
Y tras este sencillo procedimiento la tarea (en este caso la tarea Manual) tendr asociado un programa
que se ejecutar nicamente al salir de la tarea.
Haciendo doble clic sobre el cuadradito con la letra X podremos entrar a programar lo que deseemos.
Aquello que se programe ser lo ltimo que se ejecute tan pronto se salga de la tarea Manual.
pgina 41/180
Knowledge Base
www.infoPLC.net
Este lenguaje permite programar mediante bloques de funciones vinculados entre ellos de forma ms o
menos libre. Permiten un nivel de monitorizacin muy alto pero su punto dbil son las instrucciones de
asignacin y condicionamiento. Adems hay que prestar muchsima atencin al orden de ejecucin de los
diferentes bloques de funcin pues podra darse el caso de que se ejecutara antes un bloque indeseado que
provocara el mal funcionamiento del programa.
Hay que tener en cuenta que la posibilidad de monitorizacin del lenguaje CFC no es la panacea ya que en
ciertos momentos los valores de las variables cambian muy rpidamente y probablemente no seamos
capaces de ver o analizar porque el programa se comporta anmalamente (eso pasa si las variables se
encuentran cambiando constantemente o si estamos entrando y saliendo de un bloque de forma continuada
y rpida).
Una Asignacin
pgina 42/180
Knowledge Base
www.infoPLC.net
Evidentemente podemos cambiar el orden de ejecucin si pulsamos con el botn derecho del ratn sobre el
entorno de programa y seleccionamos la opcin Order. De los diferentes tipos de orden se recomienda
utilizar el Order everything according to data flow ya que entonces se renumerarn todos los bloques
segn el orden de ejecucin real que tendr el programa y podremos valorar si nos interesa o no. Una vez el
orden sea el deseado podemos deseleccionar la opcin Show Order para evitar que se muestre el orden de
ejecucin de los diferentes bloques (puede resultar molesto cuando se monitoricen los diferentes estados del
programa o simplemente a nivel esttico).
Aade una nueva entrada al bloque
seleccionado (til para aadir entradas a
bloques lgicos tipo AND u OR)
Permite negar una entrada o salida.
Aade una entrada de habilitacin a un bloque
que no lo tenga de forma que podemos
restringir su ejecucin a menos que dicha
entrada sea TRUE.
pgina 43/180
Knowledge Base
www.infoPLC.net
Este lenguaje es el ms completo y potente ya que permite realizar de forma estructurada toda una serie de
procesos que en el resto de lenguajes requieren un especial cuidado o bien implican mayor complicacin.
Evidentemente es un lenguaje alejado a la habitual programacin de un PLC y requiere de un tiempo de
aprendizaje mnimo pero a cambio pone en nuestras manos una capacidad de desarrollo mucho ms
elevado.
En azul instrucciones ST
reconocidas.
En Magenta constantes
reconocidas por el sistema.
Las nicas recomendaciones seran que se guardara un cierto nivel esttico (tabulando la informacin
existente dentro de los condicionantes y subrutinas que impliquen acabar con la instruccin END_) y de
ayuda incluyendo cuanto comentario haga falta para que en futuras consultas por el que realiz el programa
u otro programador sea fcil conocer que hace cada parte del programa. Observar como el programa
ejemplo de la imagen anterior dispone de comentarios en cada seccin de programa y como se hace uso de
las tabulaciones para incluir secciones de programa dentro de las instrucciones IF y FOR.
pgina 44/180
www.infoPLC.net
Knowledge Base
Valor mnimo
Valor mximo
Espacio en
Memoria
Ejemplo Asignacin
BOOL
FALSE
TRUE
Variable:=TRUE;
BYTE
255
8 Bit
Variable:=200;
WORD
65535
16 Bit
Variable:=60000;
DWORD
4294967295
32 Bit
Variable:=120000;
SINT
-128
127
8 Bit
Variable:=-100;
USINT
255
8 Bit
Variable:=10;
INT
-32768
32767
16 Bit
Variable:=-30000;
UINT
65535
16 Bit
Variable:=60000;
DINT
-2147483648
2147483647
32 Bit
Variable:=-2000000;
UDINT
4294967295
32 Bit
Variable:=120000;
1.175494351e-38
3.402823466e+38
32 Bit
Variable:=1.53;
LREAL
2.2250738585072014
e-308
1.7976931348623158
e+308
64 Bits
Variable:=-3.56;
TIME
0d0h0m0s0ms
49d17h2m47s295ms
32 Bit
Variable := t#12h34m15s
TIME_OF_DAY
00:00:00
23:59:59.999
32 Bit
Variable := tod#00:00:00
DATE
1970-00-00
2106-02-06.
32 Bit
Variable := d#1972-03-29
DATE_AND_TIME
1970-00-00-00:00:00
2106-02-06-06:28:15
32 Bit
Variable := dt#1972-03-29-00:00:00
STRING
1 Caracter
255 Caracteres
1 Byte x Caracter
Variable :=:STRING(35):='Hola';
REAL
pgina 45/180
www.infoPLC.net
Knowledge Base
O algo ms complejas:
Tipo
ARRAY
TYPE
STRUCT
Declaracin e Inicializacin
Ejemplo Declaracin y Asignacin valores por defecto
Matriz: ARRAY [0..6] OF STRING := 'Stop', 'Velocidad', 'Posicin', 'Cam', 'Gear', 'Homming','Interpolator;
Ejemplo Declaracin
TYPE TIPO_SEMAFORO: (Rojo, Ambar, Verde:=10);
END_TYPE
Ejemplo Uso
SEMAFORO1 : SEMAFORO_TIPO;
SEMAFORO1:=0; (* El valor para de la seal del SEMAFORO1 es Rojo*)
FOR i:= Rojo TO Verde DO
i := i + 1;
END_FOR;
Ejemplo Declaracin
TYPE Ejes :
STRUCT
Activar:BOOL;
Velocidad: REAL;
VelHome:DWORD;
Aceleracion: REAL;
Deceleracion: REAL;
Posicion: REAL;
Tiempo: TIME;
END_STRUCT
END_TYPE
TYPE Estructura :
STRUCT
Secuencia: INT;
Eje: ARRAY[1..2] OF Ejes;
END_STRUCT
END_TYPE
Ejemplo Asignacin valores por defecto
Secuencia: ARRAY [0..20] OF Estructura:=
(Secuencia:=0, Eje:= (Activar:=TRUE, Velocidad:=200, Aceleracion:=500, Deceleracion:=500),
(Activar:=TRUE, Velocidad:=200, Aceleracion:=500, Deceleracion:=500)),
(Secuencia:=1, Eje:= (Activar:=TRUE, Velocidad:=200, Aceleracion:=500, Deceleracion:=500,
Tiempo:=T#1m),
(Activar:=TRUE, Velocidad:=200, Aceleracion:=500, Deceleracion:=500,
Tiempo:=T#1m)),
(Secuencia:=2, Eje:= (Activar:=TRUE, Posicion:=0, Velocidad:=200, Aceleracion:=500, Deceleracion:=500),
(Activar:=TRUE, Posicion:=360, Velocidad:=200, Aceleracion:=500, Deceleracion:=500)),
pgina 46/180
Knowledge Base
www.infoPLC.net
Las variables complejas del tipo TYPE y STRUCT deben ser creadas en la pantalla Tipos de Datos. Por
ejemplo, para crear una variable del tipo TYPE ejecutaremos los siguientes pasos:
1. Pulsamos con botn derecho sobre carpeta Tipo de datos y seleccionamos opcin Aadir Objeto:
3. Modificamos a mano, ya que no es posible indicar el tipo de variable que queremos crear, la
definicin de la estructura creada por otra tipo TYPE de manera que incluya las etiquetas internas
deseadas (en el ejemplo que se muestra se crean tres: Rojo, Amarillo y Verde).
4. El nuevo tipo de variable ya ha sido creado y puede ser utilizado en el resto del programa.
pgina 47/180
Knowledge Base
www.infoPLC.net
Si deseamos crear una estructura (agrupacin de varios tipos distintos de variables en una nica variable) es
ms sencillo, simplemente ejecutar los siguientes pasos:
1. Pulsamos con botn derecho sobre carpeta Tipo de datos y seleccionamos opcin Aadir Objeto:
3. Una vez creada la estructura definiremos las variables internas a mano segn nuestra necesidad ya
nicamente se crea el patrn de estructura (el sistema no puede saber que deseamos incluir).
4. El nuevo tipo de variable ya ha sido creado y puede ser utilizado en el resto del programa.
pgina 48/180
www.infoPLC.net
Knowledge Base
Si no se especifica que una variable debe ser de tipo RETAIN o PERSISTENT automticamente pasa a ser
voltil. Si se especifica uno o los dos tipos indicados la variable pasa a ser remanente, es decir, que puede
guardar su valor aunque dependiendo de la combinacin escogida se comportar de una u otra forma:
RETAIN:
PERSISTENT:
PERSISTENT RETAIN: Si se desea que las variables PERSISTENT mantengan su valor tras un paro
incontrolado de la LMC tendrn que declararse tambin como RETAIN.
Un ejemplo de aplicacin sera un contador de horas de servicio que tuviera que
seguir contando tras un fallo del sistema elctrico.
La siguiente tabla ayuda a entender las diferencias entre las tres categoras de variables remanentes:
Tras Comando
Online
Reset
Reset (en fro)
Reset (original)
Cargar (=Descargar)
Modificacin en lnea
VAR
VAR RETAIN
VAR PERSISTENT
SI
SI
Si
SI
SI
ATENCION:
Si una variable local se declara como RETAIN en un programa, esa variable se guarda en la zona
retain (como variable retain global).
Si una variable local se declara como RETAIN en un bloque de funciones, la instancia completa de
ese bloque de funciones se guarda en la zona retain (todos los datos del mdulo), aunque solo se
trata de esa manera la variable retain declarada.
Si una variable local se declara en una funcin como RETAIN, esto no tiene ninguna consecuencia.
La variable no se guarda en la zona Retain! Si una variable local se declara como persistente en
una funcin, tampoco tiene consecuencias!
NOTA: Por defecto del actual firmware se recomienda utilizar nicamente las variables de tipo REMAIN
PERSISTENT si se desea que la informacin se mantenga en ausencia de tensin de alimentacin en la
Lexium Motion Controller.
pgina 49/180
Knowledge Base
www.infoPLC.net
El uso de los ejes virtuales es una herramienta que se suele utilizar para comprobar el funcionamiento de
partes de mquina de forma autnoma al resto de la lnea de produccin. Por ejemplo, en una lnea de corte,
podemos comprobar como se comportar la seccin de la cizalla volante sin necesidad de arrancar la
seccin de alimentacin de material evitando as prdida de producto y facilitando el test.
Un eje virtual no es ms que un contador que se incrementa del mismo modo que se incrementara la
posicin de un encoder real que se encontrara traccionado por el flujo de material suministrado por una lnea
de produccin simulando as el comportamiento de esta lnea y por tanto pudiendo comprobar de una forma
cmoda de que manera se comporta la parte esclava dependiente de dicha lnea.
Como se observa tampoco reviste mayor dificultad entre utilizar un lenguaje u otro.
pgina 50/180
www.infoPLC.net
Knowledge Base
Dummydrive_V1940.lib
Para utilizar un Dummy Axis este se configura del mismo modo que un eje real, es decir, desde las pantallas
de configuracin de ejes:
Ir a pestaa Recursos.
Doble clic en opcin Configuracin del mando.
Clic con el botn derecho sobre el icono Lexium Controller V01 y aadimos un nuevo BusInterface.
Renombramos el nuevo BusInterface con el nombre BusVirtual para que no entre en conflicto con
el BusInterface que contiene el grupo de ejes reales.
5. Configuramos el BusInterface de nombre BusVirtual para que controle un accionamiento de tipo
Dummy.
pgina 51/180
Knowledge Base
www.infoPLC.net
6. Clic con el botn derecho sobre el BusInterface de nombre BusVirtual y aadimos un nuevo
AxisGroup al que llamaremos VirtualGroup.
7. Enlazamos el nuevo grupo de ejes denominado VirtualGroup con la tarea TareaPrincipal ya que
esta es la misma que utiliza el grupo de ejes reales. De este modo tanto los ejes reales como el
virtual se encontrarn sincronizados con la misma base de tiempos. El tiempo de ciclo ser igual al
empleado en la configuracin del grupo de ejes reales.
8. Clic con el botn derecho sobre el grupo de ejes de nombre VirtualGroup y aadimos un nuevo eje
al que llamaremos EjeVirtual.
9. Configuramos el nuevo eje virtual del mismo modo que haramos si fuera real (incluyendo el nmero
de nodo que debe ser diferente al resto de nmeros de nodo empleados).
10. Y ya est, el eje EjeVirtual se puede utilizar y se comportar como un eje real a pesar de que no
existe en realidad.
pgina 52/180
Knowledge Base
www.infoPLC.net
En la siguiente seccin de programa se puede observar como se emplea el eje virtual recin creado como
maestro de una tabla CAM (el eje real se llama Eje2):
Para la marcha y/o paro de este eje virtual o para modificar su velocidad podemos observar la siguiente
seccin de programa:
Observar como se emplean los bloques MC_Power para habilitar o deshabilitar el eje virtual y el
MC_MoveVelocity para modificar su velocidad: igual que un eje real.
pgina 53/180
Knowledge Base
www.infoPLC.net
Entrada de encoder
externo.
NOTA: El encoder externo puede y debe ser alimentado desde una fuente de alimentacin independiente la
cual puede ser conectada en bornas del Lexium Controller que se indican en la imagen anterior (ver manual
de usuario) estas bornas se encuentran internamente unidas a los pines adecuados del conector de alta
densidad SUB D15 donde se conecta el encoder y no se utilizan para nada ms.
pgina 54/180
Knowledge Base
www.infoPLC.net
Respecto a como se declara un eje virtual nada ms fcil que seguir los siguientes pasos:
Pasos a realizar
1. Dirigirse a la pantalla Recursos.
2. Doble clic sobre la opcin Configuracin del mando.
3. Clic con el botn derecho sobre el icono Lexium Controller V01.
4. Clic sobre la opcin Anexar Subelemento del men desplegable aparecido.
5. Clic sobre la opcin MasterEncoder del submen desplegable aparecido.
pgina 55/180
Knowledge Base
www.infoPLC.net
Aunque puede modificarse el nombre del encoder maestro recin introducido no se aconseja ya que
posiblemente debido a un error del Codesys no es posible hacer referencia al nuevo encoder maestro por
dicho nombre. En su lugar, para hacer referencia al encoder maestro se utilizar un formato fijo:
La mejor forma de ver como se utiliza este encoder maestro es mediante un ejemplo escrito en lenguaje ST:
pgina 56/180
Knowledge Base
www.infoPLC.net
En el ejemplo anterior se desean utilizar dos encoders externos del mismo nmero de pulsos, 1024, (4096
flancos) pero el primero conectado a una rueda medidora de 100mm de desarrollo y el segundo a una de
200mm.
La seccin de cdigo mostrada realiza las siguientes operaciones:
1. Tenemos dos variables tipo bolean, bOrdenRatioAlto y bOrdenRatioBajo, que utilizaremos para
cargar un ratio u otro sobre la variable iRatio la cual se lleva al bloque anteriormente mencionado.
2. Mientras bOrdenRatioAlto y bOrdenRatioBajo permanecen a nivel FALSE (no deseamos
modificar el ratio) se va copiando la posicin actual de la lnea, contenida en la variable Pos_Linea,
sobre una variable auxiliar llamada AuxPosLinea, en el momento de ordenar un cambio de ratio
esta copia deja de producirse.
3. Tras la modificacin del ratio el bloque SMC_ChangeGearingRatioEncoder pone a TRUE su salida
bDone y tras un pequeo retardo configuramos la posicin actual de la lnea a la previamente
memorizada.
NOTA : El bloque SMC_ChangeGearingRatioEncoder modifica la posicin actual de la lnea segn el
escalado utilizado: Si nos encontramos, por ejemplo, en la cota 45mm con el ratio equivalente al permetro
de 100mm tras modificar al equivalente a 200mm, curiosamente, la posicin actual de la lnea pasa a ser
90mm. Por esta razn, y para evitar que el cambio de ratio afecte a la posicin actual, se aconseja la
estructura de programa anterior.
pgina 57/180
Knowledge Base
www.infoPLC.net
2. Creamos un nuevo mdulo tipo Bloque de funciones de nombre Sub_PowerON y tipo de lenguaje
de programacin el CFC:
pgina 58/180
Knowledge Base
www.infoPLC.net
3. Podramos crear una carpeta para agrupar todos los bloques de funciones que vayamos creando.
En este caso se ha creado una llamada Funciones y se ha arrastrado dentro el Bloque de funciones
Sub_PowerON.
4. Realizamos doble clic sobre Sub_PowerON para proceder a editarlo. Observar como al ser un
bloque de funciones son necesarios una serie de parmetros de entrada, de salida e internos.
5. Un programa CFC (y la definicin de variables empleadas) podra ser, por ejemplo, el siguiente:
pgina 59/180
Knowledge Base
www.infoPLC.net
pgina 60/180
Knowledge Base
www.infoPLC.net
3. El bloque AND quedar incluido en una nueva macro cuyo nombre, por defecto, es MACRO.
4. Ahora renombramos la Macro recin creada y le damos el nombre de Iniciar_Ejes. Podemos ver
qu contiene la macro (y editar su contenido) con tan slo hacer clic con el botn derecho del ratn y
escoger la opcin Saltar a Macro.
NOTA: Expandir macro quiere decir Destruir Macro, es decir, todo lo que se encuentre dentro de la
Macro se extraer fuera de ella y quedar como si fuera una seccin de cdigo normal dentro de la
zona de programacin.
5. Una vez hemos Saltado dentro de la Macro podremos ver que su contenido es precisamente el
bloque que hemos utilizado para crear la Macro. Nos quedaremos en esta vista y modificaremos su
contenido sustituyendo el bloque AND por la siguiente seccin de cdigo:
pgina 61/180
Knowledge Base
www.infoPLC.net
Observar que la seccin de programa hace uso de dos instancias al bloque de funciones
Sub_PowerON creado anteriormente (en el apartado anterior). Por lo dems la macro dispone de
dos salidas indicando cuando los dos ejes (Axe_X y Axe_Y) han finalizado su bsqueda de home
(Homes_Ok) y cuando ambos se encuentran listos para ser utilizados (Drives_Ok).
Para extraer informacin de una Macro se ha utilizado una simbologa nueva:
Que como vemos tiene un aspecto redondeado. Para aadir una salida de macro tan slo se ha de
emplear el icono correspondiente de la barra de herramientas:
Crear Macro
Salida de Macro
Entrada a Macro
pgina 62/180
Knowledge Base
www.infoPLC.net
Aunque parezca un bloque de funciones en realidad una macro es como un puntero direccionado a una
agrupacin de ellos de manera que en realidad esta agrupacin slo existe una vez en memoria. Si se repite
la macro en 10 zonas distintas de programa no se consumen 10 veces ms recursos ya que una macro no
es un conjunto de cdigo sino un puntero a un conjunto de cdigo (a lo sumo necesitaremos los recursos
que Codesys necesite para realizar 10 llamadas a la misma zona de memoria donde se encuentra la seccin
de cdigo utilizada por la macro).
pgina 63/180
Knowledge Base
www.infoPLC.net
pgina 64/180
Knowledge Base
www.infoPLC.net
Se abrir a la derecha del Navegador de Recursos una nueva ventana con un rbol cuya raz se denominar
Configuracin de tareas donde, de momento, slo existe un objeto colgando denominado Evento del
sistema. Llevamos el cursor sobre el texto Configuracin de tareas y mediante la pulsacin del botn
derecho seleccionamos la opcin Anexar Tarea.
Aparecer un nuevo cuadro de dilogo donde daremos nombre a la nueva tarea llamndola TareaPrincipal
configurando su llamada mediante eventos externo. El evento que llamar a la nueva tarea ser el ciclo de
scan del Lexium Controller.
Acto seguido se llevar el cursor sobre el icono de la tarea TareaPrincipal y tras hacer clic con el botn
derecho se seleccionar la opcin Anexar Llamada de programa. El programa que se llamar ser
precisamente el programa principal creado anteriormente y que se llam Principal.
Abrir un listado
de Programas
Disponibles
De esta forma ya tenemos creado un objeto denominado que contendr el programa principal de la
aplicacin el cual ser llamado cclicamente a cada ciclo de posicionado del controlador. Dentro de este
objeto, llamado Principal, es donde se deber de escribir el programa que gobernar la aplicacin a realizar.
pgina 65/180
Knowledge Base
www.infoPLC.net
De forma parecida a como se ha hecho a la hora de crear una nueva tarea nos situaremos con el cursor
sobre el icono de la raz del rbol Lexium Controller V01 y haremos clic con el botn derecho
seleccionando Anexar Subelemento y luego BusInterface.
pgina 66/180
Knowledge Base
www.infoPLC.net
De esta forma se aadir al rbol de recursos hardware un nuevo componente denominado BusInterface y
que viene a representar el vnculo entre el controlador Lexium Controller y una posible red de
accionamientos controlados por bus CANSync. Una vez aadido el componente BusInterface se ha de
indicar que el bus ser controlado por un Lexium Controller por lo que modificaremos la opcin Controlador
de accionamiento a Lexium Controller Motion Bus.
Ahora falta especificar que lo que cuelga de este bus de campo es un conjunto de accionamientos (a pesar
de que en el presente ejemplo slo se controlar un nico accionamiento). Hacemos clic con el botn
derecho sobre el icono BusInterface y seleccionamos Anexar AxisGroup con lo que aparecer una nueva
ventana donde vincularemos este grupo de ejes con la tarea que se ha creado anteriormente TareaPrincipal,
es recomendable aadir como tiempo de ciclo 4000 us (tiempo adecuado para controlar hasta 4 ejes). Por
lo dems el nmero de nodo local (el Lexium Controller) puede dejarse a 0, la velocidad de comunicaciones
del bus CANSync a 500Kbaud (a menos que sea estrictamente necesario no se recomienda utilizar la
mxima velocidad de comunicaciones ya que suele restringir bastante la longitud del cable de
comunicaciones as como el nmero mximo de nodos) y el generador de pulsos de sincronismo en PLC.
pgina 67/180
Knowledge Base
www.infoPLC.net
Por ltimo hay que aadir algn eje al grupo de ejes recin creado. Para ello volvemos a realizar clic con el
botn derecho sobre el icono AxisGroup y seleccionamos Anexar Drive. Aparecer una nueva pantalla
para configurar dicho nuevo eje:
En esta pantalla se puede definir el escalado del nuevo eje, es decir, cuantos pulsos de encoder son
necesarios para desplazar el elemento que mueve el motor una medida determinada. Como se va a trabajar
a eje libre lo que haremos ser definir cuantos pulsos son necesarios para desplazar 360 grados de eje de
motor (de esta forma la unidad bsica de medida ser el grado).
pgina 68/180
Knowledge Base
www.infoPLC.net
B
C
Se le cambia el nombre
al eje para identificarlo
mejor
A:
B:
Nmero de nodo, debe corresponder con el nodo CAN del drive que utilizaremos
Nmero de pulsos generados durante una revolucin de motor. No importa el motor que se emplee, el
valor siempre es de 131072 porque el Lexium Controller trabaja internamente con una resolucin de 17
bits (2^17=131072).
C: Unidades que se desplazar la carga fsica. Como vamos a trabajar a eje libre (sin carga) y queremos
trabajar en grados se configura a 360. Esto quiere decir que cuando el Lexium Controller cuente 131072
pulsos de encoder se considerar a efectos de unidades de usuario que se ha girado 360 grados.
Todas las unidades de desplazamiento sern, a partir de este momento, en grados.
pgina 69/180
Knowledge Base
www.infoPLC.net
Tras hacer doble clic sobre el nico programa existente Principal aparecer el entorno de programacin
de ese programa que, como se ha definido en lenguaje CFC, tiene una apariencia similar a la mostrada en la
figura anterior. As, bajo lenguaje CFC, tenemos en la barra superior de herramientas un conjunto de
botones para la utilizacin de bloques de funciones.
Para crear nuestro primer bloque tan slo es preciso realizar un simple clic sobre el tercer icono empezando
por la izquierda y luego hacer un clic sobre el rea de programacin por defecto aparecer el bloque de
una puerta AND. Un camino ms rpido es pulsar CTRL+B con el cursor situado sobre el rea de
programacin.
pgina 70/180
Knowledge Base
www.infoPLC.net
Como este bloque no nos interesa hacemos clic sobre su nombre y pulsamos la tecla F2. De este modo se
abrir el navegador detallado de bloques disponibles. Se recomienda desactivar la opcin Representacin
estructurada pues de ese modo se obtiene un listado completo de los bloques disponibles y es mejor para
realizar una bsqueda visual.
El bloque que ahora mismo nos interesa se llama MC_POWER y se encuentra dentro de la coleccin de
bloques de funciones estndar. Una vez seleccionado se pulsa el botn Aceptar.
El anterior bloque AND quedar automticamente sustituido por el bloque MC_POWER cuyo cometido es
situar al Lexium 05 en estado de RUN. Hacemos clic sobre los interrogantes en rojo de la parte superior del
bloque y le daremos como nombre, por ejemplo, RUN_EjeControlado. Pulsamos la tecla Enter y nos
aparecer un cuadro llamado Declaracin de variables
En este caso, las opciones por defecto ya nos van bien (por lo general las opciones por defecto a la hora de
renombrar un bloque ya nos van bien siempre). Pulsamos sobre el botn Aceptar.
pgina 71/180
Knowledge Base
www.infoPLC.net
Ahora es necesario activar las entradas Enable, bRegulatorOn y bDriveStart del bloque de funciones para
que el Lexium05 que controla el motor se site en estado de RUN. Para este cometido es necesario
conectar una variable de entrada hacia dichas entradas del bloque de funciones. Podemos sin embargo
utilizar como variable de entrada una constante de valor TRUE de modo que al arrancar el programa
automticamente el Lexium05 se site en RUN. Para aadir una variable de entrada podemos hacer clic
sobre el icono que representa la entrada a un bloque o bien pulsar CTRL+E.
Hacemos clic sobre los interrogantes y tecleamos TRUE. Posteriormente hacemos clic sobre el rabito del
icono de entrada y sin soltarlo lo intentamos conectar con el rabito situado como entrada Enable del bloque
MC_POWER. Volvemos ha hacer clic sobre el rabito del icono de entrada y lo conectamos a la entrada
bRegulatorOn y finalmente repetimos la operacin con la entrada bDriveStart. Si se ha realizado la
operacin descrita de forma correcta deberemos tener el siguiente bloque con las siguientes conexiones:
Ahora se le ha de decir al bloque que eje deseamos situar en RUN. Volvemos a crear una entrada pero esta
vez en lugar de hacer que sea una constante de valor TRUE tecleamos el nombre del eje que hemos
previamente definido. Conectamos esta variable en la entrada Axis.
Ahora vamos a aadir un nuevo bloque para realizar el posicionamiento propiamente dicho. El bloque a
introducir es el MC_MOVEABSOLUTE y le daremos el nombre de Mover_EjeControlado.
pgina 72/180
Knowledge Base
www.infoPLC.net
Para dar la orden de moverse, de dirigirse a la cota deseada, utilizaremos una variable de entrada. Creamos
por tanto una variable de entrada que conectaremos a la entrada Execute del bloque. A esta variable de
entrada la llamaremos IR y tras introducir su nombre sobre el icono que representa una entrada y pulsar la
tecla Enter se nos preguntar de qu tipo queremos que sea:
Si en el cuadro de declaracin de variables aparecido tras pulsar la tecla Enter no aparece el tipo de variable
deseado siempre es posible desplegar de nuevo el cuadro de Tipos estndar y escogerla a mano. Si
recordamos de memoria cual es el tipo adecuado lo podemos escribir a mano en lugar de buscarlo.
pgina 73/180
www.infoPLC.net
Knowledge Base
Repetimos la operacin con otra entrada que servir para contener la posicin deseada la cual
conectaremos en la entrada Position del bloque de funciones a la que llamaremos Deseada y que
definiremos como REAL. Para las entradas Velocity, Acceleration y Deceleration utilizaremos constantes
de valor 1000, 1000, 1000. En la entrada Axis evidentemente aadiremos el eje que tenemos
EjeControlado. El bloque correctamente finalizado tendra el siguiente aspecto:
NOTA: La velocidad se expresa en unidades/segundo. Esto quiere decir que el eje, caso que llegue a la
velocidad indicada girar a 1000 grados / segundo. Como las rampas de aceleracin y deceleracin se
expresan en grados / segundo2 vemos que en realidad configurar las rampas a 1000 (igual que el valor de la
velocidad) hace que el eje invierta 1 segundo en llegar desde 0 hasta la velocidad especificada (aceleracin)
y 1 segundo en llegar desde la velocidad especificada hasta 0 (deceleracin).
Para conocer el valor de la velocidad en RPM hemos de aplicar esta simple frmula:
V (RPM ) = 1000
grados
1 Re v
60 seg
= 166,67
seg
360 grados 1 min
Por ltimo aadiremos un ltimo bloque cuyo cometido ser leer la velocidad actual de eje. Simplemente
para tareas de monitorizacin. El bloque a utilizar es el MC_ReadActualVelocity y le daremos como nombre
MON_EjeControlado, activaremos la entrada Enable siempre a TRUE y especificaremos EjeControlado
como eje sobre el que se desea leer la velocidad. Finalmente crearemos una variable de salida de nombre
VelocidadActual y de tipo REAL.
pgina 74/180
Knowledge Base
www.infoPLC.net
pgina 75/180
Knowledge Base
www.infoPLC.net
Una vez enviado el programa ste debe ejecutarse, para ello hemos de seleccionar la orden Inicio del
men superior En Lnea o bien pulsar la tecla F5. Con ello el programa que tengamos escrito pasar a
ejecutarse.
pgina 76/180
Knowledge Base
www.infoPLC.net
Entorno en Castellano
CTRL+B
CTRL+E
CTRL+A
: Aadir Bloque
: Aadir Constante o Variable de Entrada
: Aadir Variable de Salida
Estando con el programa en RUN podemos modificar el valor de las variables haciendo doble clic sobre ellas
e introduciendo el nuevo valor. Este cambio no tendr validez hasta que pulsemos CTRL+F7 de modo que
es posible modificar el valor de 1 o ms variables de forma simultnea.
Conceptos:
La velocidad siempre se expresa en Unidades / Segundo
2
Las aceleraciones y deceleraciones siempre se expresan en Unidades / Segundo
Por lo general los bloques que disponen de una entrada de activacin del tipo ENABLE responden a seales
de nivel mientras que las que disponen de una entrada de activacin del tipo EXECUTE responden a
seales de flanco de subida.
pgina 77/180
Knowledge Base
www.infoPLC.net
Motion Pro pone a disposicin del usuario una serie de herramientas para facilitar la creacin de formas
bidimensionales sobre el plano XY bien mediante el uso directo de cdigos G bien bajo un cmodo entorno
grfico donde es posible dibujar, como si de un programa de CAD se tratara, la forma deseada.
Aunque es posible controlar hasta 8 ejes (X, Y, Z, P, Q, U, V, W) nicamente dos de ellos pueden realizar
una interpolacin bidimensional. As, si se programa una interpolacin lineal, circular, parablica, elptica o
tipo spline, el resto de ejes slo pueden realizar movimientos lineales independientes (acercar herramienta
en Z, girar torno, girar cargador herramientas, etc)
El lenguaje utilizado es compatible con el estndar DIN66025 si bien nicamente se han incorporado algunas
de las instrucciones preparatorias.
Bsicamente una instruccin de posicionado ejecuta una interpolacin desde la posicin destino del anterior
posicionado hasta la posicin destino de la actual instruccin de posicionado. La primera instruccin de
posicionado tiene lugar desde la posicin especificada como origen (en el CNC-Editor). Si la posicin no ha
sido definida se empezar desde la posicin X=0, Y=0, Z=0. Es posible establecer la posicin mediante la
instruccin G92 tanto al principio como a mitad de programa CNC.
pgina 78/180
Knowledge Base
www.infoPLC.net
8.2.- Identificadores
Como se ha comentado en el captulo precedente existen una serie de identificadores utilizados para
componer una instruccin. A continuacin se listan los identificadores compatibles con Motion Pro:
ID
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
U
V
W
X
Y
Z
Descripcin
Radio herramienta para instrucciones de correccin de herramienta (G40-G42) o
Suavizado de trayectoria (G50/G51) o
Valor de la variable a modificar (G36/G37).
Mxima Aceleracin (>0)/ Deceleracin (<0) trayectoria en unidades/seg2
Velocidad trayectoria en unidades/seg
Instruccin Preparatoria (ver siguiente tabla)
Activar Switch Point (>0), Desactivar Switch Point (<0)
Coordenada X del centro de un crculo o elipse (G02/G03/G08/G09) o
Coordenada X de una parbola, tangente, interseccin, punto
Coordenada Y del centro de un crculo o elipse (G02/G03/G08/G09) o
Coordenada Y de una parbola, tangente, interseccin, punto
Direccin del trazado de una elipse en sentido matemtico (0 O, 90 N, ) o
Condicin de salto (G20) o
Valor del parmetro dT1 (funciones M)
Posicin absoluta activacin Switch Point (ver identificador H) medida desde la posicin de inicio
(>0) o final del tramo (<0) o
Condicin de salto (G20) o
Valor del parmetro dT2 (funciones M)
Funcin
Nmero de secuencia.
Proporcin de trayectoria recorrida para activacin Switch Point (ver identificador H) de 0 a 1
(nmero real) o
Variable a modificar (G36/G37)
Estructura datos para funciones M
Posicin destino del eje adicional P
Posicin destino del eje adicional Q
Radio (G02/G03) alternativamente a I, J o relacin longitud eje menor / eje mayor (G08/G09)
Activar (>0) o Desactivar (<0) rampas en S
3: Eje Z, 7: Eje P, 8: Eje Q, 9 Eje U, 10: Eje V, 11: Eje W
Posicin destino del eje adicional U
Posicin destino del eje adicional V
Posicin destino del eje adicional W
Coordenada X de la posicin destino
Coordenada Y de la posicin destino
Posicin destino del eje adicional Z
pgina 79/180
www.infoPLC.net
Knowledge Base
Descripcin
G00
Movimiento de posicionado rpido utilizado para mover los ejes rpidamente entre cortes,
cambios de herramienta, etc. Debe levantarse la herramienta antes de ejecutar un
movimiento de este tipo.
G01
Interpolacin Lineal. Se usa para eliminar material mediante el movimiento de los ejes en
direcciones rectas a lo largo o a travs del material.
G02
NOTA: No es posible definir por radio un arco de ngulo igual o superior a 180 ya que al
realizar una definicin por radio siempre son posibles dos caminos (uno corto y otro largo).
El sistema siempre coger el arco ms corto.
G03
Punto intermedio de un tramo Spline (los extremos correspondern con la posicin final del
anterior tramo y el inicial del siguiente).
pgina 80/180
www.infoPLC.net
Knowledge Base
G06
Interpolacin parablica.
Para describir una parbola son necesarios las coordenadas del punto final (X/Y) as como
las coordenadas del punto mximo de la parbola (I/J)
G08
G09
G20
G36
Contador:=5;
Desplazamiento a cota X=100
Desplazamiento a cota X=0
Contador:=Contador-1;
Si Contador es distinto de 0 salto a lnea 1010
G37
pgina 81/180
www.infoPLC.net
Knowledge Base
G40
G41
Sin correccin
Sin Correccin
pgina 82/180
www.infoPLC.net
Knowledge Base
G50
G51
Esta funcin permite activar el suavizado de los ngulos de una trayectoria. Esto puede
ser til en aquellas aplicaciones donde la exactitud de la trayectoria no es tan importante
como la velocidad a la que debe seguirse ya que para seguir un camino anguloso a veces
es preciso que uno de los ejes deba pasar por velocidad 0 entre un tramo de trayectoria y
otro. Por ello la instruccin G51 debe ir unida a una instruccin D que especifique el radio
de suavizacin desde el punto de interseccin de los dos tramos que crean el ngulo.
Para este propsito se traza un arco de radio determinado tomando como centro el punto de unin
de los dos tramos que forman el ngulo y se aade un spline.
Esta funcin permite activar el redondeado de los ngulos de una trayectoria. La filosofa
es prcticamente idntica a la de la funcin G51 sin embargo con la funcin G52 la
suavizacin tiene lugar no con una curva tipo spline sino con arcos de crculo.
Trayectoria Original
con tramos en ngulo.
Trayectoria suavizada
mediante splines (ver
funcin G51)
Trayectoria suavizada
mediante arcos.
pgina 83/180
www.infoPLC.net
Knowledge Base
G60
G61
Esta funcin permite activar el filtrado de la trayectoria de forma que no pueden procesarse
aquellas en las que el camino puede formar un bucle bien por un mal diseo bien por el
radio de la herramienta.
Trayectoria con el
filtrado de bucle
activado y con correccin
de herramienta de 5
unidades.
Se inicia la interpretacin de coordenadas para los ejes X/Y/Z/P-W como valores absolutos.
G91
Se inicia la interpretacin de coordenadas para los ejes X/Y/Z/P-W como valores relativos.
G92
Cambia la posicin actual por la introducida sin desplazar la herramienta. Se utiliza para
cambios en el punto de referencia.
G98
Se inicia la interpretacin de las coordenadas I/J como valores absolutos. Por ejemplo para
el ejemplo descrito en la descripcin de la instruccin G02 podemos definir las coordenadas
referentes al centro del arco como absolutas del siguiente modo:
Absoluto
N10 G00 X20 Y20 F50
N40 G01 X50 Y20 H4
N45 G98
N50 G02 X35 Y05 I35 J20
N60 G01 X20 Y05
N70 G01 X20 Y20
N70 G00 X0 Y0
N80 M30
pgina 84/180
Knowledge Base
G99
www.infoPLC.net
Se inicia la interpretacin de las coordenadas I/J como valores relativos al punto actual
(configuracin por defecto). Por ejemplo para el ejemplo descrito en la descripcin de la
instruccin G02 podemos definir las coordenadas referentes al centro del arco como
relativas del siguiente modo:
Incremental
N10 G00 X20 Y20 F50
N40 G01 X50 Y20 H4
N45 G99
N50 G02 X35 Y05 I-15 J0
N60 G01 X20 Y05
N70 G01 X20 Y20
N70 G00 X0 Y0
N80 M30
pgina 85/180
www.infoPLC.net
Knowledge Base
8.4.- Funciones M
Las funciones son, por decirlo de algn modo, interrupciones al programa CNC para hacer algo. Existe una
ligera normativa que hace que cierto nmero de estas funciones sean estndar, es decir, que todo fabricante
de CNC utiliza las mismas para realizar lo mismo, sin embargo hay un gran nmero de ellas que dependen
del fabricante. En nuestro caso son totalmente configurables pues no hay ninguna definicin. El usuario
deber programar que es lo que quiere hacer con cada una de ellas.
A ttulo instructivo se listan algunas de las funciones M estndar utilizadas por un gran nmero de
fabricantes:
M00
M01
M02/M30
M03/M04/M05
M06
M19
M40-M46
Parar Programa
Paro Opcional
Fin de Programa
Control del eje de giro del soporte de la pieza en un torno (cw/ccw/stop)
Cambio de herramienta (M-code depends on PLC)
Orientacin eje de giro
Ratio reductor eje de giro
El concepto que hay que tener claro es que nicamente es posible activar una funcin M a la vez, no es
posible activar dos funciones M de forma simultnea. El programa CNC en su flujo de funcionamiento llegar
a una determinada sentencia donde se activar una marca y en ese punto el programa quedar totalmente
detenido hasta que se le indique que la marca ha sido tratada adecuadamente.
En una misma sentencia no pueden coexistir cdigos G y funciones M. Las funciones M deben aadirse en
una sentencia aparte.
Si se desean utilizar las marcas se puede seguir el siguiente proceso:
1. Se crea un programa CNC que incluya una marca.
Marca M30
pgina 86/180
Knowledge Base
www.infoPLC.net
3. Ya se puede arrancar el programa, cuando se ejecute la sentencia N35 M08 el trazado quedar
detenido a la espera que se realice la tarea asignada a la marca M08. El bloque de funciones
SMC_Interpolator (o similar) indicar 8 en su salida wM y esto servir para ejecutar lo que tenga que
ejecutarse. Cuando haya finalizado la operativa asignada a M08 se deber activar la entrada
bAcknM para que el programa CNC pueda proseguir.
pgina 87/180
www.infoPLC.net
Knowledge Base
A diferencia de las funciones M que detenan la ejecucin del programa CNC los puntos H o Switch Points
no detienen el programa sino que se activan o desactivan al llegar a una cota determinada.
Disponemos de un total de 32 Switch Points que no dejan de ser los bits de la palabra que asignemos. Es
posible tener ms de uno o incluso todos activados.
Se pueden activar de forma proporcional a la distancia recorrida. Veamos el siguiente ejemplo:
N10 G00 X20 Y20 F10 E50 E-50
N20 G01 X20 Y120
N30 G01 X70 Y120
N40 G01 X70 Y20 H1 O0.25
N50 G01 X20
N60 G00 X0 Y0
En el ejemplo anterior se activa el Switch Point 1 (H1) tras recorrer el 25% del trayecto (70,120) - (70,20). Pero
tambin podemos activar el Switch Points del siguiente modo:
N10 G00 X20 Y20 F10 E50 E-50
N20 G01 X20 Y120
N30 G01 X70 Y120
N40 G01 X70 Y20 H-2 L10
N50 G01 X20
N60 G00 X0 Y0
En la seccin de programa izquierdo se desactiva el Switch Point 2 (H-2) tras recorrer 10 unidades del trayecto
(70,120) - (70,20) mientras que en la seccin derecha lo hace cuando faltan 10 unidades para finalizar el mismo
trayecto ya que se ha especificado como cota final un valor negativo (L-10).
En cualquier de los casos se indica grficamente la inclusin de cualquier Switch Point mediante un punto en
verde (no se distingue ni el nmero ni si se activa o desactiva dicho Switch Point).
Activacin/Desactivacin de
un Switch Point
La palabra que contiene los diferentes bits correspondientes a los 32 Switch Points puede obtenerse del
bloque SMC_Interpolator (o similar) por la salida dwSwitches.
pgina 88/180
www.infoPLC.net
Knowledge Base
SM_CNC_V1940.lib
SM_Trafo_V1940.lib
Estas libreras incluyen gran cantidad de bloques de funciones relativos a funciones CNC pero slo se
describirn los ms importantes.
NOTA: Es tambin imprescindible, para la mayora de opciones explicadas en este captulo, que el firmware
de la Lexium Controller sea el 1.1IE02_B2 o superior o de lo contrario funciones como la del cambio al vuelo
de las dimensiones de una trayectoria no funcionarn.
8.6.2.- El SMC_Interpolator
Este es el bloque de funciones ms importante ya que se encarga de ejecutar un programa CNC extrayendo
de l la referencia a aplicar a cada eje, gestiona otros elementos como Marcas o Switch Points, nos da
informacin acerca de que lnea del programa CNC se encuentra ejecutndose, permite pausar el programa
CNC de varias formas, etc
pgina 89/180
Knowledge Base
www.infoPLC.net
Entradas
bExecute:
poqDataIn:
Esta entrada sirve para indicarle al bloque que programa CNC deseamos ejecutar.
El programa CNC a ejecutar no puede introducirse tal como se redacta o disea en
el entorno a tal efecto (lista de cdigos ISO) sino que debe transformarse
previamente a una estructura denominada Outqueue. Hay varias formas de hacerlo:
se puede indicar al compilador que lo haga automticamente o bien podemos
hacerlo por programa va bloque de funciones SMC_NCDecoder. De cualquier
modo en esta entrada se ha de especificar el puntero hacia dicha estructura
Outqueue generada.
bSlow_Stop:
Esta es una entrada de pausa externa con rampas. Se toman las rampas del tramo
que se encuentre ejecutando en ese momento. El programa continua su ejecucin
tan pronto esta entrada pasa a FALSE.
bEmergency_Stop:
Parecida a la entrada anterior tambin es una entrada de pausa pero sin rampas. El
programa continua su ejecucin tan pronto esta entrada pasa a FALSE.
dOverride:
dwIpoTime:
Sirve para indicarle al bloque cada cuanto ha de calcular y entregar una nueva
referencia de posicin a los drives remotos. Se suele indicar el mismo tiempo que se
indic al definir el tiempo de sincronizacin del AxisGroup y se recomienda introducir
este valor mediante precisamente la variable que contiene ese informacin en lugar
de hacerlo numricamente (por si posteriormente modificamos un valor y nos
olvidamos del otro). Utilizar la variable AxisGroup.dwCycle siendo AxisGroup el
nombre del grupo de ejes utilizado.
bAbort:
Aborta la ejecucin del programa CNC en ejecucin est donde est. Esta entrada
podra utilizarse a posteriori de la entrada bEmergency_stop para abortar la
ejecucin de un programa CNC despus de detener de forma controlada todos los
ejes involucrados.
bACKnM:
pgina 90/180
www.infoPLC.net
Knowledge Base
Salidas
bDone:
Nos indica que el bloque se encuentra en ejecucin de forma adecuada, sin errores.
bError:
wErrorID:
piSetPosition:
iStatus:
bWorking:
Contiene el estado de los 32 posibles Switch Points. Esta salida proporciona una
variable de 32 bits (double Word) y cada bit indica el estado de cada posible Switch
Point.
wM:
pgina 91/180
Knowledge Base
www.infoPLC.net
8.6.3.- El SMC_Trafo_Gantry2
Este bloque transforma la estructura de consignas ofrecida por el bloque SMC_Interpolator a referencias
individuales para cada eje.
No tiene mayor misterio, debe interconectarse con el bloque SMC_Interpolator del siguiente modo:
pgina 92/180
www.infoPLC.net
Knowledge Base
8.6.4.- El SMC_ControlAxisByPos
Este bloque es el encargado de enviar las coordenadas recibidas desde el bloque SMC_Trafo_Gantry2 hacia
cada uno de los ejes. Adems se dedica a gestionar a tiempo real cualquier discrepancia entre las
posiciones y/o velocidades deseadas y las reales y, caso de existir, lo indica mediante la activacin de la
salida digital correspondiente y, si as lo deseamos, trata de ajustarse segn ciertos parmetros.
Entradas
iStatus:
Esta entrada debe encontrarse unida con la salida homloga del bloque
SMC_Interpolator.
bEnable:
Habilitacin del bloque. Debe encontrarse unida con la salida bWorking del bloque
SMC_Interpolator de modo que cuando ste se encuentre trabajando el bloque
SMC_ControlAxisByPos tambin lo est.
bAvoidGaps:
Movimiento
Original
Se aade un GAP al
movimiento Original
fSetPosition:
fGapVelocity:
Velocidad del GAP (ver bAvoidGaps) cuanto mayor ms rpida ser la correccin.
fGapAcceleration:
Rampa de aceleracin del GAP (ver bAvoidGap) cuanto mayor sea ms rpido se
alcanzar la velocidad nominal de GAP y por tanto ms rpida ser la correccin.
fGapDeceleration:
Rampa de deceleracin del GAP (ver bAvoidGap) cuanto mayor sea ms rpido
acabar la imposicin del GAP y por tanto ms rpida ser la correccin.
Axis:
Eje a controlar.
pgina 93/180
Knowledge Base
www.infoPLC.net
Salidas
bCommandAborted:
Sucede cuando desde otra parte del programa se ejecuta una orden de movimiento
que anula la presente.
bError:
Se activa cuando por lo que sea el bloque detecta un fallo bien interno o bien de
posicin.
iErrorID:
bStopIpo:
Se necesita un bloque del tipo SMC_ControlAxisByPos por cada eje a controlar y el esquema bsico de
interconexin con los dos bloques anteriores es el siguiente:
En este ejemplo vemos una estructura prcticamente idntica a la que emplearamos en la prctica. Se
enva un puntero al programa CNC mediante el uso de la instruccin ADR que nos devuelve la direccin
(puntero) donde se encuentra ubicado el programa (en realidad la estructura en formato Outqueue que lo
contiene) y el ciclo del Motion Bus hacia el bloque SMC_Interpolator. La consigna ofrecida por este bloque se
transforma en pares de consigna XY y se enva cada una a un bloque SMC_ControlAxisByPos gracias al
bloque SMC_Trafo_Gantry2. Los bloques SMC_ControlAxisByPos tienen activada la correccin de GAPs
aplicndose en dichas correcciones valores de velocidad y rampas elevados para minimizar el tiempo de la
correccin y mientras esta tiene lugar tiene lugar un paro rpido en la emisin de nuevos valores gracias a la
activacin de la entrada bEmergency_Stop cuando alguno de los ejes tiene activada la salida bStopIpo seal
de que se encuentra corrigiendo un GAP. Observar como los bloques SMC_ControlAxisByPos se habilitan
cuando la salida bWorking del bloque SMC_Interpolator se encuentra a TRUE
pgina 94/180
www.infoPLC.net
Knowledge Base
El primer paso sera por tanto la creacin de un programa que contenga la trayectoria que se desea efectuar
interpolando dos ejes. Toda esta operacin tiene lugar desde el editor de programas CNC al cual se puede
acceder de la siguiente forma:
1. Pulsar en pestaa Recursos
2. Hacer doble clic en opcin Lista de programas CNC
3. Tras esto aparecer el editor de programas CNC el cual tiene una apariencia similar a la mostrada por
la siguientes imagen:
pgina 95/180
Knowledge Base
www.infoPLC.net
A continuacin crearemos un nuevo programa para ello seguiremos los siguientes pasos:
1. Seleccionaremos men superior Programa CNC
2. Escogeremos la opcin Nuevo Programa CNC
pgina 96/180
www.infoPLC.net
Knowledge Base
4. Tras crear el nuevo programa el aspecto que adquirir el editor de programas CNC ser el siguiente:
Instrucciones G
ms utilizadas
Centrar dibujo
en pantalla.
pgina 97/180
Knowledge Base
www.infoPLC.net
6. nicamente mediante el uso de comandos a travs de botones G1, G2 y G3 crearemos una figura
similar a la siguiente:
7. Observar como algunas lneas se muestran en color verde mientras que otras lo hacen en color
azul, los colores verde y azul muestran que tramos del recorrido se harn sin que la herramienta
tenga contacto con el material (G00) y que tramos se harn mecanizando (G01 / G02 / G03). El
programa resultante, que se va auto escribiendo mientras se van aadiendo tramos al diseo del
recorrido es el siguiente:
Sentencia
Descripcin
% Demo
N0 G00 Z100.000 F50
pgina 98/180
Knowledge Base
www.infoPLC.net
NOTA: Como se observa no existen botones para introducir el cdigo G00 por lo que la nica forma de
utilizar esta instruccin es crear todo el dibujo mediante la instruccin G01 y posteriormente editar a mano el
listado modificando aquellos cdigos que deseemos. Lo mismo ocurre con la precisin de las cotas: si
observamos que a mano alzada se ha cometido algn error podemos editar el listado del programa
ajustando las cotas a lo deseado.
pgina 99/180
Knowledge Base
www.infoPLC.net
Como herramientas informativas disponemos nicamente de una opcin que nos ofrece la siguiente
informacin:
Quizs los datos ms interesantes son, en primer lugar, la duracin del desplazamiento (el cual depende de
la velocidad de mecanizado, en este caso 50 unidades/seg ya que la primera lnea de programa indica: N0
G00 Z100.000 F50 y no hay ninguna contraorden posterior) que en este caso es de 21,22 segundos y la longitud total
del recorrido que en este caso es de 655.358 unidades. El resto de datos los introduce de hecho el usuario y son
meramente recordatorios.
pgina 100/180
www.infoPLC.net
Knowledge Base
Una vez disponemos del programa disponemos de una serie de herramientas que afectan a la totalidad de
este y que son:
pgina 101/180
Knowledge Base
www.infoPLC.net
pgina 102/180
Knowledge Base
Desplazar Programa:
Rotar Programa:
www.infoPLC.net
Permite aadir un offset a toda la trayectoria con el fin de mover su punto de inicio
de mecanizado:
pgina 103/180
Knowledge Base
Extender Programa:
www.infoPLC.net
Virar Programa:
pgina 104/180
Knowledge Base
www.infoPLC.net
Por si el editor de programas CNC incluido en Motion Pro pudiera resultar limitado existe la posibilidad de
crear la trayectoria desde un software de terceros que facilite el trabajo en 3D como por ejemplo un Autocad
e importar el fichero (en formato DXF o TXT) a Motion Pro o bien exportar un programa CNC a formato TXT
para poder ser posteriormente ledo y/o editado mediante el uso de otros sofwares. Esta capacidad de
importacin/exportacin de programas CNC otorga a Motion Pro una gran flexibilidad y una gran portabilidad
ya que es posible la creacin de un programa determinado desde un software conocido por porte del cliente
final y llevarlo a mquina de una forma fcil y transparente (no es necesario modificar el programa interno).
Las diferentes opciones disponibles son las siguientes:
pgina 105/180
Knowledge Base
www.infoPLC.net
Este fichero no puede ser ledo posteriormente por el entorno Motion Pro pero se supone que su utilidad
reside en que puedan ser ledos mediante unos bloques de funciones especficos creados a tal fin de modo
que sea posible una utilizacin directa de dicha informacin desde el programa principal de la LMC. Este
ltimo punto, no obstante, no se ha confirmado an pues se desconoce de que forma y en que zona de
memoria debe escribirse este archivo hacia la LMC para que el programa de usuario sea capaz de trabajar
con l.
pgina 106/180
www.infoPLC.net
Knowledge Base
En este captulo crearemos un programa Motion que permita a dos ejes XY seguir la trayectoria descrita por
un programa CNC creado previamente. Se utilizar el mismo programa CNC ejemplo que se ha venido
utilizando en los captulos precedentes.
Lo primero que debera hacerse es comprobar que se encuentran cargadas las libreras necesarias para el
uso de los bloques de funciones relativos a la gestin de programas CNC:
SM_CNC_V1940.lib
SM_Trafo_V1940.lib
Crearemos a continuacin (si es que no lo hemos hecho ya) un programa CNC que ser el que seguirn los
dos ejes XY del proyecto Motion Pro. En el captulo 8.7.- Creacin de Trayectorias se explica al detalle
como crear el programa CNC que muestra la siguiente figura:
pgina 107/180
Knowledge Base
www.infoPLC.net
PRECAUCION : Hay que tener en cuenta que el bloque SMC_Interpolator no es capaz de reconocer el
programa CNC escrito por nosotros en cdigo ISO, lo nico que entiende son estructuras de datos bastante
complejas, del tipo SMC_GEOINFO, que bien podramos crear nosotros a mano (lo cual es extremadamente
laborioso y precisa de unos conocimientos muy altos) o indicarle a Motion Pro que lo haga por nosotros con
tan slo activar la opcin al compilar crear Outqueue accesible en el men superior Programa_CNC:
pgina 108/180
Knowledge Base
www.infoPLC.net
Una vez el programa CNC, al que llamaremos Demo, ha sido creado deberemos crear un programa Motion
que permita que dos ejes XY lo sigan fielmente.
Vemos lo siguiente:
1. Con la variable Iniciar_CNC iniciamos la interpolacin.
2. Asignamos la direccin del programa Demo a la entrada poqDataIn del bloque FB_Interpolador.
3. Asignamos a la entrada dwIpoTime del bloque FB_Interpolador la base de tiempos del grupo de
ejes donde se encuentran declarados los ejes a utilizar (en este caso Eje_X y Eje_Y) para que el
clculo de coordenadas se sincronice adecuadamente.
4. Al activarse el bloque FB_Interpolador mediante la variable Iniciar_CNC ste trocear la ruta a
seguir por ambos ejes en segmentos ms pequeos los cuales ir proporcionando por la salida
piSetPosition. Para saber que el bloque FB_Interpolador se encuentra generando cotas la salida
bWorking se pondr a TRUE. Tenemos tambin la salida iStatus que ofrece informacin relativa
del estado de ejecucin del programa Demo y que luego necesitan otros bloques.
5. Se une la salida piSetPosition del bloque FB_Interpolador a la entrada del mismo nombre del
bloque FB_Trafo_XY con el fin de extraer las coordenadas individuales de cada eje.
6. Por ltimo se utilizan los bloques FB_Control_X y FB_Control_Y para iniciar el movimiento
cordinado de los ejes X e Y respectivamente segn la informacin recibida del bloque
FB_Trafo_XY. Y siempre y cuando el FB_Interpolador se encuentre trabajando y sin errores (ver
conexin de las salidas bWorking e iStatus del bloque FB_Interpolador con entradas bEnable e
iStatus de los bloques FB_Control_X y FB_Control_Y)
pgina 109/180
Knowledge Base
www.infoPLC.net
Si ejecutamos este programa sin una mecnica de ejes coordenados X-Y no veremos gran cosa,
nicamente que los ejes se mueven. Disponemos de una herramienta que nos permite ver de una forma
algo ms clara cual ser el comportamiento de los ejes XY y si estos seguirn una trayectoria de movimiento
parecida al programa CNC creado.
Para hacer uso de esta herramienta se ha de incorporar un nuevo bloque al programa: El bloque
SMC_TrafoF_Gantry2 y las pantallas de visualizacin. El bloque mencionado es fcil de configurar, se
aade al programa principal, donde reside el resto de bloques relacionados con la ejecucin del programa
CNC y se indican los lmites de las coordenadas XY del programa CNC a ejecutar as como el nombre de los
dos ejes involucrados.
pgina 110/180
Knowledge Base
www.infoPLC.net
Posteriormente vamos a las pantallas de visualizacin y creamos una nueva pgina con dos elementos: Un
rectngulo unido a la variable Run y que servir para dar marcha al sistema y un control que representa un
par de ejes coordenados:
Una vez realizados estos pasos, en la pantalla de visualizacin aparecer un control similar al siguiente
Esta representacin de ejes coordenados ir siguiendo los movimientos de los ejes X (horizontal) e Y
(vertical) dndonos la oportunidad de observar como se va siguiendo la trayectoria que hemos creado
mediante el programa CNC.
pgina 111/180
www.infoPLC.net
Knowledge Base
Hasta ahora hemos visto como puede crearse un programa CNC utilizando las herramientas grficas
disponibles o bien mediante la programacin directa de cdigos ISO. Estos programas son fijos, es decir,
una vez creados las longitudes de sus segmentos as como otros parmetros importantes (velocidades o
rampas de aceleracin por ejemplo) no pueden modificarse.
Con el fin de poder modificar el valor de los diferentes parmetros que permiten definir cada uno de los
tramos de una trayectoria se propondr un sistema simple pero muy potente basado en un bloque de
funciones especficos.
Antes que nada hay que aclarar unos conceptos muy importantes:
pgina 112/180
www.infoPLC.net
Knowledge Base
Descripcin
% comment
N0 G00 X20 Y20 F50
Sin embargo este programa, tal como se ha diseado, nicamente sirve para cortar puertas de 50 unidades
de ancho y 100 de alto. Puede que nos interese cortar puertas con otras dimensiones, para ellos se ha de
editar a mano el programa. Esto lo haremos del siguiente modo:
Modificaremos el programa a mano dejndolo del siguiente modo
Sentencia
Descripcin
% comment
N0 G00 X20 Y20 F50
Observar como ahora el ancho y el alto de la puerta se definen por el valor de las variables cAncho y cAlto
y que para poder ser insertadas dentro del programa CNC es preciso que vayan encerradas entre sendos
signos $.
pgina 113/180
Knowledge Base
www.infoPLC.net
Las variables cAncho y cAlto deben ser definidas como tipo REAL y con mbito global ya que van a ser
modificadas desde un programa externo al de movimiento.
Se recomienda inicializarlas a algn valor coherente de modo que el entorno grfico de diseo de programas
CNC siga mostrando la figura que se va a desear (sino con las dimensiones deseadas al menos si con la
forma deseada).
pgina 114/180
Knowledge Base
www.infoPLC.net
En este caso no vamos a decirle al compilador que transforme el programa por nosotros escrito en una
estructura SMC_GEOINFO sino que seleccionaremos la opcin al compilar crear variable de programa
ya que en este caso pasaremos directamente el listado de programa CNC a travs de un nuevo bloque
llamado SMC_NCDecoder que se encargar de crear una estructura SMC_GEOINFO que contemplar los
nuevos datos.
Como el nuevo bloque consume muchos recursos cuando transforma un programa CNC a una estructura
SMC_GEOINFO crearemos una nueva tarea llamada TareaCclica que llamar cada 8mseg al programa
Path, el cual contendr todo el cdigo relativo a la conversin. De esta forma no saturaremos el programa
cclico que se encuentra sincronizado a cada ciclo del Motion Bus.
pgina 115/180
Knowledge Base
www.infoPLC.net
Cada vez que el bloque FB_NCDecoder detecta un flanco de subida en su entrada bExecute coge el
programa al que hemos llamado Puerta y lo convierte en una estructura del tipo SMC_GEOINFO
almacenndolo en la variable Buffer.
La variable Buffer debera ser definida como una variable global del tipo adecuado del siguiente modo:
Buffer: ARRAY [0..30] OF SMC_GEOINFO;
Tras finalizar la conversion el puntero a dicha variable Buffer se envia a un segundo bloque llamado
FB_CheckVelocidades el cual se encarga de filtrar el programa traducido eliminando cualquier velocidad
que sobrepase a las especificadas como mximas en el entorno del Motion Pro evitando as
comportamientos anmalos. Al final se memoriza el puntero a la estructura Buffer en una nueva variable a
la que se ha llamado Puntero y que se ha definido como global del siguiente modo:
Puntero: POINTER TO SMC_Outqueue;
Se utiliza un bloque MOVE simplemente para evitar que el puntero se convierta en 0 cuando eliminamos la
orden Run_Decoder de la entrada tanto del bloque SMC_NCDecoder como del SMC_CheckVelocities.
pgina 116/180
Knowledge Base
www.infoPLC.net
Ya tenemos pues los elementos necesarios para pasar al programa principal que ser del siguiente modo:
Como se ve es idntico al utilizado anteriormente lo nico que cambia es que esta vez la entrada poqDataIn
no es un puntero a una estructura fija creada automticamente por el compilador sino un puntero a una
estructura que se va recalculando cada vez que modificamos un valor.
Los pasos a seguir con este programa seran:
1. Modificamos los valores cAncho y cAlto segn convenga.
2. Activamos Run_Decoder para que se proceda a calcular la estructura SMC_GEOINFO teniendo en
cuenta los nuevos valores para cAncho y cAlto
3. Tan pronto Decoder_OK valga TRUE eliminamos la orden Run_Decoder.
4. Activamos Run_CNC y ambos ejes empezaran a interpolar la nueva trayectoria con los nuevos
valores.
Si deseamos modificar los valores debemos esperar a que la trayectoria anterior acabe de ejecutarse
(iStatus=IPO_FINISHED) y repetir el proceso nuevamente.
pgina 117/180
Knowledge Base
www.infoPLC.net
Por tanto lo primero es conocer que aspecto tiene la estructura interpretada por el bloque SMC_Interpolator
y que contiene la descripcin de la trayectoria (coordenadas de cada punto, velocidades, rampas, etc). La
estructura a la que se hace referencia es del tipo:
SMC_GEOINFO
Y hay dos formas de obtenerla:
1. Tras compilar el programa con la opcin al compilar crear Outqueue activada. En este caso
veremos el aspecto de la estructura directamente en la opcin CNC Data dentro de Variables
Globales de la pestaa Recursos:
pgina 118/180
www.infoPLC.net
Knowledge Base
Analizando ciertos datos de dicha estructura (resaltados en rojo) creada automticamente ya vemos
que dicho vector parte de las coordenadas X=0,Y=0 y finaliza en las coordenadas X=180, Y=360.
Como otros datos importantes vemos que este tramo lo har a una velocidad de dVel=100 y cuando
llegue a las coordenadas destino su velocidad ser dVelEnd=0, es decir, frenar. Las rampas que se
emplearn durante la ejecucin de este tramo sern dAccel=100 y dDecel=100.
Hay un valor muy importante calculado automticamente que corresponde a la longitud del tramo
interpolado resultante:
Longitud
Longitud =
Este ltimo clculo es lo que realmente dificulta en gran modo la utilizacin de este mtodo cuando
el trayecto a realizar se aparta de las frmulas simples (vectores, crculos) y se adentra dentro de las
trayectorias complejas (parbolas, splines, elipsoides).
Para modificar estos parmetros podemos utilizar un cdigo de programa similar al siguiente:
_CNC0_Q[0].piStartPos.dX:=
_CNC0_Q[0].piStartPos.dY:=
_CNC0_Q[0].piDestPos.dX:=
_CNC0_Q[0].piDestPos.dY:=
_CNC0_Q[0].dLength:=
_CNC0_Q[0].dVel:=
_CNC0_Q[0].dAccel:=
_CNC0_Q[0].dDecel:=
_CNC0_Q[0].dVelEnd:=
En este caso la trayectoria se compone de un nico tramo por lo que ya se ve que se ha de coger el
ndice 0 de la matriz de trayectorias creada por eso se hace referencia constantemente a
_CNC0_Q[0].
pgina 119/180
www.infoPLC.net
Knowledge Base
Hay que tener en cuenta que el interpolador trabaja nicamente con coordenadas absolutas por lo
que al desear realizar un movimiento hemos de programar como punto de partida la posicin actual
de cada eje:
_CNC0_Q[0].piStartPos.dX:= Pos_Eje1.Position;
_CNC0_Q[0].piStartPos.dY:= Pos_Eje2.Position;
Hecho esto la posicin final es simplemente la cota final deseada tambin en coordenadas
absolutas:
_CNC0_Q[0].piDestPos.dX:= Nueva coordenada X para el punto destino;
_CNC0_Q[0].piDestPos.dY:= Nueva coordenada Y para el punto destino;
Para calcular la longitud combinada a recorrer debe realizarse un pequeo clculo que depender
del tipo de movimiento a realizar (vectorial, circular, etc). En este ejemplo el movimiento es vectorial
por lo que el clculo es muy sencillo:
_CNC0_Q[0].dLength:=
SQRT((_CNC0_Q[0].piDestPos.dX_CNC0_Q[0].piStartPos.dX)*(_CNC0_Q[0].piDestPos.dX_CNC0_Q[0].piStartPos.dX)+(_CNC0_Q[0].piDestPos.dY_CNC0_Q[0].piStartPos.dY)*(_CNC0_Q[0].piDestPos.dY-_CNC0_Q[0].piStartPos.dY));
As como la velocidad a la que deseemos que queden girando ambos ejes al llegar a su destino:
_CNC0_Q[0].dVelEnd:=
0;
2. Tras compilar el programa con la opcin al compilar crear variable de programa activada. En
este caso en la opcin CNC Data dentro de Variables Globales de la pestaa Recursos veremos
una estructura diferente a la SMC_GEOINFO a la que no hemos de hacer caso. La estructura en
cuestin hemos de crearla a mano declarando una variable global de la forma:
Buffer: ARRAY [0..30] OF SMC_GEOINFO
Esta nueva variable ser un array con tantas celdas como lneas de programa tenga la trayectoria a
implementar (en la prctica son algo ms: sumar 10 al nmero de lneas de programa de la
trayectoria a ejecutar).
Una vez declarada dicha variable su contenido se utiliza igual que en el mtodo 1
Este mtodo debe emplearse conjuntamente con el bloque SMC_NCDecoder (ver captulo 8.8.2
Trayectoria Variable) ya que en ese caso lo que se hace es transformar, cuando el programador
crea oportuno, un programa de movimiento ISO con el valor adecuado para los parmetros de
movimiento en una estructura SMC_GEOINFO.
pgina 120/180
www.infoPLC.net
Knowledge Base
DESCRIPCION
iObjNo: INT
Indice del objeto dentro de la estructura.
iSourceLineNo: INT
Nmero de lnea del programa CNC.
iMoveType: MOVTYP (INT)
Contiene los siguientes valores que identifican el tipo de movimiento a realizar:
LIN
CLW
CCLW
SPLINE
ELLCLW
ELLCCLW
LINPOS
INITPOS
1
2
3
5
8
9
100
110
MCOMMAND
120
Lineal (G01)
Circular horario (G02)
Circular antihorario (G03)
Spline o parbola (G05, G06)
Elipse horaria (G08)
Elipse antihoraria (G09)
Lineal de posicionado (G00)
Posicionado a ciegas (Punto de inicio desconocido; SMC_Interpolator aadir un
movimiento continuo)
Marca
piStartPos: SMC_POSINFO
Esta estructura describe las coordenadas iniciales de la trayectoria. (se ignorar si iMove_Type = INITPOS).
piDestPos: SMC_POSINFO
Esta estructura describe las coordenadas finales de la trayectoria.
pgina 121/180
www.infoPLC.net
Knowledge Base
INITPOS
CLW
CCLW
SPLINE
INITPOS
Irrelevante
dToolRadius: LREAL
Esta variable contiene la informacin necesaria para el preprocesado de la trayectoria (ver SMC_ToolCorr y
SMC_RoundPath). Si los bloques indicados no son utilizados estas variables carecen de utilidad.
dVel, dVelEnd: LREAL
Estas variables, que deben ser utilizadas en cualquier caso, contienen informacin sobre el perfil de
velocidad del tramo. dVel describe la velocidad objetivo durante la trayectoria, dVelEnd describe la velocidad
que debe alcanzarse al final de la trayectoria (unidades/seg).
dAccel, dDecel: LREAL
dAccel describe la maxima aceleracin permitida, dDecel describe la mxima deceleracin permitida
(unidades/seg). Por defecto ambas variables valen "100".
dLength: LREAL
Esta variable, cuyo valor debe asignarse en cualquier caso, contiene la longitud de la trayectoria (unidades).
byIntern_Mark: BYTE
pgina 122/180
Knowledge Base
www.infoPLC.net
Esta variable describe el punto de inicio y final para las acciones de preprocesado de la trayectoria:
Bit 0 set
Bit 1 set
Bit 2 set
Bit 3 set
Bit 4 set
Bit 4 set
Bit 6 set
Bit 7 set
pgina 123/180
www.infoPLC.net
Knowledge Base
Posicin
Esclavo
0
360
360
0
El siguiente paso es introducir esta misma tabla mediante el uso de Motion Pro. Hay bsicamente dos
formas de hacerlo:
Introduciendo directamente sobre la tabla CAM los valores que nos interesan.
El primer mtodo es el ms cmodo (segn los gustos) ya que es bastante visual sin embargo dicho mtodo
es nicamente til cuando no se tiene previsto modificar dichas levas.
El segundo mtodo es, digamos, el avanzado. Esta pensado para permitir modificar el contenido de la tabla
CAM desde programa incluso aunque se est ejecutando en ese momento. Por ejemplo, imaginemos que
en la tabla anterior queremos modificar el desplazamiento del eje maestro al doble:
Posicin
Maestro
0
540
900
1440
Posicin
Esclavo
0
360
360
0
Con el primer mtodo tendramos que dibujar una nueva leva y mediante programa utilizar una u otra, sin
embargo, modificando directamente sobre la tabla CAM no es preciso crear un dibujo por cada variacin ya
que nos podramos limitar a modificar aquellas posiciones de la tabla que nos interesan y lanzarla. Un
ejemplo claro es una cizalla volante donde la longitud a cortar va variando entre 200 y 10000: Es evidente
que nicamente con un sola tabla es suficiente, no hace falta dibujar 9800 tablas una por medida.
Por supuesto hay formas combinadas, puede dibujarse la forma y luego interactuar con la tabla generada
por ejemplo en aquellas aplicaciones donde pueda existir una correccin por marcas (la leva va
modificndose incluso antes de que finalice su ciclo).
pgina 124/180
www.infoPLC.net
Knowledge Base
Sea de la forma en que se disee una leva podrn ser utilizadas como variables las siguientes estructuras,
las cuales conviene conocer:
Esta primera estructura es la principal, contiene la definicin de cmo ser la leva y siempre ser necesaria
una variable de este tipo:
MC_CAM_REF
Parmetro
Tipo
Descripcin
wCAMStructID
WORD
xStart, xEnd
byType
LREAL
BYTE
byVarType
BYTE
nElements
INT
byInterpolationQuality
pce
BYTE
POINTER TO
BYTE
Esta variable, que siempre tiene un valor fijo, se utilize para comprobar si la
estructura de datos, tomada como entrada por un modulo, es una estructura del tipo
MC_CAM_REF
Define los valores lmites de eje maestro.
Tipo de tabla CAM que se desea emplear:
1: Equidistante. Tabla unidimensional conteniendo las posiciones del eje
esclavo.
2: No equidistante, Tabla bidimensional conteniendo pares de posiciones
maestro-esclavo
3: Descripcin polinomial de puntos estratgicos consistentes en posicin
maestro, posicin esclavo, velocidad y aceleracin (XYVA).
Tipo de variables que contendran las tablas (slo si byType=1 o byType=2):
0: INT
1: UINT
2: DINT
3: UDINT
4: REAL
5: LREAL
Nmero de elementos en la tabla, por tanto nmero de puntos esclavo,
maestro/esclavo o puntos XYVA de la leva electrnica que desea crearse.
Grado de interpolacin a realizar (slo si byType=1 o byType=2):
1: Lineal(por defecto), 3: Cbica
Puntero que apunta a la estructura que contiene los puntos de la tabla:
Tipo
1 (Equidistante)
2 (No Equidistante)
3 (Polinomial XYVA)
nTappets
pt
strCAMName
INT
POINTER TO
SMC_CAMTappet
STRING
Estructura
SMC_CAMTable_<VarType>_<nElements>_1
SMC_CAMTable_<VarType>_<nElements>_2
ARRAY OF SMC_CAMXYVA
pgina 125/180
Knowledge Base
www.infoPLC.net
Seguidamente una de las siguientes tres estructuras ser necesaria para definir la tabla de puntos que
describir el comportamiento de la leva.
SMC_CAMXYVA
Una tabla CAM del tipo XYVA consiste en un array del tipo SMC_CAMXYVA. Cada variable del array describe un punto de la tabla
CAM va dX (posicin eje maestro), dY (posicin eje esclavo), dV (primera derivada dY/dX; correspondiente a la velocidad del eje
esclavo a velocidad constante y unitaria del maestro) y dA (segunda derivada dY/dX; correspondiente a la aceleracin del eje
esclavo a velocidad constante y unitaria del eje maestro).
Como mnimo son necesarios dos puntos: uno de inicio de tabla CAM y otro de final de tabla CAM.
pgina 126/180
Knowledge Base
www.infoPLC.net
En este caso se ha creado una estructura formada por una tabla bidimensional (tabla esclava y tabla
maestra) compatible con valores LREAL de 151 puntos.
Se le ha dado el nombre de SMC_CamTabla_LREAL_151_2 nicamente para mantener la compatibilidad
sintctica con las creadas por el sistema aunque podramos haberle dado un nombre cualquiera.
IMPORTANTE : Es vital que el orden de las declaraciones sea el indicado ya que en caso de utilizar un
orden distinto el comportamiento de la tabla CAM, aunque aparentemente sea correcto (no se generar
ningn error de compilacin y el eje esclavo se desplazar siguiendo al maestro) no se comportar segn lo
especificado en las tablas.
pgina 127/180
Knowledge Base
www.infoPLC.net
Hacer
pgina 128/180
Knowledge Base
www.infoPLC.net
6. Mediante las opciones grficas existentes dibujaremos el perfil deseado (tres lneas)
7. Se recomienda hacer clic sobre el rea de dibujo y seleccionar Curva como tabla de modo que
todo lo que vayamos dibujando lo vayamos viendo expresado numricamente en forma de tabla
pudiendo as ajustar a mano los valores que se nos resistan.
NOTA: Es posible que los valores cercanos a los dos lmites (0 y 720) no puedan ser escritos, en su defecto
acercarse todo lo posible a ellos (0.001 y 719.999).
pgina 129/180
Knowledge Base
www.infoPLC.net
Ahora que ya tenemos la leva dibujada y hemos ajustado la tabla para que sea igual a la deseada podemos
proceder a compilar el programa.
Antes de compilar deberemos escoger que tipo de estructura de datos vamos a utilizar (ver captulo 9.2.Las Estructuras necesarias). Para ello, encontrndonos en Disco de Levas dentro de la pestaa
Recursos, deberemos ir al men superior desplegable Herramientas y seleccionar Opciones de
compilacin:
Polinominal: SMC_CAMXYVA
No obstante, al trabajar desde el entorno grfico deber seleccionarse, obligatoriamente, la primera de las
tres posibilidades: Polinomial
pgina 130/180
Knowledge Base
www.infoPLC.net
Tras compilar Motion Pro habr creado, automticamente, la estructura de tabla CAM que posteriormente
utilizar el bloque de funciones correspondiente. Esta estructura puede verse si nos dirigimos a la pestaa
Recursos, carpeta Variables Globales, opcin CAM Data.
Observar como la tabla CAM creada utilizando este mtodo es una estructura del tipo SMC_CAMXYVA la
cual contiene 8 puntos. Esto es as porque esta estructura no contempla lneas sino puntos por lo que por
cada una de las tres lneas utilizadas en el dibujo de la leva Motion Pro extrae dos puntos, el que da inicio a
la lnea y el que le da fin, adems de los puntos inicial y final de la leva en si misma (los cuales no pueden
modificarse).
Esta estructura es una de las tres posibles estructuras existentes aunque de hecho es la ms compleja ya
que relaciona, para cada punto, posicin maestro X posicin esclavo Y Velocidad Aceleracin. Estos
dos ltimos parmetros, Velocidad y Aceleracin en el punto de tangencia, resulta de difcil clculo.
En resumen:
Start Point = 1
Line = 2
Line = 2
Line = 2
EndPoint = 1
Total = 8
pgina 131/180
www.infoPLC.net
Knowledge Base
En ciertas ocasiones la leva debe ir modificando su forma bien porque las caractersticas del material van
variando o bien porque es necesario compensar la forma de esta debido a deslizamientos, deformidades del
material o imprecisin en la cadena cinemtica. En todos estos casos el empleo de la herramienta grfica de
Motion Pro es insuficiente y es preciso la utilizacin de tablas de puntos calculados a tiempo real mediante
frmulas matemticas.
Este mtodo es especialmente indicado cuando la forma de la leva necesita compensarse peridicamente
debido a que el material a manipular es flexible (plsticos, goma, etc) y/o es necesario interactuar sobre ellos
en puntos muy concretos (entre dos marcas, sobre un dibujo, etc) por lo que la longitud de la leva no importa
tanto como que a cada ciclo de mquina un punto de esta coincida con un punto del material (mtodo
llamado comnmente como correccin por marcas).
Lo primero que hay que hacer es declarar las variables que vamos a emplear. Slo es necesario el uso de
dos estructuras internas: La primera contendr la definicin de la leva y es del tipo MC_CAM_REF mientras
que la segunda contiene la definicin de la tabla de puntos y es del tipo SMC_CAMTable_LREAL_128_2.
Para ello iremos a la pestaa Recursos, carpeta Variables Globales y opcin Global_Variables y
escribiremos el siguiente cdigo:
(*Defino tabla CAM*)
TablaCAM: MC_CAM_REF:=(nElements:=128, byType:=2, byVarType:=5, xStart:=0, xEnd:=720);
(*Especifico lmites de tabla CAM en unidades de usuario*)
TablaCAM_A: SMC_CAMTable_LREAL_128_2:=(
fEditorMasterMin := 0, fEditorMasterMax := 720,
fTableMasterMin := 0, fTableMasterMax := 720,
fEditorSlaveMin := 0, fEditorSlaveMax := 360,
fTableSlaveMin := 0, fTableSlaveMax := 360);
En la inicializacin de la estructura MC_CAM_REF vemos que deseamos trabajar con tablas de 128 puntos
(nElements=128), de tipo bidimensional (bytype=2) para relacionar posiciones absolutas maestro-esclavo y
que se emplearn variables de tipo LREAL (byVarType=5).
Como en el momento de declarar las variables no tienen porque conocerse los valores mximos de las
tablas utilizaremos valores arbitrarios (ver valores en rojo):
(*Defino tabla CAM*)
TablaCAM: MC_CAM_REF:=(nElements:=128, byType:=2, byVarType:=5, xStart:=0, xEnd:=720);
(*Especifico lmites de tabla CAM en unidades de usuario*)
TablaCAM_A: SMC_CAMTable_LREAL_128_2:=(
fEditorMasterMin := 0, fEditorMasterMax := 720,
fTableMasterMin := 0, fTableMasterMax := 720,
fEditorSlaveMin := 0, fEditorSlaveMax := 360,
fTableSlaveMin := 0, fTableSlaveMax := 360);
pgina 132/180
Knowledge Base
www.infoPLC.net
Una vez declaradas e inicializadas las variables bsicas ya podemos crear una rutina que calcule el valor
para los 128 puntos de la leva. Un ejemplo simple sera un vector calculado de tal forma que cuando el eje
maestro haya recorrido 720 el esclavo haya recorrido 360. En la siguiente rutina vemos un ejemplo que va
calculando los 128 diferentes puntos para las tablas maestra y esclava:
Observar como al final del clculo de todos los puntos de la tabla es cuando podemos por fin fijar los lmites
tanto de la tabla como de la leva (aquellos que en el momento de la declaracin de variables se dejaron
pendientes con un valor arbitrario).
Por ltimo, con la tabla de puntos ya llena, crearemos la rutina principal encargada de lanzar el movimiento:
Es muy importante no olvidar de vincular la segunda de las variables, la tabla de puntos (TablaCAM_A), con
la primera de ellas, la leva en si misma (TablaCAM) ya que es la que en definitiva introduciremos en el
bloque MC_CamTableSelect. Esta vinculacin tiene lugar a travs del parmetro pce de la variable
TablaCAM (estructura del tipo MC_CAM_REF) y tiene que hacerse a cada ciclo del Motion Bus.
pgina 133/180
Knowledge Base
www.infoPLC.net
Asimismo hay que distinguir entre dos formas de ejecutar la leva: relativa o absoluta. Si la leva se ejecuta
de forma relativa no importar en que cota se encuentre el eje esclavo, la leva tomar ese punto como
punto inicial y seguir la leva de la forma definida. Si se define como absoluta lo primero que tendr lugar es
un reposicionado del eje esclavo hacia la cota marcada por el primer elemento de la tabla y a partir de ah se
ejecutar la leva segn lo definido en sus tablas. El modo absoluto es quizs recomendable en aquellos
casos en los que la leva describa un movimiento de ida-regreso empezando con el eje esclavo en la cota 0
(es necesario realizar algn tipo de referenciado) y finalizando la ejecucin de la leva de modo que el eje
esclavo acabe en el cota 0 de nuevo.
El comportamiento del programa es bastante sencillo de describir:
1. Mediante el bloque MC_CamTablaSelect se especifica que eje ser el maestro y cual el esclavo y
que se va a emplear la leva descrita por la variable TablaCAM (la cual apunta a la tabla de puntos
TablaCAM_A).
2. Cuando el bloque MC_CamTablaSelect recibe un flanco de subida en la entrada Execute se
calcula un identificador para dicha leva y se envia al siguiente bloque MC_CamIn.
3. Con el bloque MC_CamIn, al cual le llega el identificador de la leva a ejecutar as como la orden de
inicio de ejecucin en su entrada Execute desde la salida Done del bloque anterior, se inicia la
sincronizacin entre ejes.
4. Cuando queremos abandonar la sincronizacin entre ejes debemos ejecutar el bloque MC_CamOut
pero siempre que hayamos previamente ejecutado el bloque MC_CamIn por ello se utiliza una
bscula SR que almacena por un lado la condicin de Insync del bloque MC_CamIn (seal de que
el eje esclavo inici su sincronizacin con el maestro) cuya salida se compara con el estado negado
de la orden de inicio de sincronizacin bRunEsclavo (debe mantenerse este valor a ON en tanto
queramos que ambos ejes permanezcan sincronizados, si cambia a OFF saldremos de la
sincronizacin).
pgina 134/180
Knowledge Base
www.infoPLC.net
Vamos a suponer que se ha creado una leva cualquiera bien desde el entorno grfico bien a mano y la
hemos llamado CAM_D.
Necesitaremos tener claros tres puntos clave para el uso de dicha leva:
1. Seleccin de la tabla.
2. Asignar la tabla a un eje e iniciarla.
3. Desasignar la tabla del eje.
Si al considerar que se ha finalizado el trabajo con la tabla CAM no efectuamos el tercer punto (desasignar la
tabla del eje) al querer asignar otra tabla o simplemente volver a cargar la misma tabla para efectuar un ciclo
este no se iniciar o se iniciar incorrectamente.
PRECAUCION : Hay que tener en cuenta que podemos crear y ejecutar cuantas tablas CAM deseemos,
segn la disponibilidad de recursos del sistema, pero bajo ningn concepto debemos ejecutar la misma tabla
desde dos rutinas distintas. Si se quiere que dos ejes ejecuten la misma tabla CAM debemos crear dos
tablas CAM con el mismo contenido y asociar cada una especificando ejes esclavos distintos (es posible
utilizar el mismo eje maestro)
El siguiente ejemplo muestra un ejemplo de uso de tabla CAM:
Vemos lo siguiente:
1. Con la variable Habilitar iniciamos la seleccin de la tabla a ejecutar.
2. Asignamos FALSE a las entradas MasterAbsolute y SlaveAbsolute lo cual afecta al modo en que
se ejecuta la tabla CAM. Para esos valores se tomarn los datos de la tabla CAM como relativos a la
posicin en la que se encuentre el eje maestro y esclavo.
3. Seguidamente asignamos a las entradas Master de los bloques involucrados el eje cuya posicin se
tomar como referencia para que el eje esclavo se mueva segn lo indicado por la tabla CAM. El eje
esclavo se asignar a las entradas Slave de los bloques involucrados.
4. Por ltimo se ha de indicar al bloque Seleccion_Tabla el nombre de la tabla CAM que se va a
emplear.
5. Cuando el valor de la variable Habilitar pasa a TRUE el bloque Seleccion_Tabla se ejecuta
obteniendo un nmero identificativo de tabla mediante la salida CamTablaID el cual se enva al
bloque Asignar_Tabla.
6. Como lo que se desea es que la ejecucin de los movimientos tenga lugar desde el punto actual del
eje maestro y esclavo se especifica mediante la asignacin de la palabra relative a la entrada
StartMode del bloque Asignar_Tabla.
pgina 135/180
Knowledge Base
www.infoPLC.net
7. Cuando el eje esclavo se encuentre en sincronismo se indicar mediante la salida In_Sync. Ahora
ya es posible iniciar el movimiento del eje maestro, el esclavo se mover segn lo descrito en la
tabla CAM.
8. Lo que viene a continuacin es un mtodo para asegurar que slo se desasignar una tabla CAM
que previamente haya sido asignada: Cuando el sistema se encuentre en In_Sync memorizamos
esta condicin mediante una bscula SR, la salida de esta bscula se lleva a la entrada de una
puerta AND, la otra entrada viene de la variable Habilitar negada. En sincronismo una entrada es
TRUE y la otra es FALSE (porque est negada), cuando deseamos salir la variable Habilitar pasa a
FALSE y las dos entradas de la puerta AND pasan a ser TRUE. Slo cuando la salida de la puerta
AND es TRUE se ejecuta el bloque Desasignar_Tabla permitiendo salir de la tabla CAM dejando
preparado el sistema para futuros ciclos.
9. La bscula SR se resetea cuando se haya ejecutado el bloque Desasignar_Tabla.
CONCEPTO : Otro principio bsico que debe seguirse religiosamente es la forma en que deben encontrarse
el eje maestro y el esclavo al activar y desactivar la tabla CAM. Seguir los siguientes preceptos:
Antes de desplazar el eje maestro el eje esclavo debe encontrarse con la tabla CAM lanzada y
siguindola (en sincronismo) ya que si no es as el eje maestro puede desplazarse mientras el
esclavo, al no encontrarse en sincronismo, no puede seguirlo pudiendo producirse errores de
medida.
Antes de desasignar la tabla CAM del eje esclavo debemos asegurarnos que el eje maestro se
encuentra detenido por las mismas razones anteriores.
pgina 136/180
Knowledge Base
www.infoPLC.net
Nos encontramos con un array que contiene punteros que apuntan a las estructuras donde se describen
cada una de las levas creadas (el primer puntero en el ndice 0 y el segundo en el ndice 1) y que podemos
utilizar para ir asignando a nuestras variables de usuario toda la informacin relativa a una leva. En este
caso este array contiene dos elementos porque hemos creado dos tablas: CAM_D y CAM_I.
La descripcin de estas dos levas se obtiene de las siguientes variables:
CAM_I: MC_CAM_REF :=
strCAMName:='CAM_I');
Aunque hay ms datos escondidos de momento nos interesan estos pues son los bsicos.
pgina 137/180
Knowledge Base
www.infoPLC.net
Y unir esta estructura con una pantalla de visualizacin para solicitar el nombre de la tabla que se desea
emplear:
.Main. NumSeq
.Main. NumSeq
.Main. PermisoEje1
.Main.Secuencia[.Main.IndSecuencia].Eje[1].Tabla.strCAMName
En esta seccin de cdigo nicamente se rastrean todos los elementos de la lista de tablas disponible hasta
encontrar uno cuyo nombre coincida con el introducido en la pantalla de visualizacin. Cuando esto ocurre
se copia la estructura que define la leva sobre nuestra variable (que es del mismo tipo) pudiendo emplearla
para ejecutarla, modificarla, etc.
pgina 138/180
Knowledge Base
www.infoPLC.net
Para desfasar la posicin del eje esclavo respecto el maestro en plena ejecucin se suelen emplear dos
tcnicas:
Con este bloque, a cada orden bDesfasar recibida se aplicar un desfase absoluto, especificado
mediante la variable Desfase. Dicho desfase es absoluto cuando se aplica (dos desfases
consecutivos de 45 no equivalen a un desfase de 90 sino a uno de 45) pero incremental respecto
a la posicin donde se aplica (se suma o resta a la posicin que en ese momento posea el eje
esclavo).
pgina 139/180
Knowledge Base
www.infoPLC.net
Los Tappets son marcas que pueden situarse estratgicamente en cualquier punto de una leva y que nos
permiten conocer que seccin de la leva se est ejecutando en cada momento.
Al igual que como suceda a la hora de definir la leva pueden definirse los Tappets mediante dos vas
distintas:
1. Grficamente.
2. Mediante programacin a mano.
Para definir a mano los Tappets que deseamos utilizar hay que efectuar dos operaciones simples:
Cuando defino la estructura de la leva indico cuantos Tappets voy a necesitar:
(*Defino tabla CAM*)
TablaCAM: MC_CAM_REF:=(nElements:=128, byType:=2, byVarType:=5, xStart:=0, xEnd:=720, nTappets:=8);
Y posteriormente creo una variable de tipo SMC_CAMTappet que describe como actuarn cada uno de los 8
Tappets:
(*Los tapptes hacen relacin al ancho total del perfil maestro que en este caso es 720*)
TablaTappets: ARRAY[0..7] OF SMC_CAMTappet :=
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 1, x := 1.000000, cta := 0),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 1, x := 90.000000, cta := 1),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 2, x := 90.000000, cta := 0),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 2, x := 180.000000, cta := 1),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 3, x := 180.000000, cta := 0),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 3, x := 270.000000, cta := 1),
(ctt := 0, dwDelay := 0, dwDuration := 90, iGroupID := 4, x := 270.000000, cta := 0),
(ctt := 0, dwDelay := 0, dwDuration := 0, iGroupID := 4, x := 360.000000, cta := 1);
Lo ms importante es saber diferenciar entre Tappets (que en este caso se han definido 8) e iGroupId (que
en este caso slo hay 4). Un Tappet es cualquier punto insertado en la leva mientras que el iGroupId es
como el nmero de variable que va a ser manipulada.
En la seccin de cdigo mostrada vemos que primer Tappet activa a ON (cta=0 es ON y cta=1 es OFF) el
iGroupID=1 cuando la posicin del eje maestro es x=1.
El segundo Tappet, sin embargo, asigna OFF al iGroupID=1 cuando la posicin del eje maestro es x=90.
CONCEPTO : el iGroupID es la variable que luego consultaremos mientras que cada vez que se necesita
cambiar su valor ser necesario crear un Tappet distinto. Cada Tappet representa una actuacin en una
actuacin sobre un iGroupID determinado en una posicin determinada de la leva maestra.
pgina 140/180
Knowledge Base
www.infoPLC.net
Una vez creados los ocho Tappets que modifican a cuatro iGroupID podremos consultar el valor de cada
iGroupID de la siguiente forma:
En el ejemplo anterior vemos como se lanza una leva y como se van consultando el estado de los cuatro
diferentes iGroupID.
No olvidar vincular a cada ciclo de Motion Bus la tabla de Tappets con la leva seleccionada. Esto permite
incluso crear diferentes tablas de Tappets para una misma leva y seleccionar una u otra segn conveniencia.
NOTA : Las posiciones de activacin/desactivacin de los Tappets se refieren a las posiciones del eje
maestro y no del esclavo.
pgina 141/180
Knowledge Base
www.infoPLC.net
pgina 142/180
Knowledge Base
www.infoPLC.net
Tras seguir los pasos anteriores obtendremos el entorno adecuado para empezar a crear una visualizacin:
Entorno desarrollo.
Lo primero que vamos a realizar es disear el aspecto grfico y para ello disponemos de una serie de
herramientas agrupadas en la barra de iconos superior:
pgina 143/180
Knowledge Base
www.infoPLC.net
El siguiente paso es darle un texto y un color de fondo a dicho rectngulo para ello haremos doble clic sobre
l y veremos que aparece un nuevo cuadro:
A continuacin pulsamos sobre la seccin Texto e introduciremos Medidas, posteriormente haremos clic
sobre el botn Fuente y escogeremos tipo de letra Negrita y tamao de la fuente a 11.
Sin hacer clic sobre el botn Aceptar pasamos directamente a la seccin Colores para pulsar sobre el botn
Interior de la categora Color. En el cuadro de colores que aparecer seleccionaremos un verde claro y
pulsaremos sobre todos los botones Aceptar hasta que desaparezcan todos los cuadros:
pgina 144/180
Knowledge Base
www.infoPLC.net
El resultado, si se han seguido los anteriores pasos correctamente, tendr la siguiente apariencia:
Continuamos aadiendo objetos de forma similar a la indicada hasta que nuestra pantalla tenga un aspecto
similar al mostrado por la siguiente figura:
pgina 145/180
www.infoPLC.net
Knowledge Base
d,i
Nmero decimal
Carcter sencillo
String
Valores Reales
Sintaxis: % <Alineacin><Ancho mnimo><Precisin> f
Precisin: Nmero de decimales detrs de la coma (por defecto 6)
Hacemos doble clic sobre los campos de texto que incluyen % para asociar una variable a los mismos:
En la seccin Variables vemos que tenemos varias posibilidades de las cuales se destacan la siguientes:
Invisible:
Introduciremos una variable tipo Bool con el fin de que el objeto asociado sea visible o no.
De esta forma podremos ocultarlo o mostrarlo segn el valor de dicha variable. Si no se
indica nada se toma FALSE como valor por defecto (el objeto nunca es invisible).
Input Disable:
Utilizado para impedir la modificacin del valor de la variable asociada al objeto mediante
la celda Textdisplay. En la imagen, al haberse introducido TRUE, la modificacin de la
variable asociada queda anulado pudiendo slo leer su valor.
Change Color:
Permite modificar el color del fondo del objeto mediante el uso de una variable, por
ejemplo para resaltar la aparicin de una alarma.
Textdisplay:
pgina 146/180
Knowledge Base
www.infoPLC.net
El uso de variables es algo peculiar: Al nombre de la variable debe anteceder siempre un punto. Si son
variables globales se hace referencia a ellas directamente (un punto y el nombre de la variable):
1.- Defino una variable global de nombre Posicion y tipo Real, para ello abro la pestaa Resources:
2.- Me dirijo a la carpeta Global Variables y la opcin Global_Variables para definir la nueva variable:
4.- En la visualizacin deseada creada anteriormente hacemos doble clic sobre el objeto que queremos
vincular a la nueva variable creada:
5.- Por ltimo vinculamos la variable Posicion de modo que se muestre en lugar de %0.1f (el valor de la
variable se presentar siempre con un decimal) . Observar como en la celda Textdisplay el nombre de la
variable se introduce con un punto delante.
pgina 147/180
Knowledge Base
www.infoPLC.net
Si en lugar de global la variable es local (se encuentra definida dentro de un programa o bloque) debe
hacerse referencia a ella indicando en que bloque o programa se ha declarado:
1.- Dentro del programa Main me encuentro la variable Pos_Eje1 que es del tipo MC_ReadActualPosition
por lo que al ser un FB predefinido puedo hacer uso de todos sus parmetros de entrada y salida:
3.- En la visualizacin deseada creada anteriormente hacemos doble clic sobre el objeto que queremos
vincular a la nueva variable creada:
4.- Por ltimo vinculamos la variable .Main.Pos_Eje1.Posicion de modo que se muestre en lugar de %0.1f
(el valor de la variable se presentar siempre con un decimal) . Observar como en la celda Textdisplay el
nombre de la variable se introduce no slo con un punto delante sino tambin con el nombre del programa
donde ha sido declarada la variable Pos_Eje1.
pgina 148/180
Knowledge Base
www.infoPLC.net
Si creamos una pantalla de visualizacin que, por ejemplo, muestre la posicin actual de un eje (Eje 1)
podemos luego llamarla dos veces desde una pantalla de visualizacin principal como si fuera un control
ms pero ambos controles mostrarn la posicin del mismo eje (el Eje 1) pues as fue programada dicha
pantalla de visualizacin secundaria. Sera una lstima y una prdida de recursos el hecho de tener que
crear 16 pantallas de visualizacin secundarias para mostrar la posicin de 16 ejes distintos (Eje1 a Eje16) y
ah entran en juego los Placeholders
Un Placeholder no es ms que un mtodo por el cual es posible intercambiar informacin entre una pantalla
de visualizacin secundaria y la pantalla de visualizacin principal que la utiliza. Mediante este intercambio
es posible indicar a la pantalla de visualizacin secundaria, si es llamada dos veces, que en la primera
instancia utilice, por ejemplo, un primer eje (Eje 1) y en la segunda, por ejemplo, el segundo (Eje2). De este
modo una misma pantalla de visualizacin secundaria puede ser reutilizada de una forma ms potente y
verstil.
Las pantallas de visualizacin secundarias se crean exactamente del mismo modo que las normales. Vamos
a crear una pantalla de visualizacin cualquiera que, por ejemplo, tenga el siguiente aspecto:
La diferencia con respecto a una pantalla de visualizacin general es que en este caso se hace uso de
variables delimitadas por el smbolo $ como parte de la ruta hacia la variable utilizada para interactuar con el
control. Observemos, por ejemplo, que hace el piloto Paro Emergencia:
pgina 149/180
Knowledge Base
www.infoPLC.net
En este control la ruta de la variable segn el valor de la cual se modificar el color del piloto es:
$Visu_axe$.FB_DriveStatus.ErrorStop
La variable Visu_axe es un marcador o variable de intercambio y se llama Visu_axe porque nosotros hemos
decidida llamarla as, de momento no significa nada, cuando esta pantalla sea llamada desde una pantalla
de visualizacin principal como si de otro control se tratara veremos la verdadera utilidad de la variable
Visu_axe.
Es posible emplear cuantos marcadores o placeholders deseemos ya que es posible que una pantalla de
visualizacin secundaria haga uso de bloques de funciones que se encuentren en secciones de programa
distintas. En este caso utilizaremos tres tipos distintos de placeholders.
Los dos siguientes Placeholder se encuentran en los siguientes lugares:
Placeholder: Visu_titulo
Placeholder: Visu_pos
Ahora compilamos el programa y ya tenemos creada la pantalla de visualizacin secundaria que, en este
caso, incluye tres Placeholders:
Visu_axe
Visu_titulo
Visu_pos
pgina 150/180
Knowledge Base
www.infoPLC.net
En el apartado anterior creamos una pantalla secundaria utilizando tres placeholders. Ahora veremos como
se emplean estos placeholders de modo que la misma pantalla secundaria se utilice para mostrar
informacin de dos ejes distintos.
Los pasos seran los siguientes
1. Crear una pantalla de visualizacin nueva.
2. Aadir a la nueva pantalla un control de nombre el de la pantalla de visualizacin secundaria.
3. Repetimos la operacin aadiendo un segundo control idntico. De esta forma tendremos dos
controles uno para cada uno de los dos ejes que vamos a utilizar.
pgina 151/180
Knowledge Base
www.infoPLC.net
4. Hacemos doble clic sobre el objeto de la izquierda y aparecer una caja de configuracin del objeto.
Recordar que aunque esta pantalla de visualizacin secundaria se encuentra formada por mltiples
objetos estos no son accesibles cuando se llama como control desde otra pantalla de visualizacin:
5. Pulsamos sobre el botn Placeholder y observamos como en la ventana que aparece se muestran
precisamente los tres Placeholders que anteriormente hemos creado. Ahora vamos a asignar
variables a los tres:
pgina 152/180
Knowledge Base
www.infoPLC.net
Como se ha visto en el apartado anterior a la hora de configurar el piloto relativo al Paro Emergencia
pusimos como variable que afectaba a su color la siguiente sentencia:
$Visu_axe$.FB_DriveStatus.ErrorStop
No obstante, vemos que a la hora de configurar los Placeholders desde la pantalla de visualizacin principal
configuramos el Placeholder Visu_axe como Main.Gest_X para el control relativo a la pantalla de
visualizacin secundaria de la izquierda y Main.Gest_Y para el de la derecha.
Es decir, en realidad el piloto Paro Emergencia del control de la izquierda se iluminar segn el valor de la
variable Main.Gest_X. FB_DriveStatus.ErrorStop mientras que el de la derecha lo har segn el valor de
la variable Main.Gest_Y. FB_DriveStatus.ErrorStop.
pgina 153/180
www.infoPLC.net
Knowledge Base
Main.Gest_X
Main.Gest_Y
Main.Gest_X.FB_DriveStatus.errorstop
o
Main.Gest_Y.FB_DriveStatus.errorstop
El segundo Placeholder, como es Eje X para el control izquierdo y Eje Y para el derecho se toman como
constantes tipo string ya que no figuran como salidas de ningn bloque de funciones.
pgina 154/180
Knowledge Base
www.infoPLC.net
Respecto al campo indicador de posicin del eje la variable utilizada era $Visu_pos$.Position cuando
creamos la pantalla de visualizacin secundaria pero como a la hora de definir los Placeholder asignamos
Main.FB_PosicionX para el control izquierdo y Main.FB_PosicionY para el derecho tenemos que en
realidad el control izquierdo muestra el valor de Main.FB_PosicionX.Position y el derecho
Main.FB_PosicionY.Position.
Estos controles se encuentran en el programa principal:
El resultado es que al arrancar el programa ambos controles muestran informacin distinta: el de la izquierda
muestra informacin relativa al eje X mientras que el de la derecha al Y. No hemos tenido que crear dos
pantallas idnticas cada una con las variables de un eje u otro sino que slo hemos creado una nica
pantalla de visualizacin genrica que posteriormente hemos reutilizado para mostrar informacin de uno u
otro eje segn nos convena:
pgina 155/180
Knowledge Base
www.infoPLC.net
Hacemos clic tanto en el objeto cuyo texto es Desactivado como en el que es Activado y modificamos la
celda Invisible dentro de la seccin Variables introduciendo como variable Activar la cual se encuentra
declarada dentro del programa Main.
Como se observa en el caso del objeto Desactivado ser invisible cuando la variable Activar se encuentre
a TRUE mientras que el objeto Activado funcionar a la inversa porque la variable utilizada, la misma usada
en el otro objeto, se encuentra negada con la instruccin NOT. Si ahora arrastramos el objeto Activado
sobre el Desactivado (uno encima del otro) parecer que el texto cambia segn el valor de la variable
Activar.
pgina 156/180
Knowledge Base
www.infoPLC.net
2.- Posteriormente seleccionamos Color y mediante el uso de los botones Inside modificamos el Color y el
Alarm Color en verde y rojo respectivamente:
Cuando .Main.Activar sea TRUE como la expresin se encuentra negada el equivalente ser FALSE y por
tanto no se cambiar el color, el color por defecto ser Verde. Cuando .Main.Activar sea FALSE el valor
negado ser TRUE y se cambiar el color del crculo al color que se haya definido como Alarm Color, en
este caso Rojo. Por tanto, segn el valor de la variable asociada el icono que representa un piloto cambiar
a Verde para indicar que el eje se encuentra activado o bien a Rojo para indicar que se encuentra
desactivado.
pgina 157/180
Knowledge Base
www.infoPLC.net
pgina 158/180
Knowledge Base
www.infoPLC.net
pgina 159/180
Knowledge Base
www.infoPLC.net
OJO: La ejecucin no tiene lugar en tiempo de ejecucin por lo que si las dos ltimas lneas fueran:
.Main.IndOrden:=1
.Main.IndSecuencia:=.Main.Orden[.Main.IndOrden]
El sistema no actualizar el valor de la variable .Main.IndOrden hasta el siguiente ciclo de scan y por tanto
el valor de .Main.IndSecuencia no sera correcto ya que .Main.Orden[.Main.IndOrden] posiblemente no
valga lo mismo que .Main.Orden[1] aunque una lnea antes se ha ordenado que .Main.IndOrden:=1.
pgina 160/180
Knowledge Base
www.infoPLC.net
Icono Bitmap
Para la creacin de un objeto bitmap hay que seguir los siguientes pasos:
1. Seleccionar la herramienta Bitmap en la barra de iconos superior.
2. Hacer clic con el ratn sobre la pantalla de visualizacin y sin soltar arrastrar el ratn hasta que el
cuadro dibujado posea las dimensiones deseadas para el bitmap que se desea incluir.
3. Al soltar el botn se abrir una ventana donde podremos escoger el bitmap.
4. El bitmap quedar incorporado al objeto aadido a la pantalla de visualizacin, si no posee las
dimensiones adecuadas podemos redimensionarlo mediante el uso del ratn.
Podemos ir modificando las propiedades del objeto bitmap recin importado haciendo doble clic sobre l.
Ruta donde se encuentra el bitmap.
Con el botn Transparent Color podemos
seleccionar uno de los colores del bitmap y
hacer que este sea transparente activando
la opcin Background transparent.
Muestra u oculta los mrgenes del bitmap.
pgina 161/180
Knowledge Base
www.infoPLC.net
Una vez creada podemos modificar su nombre situndonos sobre la nueva carpeta, pulsando el botn
derecho del ratn y seleccionando la opcin Cambiar nombre del objeto. Llamaremos Plantillas a la
nueva carpeta.
pgina 162/180
Knowledge Base
www.infoPLC.net
A continuacin iremos creando una serie de pantallas de visualizacin individuales y las iremos
introduciendo en la nueva carpeta Plantillas. En el presente ejemplo disponemos de hasta cuatro pantallas
(SQ_Datos, SQ_Grafica, SQ_Info y SQ_Tareas) introducidas en la carpeta Plantillas. Una vez creadas
vamos a utilizarlas dentro de otra pantalla de visualizacin general a la que llamaremos SQ_Secuencia y que
se encuentra fuera de la carpeta Plantillas:
Hacemos doble clic sobre SQ_Secuencia y empezaremos a llamar al resto de pantallas de usuario ya
creadas. Para ello se pulsa sobre el icono Visualizacin y se crea una nueva visualizacin .
pgina 163/180
Knowledge Base
www.infoPLC.net
Observar en la imagen anterior como al soltar el ratn tras dibujar un objeto de visualizacin aparece un
listado de visualizaciones disponibles donde se encuentran las cuatro que hemos creado anteriormente con
lo que podemos aadirlas en una nueva pantalla de visualizacin con la ventaja de que pueden ser
empleadas varias veces y en distintas pantallas. De las cuatro pantallas creadas utilizaremos la llamada
SQ_Tareas para incluirla dentro de la pantalla de visualizacin SQ_Secuencia:
Aadiremos el resto de pantallas individuales superpuestas unas encima de las otras a la izquierda de la
anterior y crearemos unos rectngulos que harn de botones que nos permitirn navegar entre ellas:
pgina 164/180
Knowledge Base
www.infoPLC.net
Desde esta nica pantalla de visualizacin podemos controlar la totalidad de la aplicacin de una forma ms
cmoda, rpida y sencilla.
pgina 165/180
Knowledge Base
www.infoPLC.net
11.1.- Exportacin
Tras seleccionar la opcin Exportar se abrir una ventana donde se nos preguntar que queremos exportar
y si queremos generar un nico fichero de exportacin o varios (indicamos que queremos exportar todo y
que slo nos interesa un nico fichero de exportacin). Tras pulsar el botn Aceptar se abrir otro cuadro
donde se nos preguntar con que nombre queremos exportar el fichero de proyecto en formato ASCII
(observar que tendr extensin EXP) lo cual tendr lugar tras pulsar sobre el botn Guardar.
pgina 166/180
Knowledge Base
www.infoPLC.net
El fichero creado tiene una estructura bastante particular cuyo anlisis escapa del cometido del presente
documento pero dado que es un formato ASCII puede ser descifrado y posteriormente editado mediante
programas externos para, por ejemplo, automatizar la creacin de programas desde un entorno ms
amigable que Codesys.
Por ejemplo, en la imagen siguiente, puede verse un programa denominado Habilitar formado por un FB con
dos nicas entradas (Run e Izquierdo).
La seccin del archivo en formato ASCII que describe este mismo programa es el siguiente:
(* @NESTEDCOMMENTS := 'Yes' *)
(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
PROGRAM Habilitar
VAR
Lexium15: MC_Power;
END_VAR
VAR_INPUT
Run: BOOL;
END_VAR
(* @END_DECLARATION := '0' *)
_CFC_BODY
_ELEMENT
_ID: 12
_MACROID: -1
_POS: 4, 3
_TYPE: _INPUT
_TEXT: Run
_NEGATE: 0
_CONNECTOR:
_END
_ELEMENT
_ID: 10
_MACROID: -1
_POS: 8, 1
_TYPE: _BOX
_INSTANCE: 1
_INSTANCENAME: Lexium15
_TYPENAME: MC_Power
_ENENO: 0
_INPUTS: 4
_IN
_INPUTID: 12
_INPUTIDX: 0
_NEGATE: 0
_END
_IN
_INPUTID: 12
_INPUTIDX: 0
_NEGATE: 0
_END
_IN
_INPUTID: 12
_INPUTIDX: 0
_NEGATE: 0
_END
_IN
_INPUTID: 11
_INPUTIDX: 0
_NEGATE: 0
_END
_OUTPUTS: 3
_OUT
_NEGATE: 0
_CONNECTOR:
_END
_OUT
_NEGATE: 0
_CONNECTOR:
_END
_OUT
_NEGATE: 0
_CONNECTOR:
_END
_PARAMETERS: 0
_END
_ELEMENT
_ID: 11
_MACROID: -1
_POS: 6, 6
_TYPE: _INPUT
_TEXT: Izquierdo
_NEGATE: 0
_CONNECTOR:
_END
END_PROGRAM
pgina 167/180
www.infoPLC.net
Knowledge Base
11.2.- Importacin
Para importar un fichero previamente grabado (o creado) en formato ASCII tienen que tenerse en cuenta
ciertas normas bsicas:
1. Debe abrirse un nuevo proyecto vacio definiendo el tipo de PLC que se controlar el cual debe
coincidir con el mismo PLC que controla el proyecto ASCII (de lo contrario existirn libreras que no
sern cargadas adecuadamente). Si el fichero ASCII corresponde a un proyecto pensado para
Lexium Controller V01 ha de abrirse Codesys para controlar un Lexium Controller V01.
2. Tras crear el nuevo proyecto en Codesys debe eliminarse todo programa creado automticamente:
Eliminar
Programa
pgina 168/180
Knowledge Base
www.infoPLC.net
3. Eliminar todas las libreras que se crean por defecto ya que las referencias a las libreras utilizadas
se encuentran en el fichero ASCII y podran darse problemas en las versiones de las libreras
utilizadas en el proyecto vacio y en el proyecto a cargar.
Eliminar
Libreras
4. Por ltimo hay que indicar a Codesys las rutas de todas las libreras utilizadas en el archivo ASCII ya
que de lo contrario no podrn ser encontradas. Esto se hace desde el men Proyecto y opcin
Opciones:
Aadir ruta
Libreras
pgina 169/180
Knowledge Base
www.infoPLC.net
5. Llegados a este punto ya puede cargarse el proyecto en formato ASCII mediante la opcin Importar
del men Proyectos.
6. Antes de compilar el programa recin importado hay que vigilar que las opciones de compilacin
sean las deseadas pues estas no se guardan en el proyecto ASCII cuando se exporta. En especial
prestar especial atencin a la opcin Compilar LREAL como REAL ya que debera estar
seleccionada y no lo est cuando se importa un fichero ASCII
pgina 170/180
www.infoPLC.net
Knowledge Base
12.- COMUNICACIONES
En este captulo se irn tratando de las formas conocidas de comunicar un elemento externo con la Lexium
Controller de modo que puedan intercambiarse datos. Hay varias formas:
Todos los modelos de Lexium Controller disponen de serie de un puerto RS485 que actua como Esclavo de
Modbus y que puede ser utilizado para conectar distintos tipos de perifricos.
Puerto RS485
Herramienta de Programacin: Cable PowerSuite (Ref. VW3A8106)
Conexin HMI: Rango de cables Magelis.
Terminal Grfico Remoto: Cable Terminal ATV71
Opcin Bluetooth
Solucin completa de cableado incluyendo repartidores y derivaciones
Las caractersticas del puerto pueden alterarse desde la pestaa Recursos y la opcin Explorador PLC.
Lnea de
comandos
Ventana
Respuestas
En la lnea de comandos podremos utilizar las siguientes posibilidades para ajustar el puerto RS485:
Mbusinf :
Mbaddr<n>:
Mbusbaudrate <baud>:
Para todas las configuraciones el protocolo utiliza 8 bits de datos, sin paridad y 1 bit de stop
pgina 171/180
www.infoPLC.net
Knowledge Base
Para poder acceder a las diferentes variables, bien para modificar su valor bien para leerlo, es preciso,
primero, direccionarlas adecuadamente:
Variable de
programa
Como se observa, para direccional variables estas deben ser Globales y utilizarse la instruccin AT para
vincular una variable de programa con un registro de memoria que ser el que utilizar el elemento remoto
para la comunicacin.
Notar como aunque la variable se asigna a un registro de tipo WORD, la variable puede definirse como INT a
fin de poder trabajar con nmeros negativos. En el ejemplo tambin se observa un ejemplo de acceso al bit y
que todos los direccionamientos se realizan iniciando las variables con algn valor por defecto.
Por poner un simple ejemplo a lo detallado en el apartado anterior para conectar un Terminal HMI va
Modbus RTU a travs del puerto RS485. La direccin del equipo destino, el LMC, puede especificarse desde
el Explorador PLC (en este caso se ha fijado a 2)
pgina 172/180
www.infoPLC.net
Knowledge Base
El protocolo I/O Scanning es un protocolo Modbus sobre TCP/IP que permite intercambiar 10 palabras de
entrada y 10 de salida de forma cclica entre la LMC y un dispositivo remoto que admita este servicio.
Read
Write
Ethernet TCP/IP
Write
Read
ETH_O0 AT %QW2
ETH_I0 AT %IW2
ETH_O1 AT %QW3
ETH_I1 AT %IW3
ETH_O10 AT %QW12
ETH_I10 AT %IW12
Para configurar correctamente este servicio primero hay que configurar en el navegador de dispositivos la
existencia de este servicio:
pgina 173/180
www.infoPLC.net
Knowledge Base
Ir a pestaa Recursos.
Doble clic sobre Configuracin del Mando.
Botn derecho sobre icono Lexium Controller V01.
Seleccionar Anexar Subelemento.
Escoger Ethernet.
Tras aadir el subelemento Ethernet tendremos disponibles 10 palabras de entrada y 10 de salida que
podremos configurar como deseemos. Por defecto estas 10 palabras tienen asignado un nombre que a
todos los efectos se comporta como una variable global ETH_I0 a ETH_I10 para las entradas y ETH_O0 a
ETH_O10 para las salidas:
10 I/O de
intercambio con un
PLC con servicio I/O
scanner
Ahora se debera configurar el PLC, el cual puede ser cualquiera que ofrezca el servicio I/O Scanning:
MB addr
LMC
Premium/M340
ETH_I0
%MW100
ETH_I1
%MW101
ETH_I10
%MW110
ETH_O0
%MW0
ETH_O1
%MW1
ETH_O10
%MW10
pgina 174/180
Knowledge Base
www.infoPLC.net
Por ltimo hay que activar el servicio desde el Servidor Web de la LMC. Para ello utilizaremos cualquier
navegador de Internet y accederemos al Servidor Web de la LMC mediante su IP:
USER por
defecto
pgina 175/180
Knowledge Base
www.infoPLC.net
Y por ltimo podremos activar o desactivar el servicio desde programa Motion Pro mediante la variable
IOScan_Activation que se crea automticamente al aadir el subelemento Ethernet dentro de la categora
Ethernet Parameters:
pgina 176/180
www.infoPLC.net
Knowledge Base
Incorrecto
Correcto
La solucin parece ser la seleccin de la opcin Apply to all visual elements dentro de la seccin Security.
pgina 177/180
Knowledge Base
www.infoPLC.net
En ocasiones tras arrancar el programa mediante F5 (Run) todo parece ir bien y de pronto el PC deja de
comunicar con el Lexium Controller. Cualquier intento posterior de conexin es intil y slo queda apagar el
Lexium Controller para que ste pierda el programa y volver a transmitrselo.
Se ha detectado que esto puede ocurrir cuando el programa posee un error que no es de sintaxis (los
errores de sintaxis generalmente aparecen a la hora de compilar) como por ejemplo intentar acceder a un
ndice inexistente de un array o una divisin entre 0.
En estos casos se recomienda aadir un Breakpoint y analizar el comportamiento del programa lnea a lnea
(ejecucin paso a paso) hasta localizar primero la seccin y luego la instruccin donde se produce el error.
En programas muy sencillos se suele producir un error extrao en los Lexium05 tras ponerlos en RUN. Esto
suele presentarse cuando justo despus de encontrarse en RUN se intenta alguna operacin de transmisin
de informacin por el bus CAN o ejecutar una instruccin que implique movimiento.
La solucin es aplicar un retardo tras recibir el OK de Lexium05 involucrados antes de proseguir con
secciones de programa que impliquen comunicaciones o movimientos:
pgina 178/180
Knowledge Base
www.infoPLC.net
Se ha detectado que una vez compilado un programa a la hora de transmitirlo hacia la LMC la transmisin se
corta antes de finalizar generndose una prdida de comunicaciones general y necesitndose realizar un
reset de la LMC antes de volver a intentar una comunicacin con ella.
Este tipo de fallo suele presentarse cuando se utiliza un EDS y la primera direccin declarada no es correcta.
En la imagen que se observa a continuacin vemos que la primera direccin es %QB1 pero aunque a priori
parece correcta porque el programa compila correctamente en la prctica la LMC no lo acepta.
La primera palabra aceptable se puede calcular fcilmente cogiendo la primera palabra en formato Double,
%QD1 (de 32 bits), haciendo la equivalencia primero a Word, %QW2 (de 16 bits), y finalmente a Byte,
%QB4 (de 8 bits). As pues la primera palabra en formato Byte no puede ser %QB1 sino %QB4
Como en este caso %QB1 forma parte de las direcciones de salida modificamos a mano dicha direccin
introduciendo %QB4 en lugar de %QB1 y recompilamos para mover el resto de direcciones. A partir de aqu
los diferentes EDS que se vayan aadiendo, al direccionarse secuencialmente a partir de la ltima direccin
utilizada, no presentarn este problema.
pgina 179/180
Knowledge Base
www.infoPLC.net
Se ha detectado que al utilizar para definir una tabla CAM la estructura SMC_CAMTable_UINT_128_2 o
cualquiera similar que utilice valores enteros (no decimales) el eje, al tener que seguir valores no reales sino
redondeados, se desplace respecto al eje maestro de forma anmala, como a golpes. Esto es as porque al
redondear los valores el comportamiento no sigue lo que la teora marca. Observar por ejemplo las
siguientes tablas:
La de la derecha es igual que la de la izquierda solo que se toman los valores como enteros en lugar de
cmo reales por lo que el eje, al intentar seguirlos, tendr un error. En los primeros puntos, por ejemplo, el
eje esclavo debera desplazarse pero sin embargo al tomar los valores como enteros en realidad se queda
quieto. Esto es tanto ms evidente cuanto ms altas sean las unidades de usuario: si se trabaja con dcimas
de milmetro la vibracin se notar menos que si se trabaja con milmetros.
Lo recomendable, en estos casos es trabajar con estructuras de tablas CAM que permitan nmeros
decimales, por ejemplo: SMC_CAMTable_LREAL_128_2.
NOTA : No utilizar la estructura SMC_CAMTable_REAL_128_2 pues el comportamiento es totalmente
errneo (si bien al compilar el programa no se genere ningn tipo de error de compilacin).
pgina 180/180