67% encontró este documento útil (3 votos)
2K vistas50 páginas

Programacion en Ipos

Programacion en IPOS

Cargado por

Jose Requena
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
67% encontró este documento útil (3 votos)
2K vistas50 páginas

Programacion en Ipos

Programacion en IPOS

Cargado por

Jose Requena
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 50

MANUAL DE PROGRAMACION IPOS®

PROGRAMACION EN IPOS - CONTROL DE MOVIMIENTO DE


MOTORES Y SERVOS – NIVEL I

I. INTRODUCCION.

SEW EURODRIVE utiliza un entorno de programación -basado en lenguaje C- llamado IPOS®.


Este programa IPOS® está contenido dentro de la plataforma MOVITOOLS MOTION STUDIO®
que es el software principal para el acceso a casi todos los productos electrónicos de SEW
EURODRIVE.

IPOS® es una potente herramienta de trabajo para expandir las capacidades de un variador de
frecuencia sin llegar a la necesidad de usar un PLC. Al estar basado en un lenguaje de
programación de texto y no de un entorno grafico requiere: acumular experiencia, tener
paciencia, ser ordenado al escribir los códigos y perder el miedo a programar ☺ ¡!.

Con IPOS® y los modelos de variadores MOVITRAC® 07B y MOVIDRIVE® MDX61B podemos
hacer trabajos de control de velocidad, de posición o de torque con los motores o 1
servomotores AC que requieran ejecutar un trabajo, “función” o secuencia especial más allá
de lo que se puede conseguir con los parámetros normales de un variador. Con IPOS® somos
los “artistas” que creamos algo desde la nada.

Figura 1. De Izquierda a Derecha, modelo de variador MOVITRAC® 07B y MOVIDRIVE®


MDX61B, ambos son los únicos modelos de variadores de SEW EURODRIVE con capacidad de
programación.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

II. CONTROL DE VELOCIDAD, CONTROL DE POSICION Y CONTROL DE TORQUE.

Antes de empezar a programar un variador debemos identificar QUÉ debe hacer el eje de
nuestro motor o servomotor que asociado -en muchos casos- a una transmisión mecánica
(acople a un cuerpo, una caja reductora, cadenas, poleas o fajas de cualquier tipo, etc.) logra
hacer el movimiento del cuerpo que nos interesa mover.

NOTA1: Con el eje de un motor podemos controlar tres cosas: velocidad, posición o torque. El
truco es identificar cuál de esas tres es lo que se requiere para la aplicación del motor que será
controlado por nuestro variador de frecuencia.

En CONTROL DE VELOCIDAD nos interesa hacer que el cuerpo que vamos a controlar mantenga
una referencia de velocidad (que puede ser m/mit, RPM o cualquier unidad de proceso), esto
implica que el eje del motor o servomotor girara los RPM que sean necesarios hasta alcanzar el
valor indicado por la referencia y mantenerse en ese valor. La referencia puede ser una señal
analógica, una señal de comunicación (Process data) desde un PLC o una consigna fija de
velocidad prefijada. Según la precisión que necesitemos para “aceptar que nuestro control de
velocidad es bueno” se debe considerar el uso de un encoder que valide que el motor o
servomotor alcanzo la velocidad objetivo dado por la referencia.

En CONTROL DE POSICION nos interesa hacer que el cuerpo que vamos a controlar mantenga o 2
alcance una posición fija. Estas posiciones de referencia pueden ser angulares (grados) o
longitudinales (mm, cm o metros). Dependerá mucho de la calidad de como el eje del motor
este acoplado al mecanismo, que hará mover al cuerpo que debe ser posicionado, para decir
que el posicionamiento es bueno. En control de posición la referencia por lo general es un dato
de entrada que el usuario debe definir. Para SEW EURODRIVE el control de posición siempre
será con el uso de sensores como encoder o resolver que deben ir instalados en el eje del
motor. El encoder o resolver envían PULSOS al eje variador de frecuencia quien interpretara
esos pulsos y mediante IPOS los podremos utilizar para el programa que debemos realizar.

NOTA2: En IPOS®, la lectura de un encoder o resolver cuando el eje da 1 revolución será


SIEMPRE de 4096 pulsos. Es decir para IPOS  360 GRADOS = 4096 PULSOS.

Figura 2. De Izquierda a Derecha, un encoder y un resolver usados en los motores o


servomotores de SEW EURODRIVE.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

En CONTROL DE TORQUE nos interesa hacer que el cuerpo que vamos a controlar trabaje con
un torque mecánico determinado. Sabemos que al girar el motor o servomotor este aparte de
entregarnos RPM también nos entrega una “fuerza” que permite que el cuerpo que está
asociado al eje del motor también gire. De nada nos servirá tener una altísima velocidad en el
eje del motor si no tenemos la capacidad de “mover” el cuerpo que queremos, para ello
necesitamos TORQUE. Hay un grupo de aplicaciones donde “activar” o “controlar” o “regular”
el torque disponible en el motor nos es conveniente. Aplicaciones como el proceso de bobinar
o de-bobinar son ejemplos típicos, ya que la masa del cuerpo que estamos bobinando o de-
bobinando va cambiando en el tiempo y por tanto el mismo torque que se requiere para la
aplicación cambia. Al igual que sucede con el control de velocidad, en el control de torque
también necesitamos una “referencia de torque” que haga que el eje del motor o servomotor
entregue el torque mecánico que necesitamos hasta el TORQUE MAXIMO disponible en el
diseño del mismo motor o servomotor.

RECORDAR: NO es posible que mediante un variador de frecuencia o por programación,


logremos que un motor o servomotor entregue o manifieste más torque que aquel para el cual
ha sido diseñado. Esto quiere decir que si un motor fue diseñado para entregar 10 Nm de
torque mecánico solo podemos aspirar a dar 10Nm y NO MÁS, bajo el riesgo de QUEMAR el
bobinado del motor. El torque mecánico que obtenemos en el eje de cualquier motor eléctrico
es consecuencia de la cantidad de corriente que circula por las bobinas del motor, si el motor 3
es sobre-exigido por la aplicación para entregar más torque, entonces circulara más corriente
por las bobinas del motor.

NOTA3: En IPOS®, la aplicación de control de torque solo es posible con los variadores
MOVIDRIVE® MDX61B y es obligatorio el uso de encoder o resolver en nuestros motores y
servomotores.

Figura 3. Aplicación de bobinado y de-bobinado, ejemplo típico de control de torque.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

III. COMO INGRESAR AL ENTORNO DE PROGRAMACION IPOS®.

Para acceder a IPOS® debemos realizar los siguientes pasos previos:

Paso1. Hacer click en el icono de la plataforma MOVITOOLS MOTION STUDIO

Paso2. Una vez activa la plataforma MOVITOOLS MOTION STUDIO, se nos consultará si
queremos abrir un proyecto que hayamos trabajado o si queremos crear un proyecto
nuevo. Según sea el caso escogemos cualquiera de las 2 opciones. Si creamos un proyecto
nuevo debemos asignarle un nombre y una ruta dentro de nuestra PC.

Figuras 4 y 5. Creación de un proyecto en la plataforma MOVITOOLS® MOTION STUDIO.

Paso3. Si creamos un proyecto nuevo, corresponde ahora que el programa MOVITOOLS®


MOTION STUDIO identifica al variador con el cual vamos a trabajar. Para ello debemos
escoger el puerto de comunicación SERIAL y luego SCANEAR hasta que se detecte el
variador.

Figura 6. Proyecto creado en MOVITOOLS® MOTION STUDIO.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 7. Hacer click en el icono resaltado en color rojo para configurar el canal de
comunicación entre la PC y el variador.

Figura 8. En el menú emergente escoger SERIAL como puerto de enlace entre nuestra PC
de programación y el variador al que vamos a programar, luego aceptar con el botón OK.
5

Figura 9. Hacer click en el icono resaltado para ”buscar - escanear” al variador con el
puerto que hemos configurado.

Finalmente el variador aparecerá como en la siguiente imagen:

Figura 10. Variador reconocido después de hacer el SCAN.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Paso 4: Antes de activar el programa IPOS®, es conveniente hacer el START-UP del motor o
servomotor que vamos a trabajar y dejar configurado el modo de operación (Control de
Velocidad, de Posición o de Torque) que necesitamos dentro de árbol de parámetros del
variador.

Figuras 11 y 12. Haciendo click derecho en el icono del variador aparecerá un menú
emergente, dentro de la opción Startup encontramos un sub-menú para realizar la puesta
en marcha del motor o servomotor y para acceder al árbol de parámetros del variador.

Figura 13. Vista del árbol de parámetros del variador, en la figura se muestran dos
ventanas: para configurar las entradas digitales (P600 al P606) y para configurar el modo
de operación en control de velocidad, en control de posición o control de torque (P700).

Paso 5: Activamos el programa IPOS como se muestra en la siguiente imagen.

Figura 14. Haciendo click derecho en el icono del variador y en la opción PROGRAMMING
accedemos al entorno de programación IPOS®.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 15. Pantalla típica de IPOS®, aquí se programara en un lenguaje de texto que usara
variables y comandos especiales propios de los variadores SEW EURODRIVE.

IV. DENTRO DEL ENTORNO DE PROGRAMACION IPOS®.


Cuando se ingresa a IPOS® debemos crear un proyecto que contendrá todos los
programas que se vayan a crear. Luego de creado el proyecto, se deben ir
7
agregando los archivos (files) donde escribiremos los programas. Las siguientes
imágenes ilustran estos pasos.

Figura 16. En el menú FILE escoger NEW y luego PROJECT.

Figura 17. Al proyecto que estamos creando hay que asignarle un nombre (p.e.
CLASE_IPOS) y una dirección donde se guardará el proyecto.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 18. El proyecto creado aparecerá como una raíz dentro del entorno IPOS®.

Figura 19. En el menú FILE escoger NEW y luego SOURCE FILE, con esto estamos añadiendo
“paginas” a nuestro proyecto donde empezaremos a escribir los códigos de programación.

Figura 19. El programa nos pide confirmar si deseamos añadir un SOURCE FILE al proyecto,
aceptamos con el botón SI.

Figura 20. Al SOURCE FILE que se está añadiendo al proyecto le asignamos un nombre.

Figura 21. Tras asignar un nombre al SOURCE FILE, nos aparecerá una ventana que nos
sugiere la creación de una estructura base (“un esqueleto”) para el programa con el que
trabajaremos, en esta venta una hay 4 opciones: Inicialización, Tarea 2 (TASK #2), Tarea 3
(TASK #3) e Interrupción (INTERRUPT). Para nuestros primeros programas solo activaremos
la opción INITIALIZATION PART.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

ZONA I: Cabecera

ZONA II: Inicialización

ZONA III: Principal

Figura 23. Finalmente nos aparecerá el SOURCE FILE o “pagina” donde empezaremos a 9
programar. En los recuadros de color rojo se han identificado tres zonas.

ZONA 1 – ZONA DE CABECERA: Aquí aparecerá siempre por defecto dos archivos:
“constb.h” y “iob.h”. El archivo “constb.h” agrupa internamente todas las palabras claves
propia para programar los variadores de SEW EURODRIVE, sin ese archivo sería imposible
invocar alguna instrucción especial que ya existe dentro de IPOS®. El archivo “iob.h”
agrupa internamente la designación para el programa de las entradas y salidas digitales del
variador de frecuencia. Adicionalmente en la zona de cabecera se acostumbra a designar
las variables disponibles y dar nombre a las entradas y salidas digitales o asignar
constantes.

IPOS® trabaja con un total de 1024 variables, dentro de los cuales existen un grupo de
variables no volátiles que no perderán su valor si se dejase de alimentar eléctricamente al
variador. Existe otro grupo de variables (H453 a la H580) que son variables que IPOS® ya
asignó una función específica (como por ejemplo obtener información de los encoder, del
estado de las entradas y salidas digitales, etc.)

NOTA4: Cuando se trabaja con el variador MOVITRAC® 07B se debe modificar los archivos
de cabecera “constb.h” y “iob.h” borrando la letra “b”, es decir en ese modelo de variador
los archicos de cabecera deben quedar de la siguiente forma: “const.h” y “io.h”

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

ZONA 2 – ZONA DE INICIALIZACION: Esta zona fue creada al momento de aceptar las
opciones que nos dio el programa en la figura 21. Aquí se acostumbra pre-cargar algunos
datos de inicio a variables o salidas digitales, todo eso como una medida de seguridad
básica para evitar movimientos inesperados del motor o servomotor al energizar al
variador de frecuencia.

ZONA 3 – ZONA DE TRABAJO: Esta zona es donde por lo general se agrega los códigos o
rutinas especiales que necesitamos para lograr el tipo de control (velocidad, posición o
torque) que necesitamos para nuestro motor o servomotor. Esta zona empieza desde la
línea con el texto while (1) { … y terminara con una llave de cierre }. Se debe tener mucho
cuidado en respetar las llaves de apertura { y las llaves de cierre } en las instrucciones que
las ameriten para evitar problemas en la ejecución del programa que estemos trabajando.

Como se ya se mencionó líneas arriba, IPOS dispone de una palabras, instrucciones o


“comandos claves” que le son propios para los variadores SEW EURODRIVE, el
conocimiento y correcto uso de esos comandos nos permitirán desarrollar las aplicaciones
satisfactoriamente. Existen dos caminos para ingresar esos “comandos claves”, el primero
es escribirlo directamente cosa que se logra con el uso de la memoria al usarlo esos
comandos constantemente y el segundo camino es accediendo vía un editor.

10

Figura 24. Icono que nos permitirá acceder al editor de los comandos especiales de IPOS®.

Figura 25. Ventana del editor de comando, en la sección SYSTEM FUNCTION se escogen los
comandos clave que vamos a utilizar en nuestro programa y en la sección SYSTEM
FUNCTION ARGUMENTS escogemos un dato adicional que acompaña al comando que
vamos a utilizar.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

V. LO NECESARIO PARA PROGRAMAR

Con la plataforma de IPOS® ya lista - ver figura 23- empezaremos a conocer los códigos
básicos de programación para ello se ha listado 16 objetivos y dentro de los mismos cuatro
programas con tareas específicas que irán combinando lo que se va ir aprendiendo.

Cuando cada objetivo o programa esté terminado se debe compilar el código de


programación, luego descargar ese código en el variador de frecuencia y finalmente dejar
al variador en modo RUN para que el programa IPOS® quede activo y grabado en el
variador de frecuencia. Las siguientes imágenes muestran cómo hacer esos pasos.

Figura 26. Botón para compilar el código escrito. Con este botón sabremos si
hemos cometido algún error al momento de escribir el programa.

11
Figura 27. Botón para descargar el código escrito en el variador de frecuencia,
también sirve para compilar el programa.

Figura 28. Botón para dejar al variador en modo RUN, al hacer esto el código que
se ha creado queda activo en el variador de frecuencia.

1. Definir Variables y Constantes.


Cuando definimos una variable estamos permitiendo que en una zona de memoria del
variador se puedan colocar datos de entrada o de datos de salida para ser utilizados en
la aplicación. A las variables les podemos asignar nombres que nos servirán para ser
utilizados libremente en cualquier punto del código. Las variables asumen una
dirección dentro de la lista de las 1024 variables disponibles en IPOS. Hay que recordar
que hay variables que están reservadas y a los cuales IPOS ya les designó un nombre y
una tarea específica. Las constantes son datos fijos que también se puede utilizar
como las variables en cualquier punto del programa, se escriben de igual manera que
las variables pero a las constantes no se les asigna ninguna dirección. En el siguiente
código se muestra un ejemplo de la definición de las variables y constantes en IPOS®.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Definición de variables
Definición de constantes

Programa 1. Definir variables y constantes

Con la instrucción #define asignamos nombres a las variables, estas a su vez deben

12
direccionarse a una zona de las variables H disponibles tal como se muestra en el
código, por ejemplo el texto #define VELOCIDAD H1 significa que hemos creado la
variable llamada velocidad cuyo valor se alojara en la variable H1. Con la misma
instrucción #define ZERO 0 hemos “asignado” el valor de “0” a la constante llamada
ZERO. Luego debemos compilar, descargar el código creado y dejar en modo RUN al
variador, para esos seguimos la secuencia de las figuras 26 a la 28.
Para visualizar las variables que vamos creando y poder escribirle o leer los valores que
queremos podemos usar el editor de variables.

Figura 29. El visualizador de variables se obtiene desde el menú DISPLAY y allí


tenemos dos opciones: Ver todas las variables (ALL VARIABLES) o solo escoger las
variables que nos interesan trabajar (VARIABLE WATCH).

Figura 30. Hechos los pasos de la figura 29, tendremos luego el visualizador de
variables, aquí podemos leer o asignarles un valor.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

NOTA5: Las variables que se usan en IPOS® son todas de tipo entero pudiendo ser
un entero positivo o negativo, NO SE PUEDE asignar valores con puntos decimales
a las variables IPOS®, pero si existen artificios de programación para poder trabajar
con decimales. Las variables pueden cambiar su lectura de número entero a
número binario.

Figura 31. Cambio de visualización de una variable H desde el formato entero al


formato binario haciendo click derecho sobre la variable aparecerá la opción
DISPLAY FORMAT y un menú donde escogemos el formato de lectura de la
variable.

2. Definir Entradas y Salidas Digitales. 13


Cada entrada o salida digital de un variador de frecuencia MOVITRAC® 07B o
MOVIDRIVE® MDX61B de SEW EURODRIVE puede ser utilizada dentro de los códigos
de programación de IPOS®. Para su uso en el árbol de parámetros del variador las
entradas o salidas deben ser asignadas como IPOS INPUT o IPOS OUTPUT.

Figura 32. Asignación de las entradas y salidas digitales como entradas y salidas de
programación tipo IPOS INPUT e IPOS OUTPUT en el grupo de parámetros P600 al
P606 para las entradas digitales y P620 al P624 para las salidas digitales.

Prepararemos un código donde asignaremos a tres entradas digitales como si


fueran selectores (ON/OFF) para representar un ARRANQUE, PARADA e
INVERSION de giro del motor o servomotor. Usaremos nuevamente la palabra
#define para la asignación de los nombres.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Definición de las entradas digitales ①

Programa 2: Trabajar con entradas digitales


① Con la instrucción #define nuevamente hemos asignado un nombre y la hemos
relacionado a una entrada digital. En nuestro ejemplo ARRANQUE se relacionó a la
entrada digital 1 DI01, PARADA se relacionó a la entrada digital 2 DI02 e 14
INVERSION se relacionó con la entrada digital 3 DI03. De igual forma podríamos
utilizar #define para nombrar salidas digitales, sin embargo para este manual de
programación usaremos más adelante otra instrucción para trabajar con las salidas
digitales activándolas o apagándolas según sea nuestra necesidad en el programa.
Luego debemos compilar, descargar el código creado y dejar en modo RUN al
variador, para esos seguimos la secuencia de las figuras 26 a la 28.

NOTA6: Así como hemos asignado una entrada digital con la instrucción #define
estamos simulando una entrada con un estado ON/OFF tal como si fuera un
selector. En el siguiente código definiremos las entradas como si fueran botones
normalmente abiertos o cerrados.

3. Definir una Entrada digital como un botón normalmente abierto y normalmente


cerrado.
En muchas aplicaciones no se usan selectores para definir el estado de una entrada
digital, lo que suelen usarse son botones que son normalmente abiertos o
normalmente cerrados. Para trabajar con este tipo de entrada digital con botones
debemos crear unos códigos que permitan enclavar en una memoria un estado lógico
que relacione el comportamiento del botón. El siguiente código muestra una forma de
cómo hacer el enclavamiento, el código puede ser un poco laborioso pero con un poco
de practica podemos usar un simple copiar y pegar para luego editar lo que
necesitamos para el funcionamiento de todos los botones que necesitemos.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>
#define VELOCIDAD H1
#define TIEMPO H2
#define ZERO 0

#define ARRANQUE DI01


#define PARADA DI02
#define INVERSION DI03

//Rutina de enclavamiento ①
#define BITS H100
#define START (H100 & 0b1)
#define STOP (H100 & 0b10)

#define Set_START _BitSet(H100,0)


#define Set_STOP _BitSet(H100,1)
#define Rst_START _BitClear(H100,0)
#define Rst_STOP _BitClear(H100,1)

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/

/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ if(ARRANQUE){ //Enclavamiento Botón de ARRANQUE ②

15
Rst_STOP;
Set_START; //Paso al estado START
}

if(PARADA){ //Enclavamiento Botón de PARADA


Rst_START;
Set_STOP; //Paso al estado STOP
}

if(START){
//Aquí deben ir las instrucciones asociadas al START ③
}
if(STOP){
//Aquí deben ir las instrucciones asociadas al STOP
}
} // fin de while(1)
} //fin de main()

Programa 3: Entrada digital como botón normalmente abierto y normalmente cerrado

①El código anterior nos presentó dos comandos nuevos: _BitSet que funciona para
colocar en “1” un bit de una variable, en nuestro caso con _BitSet (H100,0) estamos
colocando un “1” en el bit 0 de esa variable. _BitClear funciona para colocar en “0” un
bit de una variable, en nuestro caso con _BitClear (H100,0) estamos colocando un “0”
en el bit 0 de esa variable.
La rutina de enclavamiento funciona junto a una variable auxiliar – BITS H100 en
nuestro código- , es en esta variable donde hacemos operaciones lógicas de bits para
crear “estados” que se relacionen con la entrada digital de tipo botón normalmente
abierto o normalmente cerrado. ② Si tenemos un botón de ARRANQUE lo lógico es
pensar que al oprimirlo el motor entrará al estado de START, y si oprimimos el botón
de PARADA el motor entrara al estado de STOP, estos “estados” – START y STOP – se
van activar o desactivar según el botón que oprimamos ③.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Dentro de la zona de trabajo hemos usado la instrucción lógica if para poder


preguntarnos sobre el estado de la entrada ARRANQUE  if(ARRANQUE) significa: “si
hay un 1 LOGICO en la entrada digital DI01” entonces se ejecutara el código contenido
dentro de las llaves de:
if(ARRANQUE) {
Rst_STOP; //Desenclavo el estado STOP
Set_START; //Enclavo el estado START
}
Rst_STOP y Set_Start son las instrucciones que hemos creado para crear una memoria
de desenclave y enclave de los estados STOP y START usando a la variable BITS H100.
Conforme avancemos en los códigos veremos su utilización en un movimiento del
motor, por el momento no olvidar compilar, descargar el código y dejar al variador en
el modo RUN.

NOTA7: La instrucción if tiene un complemento llamado else que se usa en caso el


contenido del argumento sea falso. El código seria como sigue:

if(ARGUMENTO) {//instrucción 1 y 2 se ejecuta si ARGUMENTO es VERDADERO


instruccion1;
instruccion2;
}
else {//instrucción 3 y 4 se ejecuta si ARGUMENTO es FALSO
instruccion3;
instruccion4;
} 16
4. Trabajando con una señal analógica.
El variador de frecuencia MOVITRAC® 07B y MOVIDRIVE® MDX61B tienen una entrada
análoga por defecto y una segunda entrada análoga adicional que se habilita con una
tarjeta de expansión. Esta entrada puede recibir señales de 0-10V, -10 a +10V, 4-20mA
o de 0-20 mA. En IPOS® la entrada análoga es leída mediante una instrucción llamada
_GetSys y su valor debe ser guardado en una variable H que debemos nombrar.
Cuando leamos la entrada análoga su valor estará multiplicado por 1000, por ejemplo:
1Voltios  será leído como 1000 en una variable H
10Voltios será leído como 10000 en una variable H
0,1Voltio  será leído como 100 en una variable H.

El siguiente código muestra cómo trabajar con una entrada análoga y una salida
análoga.

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define VELOCIDAD H1
#define TIEMPO H2
#define REFERENCIA H3 // ①
#define ZERO 0

#define ARRANQUE DI01


#define PARADA DI02
#define INVERSION DI03

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®
//Rutina de enclavamiento
#define BITS H100
#define START (H100 & 0b1)
#define STOP (H100 & 0b10)

#define Set_START _BitSet(H100,0)


#define Set_STOP _BitSet(H100,1)
#define Rst_START _BitClear(H100,0)
#define Rst_STOP _BitClear(H100,1)

GSAINPUT SenalAnaloga; //Estructura para entradas análogas ②


GSAOUTPUT SalidaAnaloga; //Estructura para salidas análogas

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/

/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ _GetSys( SenalAnaloga,GS_ANINPUTS ); //Se lee las 02 entradas análogas ③
_GetSys( SalidaAnaloga,GS_ANOUTPUTS); //Se lee las 02 entradas análogas
REFERENCIA = SenalAnaloga.Input1; //Se guarda el valor de entrada análoga 1 en H3
SalidaAnaloga.Output1 = 1000; //Se Asigna un valor de 1 voltios a la salida análoga 1

if(ARRANQUE){ //Enclavamiento botón de ARRANQUE


Rst_STOP;
Set_START; //Paso al estado START
}

if(PARADA){ //Enclavamiento botón de PARADA


Rst_START;
Set_STOP; //Paso al estado STOP
}

17
if(START){

if(STOP){

}
} //fin de while(1)
} //fin de main()

Programa 4: Trabajando con una entrada y una salida análoga

En el código anterior añadimos una variable llamada REFERENCIA ① y la


direccionamos a la variable H3. Luego con la instrucción GSAINPUT y GSAOUTPUT
②creamos dos estructuras que reservarán 4 variables H para alojar los valores de las
señales análogas.

Figura 33. Con la instrucción GSAINPUT SenalAnaloga y GSAOUTPUT


SalidaAnaloga se asignaron dos variables para guardar las señales análogas
disponibles en los variadores MOVITRAC® 07B y MOVIDRIVE® MDX61B.

Dentro de la zona de trabajo principal escribimos la instrucción _GetSys para


obtener información interna del variador ③ en nuestro caso las señales
analógicas. Usando la ventana del editor de comandos asignamos a la instrucción
_GetSys el argumento GS_ANINPUTS y guardamos los valores leídos en la
estructura SenalAnaloga que se creó con GSAINPUT.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 34. Con el editor de comandos, añadimos la instrucción


_GetsSys(SenalAnaloga, GS_ANINPUTS).

Finalmente asignamos el valor de la señal análoga a la variable REFERENCIA =


SenalAnaloga.Input1; luego compilamos, descargamos el código y dejamos al
variador en modo RUN.

5. Como asignar velocidades a un motor. 18


La instrucción _SetSys nos permitirá pre-asignar una velocidad al motor. Esta velocidad
será tomada desde una variable H donde podemos escribir el dato de entrada
correspondiente y luego enviarla a un parámetro de velocidad prefijada N11 que será
el valor final de giro para nuestro motor. Esta asignación de velocidades será muy útil
cuando sea necesario cambiar automáticamente la velocidad de referencia del motor
por alguna condición lógica dentro del proceso o máquina, por ejemplo nos permite
invertir el giro sin necesidad de cambiar el cableado de potencia de un motor AC.
/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define VELOCIDAD H1
#define TIEMPO H2
#define REFERENCIA H3
#define ZERO 0

#define ARRANQUE DI01


#define PARADA DI02
#define INVERSION DI03

//Rutina de enclavamiento
#define BITS H100
#define START (H100 & 0b1)
#define STOP (H100 & 0b10)

#define Set_START _BitSet(H100,0)


#define Set_STOP _BitSet(H100,1)
#define Rst_START _BitClear(H100,0)
#define Rst_STOP _BitClear(H100,1)

GSAINPUT SenalAnaloga;

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{

/*-------------------------------------
Initialisation
--------------------------------------*/
ControlWord = 2; // Motor detenido ①
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ _GetSys( SenalAnaloga,GS_ANINPUTS );
REFERENCIA = SenalAnaloga.Input1;
if(ARRANQUE){ //Enclavamiento Boton de ARRANQUE
Rst_STOP;
Set_START; //Paso al estado START
}

if(PARADA){ //Enclavamiento Boton de PARADA


Rst_START;
Set_STOP; //Paso al estado STOP
}
if(START){
_SetSys( SS_N11,VELOCIDAD ); // Asignando velocidad al motor ②
ControlWord = 20;
}

if(STOP){
ControlWord = 0; //Motor deshabilitado ③
}
}
}

Programa 5: Como asignar velocidades a un motor.

La instrucción ControlWord es una de las variables H que el variador reserva para su


uso. El número de esta variable H es H484. Esta variable es un registro de 32 bits (del
bit 0 al bit 31) y cada bit asume una función. En el programa anterior hemos usado,
una suma ponderada de los bits que conforman esta variable:
19
ControlWord = 2; ① Esta asignación detiene rígidamente al eje del motor 21 = 2.
ControlWord = 20; ②Este valor permite el giro horario del eje del motor 22+24= 20
Pero en control de velocidad también es posible usar:
ControlWord = 0; ③Esta asignación detiene libremente (sin energía) al eje del motor.
ControlWord = 24; Este valor permite el giro antihorario del eje del motor 23+24= 20

La suma ponderada de cada bit (el valor de la potencia al cual es elevado el número 2)
activa directamente los bits que requerimos para nuestra aplicación. En la siguiente
imagen se muestra todos los bits y su asignación en la variable ControlWord.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 35. La variable H484 = ControlWord y los bits que tiene asignados. Para que un
motor gire es necesario asignarle una velocidad - eso es posible con la instrucción
_SetSys(N11,…)- y además se debe indicar el sentido de giro para la velocidad deseada,
por eso para hacer que nuestro motor se mueva en sentido horario u anti horario
debemos activar dos bits: el del sentido de giro (CW o CCW) y el de asignación de
velocidad (N11 o N12). Para detener el giro del motor podemos usar los bits 0 u 1, con
el primero el eje quedara libre y sin torque, con el bit 1 el eje quedara detenido pero
en velocidad cero (es equivalente a estar frenado).

6. Uso de Temporizadores.
20
IPOS® dispone de algunos comandos que nos permiten generar el mismo efecto de un
retardo con tiempo fijo, un retardo con tiempo variable, un temporizado ascendente y
temporizado descendente.

El retardo con tiempo fijo es una instrucción bastante sencilla de utilizar:


_Wait ( 1000);  esta código retarda que el programa avance en la siguiente línea de
programación en un tiempo de 1000 ms. Existe un valor máximo de tiempo de retardo
de 32000 ms, por encima de este valor el compilador de IPOS® nos enviará un error.
El retardo con tiempo variable es una instrucción más elaborada de utilizar e incluye
una variable de tiempo Timer_0  H489:
Timer_0 = TIEMPO;
While (Timer_0) { }
 Estas dos líneas de código retardan el avance del programa a la siguiente línea del
programa con un tiempo variable asignado a Timer_0. Esto quiere decir que ahora es
posible asignar tiempos de retardo o espera mucho mayores.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define VELOCIDAD H1 //Aquí ingresamos un valor de velocidad de referencia


#define TIEMPO H2 //Aquí ingresamos un valor de tiempo de retardo
#define REFERENCIA H3
#define ZERO 0

#define ARRANQUE DI01


#define PARADA DI02
#define INVERSION DI03

//Rutina de enclavamiento
#define BITS H100
#define START (H100 & 0b1)
#define STOP (H100 & 0b10)

#define Set_START _BitSet(H100,0)


#define Set_STOP _BitSet(H100,1)
#define Rst_START _BitClear(H100,0)
#define Rst_STOP _BitClear(H100,1)

GSAINPUT SenalAnaloga;
//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{

/*-------------------------------------
Initialisation
--------------------------------------*/
ControlWord = 2; //Instrucción para mantener al motor detenido "rígidamente"

/*-------------------------------------
Main Loop
--------------------------------------*/

21
while(1)
{ _GetSys( SenalAnaloga,GS_ANINPUTS );
REFERENCIA = SenalAnaloga.Input1;
if(ARRANQUE){ //Enclavamiento botón de ARRANQUE
Rst_STOP;
Set_START; //Paso al estado START
}

if(PARADA){ //Enclavamiento botón de PARADA


Rst_START;
Set_STOP; //Paso al estado STOP
}

if(START){
_SetSys( SS_N11,VELOCIDAD );
ControlWord = 20;
_Wait( 2000); // Retardo de 2000 ms = 2s ①
_SetSys( SS_N11, (2*VELOCIDAD) ); //Asigno una nueva velocidad
ControlWord = 20;
Timer_0 = TIEMPO; //El retardo dependerá del valor que en H2: TIEMPO
while(Timer_0) {}; //Retardo el código en una tiempo variable ②
}
if(STOP){
ControlWord = 0; //mantener al motor detenido "libremente"
}
} // fin de while (1)
} // fin de main()

Programa 6: Uso de Temporizadores.

En el código anterior se han agregado los dos tipos de retardos: uno con un tiempo fijo
con la instrucción _wait() y el otro con un retardo variable usando la variable H489:
Timer_0.
El código escrito nos permitirá que cuando se active el botón de ARRANQUE el
variador entre en el estado “START”, ① entonces por 2 segundos el motor girará con
la velocidad de referencia de la variable H1: VELOCIDAD y luego automáticamente el
motor girará al doble de la velocidad de referencia por un “tiempo modificable”
②que asignemos en la variable H2: TIEMPO.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

7. Programa de Control de Velocidad.


Hasta ahora hemos aprendido la mayoría de comandos suficientes para hacer un
programa de control de velocidad básico. Ya podemos asignar la velocidad de giro a un
motor con el comando _SetSys (SS_N11, xxx) y pedirle al motor que arranque o pare
escribiendo valores a la variable H484: ControlWord. También aprendimos a crear
variables + constantes, asignar nombres a las entradas digitales de nuestro variador y a
leer señales analógicas.

En el programa que hemos venido trabajando añadiremos una instrucción para que en
forma automática si se activa la entrada INVERSION el giro del motor se invierta y
tomando como referencia un escalamiento de velocidad según el valor de la señal
análoga de un potenciómetro. A su vez si el motor se encuentra en giro horario CW las
salidas digitales 1 y 2 del variador se encenderán y si el motor se encuentra en giro
antihorario CCW las salidas digitales 3 y 4 se encenderán.

La variable H481: StdOutpIPOS nos permite activar o desactivar las salidas digitales de
nuestro variador. Podemos usar las instrucciones _BitSet y _BitClear para activar una
salida especifica o usamos la “suma ponderada” como en el caso de ControlWord para
activar las salidas que necesitemos.
22

Figura 36. Variable H481 con la que podemos activar o desactivar las salidas digitales
de nuestro variador. Para que las salidas digitales funcionen con nuestro código
debemos configurarlas en el árbol de parámetros del variables como IPOS OUTPUT.

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define VELOCIDAD H1 //Velocidad de referencia en giro CW


#define TIEMPO H2 //Tiempo de retardo
#define REFERENCIA H3 //Recibe la señal análoga de un potenciómetro
#define VEL_CCW H4 //Velocidad de referencia en giro CCW ①
#define ZERO 0
#define VEL_MAX 2000 //Asignamos que la vel max del motor a 2000 rpm

#define ARRANQUE DI01 //Entrada digital para arrancar al motor


#define PARADA DI02 //Entrada digital para detener al motor
#define INVERSION DI03 //Entrada digital para invertir el giro del motor

//Rutina de enclavamiento
#define BITS H100
#define START (H100 & 0b1)
#define STOP (H100 & 0b10)
#define Set_START _BitSet(H100,0)
#define Set_STOP _BitSet(H100,1)
#define Rst_START _BitClear(H100,0)
#define Rst_STOP _BitClear(H100,1)

GSAINPUT SenalAnaloga;

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®
//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{

/*-------------------------------------
Initialisation
--------------------------------------*/
ControlWord = 2; //Instrucción para mantener al motor detenido "rígidamente"
StdOutpIPOS = 0; //Inicializo (Apago) todas las salidas digitales del variador ②
/*-------------------------------------

Main Loop
--------------------------------------*/
while(1)
{ _GetSys( SenalAnaloga,GS_ANINPUTS ); //Capturo la señal análoga
REFERENCIA = SenalAnaloga.Input1;
VEL_CCW = ((VEL_MAX * REFERENCIA)/ 10000)); //Escalando la velocidad ③

if(ARRANQUE){ //Enclavamiento botón de ARRANQUE


Rst_STOP;
Set_START; //Paso al estado START
}
if(PARADA){ //Enclavamiento botón de PARADA
Rst_START;
Set_STOP; //Paso al estado STOP
}
if(START){
_SetSys( SS_N11,(VELOCIDAD*10) );
ControlWord = 20;
StdOutpIPOS = 6; //Activo las salidas digitales del variador 1 y 2 ④
_Wait( 2000);
_SetSys( SS_N11, (2*VELOCIDAD*10) );
ControlWord = 20;
StdOutpIPOS = 6; //Activo las salidas digitales del variador 1 y 2 ⑤
Timer_0 = TIEMPO;
while(Timer_0) {};
if(INVERSION){ //Si se activó la entrada DI03: INVERSION

23
_SetSys( SS_N11, (VEL_CCW*10) ); //Velocidad para el giro anti-horario
ControlWord = 24; //Comando para la inversión de giro ⑥
StdOutpIPOS = 24; //Activo las salidas digitales del variador 3 y 4, se apaga 1 y 2
Timer_0 = TIEMPO;
while(Timer_0) {}; //Retardo el código en una tiempo variable
}
else{ //Si no se activó la entrada INVERSION
ControlWord = 20; //El giro del motor se mantiene CW
StdOutpIPOS = 6; //Activo las salidas digitales del variador 1 y 2
}
}

if(STOP){
ControlWord = 0;
StdOutpIPOS = 0; //Todas las salidas apagadas
}
} // fin de while(1)
} // fin de main()

Programa 7: Control de Velocidad.

Antes de probar el código anterior se hacer unas modificaciones en el árbol de


parámetros del variador tal como se muestra en la siguiente imagen.

Figura 37. Asignación de parámetros para que el programa que hemos preparado para
control de velocidad funcione correctamente.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Luego de compilar, descargar y dejar en modo RUN al variador probar el programa y


observar las modificaciones de velocidad que se dan en forma automática siguiendo la
secuencia del código:
Si se activa la entrada DI01:ARRANQUE el variador entrará en el estado RUN haciendo
que el motor gire a la velocidad asignada en la variable H1:VELOCIDAD ③ por un
tiempo de 2 segundos, al estar en giro horario CW se encenderán las salidas digitales 1
y 2 ④del variador. Luego de 2 segundos el giro del motor se incrementará al DOBLE
del valor de la variable H1: VELOCIDAD y este se mantendrá así hasta que se cumpla un
tiempo de retardo definido en la variable H2: TIEMPO, las salidas digitales 1 y 2
seguirán activas ⑤. Si estando en el estado RUN se llega a activar la entrada
DIO3:INVERSION ⑥el motor cambiará su sentido de giro a anti-horario CCW y tomará
como velocidad un valor escalado desde una fórmula que relaciona la señal análoga de
un potenciómetro y una velocidad máxima de giro del motor; se apagarán las salidas
digitales 1 y 2 y se encenderán las salidas digitales 3 y 4; el motor girará en sentido
anti-horario CCW hasta que se cumpla el retardo definido en la variable H2: TIEMPO,
terminada la secuencia el motor volverá a girar en sentido horario CW repitiendo el
ciclo. Si se activa el botón DI02: PARADA el motor se detendrá y todas las salidas
digitales del variador se apagarán.

NOTA 8: Es necesario que al valor de velocidad de referencia que escribimos en la


instrucción _SetSys( SS_N11, (VELOCIDAD*10) ) sea multiplicado por 10. Lo que
sucede es que si colocamos un valor de 100 el variador cargará como referencia de
24
velocidad 10.0 rpm y no 100 rpm. IPOS® no trabaja con números decimales por lo que
asigna en muchos casos un escalamiento interno para los dígitos decimales.

8. Lectura de los valores de los encoder.


A través de IPOS® tenemos una lectura constante de los encoder (o resolver) del motor
o servomotor que estamos trabajando. Estos es posible accediendo a las variables
H509, H510 y H511 que representan respectivamente la lectura en pulsos de un
encoder absoluto, la lectura de un encoder externo o la lectura en pulsos del propio
motor que estamos controlando. Es obligatorio tener acceso a la lectura de encoder
cuando trabajamos programas de control de posición y torque.

Figura 38: Variables H509, H510 y H511 para tener acceso a la lectura de encoder vía
pulsos por revolución.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 39: Vía el visualizador de variables podemos leer las variables H509, H510 y
H511. La variable H511 lee en tiempo real los pulsos de encoder o resolver.

Figura 40: Otra forma de leer los valores de los encoder y resolver es vía los
parámetros del mismo variador MOVIDRIVE MDX61B en el P003 Actual position.

Anteriormente utilizamos la opción _GetSys para obtener la lectura de la señal análoga 25


que le llega a un variador, con la misma instrucción _GetSys pero con el argumento
GS_ACTPOS conseguimos leer la posición actual del motor vía su encoder o resolver.

Figura 41: Una última forma de leer los valores de los encoder y resolver es vía la
instrucción _GetSys con el argumento GS_ACTPOS, esta información debe ser
guardada en una variable, en el ejemplo de la imagen se usó la variable H2.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

9. Programa de Control de Posición.


Control de posición en una forma especial de aplicación donde nos interesa alcanzar
posiciones objetivos (longitudinales o angulares) que la misma aplicación necesita
cumplir un objetivo que en muchos casos es una distancia. Cuando trabajamos en
control de posición el variador asume una forma de control con parámetros especiales
exclusivos para esta tarea (velocidades, rampas y ganancias distintas a las usadas en
control de velocidad). Cuando posicionamos el eje de un motor, debemos considerar
que la aplicación debe contar con un punto de inicio, de referencia o “CERO” de
máquina, tal que desde allí el motor o servo empiece a moverse hacia la posición
objetivo que se le indique.
En control de posición se debe distinguir que existen tres posibles casos de
posicionamiento:
-Posicionamiento Relativo. Donde cada vez que el motor o servo se detiene
“reescribe” un nuevo “cero” desde donde empezará a moverse a la nueva posición
objetivo. El comando que se utiliza es: _GoRel.
-Posicionamiento Absoluto. Donde existe un cero fijo. Es decir el motor o servo solo
podrá moverse a una nueva posición si el objetivo es distinto a la posición anterior. El
movimiento se referencia hacia el cero fijo y desde allí se medirá si debe avanzar o
retroceder para alcanzar la posición objetivo. El comando que se utiliza es: _GoAbs.
-Posicionamiento al CERO de máquina. Esto es un referenciamiento hacia la posición 26
que se ha definido como el CERO del sistema, normalmente está asociado a un
encoder absoluto pero también es válido con un encoder incremental. En este tipo de
posicionamiento el motor o servo girará hasta el CERO del sistema según la
“estrategia” de referenciamiento que se escoja (son hasta 8 posibles estrategias). El
comando que se utiliza es: _Go0.

El dato de posicionamiento normalmente es ingresado por los usuarios hacia una


variable H, luego los comandos _GoAbs o _GoRel toman ese dato la posición objetivo a
alcanzar y harán que el motor o servo se mueva hasta que la lectura del encoder o
resolver haya logrado el objetivo ingresado en _GoAbs o _GoRel. La variable H492
TargetPos carga en primera instancia el valor objetivo a alcanzar, luego observando la
variable H511 ActPos_Mot vemos como este valor cambia hasta que se iguala con
H492 TargetPos concluyendo así el posicionamiento y movimiento del motor. Hay que
anotar que existe una tolerancia de error entre la lectura de las variables H492 y H511.

Existe un comando adicional que se usa en control de posición que es el _AxisStop,


este comando nos permite “FRENAR” el eje del servo o “LIBERARLO” para empezar un
posicionamiento. Es muy útil y conveniente a nivel de seguridad para impedir
movimientos indeseados en el eje del motor en control de posición. El siguiente código
ilustra una aplicación sencilla de control de posición en movimiento relativo.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define START DI01 //Arranco con entrada digital 1


#define POSI H1 //posición en pulsos a la girara el servo
//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{

/*-------------------------------------
Initialisation
--------------------------------------*/

_AxisStop( AS_RSTOP ); //Servo detenido ①


TargetPos = 0; //Inicializar la posición objetivo
ActPos_Mot = 0; //Inicializar la posición actual del motor

/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ if(START) {
_AxisStop( AS_ENABLE ); //liberar al eje ②
_GoRel( GO_WAIT,POSI ); //ir a la posición objetivo
_Wait(1000); //esperar 1 segundo
_GoRel( GO_WAIT,(-2*POSI)); //ir a la nueva posición objetivo
_Wait(1000);
_GetSys( H2,GS_ACTPOS );

27
}
else{
_AxisStop( AS_RSTOP ); //Servo detenido ③
}
} //fin de while(1)
} //fin de main()

Programa 8: Control de Posición.

El código anterior contiene en su zona de inicialización ① unas seguridades que


mantienen detenido al eje del motor con el comando _AxisStop(AS_RSTOP) e iguala a
CERO las variables H492(Target_Pos) y H511(ActPos_Mot). Con esto se asegura que el
motor no hará un movimiento intempestivo cuando se energice al variador que lo
controla. Luego dentro de la instrucción if(START) el comando _AxisStop ② es
nuevamente usado pero con el argumento _AxisStop(AS_ENABLE), esto libera al eje y
permite que el comando de posicionamiento _GoREL lleve al eje del motor hasta la
posición objetivo definida en la variable H1 POSI.
Cuando la entrada START (DI01) se active el motor se moverá hacia el valor escrito en
la variable POSI, luego esperara 1 segundo y luego girará en sentido contrario hasta
lograr una distancia equivalente a -2*POSI esperará nuevamente 1 segundo y la
secuencia se repetirá mientras la entrada START (DI01) este activa en caso contrario el
eje se detendrá con el comando _AxisStop(AS_RSTOP) ③.

Recordar que identificado el modo de operación para el programa que vamos a


trabajar, primero se debe realizar el start-up correcto del modo de control. Por
ejemplo en control de posición, para el trabajo de un motor o servo se debe
seleccionar durante la secuencia del start-up la opción “positioning with IPOS”.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 42: Ventana que aparece durante la secuencia del start-up del motor o
servomotor, aquí se nos pregunta sobre el modo de operación: CONTROL DE
VELOCIDAD, CONTROL DE POSICION O CONTROL DE TORQUE. La opción “POSITIONING
with IPOS” es la correcta para el control de posición.

Después del start-up en el parámetro P700 veremos el resultado de la configuración


en el modo de control de posición cuando el motor o servo tenga la extensión
“…&IPOS”:

28

Figura 43: Parámetro P700, después del start-up se cargará el modo de operación de
control de posición y este será identificado con la extensión “…&IPOS”.

Los parámetros exclusivos en control de posición como: velocidad, aceleración y


ganancias se encuentran entre los parámetros P910 al P917.

Figura 44: Parámetros exclusivos para el control de posición.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

10. Interrupciones.
Las interrupciones son comandos que “detienen” la ejecución de un código debido a
que se presenta uno de los siguientes 03 eventos:
• Ante la presencia de un error en el variador.
• Ante un sobreflujo en el Timer_0 del variador.
• Ante la activación de la función TouchProbe en una de las dos entradas
“rápidas” del variador Movidrive MDX61B (entradas DIO2 y DI03).

NOTA9: TouchProbe es un nombre especial para definir a una de las dos entradas
destinadas para que apenas se detecte un cambio de estado (de ON a OFF o viceversa)
se capture la posición del motor o servomotor en el instante en que se activó la
entrada TouchProbe; esto es útil para la lectura de sensores en sistemas de corrección
en máquinas donde el margen de error en el posicionamiento es muy exigente.

El siguiente código nos muestra el uso de una interrupción con el evento TouchProbe.
/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>

29
#include <iob.h>
#define START DI01
#define POSI H1

/*=============================================
Interrupt Service Routine
===============================================*/
Interrupt()
{ ①
_AxisStop( AS_PSTOP );
TargetPos = TpPos1_Mot;
_AxisStop( AS_ENABLE );
}
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{ /*-------------------------------------
Initialisation
--------------------------------------*/
_AxisStop( AS_RSTOP );
H492 = 0;
H511 = 0;
H507 = 0;
// activate interrupt service routine
_SetInterrupt(SI_TOUCHP1, Interrupt); ②
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{
if(START){
_TouchProbe( TP_EN1_HI); ③
_AxisStop( AS_ENABLE );
_GoRel( GO_WAIT,POSI );
_Wait(100);
}
else{
_AxisStop( AS_RSTOP );
}
}
}
Programa 9: Control de Posición con Interrupciones.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

En el código anterior se utilizó el comando _TouchProbe(TP_EN1_H1) ③ para indicar


que se usará el flanco de subida que se detecte en la entrada DI02. La interrupción ha
sido ingresada al código con el comando _SetInterrupt(SI_TOUCHP1,Interrupt) ②, de
esta forma relacionamos la interrupción con el evento TouchProbe. Finalmente
creamos lo que se debe hacer cuando se active la interrupción, para eso se creó una
“función” llamada “Interrupt”① y allí escribimos los comandos para frenar al motor o
servo con _AxisStop(P_STOP), para evitar que el motor o servo siga avanzando
después de la interrupción se iguala la variable H492 TargetPos con la variable H507
TpPos1_Mot que guardó la posición capturada cuando se activó la entrada DI02.

Figura 45. En la imagen se aprecia que el valor que capturó el TouchProbe fue de
25093 pulsos, este valor es consecuencia de la activación de la entrada DI02 y por
tanto se ingresó a la rutina de interrupción deteniendo al motor o servo y
reescribiendo el valor de la variable H492 TargetPos con el mismo valor de la posición
de la variable H507 TpPos1_Mot. Recordar que H492 es el valor que se debe alcanzar
desde la posición actual (H511), cuando ambos valores se igualan H511=H492
30
entonces el posicionamiento se cumplió. En el caso de la interrupción se está
cumpliendo que H492=H507=H511.

11. Activación de Tareas paralelas y creación de Funciones.


Mediante IPOS® es posible que en mismo programa coexistan hasta tres tareas
paralelas. Cada tarea son partes de códigos que pueden estar relacionados entre sí o
ser independientes. Hasta ahora todos los códigos que se han mostrados residen en la
tarea 1 (TASK1), las otras dos tareas (TASK2 y TASK3) se pueden activar por
programación y se les puede asignar trabajos especiales como cálculos o vigilancia-
seguridad. Hay que mencionar que cada tarea tiene una velocidad de ejecución
distinta siendo la tarea 3 (TASK3) la tarea que lee la mayor cantidad de líneas de
código en el menor tiempo posible. Entre la tarea 1 y 2 existe la posibilidad vía los
parámetros P938 y P939 de decidir la velocidad de lectura de sus respectivas líneas de
código haciendo que la lectura sea más lenta o rápida. En la siguiente imagen se
muestra la creación de la tarea 2 mediante el editor de IPOS®.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Figura 46. Creación de las tareas paralelas Task2 y Task3.

Las funciones trabajan como códigos adicionales que se pueden incorporar en


cualquiera de las tres tareas y en cierta forma nos ayudan a ordenar el programa sin
necesidad de estar repitiendo los códigos en las zonas del programa que lo requieran,
para definir una función basta con asignarle un nombre y escribir los comandos que
deben ejecutarse dentro de la función. El siguiente código muestra un ejemplo de la
creación de una tarea y de una función llamada “lámparas” que activará y apagará la
salida digital DO01 cada 2 segundos.
/*=============================================

31
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define START DI01 //Arranco con entrada digital 1


#define POSI H1 //Posición en pulsos a la girara el servo
#define LONG H2 //Longitud que ingresa un usuario en mm
#define FACTOR H3 //Constante que transformara la distancia de mm a pulsos

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Task2
===============================================*/
Task2()
{
POSI = (LONG* FACTOR); ①
}

/*=============================================
Interrupt Service Routine
===============================================*/
Interrupt()
{
_AxisStop( AS_PSTOP ); //Detengo al eje del servo
TargetPos = TpPos1_Mot; //Reescribo el TargetPos
_AxisStop( AS_ENABLE ); //Se habilita el eje del servo
}

/*=============================================
Función Lámpara
===============================================*/
Lamparas()
{
StdOutpIPOS = 2; //Activar la salida DO01
_Wait(2000); //Espera 2 segundos ②
StdOutpIPOS = 0; //Se apagan todas las salidas digitales
}

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
_AxisStop( AS_RSTOP ); //servo detenido
TargetPos = 0; //Inicializar la posición objetivo
ActPos_Mot = 0; //Inicializar la posición actual del motor
H507 = 0; //Inicializo el valor capturado del TouchProbe

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

StdOutpIPOS = 0; //Se apagan todas las salidas digitales


// activate task 2
_SetTask(ST2_START, Task2); ③
// activate interrupt service routine
_SetInterrupt(SI_TOUCHP1, Interrupt);
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ if(START) {
_TouchProbe( TP_EN1_HI); //El touch probe se activa con DI02 en su flanco subida
_AxisStop( AS_ENABLE ); //Libero al eje del motor
_GoRel( GO_WAIT,POSI );
_Wait(100);
}
else{
_AxisStop( AS_RSTOP );
}
Lamparas(); //Invocación de la función creada ④
} //fin de while(1)
} //fin de main()

Programa 10: Activación de tareas paralelas y funciones

12. Comunicación entre un grupo de variadores vía programación IPOS®.


Físicamente existen dos formas de comunicar los variadores de SEW EURODRIVE:
mediante una red RS485 o utilizando una red propia llamada S-BUS.
A nivel de programación existen dos formas de comunicar datos: utilizando el
comando MoviLink (que usa la red física RS-485 o la red física S-BUS) o utilizando
comandos exclusivos para la red S-BUS. En los ejemplos usaremos los comandos
exclusivos de la red S-BUS. La siguiente imagen trata de ilustrar cómo funciona la
comunicación entre equipos:
32
A Dato 1 Se le asigna una “etiqueta” y viajará por toda la red S-BUS

Dato 1
Dato 1 Dato 2
(se aloja en
(obtenido (se aloja en
una variable
desde una Dato 2 será tomado una variable
Dato 1 será tomado del variador)
variable H o SOLO por los equipos del variador)
SOLO por los equipos
parámetro del que estén programados
que estén programados Dato 2
variador) para recibir la “etiqueta”
para recibir la “etiqueta” (obtenido
desde una
variable H o
parámetro del
variador)
Variador 1 Variador 3
Variador 2

A Dato 2 Se le asigna una “etiqueta” y viajará por toda la red S-BUS

Figura 47. Comunicación entre un grupo de variadores.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

La imagen anterior nos da a entender que un “dato” debe ser tomado desde un
variador emisor y para que se propague por la red S-BUS debe asignársele una
“etiqueta”. Todos los variadores que formen parte de la red S-BUS recibirán esa
información pero SOLAMENTE los variadores que se hayan programado para recibir
ese “dato con la etiqueta” podrán guardarlo enviándolo a una zona de memoria que
normalmente es una variable H del variador receptor. Hay que precisar que un mismo
variador puede ser emisor y receptor de varios datos, pero debemos tener cuidado
que cada dato cuente con una única “etiqueta” en la red de comunicación.

En IPOS® se deben crear estructuras para la manipulación de los datos de envío y


recepción, se usarán dos comandos:
SCTRCYCL “nombre a”  para crear la estructura de envió.
SCREC “nombre b” para crear la estructura de recepción.

Con cada estructura creada se reservarán un grupo de variables para alojar los valores
que permitirán que la comunicación sea posible (por ejemplo: la asignación de la
“etiqueta”, de dónde vamos a sacar el “dato” a enviar y en donde lo vamos a guardar).

33

Figura 48. Si usamos los comandos SCTRCYCL y SCREC y cada uno le asignamos un
nombre, dentro de la zona de variables del variador se crearán una estructura para
enviar y/o recibir datos.

En los siguientes códigos se presentan la programación de dos variadores que


intercambiaran dos datos.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

SCTRCYCL ENVIAR; //Creación de la estructura de envio


SCREC RECIBO2; //Creación de la estructura de recepción ①

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
ENVIAR.ObjectNo = 1000; //Etiqueta con el valor "1000" como identificador ②
ENVIAR.CycleTime = 10; //Envio datos cada 10 ms
ENVIAR.Offset = 0; //Retardo de 0 ms
ENVIAR.Format = 4; //Envio solo 1 dato
ENVIAR.DPointer = numof(H2); //Envio el dato q se coloque en H2

RECIBO2.ObjectNo = 1001; //Recibo dato con la etiqueta "1001"


RECIBO2.Format = 8; //Recibo 2 datos
RECIBO2.DPointer = numof(H5); //Los datos se guardan en H5 y H6

_SBusCommDef( SCD_TRCYCL,ENVIAR ); //Comando para enviar


_SBusCommDef( SCD_REC,RECIBO2 ); //Comando para recibir
34
_SBusCommState( SCS_START1 ); //Comando para empezar la comunicación
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1) {

}
Programa 11: Intercambio de datos por red S-BUS entre dos variadores.

② En el código anterior los datos que existan en la variable H2 serán etiquetados con
el numero “1000” y se enviaran por la red S-BUS cada 10ms, además desde otro
variador recibiremos dos datos con una única etiqueta “1001” y serán guardados de
forma correlativa en las variables H5 y H6.
De forma similar se presenta el código para enviar datos desde otro variador donde el
dato de envió tendrá la etiqueta “1001” y el dato de recepción tendrá la etiqueta
“1000”.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

SCTRCYCL ENVIAR2; //Creación de la estructura de envio


SCREC RECIBO; //Creación de la estructura de recepción

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
ENVIAR2.ObjectNo = 1001; //Etiqueta "1001"
ENVIAR2.CycleTime = 10; //Envio datos cada 10 ms
ENVIAR2.Offset = 0; //Retardo de 0 ms
ENVIAR2.Format = 8; //Envio 2 datos
ENVIAR2.DPointer = numof(H0); //Envio datos q existen en H0 y H1

RECIBO.ObjectNo = 1000; //Recibo dato con etiqueta "1000"


RECIBO.Format = 4; //Recibo 1 dato
RECIBO.DPointer = numof(H3); //Los datos se guardan en H3

_SBusCommDef( SCD_TRCYCL,ENVIAR2 );

35
_SBusCommDef( SCD_REC,RECIBO );
_SBusCommState( SCS_START1 );
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1) {

}
Programa 12: Intercambio de datos por red S-BUS entre dos variadores.

Para probar el programa debemos colocar algún valor en la variable H2 del variador 1 y
ver su lectura en la variable H3 del variador 2. De igual forma debemos escribir algún
valor en las variables H0 y H1 del variador 2 y ver su lectura en las variables H5 y H6
del variador 1.
Para que exista la comunicación los dos variadores deben estar conectados a través de
su puerto S-BUS. En el caso del variador Movidrive MDX61B la conexión física se
muestra en la siguiente figura:

Figura 49. Conexión física de la red SBUS en variadores Movidrive MDX61B.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

13. Proyecto de Control de movimiento de dos ejes simulando una etiquetadora vertical.
Hasta este punto se conocieron los suficientes códigos para poder crear un programa
que pueda simular el funcionamiento de una maquina con un cierto grado de
dificultad. El proyecto que se propone es “sincronizar” el funcionamiento de una
máquina de etiquetado vertical con dos ejes de movimiento como la mostrada en la
siguiente imagen.

36

Figura 50. Máquina de sellado vertical.

En la máquina de sellado vertical de la figura 50, se dispone de un servomotor


encargado de dosificar y/o llenar el producto dentro de unos empaques y se cuenta
con otro servo encargado de jalar el film de plástico que formará las bolsas de
empaque. Entre el movimiento del servo de empaque y el servo del dosificador existe
la manipulación de unos pistones que termo-sellan la bolsa en dos tiempos: sellado
inferior y sellado superior. La manipulación de estos pistones de sellado debe hacerse
con la activación de las salidas digitales de cada variador. El dosificado se hace
mediante una mesa circular que se posiciona 90° para poder entregar el producto; el
tamaño de la bolsa de empaque se supone constante y esto se hace mediante un par
de rodillos de arrastre sobre el film de plástico, además se considera que existen unas
marcas en el film llamadas “tacas” que sirven como guías para poder centrar la figura
del empaque teniendo una longitud de jalada pareja. Antes de escribir los códigos para
este proyecto, se recomienda realizar un diagrama de movimiento para cada servo con
el cual se aprecie la secuencia completa de la máquina de sellado vertical.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

2 6

1 Movimiento del servo de jalado del film de empaque


t1

3 Sellado inferior del film

t2

Movimiento del servo dosificador


t3
4

5 Sellado superior del film

t4
Duración del ciclo del producto

Figura 51. Diagrama de movimiento de la etiquetadora vertical.

En 1: Se oprime el botón de START de la máquina.


En 2: Se produce el jalado del film hasta una distancia determinada o hasta la lectura
de la taca. 37
En 3: Se produce el sellado inferior del film para empezar a formar el empaque, el
pistón de termo-sellado se cierra un breve tiempo y luego vuelve a abrirse.
En 4: Se produce el movimiento de la mesa dosificadora e ingresa el producto al
empaque. Este movimiento solo es posible si se ha confirmado que el film termino de
posicionarse y si se produjo el sellado inferior.
En 5: Se produce el sellado superior del film para terminar de formar el empaque, el
pistón de termo-sellado se cierra un breve tiempo y luego vuelve a abrirse.
En 6: El ciclo se repite con el jalado del film para la formación de un nuevo empaque.
Este movimiento solo es posible si se ha confirmado que la mesa dosificadora termino
de posicionarse y si se produjo el sellado superior.

Nota10: Para saber por IPOS® que el servomotor alcanzó la posición de referencia
utilizamos la variable H473 StatusWord e interrogamos al bit 19 quien se activa cuando
el motor o servo alcanzó la posición objetivo.

Figura 52. Variable H473 StatusWord.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define posi H1 //Posición de jalada según la distancia del empaque


#define en_posi H2 //Confirmación de posicionamiento
#define tiempo H3 //Tiempo de cierre de pistón de sellado inferior
#define start H4 //Arranque de servomotor

SCTRCYCL ENVIAR; //Estructura para envió de dato


SCREC RECIBO2; //Estructura para recibir datos

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

Task2() //Tarea paralela 2


{ if((StatusWord>>19) & 0b1){ // Código q compara si el servo se posiciono
en_posi = 1; //Si se posicionó el servo cambia esta variable a 1
_Wait( 10 ); //Espera de 10 ms
}
else{ //Si el servo no está posicionado
en_posi = 0; //esta variable se mantiene en 0
}
} //fin de Task2()

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{

/*-------------------------------------
Initialisation

38
--------------------------------------*/
ENVIAR.ObjectNo = 1000; //Se crea la etiqueta "1000"
ENVIAR.CycleTime = 10; //Dato enviado cada 10 ms
ENVIAR.Offset = 0; //Retardo de 0 ms
ENVIAR.Format = 4; //Se envía solo 1 dato
ENVIAR.DPointer = numof(en_posi); //Se envía el valor de la variable H2

RECIBO2.ObjectNo = 1001; //Se recibe la etiqueta "1001"


RECIBO2.Format = 4; //Se recibe solo 1 dato
RECIBO2.DPointer = numof(H4); //Se guarda el dato recibido en la variable H4

_SBusCommDef( SCD_TRCYCL,ENVIAR ); //Habilita la estructura de envio


_SBusCommDef( SCD_REC,RECIBO2 ); //Habilita la estructura de recepción
_SBusCommState( SCS_START1 ); //Se inicia la comunicación entre los variadores

_AxisStop( AS_RSTOP ); //Eje del servo detenido por seguridad


//Se resetea las condiciones de inicio del servo: resolver y posición objetivo.
TargetPos = 0; //Por Seguridad pone a cero la posición objetivo
ActPos_Mot = 0; //Por Seguridad pone a cero la posición actual servo
_SetTask(ST2_START, Task2); //Se inicializa la tarea paralela task2()
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1) {
// El botón DI01 será el ARRANQUE de la maquina
if((start == 1)||(DI01)) //Si se activa el botón de arranque o si START es igual a 1
{ //En el condicional anterior existe un “OR” que compara dos entradas
_AxisStop( AS_ENABLE ); //Se libera el eje del servo
_GoRel( GO_WAIT,posi ); //El servo se mueve hasta la posición objetivo
_BitSet( H481, 3 ); //Se activa la salida DO03 para el sellado inferior
Timer_0 = tiempo; //La salida DO03 estará activa según el tiempo ingresado
while(Timer_0){}
_BitClear( H481, 3 ); //Se apaga la salida DO03
}
else { //Si NO está activo el botón de arranque o si START es igual a 0
_AxisStop( AS_RSTOP ); //El eje del servo se mantiene detenido
}
} //fin de while(1)
} //fin de main()

Programa 13: Código para el SERVO jalador del film formador del empaque (variador 1)

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define posi2 H1 //Posición de giro en la mesa de dosificado


#define en_posi2 H2 //Confirmación de posicionamiento
#define tiempo2 H3 //Tiempo de cierre de pistón de sellado superior
#define start2 H4 //Arranque de servomotor
#define empaque H5 //Cuenta la cantidad de empaques bolsas terminadas

SCTRCYCL ENVIAR2; //Estructura para envió de dato


SCREC RECIBO; //Estructura para recibir datos

Task2() //Tarea paralela 2


{ if((StatusWord>>19) & 0b1){ // Código q compara si el servo se posiciono
en_posi2 = 1; //Al posicionarse el servo esta variable pasa a 1
_Wait( 10 ); //Espera de 10 ms
}
else{ //Si el servo no está posicionado
en_posi2 = 0; //esta variable se mantiene en 0
}
} //fin de Task2()

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
ENVIAR2.ObjectNo = 1001; //Se crea la etiqueta "1001"
ENVIAR2.CycleTime = 10; //Dato enviado cada 10 ms
ENVIAR2.Offset
ENVIAR2.Format
= 0;
= 4;
//Retardo de 0 ms
//Se envía solo 1 dato
ENVIAR2.DPointer = numof(en_posi2); //Se envía el valor de la variable H2
39
RECIBO.ObjectNo = 1000; //Se recibe la etiqueta "1000"
RECIBO.Format = 4; //Se recibe solo 1 dato
RECIBO.DPointer = numof(H4); //Se guarda el dato recibido en la variable H4

_SBusCommDef( SCD_TRCYCL,ENVIAR2 ); //Habilita la estructura de envio


_SBusCommDef( SCD_REC,RECIBO ); //Habilita la estructura de recepción
_SBusCommState( SCS_START1 ); //Se inicia la comunicación entre los variadores

_AxisStop( AS_RSTOP ); //Eje del servo detenido por seguridad


//Se resetea las condiciones de inicio del servo: resolver y posición objetivo.
TargetPos = 0; //Por Seguridad pone a cero la posición objetivo
ActPos_Mot = 0; //Por Seguridad pone a cero la posición actual servo
empaque = 0; //Se inicializa la cantidad de empaques
_SetTask(ST2_START, Task2); //Se inicializa la tarea paralela task2()
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1) {

if(start2 == 1) { //Desde el variador 1 se recibe el valor de 1 en H4


_AxisStop( AS_ENABLE ); //Se libera el eje del servo
_GoRel( GO_WAIT,posi2); //El servo se mueve hasta la posición objetivo
_BitSet( H481, 3 ); //Se activa la salida DO03 para el sellado inferior
Timer_0 = tiempo2; //La salida DO03 estará activa según el tiempo ingresado
while(Timer_0){}
_BitClear( H481, 3 ); //Se apaga la salida DO03
empaque = empaque + 1; //Se suma la cantidad de empaques realizados
}
else { // En caso no se reciba 1 en la variable H4 (start2)
_AxisStop( AS_RSTOP ); // El eje del servo se mantiene detenido
empaque = empaque; // Se deja de sumar la cantidad de empaques
}

} //fin de while(1)
} //fin de main()

Programa 14: Código para el SERVO dosificador que llena de producto al empaque
(variador 2).

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Los programas anteriores probarlos con las siguientes variables H:


Variador 1 : SERVO JALADOR Variador 2: SERVO DOSIFICADOR
H1: posi = 4096 (1 vueltas) H1: posi2 = 1024 (1/4 vuelta)
H3: tiempo = 1000 (1 segundo) H3: tiempo2 = 1000 (1 segundo)

Hasta ahora los datos que hemos ingresado en control de posición son números que
representan directamente la cantidad de pulsos que requerimos. En una situación
verdadera lo que ingresamos ya sea vía una pantalla HMI o vía un teclado es una
posición física real: milímetros, centímetros, metros o grados y no pulsos por lo que
debemos escalar o “transformar” esos datos de ingreso a pulsos de encoder/resolver.
El siguiente ejemplo ayudará a ilustrar cómo hacerlo:

40
Asumamos los siguientes datos:
El carro debe moverse una longitud de 2 metros
El diámetro de las ruedas y de las poleas con la correa sincrónica son de: 250 mm
El ratio (i) de la caja reductora es de: 10
Sabemos que la longitud lineal  L = GIRO x RADIO  2m = GIRO x (0,25/2) m
GIRO = 16 radianes
Es decir, para lograr la distancia de 2 metros ha tenido que darse un GIRO de 16
radianes. También sabemos que una revolución de la rueda representa 2π radianes =
6,2832 radianes, por tanto si dividimos 16/6,2832 tendremos que la rueda debió girar
aproximadamente 2,55 revoluciones (~ 2,5 veces).
Como la rueda y la polea acoplada a la caja reductora tienen el mismo diámetro eso
quiere decir que giraron iguales (~ 2,5 veces). Según la imagen la polea es solidaria al
eje de salida de la caja reductora que acciona al carro, y esta caja tiene una reducción
de i:10, por tanto la cantidad de veces que giro el servo fue reducida en 10 a la salida
de la caja reductora, esto quiere decir que si a la salida de la caja reductora hubo un
giro de 2,5 veces en el eje del servo el giro fue de 25 veces (2,5 x 10 = 2,5 x i) para
poder lograr los 2 metros de recorrido del carro.
Para IPOS® un giro de 360° de motor o servo tiene un valor de 4096 pulsos y si 2
metros representa 25 giros de eje del motor o servo, la cantidad de pulsos que
debemos ingresar por programación seria de 25 x 4096 = 102400.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

14. Programa de Control de Torque.


En los programas anteriores ya hemos aprendido a utilizar los comandos básicos para
poder trabajar en control de velocidad y en control de posición. Con la practica
trabajar en control de Torque es casi idéntico que trabajar en control de velocidad, es
decir se usa el comando ControlWord para activar el giro del motor en sentido horario
CW, anti-horario CCW o para detener al motor y el comando _SetSys(SS_N11, xxx) para
asignar la referencia de “torque”. Esta referencia de torque está directamente
involucrada a la corriente que el variador inyectará al motor, esa corriente se
mantendrá constante y no variará salvo que se cambie la referencia de torque. Al
observar el comportamiento del motor quien tendrá ligeras variaciones será su
velocidad de giro en RPM que podría subir o bajar con el objetivo de mantener la
referencia de torque, el eje del motor será quien “sentirá” si se está requiriendo subir
o bajar la velocidad en función a la carga que tenga acoplada, pero si el eje del motor
no tuviera una carga acoplada y el motor arranca en control de torque el giro del
motor se “disparará” al valor más alto permisible del variador, por tanto en este modo
de control ES NECESARIO que exista una carga acoplada al eje del motor para poder
trabajar, no se recomienda hacer pruebas en vacío con valores de referencia de torque
muy elevados por un tema de seguridad.
Para trabajar en control de torque debemos configurar dentro del variador ese modo
de trabajo en el parámetro P700. Esto también es posible en la secuencia del start-up. 41

Figura 53. Configuración del modo control de torque para un servo, en el caso de un
motor la opción sería CFC & torque control. Solo en el variador Movidrive® MDX61B es
posible este modo de trabajo y es obligatorio que el motor o servo tenga un
encoder/resolver para poder trabajar, el modo de control usado es el llamado control
vectorial de corriente.

Adicionalmente se recomienda - por seguridad- que el parámetro P304 “Torque Limit”


tenga un valor bajo al inicio de las pruebas y que el parámetro P500 “Speed
Monitoring” este en la opción “OFF” esto limitará el giro del motor solamente hasta la
velocidad máxima configurada en el parámetro P302 “Maximun speed 1”.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>
#define START DI01 //Arranque
#define REFERENCIA H1 //Referencia Torque

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
ControlWord = 2;
/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ if(START){
_SetSys( SS_N11,REFERENCIA );
ControlWord = 20; //Arranque del motor o servo
}
else{
ControlWord = 2; //Detiene al motor o servo
}
} //fin de while(1)
}//fin de main()

42
Programa 15: Control de Torque.

El código anterior es idéntico a un programa de control de velocidad, la diferencia está


en la configuración de parámetros. Por ejemplo vía IPOS coloquemos el valor de
referencia H1 en 400 y sin embargo eso no representa un giro de motor de 40.0 RPM,
sino que ese valor de 400 es escalado internamente para cargar una referencia de
torque/corriente que es calculado al valor de 2% de la corriente nominal del variador.

Figura 54. El valor de referencia 40.0 del parámetro P160 es escalado internamente
como una referencia de torque/corriente de 2.0 en el mismo parámetro P160, por
tanto ese valor es lo que el motor/servo está siguiendo como referencia (y no a la
velocidad), este control se ve reflejado en el consumo de la corriente activa del motor
en el parámetro P005, si aumentamos la referencia el valor del parámetro P005
también aumentará permitiendo que el eje del motor/servo manifieste más torque en
su eje.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

15. Trabajando con Redes Industriales: Profibus-DP, Ethernet, Devicenet, etc.


Dependiendo del fabricante de maquina o el OEM, es posible que se dé una
comunicación entre los variadores de SEW EURODRIVE y un PLC Maestro dentro de un
sistema o maquina con el principio de intercambio de datos de proceso (Process Data -
PD). Existen process data de entrada que salen del variador hacia el PLC y process data
de salida que salen desde el PLC hacia el variador.

Figura 55. La comunicación entre un PLC Maestro y un variador de frecuencia es


mediante Process Data (PD) que pueden ser de entrada o de salida.

Los variadores de SEW EURODRIVE cuentan con la capacidad de comunicarse con un


PLC Maestro vía Gateway. Estos son tarjetas electrónicas que se pueden instalar 43
dentro de los PLC o en forma externa.

Figura 56. Tarjetas que sirven como Gateways para trabajar buses de campo (Fieldbus:
Profibus DP, Devicenet, Ethernet, Ethercat, Can-Bus, Profinet, etc.) con los variadores
de SEW EURODRIVE (Movidrive® MDX61B, Movitrac® 07B). Se debe tener cuidado en
el límite de datos de proceso (process data) que se debe utilizar en la comunicación.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

Al crear el código en IPOS debemos previamente tener un orden de como


direccionaremos los datos que recibimos y enviamos al PLC maestro desde nuestro
variador esclavo. Es posible enviar o recibir bits (0 u 1) por comunicación o enviar o
recibir palabras (16 bits). La siguiente tabla de asignación de datos nos mostrara un
ejemplo:

Datos enviados desde el PLC hacia el VDF Datos recibidos por el PLC desde el VDF
PD01.0 Habilitación VDF PDI1.0 VDF en falla
PD01.1 Girar sentido CW PDI1.1 VDF listo
PD01.2 Girar sentido CCW PDI1.2 Motor girando
PD02 Velocidad referencia PDI2 Velocidad Actual
PD03 PDI3 Corriente Actual

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>
#define Habilitar H0 //Habilita al variador para el giro del motor
#define Giro_CW H1 //Giro Horario
#define Giro_CCW H2 //Giro Anti-horario

44
#define Vel_Ref H3 //Velocidad de Referencia desde el PLC
#define Estado H5 //Estado actual VDF
#define Vel_Act H6 //Velocidad actual motor
#define I_Act H7 //Porcentaje de corriente del variador

//Creación de Estructuras para la definición de ProcessData


GSPODATA3 PO_bus3; //Estructura para crear 3 datos de recepción ①
SSPIDATA3 PI_bus3; //Estructura para crear 3 datos de envio

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Task2
===============================================*/
Task2()
{ _GetSys(Vel_Act ,GS_ACTSPEED ); //Obtener del VDF la velocidad actual
_GetSys(I_Act ,GS_ACTCUR ); //Obtener del VDF el % de corriente de consumo

_GetSys(PO_bus3, GS_PODATA ); //Recibo los PO desde el PLC ②


//a. Habilitación del VDF y sentido de giro del motor en el primer dato recibido del PLC
if(PO_bus3.PO1 & 0b1){ //Comparo el bit 0 de PO_bus3.PO1
Habilitar = 1;
}
else{
Habilitar = 0;}
if(PO_bus3.PO1 & 0b10){ //Comparo el bit 1 de PO_bus3.PO1
Giro_CW = 1;
}
else{
Giro_CW = 0;}
if(PO_bus3.PO1 & 0b100){ //Comparo el bit 2 de PO_bus3.PO1
Giro_CCW = 1;
}
else{
Giro_CCW = 0;}
//b. Recibo los otros datos de proceso
Vel_Ref = PO_bus3.PO2; //Segundo dato recibido desde el PLC

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

//c. Preparando los bits de "ESTADO" del variador en el primer dato de envio al PLC
if(StatusWord & 0b10){ //Compara en H473 si EL VDF NO ESTA EN FALLA
_BitClear(Estado,0); //Pongo 0 avisando que el VDF no está en falla
}
else{
_BitSet(Estado,0); //Pongo 1 avisando que el VDF SI ESTA en FALLA
}
if(StatusWord & 0b100){ //Compara en H473 si EL VDF NO ESTA listo
_BitSet(Estado,1); //Pongo 1 avisando que el VDF SI ESTA listo
}
else{
_BitClear(Estado,1); //Pongo 0 avisando que el VDF NO ESTA listo
}
if(StatusWord & 0b10000){ //Compara en H473 si MOTOR está girando
_BitSet(Estado,2); //Pongo 1 avisando que el motor está girando
}
else{
_BitClear(Estado,2); //Pongo 0 avisando que el motor no está girando
}
//k. Valores de los PI de salida del VDF al PLC
PI_bus3.PI1 = Estado;
PI_bus3.PI2 = (Vel_Act*10);
PI_bus3.PI3 = (I_Act*100);
_SetSys( SS_PIDATA,PI_bus3 );
}
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{ //Estructuras para recibir los PO desde el PLC
PO_bus3.BusType = 3; //Tipo de bus fieldbus ③
PO_bus3.Len = PI_bus3.Len = 3; //Se manejaran 3 process data de tipo PO y PI

45
/*-------------------------------------
Initialisation
--------------------------------------*/
// activate task 2
_SetTask(ST2_START, Task2);
//Inicializo los PO
PO_bus3.PO1 = PO_bus3.PO2 = PO_bus3.PO3 = 0;
//Inicializo los PI
PI_bus3.PI1 = PI_bus3.PI2 = PI_bus3.PI3 = 0;
//Estado del Control al inicializar
ControlWord = 2; //Mantengo al motor detenido

/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{ if((Habilitar == 0) && (Giro_CW == 0) && (Giro_CCW == 0)){
ControlWord = 0; //Motor deshabilitado
}
if((Habilitar == 0) && (Giro_CW == 0) && (Giro_CCW == 1)){
ControlWord = 0; //Motor deshabilitado
}
if((Habilitar == 0) && (Giro_CW == 1) && (Giro_CCW == 0)){
ControlWord = 0; //Motor deshabilitado
}
if((Habilitar == 0) && (Giro_CW == 1) && (Giro_CCW == 1)){
ControlWord = 0; //Motor deshabilitado
}
if((Habilitar == 1) && (Giro_CW == 0) && (Giro_CCW == 0)){
ControlWord = 2; //Motor detenido
}
if((Habilitar == 1) && (Giro_CW == 0) && (Giro_CCW == 1)){
_SetSys( SS_N11,(10*Vel_Ref)); //Se carga la velocidad enviada por el PLC en PO2
ControlWord = 24; //Motor gira en sentido CCW
}
if((Habilitar == 1) && (Giro_CW == 1) && (Giro_CCW == 0)){
_SetSys( SS_N11,(10*Vel_Ref)); //Se carga la velocidad enviada por el PLC en PO2
ControlWord = 20; //Motor gira en sentido CW
}
if((Habilitar == 1) && (Giro_CW == 1) && (Giro_CCW == 1)){
ControlWord = 2; //Motor detenido
}
} //fin del while(1)
} //fin del main()

Programa 16: Control vía Process Data (PD) desde un PLC.


SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización
2017
MANUAL DE PROGRAMACION IPOS®

En el código anterior, usando los comandos GSPODATA3 y GSPIDATA3 ①se crean las
estructuras para los Process data de recepción desde el PLC (los que se conocerán
como PO) y Process data de envio hacia el PLC (los que se conocerán como PI),
técnicamente en IPOS podemos trabajar hasta con 10 PO y 10 PI escribiendo la
estructuras GSPODATA10 y GSPIDATA10.
Creadas las estructuras utilizamos los comandos _GetSys(PO_bus3, GS_PODATA) y
_SetSys( SS_PIDATA,PI_bus3 ) ② para asignar valores a cada uno de los PO y PI
creados con las estructuras, aquí es útil usar la tabla de asignación de datos que
definimos antes de mostrar el código del programa; con esa tabla sabremos en donde
colocar cada valor que nos envía el PLC hacia los PO que recibe el variador y desde
donde sacar cada datos desde el variador hacia el PLC usando los PI.
Las siguientes dos líneas de código que siempre se deben incluir en el programa
aseguran que la comunicación de datos será vía el intercambio de información con
fieldbus y la cantidad de datos a manejar ③:

PO_bus3.BusType = 3; //Tipo de bus fieldbus


PO_bus3.Len = PI_bus3.Len = 3; //Se manejaran 3 process data de tipo PO y PI

Por seguridad siempre es conveniente inicializar los datos de PO y PI en cero para


evitar movimientos inesperados en el motor. Finalmente dentro de la zona del
46
programa principal se escribe las instrucciones lógicas que combinaran todos los
posibles casos para el arranque del motor en control de velocidad, los datos que se
comparan dentro de los if (( aaa == bbb) && ( ccc == ddd)) son precisamente la
información que recibimos vía los PO desde el PLC maestro.

NOTA 11. Hay que indicar que el programa que hemos presentado es válido para
cualquier fieldbus de comunicación: Profibus DP, Devicente, Profinet, Ethernet,
Modbus, Can-Bus, etc. El variador reconocerá automáticamente el tipo de tarjeta
Gateway que se este utilizando para poder trabajar con los PO y PI, por tanto en IPOS®
no es necesario configurar el tipo de fieldbus que estemos usando, solamente
configuramos la recepción, el envio, asignación y utilización de los datos de los PI y PO.
Lo que si es necesario es asignar en el variador los parámetros P100 y P101 que la
referencia de velocidad y el control del variador será hecho vía fieldbus.

Figura 57. Vía los parámetros del variador este es configurado para recibir la referencia
de velocidad y los datos de control para encenderse o apagarse usando fieldbus.

Finalmente para que siempre exista un refrescamiento de los datos que se reciben
como PO desde el PLC, el parámetro P876 del variador DEBE estar en la opción ON.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

16. Trabajando con opciones múltiples tipo switch-case.


Hasta ahora, para hacer los programas hemos utilizado principalmente la instrucción
lógica if(…) {…} else { …} ; sin embargo existen otras alternativas para poder trabajar
con instrucciones que impliquen escoger una de varias alternativas.
El problema de trabajar con muchas instrucciones del tipo if(…) {…} else { …} es la
velocidad de lectura de nuestro código. Si el programa es realmente grande con
muchas líneas de código, entonces cada línea de código es leída una por una y eso
podría implicar que alguna condición de vigilancia o instrucción de corrección o
movimiento especial que debería darse en tiempos muy breves (< a 1 segundo) no se
ejecute en su momento porque el programa es muy extenso y aun no llego a la
instrucción encargadas de la vigilancia, corrección o movimiento especial.
En programación en texto, una alternativa a las instrucciones de tipo if(…) {…} else { …}
es el uso de switch –case.

Con la instrucción switch –case hacemos una pre-evaluación de una condición que
luego asumirá un identificador (p.e. un número) que será nuestro “caso” o “case”.
Luego dentro del switch cuando solo un “caso” o “case” sea el que se encuentre activo
se leerá y ejecutará solamente las instrucciones contendidas dentro del “caso” o
“case”, dejando sin leer y ejecutar las otras alternativas de los otros casos. Con esto
ahorramos tiempo en la lectura del programa y no descuidamos otras funciones que
47
requieran ser atendidas por el programa.

El siguiente programa es un ejemplo de la instrucción switch-case, aquí según el


estado de las entradas digitales DI01 y DI02 el servomotor pasará de forma automática
del modo de operación de control velocidad, control de posición, control de torque y
un mando manual vía botones con función tipo JOG para avance o retroceso del
motor. La función de tipo JOG quiere decir que mientras mantengamos oprimido ese
botón el eje del motor se moverá, si dejamos de oprimir el botón JOG el eje se
detendrá, esta forma de operar un motor es distinta al uso de los botones
normalmente abiertos o normalmente cerrados que “enclavan” el arranque con solo
oprimir el botón por una sola vez, en el caso de botón JOG se debe estar siempre
oprimiendo el botón para que el motor mantenga el giro.

Aunque parezca curioso mencionarlo, con el uso de la instrucción switch-case no


dejamos de usar al 100% la instrucción if(…){…} , simplemente lo que hacemos es
reducir las cantidad interna de líneas de código trasladando todo “el trabajo pesado”
que antes estaba dentro del if(…) {…} else { …} a cada “caso” o “case” del switch.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

/*=============================================
IPOS Source File
===============================================*/
#include <constb.h>
#include <iob.h>

#define START DI03


#define STOP DI04
#define JOG_POS DIO5
#define JOG_NEG DIO6

#define MODO H0 //Modo de operación (0: Manual con JOG, 1: Control Velocidad ①
//2:Control de Posición, 3: Control Torque)
#define VEL_MAN H1 //Referencia en control manual con JOG
#define VEL H2 //Referencia en control velocidad
#define POSI H3 //Referencia en control posición
#define TORQ H4 //Referencia en control torque
#define MODOCTRL H5 //Asignación del modo de control

#define VDF_OK (StatusWord & 0b10) //Variador OK

//Note:
//Movidrive inverters with activated technology function "ISYNCH" or "Cam"
//do not support variables H360 an higher.

/*=============================================
Task2
===============================================*/
Task2()
{ if(!DI01 && !DI02){ // DIO1: OFF y DIO2: OFF ②
MODO = 0; //Control manual por JOG
}
if(DI01 && !DI02){ // DIO1: ON y DIO2: OFF
MODO = 1; //Control de velocidad
}
if(DI01 && DI02){ // DIO1: OFF y DIO2: ON
MODO = 2; //Control de posición
}
if(DI01 && DI02){ // DIO1: ON y DIO2: ON

48
MODO = 3; //Control de torque
}
/*=============================================
Main Function (IPOS Entry Function)
===============================================*/
main()
{
/*-------------------------------------
Initialisation
--------------------------------------*/
ControlWord = 2; //Servo Detenido
ActPos_Mot = 0; //Se resetea posición actual servo
TargetPos = 0; //Se resetea posición objetivo
StdOutpIPOS = 0; //Se apagan salidas digitales
MODOCTRL = 0; //Se inicializa modo de control servo
// activate task 2
_SetTask(ST2_START, Task2);

/*-------------------------------------
Main Loop
--------------------------------------*/
while(1)
{
switch (MODO){
case 0:{ //Control Manual con JOG ③
MODOCTRL = 16; // Por IPOS al asignar 16 a esta variable habilitamos control velocidad
_SetSys( SS_OPMODE, MODOCTRL );
if(!JOG_POS && !JOG_NEG){
ControlWord = 2; //Servo detenido
}
if(JOG_POS && !JOG_NEG){
_SetSys( SS_N11,(10*VEL_MAN));
ControlWord = 20; //Giro servo en CW
}
if(!JOG_POS && JOG_NEG){
_SetSys( SS_N11,(10*VEL_MAN));
ControlWord = 24; //Giro servo en CCW
}
if(JOG_POS && JOG_NEG){
ControlWord = 2; //Servo detenido
}
} //fin case:0

case 1:{ //Control de Velocidad


MODOCTRL = 16; // Por IPOS al asignar 16 a esta variable habilitamos control velocidad
_SetSys( SS_OPMODE, MODOCTRL );
_SetSys( SS_N11,(10*VEL)); //Giro según velocidad referencia
ControlWord = 20; //Giro servo en CW
_Wait(5000); //Espera de 5 segundos
_SetSys( SS_N11,(20*VEL)); //Giro al doble de la velocidad referencia
ControlWord = 24; //Giro servo en CCW
} //fin case:1

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

case 2:{ //Control de posición


MODOCTRL = 18; // Por IPOS al asignar 16 a esta variable habilitamos control posición
_SetSys( SS_OPMODE, MODOCTRL );
_AxisStop( AS_ENABLE ); //Se libera eje del servo
_GoRel( GO_WAIT,POSI ); //El motor se posiciona según valor de referencia POSI
_Wait(1000); //Espera de 1 segundo
_GoRel( GO_WAIT,(2*POSI)); //El motor se posiciona al doble del valor de referencia POSI
_Wait(1000); //Espera de 1 segundo
} //fin case: 2

case 3:{ //Control de Torque


MODOCTRL = 17; // Por IPOS al asignar 16 a esta variable habilitamos control torque
_SetSys( SS_OPMODE, MODOCTRL );
_SetSys( SS_N11,(10*TORQ)); //El eje del servo manifestara el Torque de referencia
ControlWord = 20; //Giro servo en CW
} //fin case: 3

} //fin switch(MODO)

} //fin while(1)
} //fin main()

Programa 17: Cambio de modo de operación: control de velocidad, control de posición y


control de torque con la instrucción switch-case.

En el programa anterior se definió una variable MODO en H0 ① que guardará un


número que representará cada uno de los “casos” o “case” que serán posibles obtener
con la combinación de las entradas DI01 y DI02 dentro de la tarea 2 (“task 2”) ②, allí
cada posible combinación asume un número que será el identificador del “caso” o
“case”. Finalmente dentro de la estructura del programa principal ③ se utiliza la
instrucción switch y cada caso es evaluado solamente si la variable MODO se
encuentra en el número identificador correspondiente dejando sin ser leídas las otras 49
líneas de código.

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017
MANUAL DE PROGRAMACION IPOS®

INDICE

• Introducción pag.01
• Diferencia entre control de velocidad, control de posición y control de torque pag.02
• Cómo ingresar al entorno de programación de IPOS® pag.04
• Dentro del entorno de programación de IPOS® pag.07
• Lo necesario para programar pag.11
• Definir Variables y Constantes pag.11
• Definir Entradas y Salidas Digitales pag.13
• Definir una Entrada digital como un botón normalmente abierto y normalmente
cerrado pag.14
• Trabajando con una señal análoga (entrada y salida) pag.16
• Como asignar velocidades a un motor pag.18
• Uso de Temporizadores pag.20
• Programa de Control de Velocidad pag.22
• Lectura de Encoder pag.24
• Programa de Control de Posición pag.26

50
Interrupciones pag.29
• Activación de Tareas paralelas y creación de Funciones pag.30
• Comunicación entre un grupo de variadores vía programación IPOS® pag.32
• Control de movimiento de dos ejes simulando una etiquetadora vertical pag.36
• Programa de Control de Torque pag.41
• Trabajando con Redes Industriales: Profibus-DP, Ethernet, Devicenet, etc pag.43
• Trabajando con opciones múltiples tipo switch-case pag.47

SEW EURODRIVE DEL PERÚ SAC Área de Electronica y Automatización


2017

También podría gustarte