Sie sind auf Seite 1von 103

COMANDOS DEL COMPILADOR

Ing. Felipe Andres Delgado Ramrez

ENCABEZADO DEL PROGRAMA - COMENTARIOS


La primera informacin que debe existir en el programa es el
encabezado program header.
Debe tener la siguiente informacin:
Nombre del archivo
Nombre del autor
Fecha de comienzo de la programacin
Breve informacin de la funcin del programa
Fecha de modificacin
Quien hizo los cambios
Descripcin de las variables, constantes, terminales, etc.
usadas
Igualmente, todas las subrutinas usadas deben contener la misma
informacin

AJUSTES EN EL COMPILADOR IPOSplus

Genera un archivo *.MDX si se activa la


casilla
Genera un archivo lista *.LST. Este archivo
contiene informacin sobre los recursos
utilizados y errores.
Salva automticamente el cdigo fuente
luego de compilar

Define la ruta donde guardar el archivo lista *.LST


Define la ruta donde guardar el archivo *.MDX
Define la ruta donde guardar la carpeta donde se
encuentran los archivos del header vinculados
con la instruccin #include

El editor esta equipado con un buscador


de palabras.

Tambin se pueden reemplazar


palabras

CREANDO UN NUEVO PROYECTO

GUARDANDO UN NUEVO PROYECTO

El programa se guarda por defecto


como un Source File (*.IPC)

Alternativamente se puede guardar


Como un archivo Header (*.H).
Este se usa para los encabezados

ENCABEZADO-DECLARACIONES DEL PRE-PROCESADOR

Se insertan como standard las declaraciones:


#include <const.h> (incluye un archivo header llamado const.h)
#include <io.h> (incluye un archivo header llamado io.h)
Estos archivos tienen un formato fijo y no se deben cambiar.
La funcin de los archivos de encabezado es definir macros para el uso
de las Instrucciones, variables, entradas y salidas digitales del IPOSplus
#define ActPos_Mot H511
#define DI03 (H483 & 0b1000)

COMANDOS DEL PRE-PROCESADOR


#define
Define una macro para reemplazar smbolos
en la fuente de texto
#include
Incorpora fuentes de texto desde otros
archivos, llamados archivos de
encabezado(*.h)
Usado para definir constantes y macros que
se utilizan en varios proyectos

Ejemplos:
#define
/*======================================================
IPOS Source File
========================================================*/
#define Setpoint H123
#define MAXIMO
2000
Setpoint = MAXIMO

// esto es reemplazado por H123 = 2000

#undef
Hace posible desactivar el macro creado con #define

#declare
Hace posible declarar simblicamente variables IPOS
relativamente a una variables base.
#declare IdentificadorNuevo IdentificadorViejo : Offset
/*======================================================
IPOS Source File
========================================================*/
#define
#declare
#declare
#declare

BASEVAR H100
Setpoint BASEVAR:0
ActVal
BASEVAR:1
i
BASEVAR:5

NOTA:
Se puede definir un mximo de 600
directivas #define + #declare

Estructuras pre-definidas
Estas estructuras Standard se
utilizan de la siguiente manera:

/*======================================================
IPOS Source File
========================================================*/
SSPOSSPEED VelocidadRapida, VelocidadLenta;
main()
{
/*------------------------------------Initialisation
--------------------------------------*/
VelocidadRapida.CW = 14000;
VelocidadRapida.CCW = 12500;
VelocidadLenta.CW
= 3000;
VelocidadLenta.CCW = 4500;

Declaracin de Variables

Long
Localizada en una
variable voltil
(global variable)

initial long
Localizada en una
variable no voltil
(H0 H127)

Comandos del pre-procesador


#pragma
#pragma list
incluye lneas de texto como comentarios
en el programa IPOS resultante
#pragma var
Instruye al Compilador a usar un grupo
de variables para el calculo de una
expresin (Variables auxiliares)
#pragma globals
Instruye al Compilador a asignar un
numero de variable desde el rango de
Hmin Hmax a las variables declaradas
con long
H0 a H127 usar #pragma initials

Identificadores

Un nombre de variable simblico o un nombre de funcin

Solo letras, nmeros, y el guin bajo (_) se pueden usar

Debe empezar con una letra o un guin bajo

Pueden ser de hasta 32 carcacteres de longitud

Use mayscula para constantes

(Ej. #define MAXRPM

3200)

Use mayscula para la primera letra de una variable


(Ej. #define VarTime1 H320)

Identificadores validos:

Identificadores no validos:

Identifier_1
_ControlWord
CONSTANT

1_Identifier
Control-Word
My Identifier
EsteNombreEsMuyLargoParaUtilizarCo
mo

Direccionamiento indirecto
Se determina un direccionamiento indirecto con: *H0.*H511.
Ejemplo
H2=5;
H3=6;
H5=7;
H6=3;
H1= *H2 + *H3;

El resultado de la variable H1= 10


H1 = H5 + H6

Construcciones en C
if e if else
If
Se ejecuta si la expresin dentro del
parntesis es verdadera (!= 0).
La expresin puede contener varias
condiciones.
Else
Se

ejecuta si la expresin dentro del


parntesis es falsa (= 0).
El else no tiene que especificarse si no
es necesario.

For
La

declaracin For permite hacer un bucle de programa

for (Expresion1; Expresion2; Expresion3)


Expresion1=
Se ejecuta al comienzo de bucle.Se inicializa la
variable que determina el bucle
Expresion2 =
Determina cuando se rompe el bucle (FALSO)
Expresion3 =
Se procesa luego de ejecutarse la declaracion. Se
utiliza para alterar la variable de la Expresion1
Ejemplo:
H1 = 20;
Se inicializa H0 en cero, luego se verifica
for (H0 = 0; H0 < 10; ++H0)
si H0 es menor que 10. Si es verdadero
H1 = H1 + 2;
se incrementa H0. Al final del bucle
H0 = 10 y H1 = 40

While
La

declaracin while es un bucle


condicional que se repite cada vez
que la expresin es verdadera.
La

condicin se verifica al comienzo


del bucle.

do while
La

declaracin do es un bucle
condicional en donde la condicin
se verifica al final del bucle.
La

declaracin al menos se
ejecuta una vez.
La

declaracin se ejecuta
nuevamente si la expresin es
verdadera al final del bucle.

switch case
La

declaracin switch hace


posible crear mltiples
bifurcaciones de programa
dependiendo del valor de la
expresin.
Se

puede utilizar una


bifurcacin por default como
la ultima parte de la
declaracin de switch.

numof()
La palabra clave numof()
retorna el numero de una
variable.

Es una buena idea usar


numof() para variables
indirectas y para inicializar
estructuras de datos.

Interrogando bits y entradas digitales


Interrogando bits:
Para interrogar un bit de una variable se ejecuta una operacin AND
con una constante donde el bit a verificar tiene el valor 1
H483 & 0b100
Si el resultado es cero entonces el bit interrogado es cero. Si el resultado
no es igual a cero entonces el bit interrogado es 1.
Ejemplo:

#include <const.h>
#define INPUTS H483
#define DI03
0b1000
main()
{
if((INPUTS & DI03)!=0)
{
H10 = 1;
}
}

Ejemplo 1
Escriba un programa en Compilador que:
Escriba un valor a una variable.
Escriba un valor desde una variable a otra variable.
Primero, elegir nombres de variables.

/*=====================================================
IPOS Source File
=====================================================*/
long PrimeraVariable, SegundaVariable, TerceraVariable;

Luego, escriba el comando en el bucle del programa principal


/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
PrimeraVariable = 1000;
TerceraVariable = SegundaVariable;
}
}

Finalmente, compile y cargue el programa.

Funciones del Sistema


Funciones de Comando de Bit
_BitClear
Pone un bit individual de una variable a 0
_BitMove
Copia un bit individual de una variable en una posicin de bit de una
variable diferente.
_BitMoveNeg
Copia el valor negado de un bit en una variable en una posicin de bit de
una variable diferente.
_BitSet
Ajusta un bit individual de una variable a 1.

Funciones de Comando de Espera


_Wait
Espera

por un tiempo especificado en milisegundos (ms).

_WaitInput
Espera

mientras que un cierto nivel lgico esta presente en la entrada


especificada (s).
IC_HIGH = nivel 1
IC_LOW = nivel 0
_WaitSystem
Espera

mientras ocurre algn evento relacionado al sistema.


Por ejemplo, _WaitSystem (SC_N0) espera si la velocidad = 0.

Ejemplo 2
Escriba un programa en compilador que:
Conmute el Bit 4 de una variable cada 500 ms.
Primero, elija el nombre de la variable.

/*=====================================================
IPOS Source File
=====================================================*/
long VariableConmutable

Luego, inicialice el valor de la variable.

/*---------------------------------------------Initialisation
-----------------------------------------------*/
VariableConmutable = 0;

Luego, inserte el comando que ajusta el bit en el bucle del


programa principal.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_BitSet( VariableConmutable, 4 );
_

Inserte el comando para esperar 500 ms.

Finalmente, inserte el comando para llevar el bit a 0 y esperar


500 ms antes de continuar con el programa.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_BitSet( VariableConmutable, 4 );
_Wait( 500 );
_BitClear( VariableConmutable, 4 );
_Wait( 500 );
}

Ejemplo 3
Escriba un programa en compilador que:
Si DI10 esta en alto, parpadee DO14.
Si DI10 esta en bajo, ponga el Bit 0 de una variable al mismo
valor que la variable DI17.
Primero, elija el nombre de la variable.
/*=====================================================
IPOS Source File
=====================================================*/
long VariableConmutable;

Inserte un comando ifelse.

Inserte comandos para cumplir con las condiciones


requeridas.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
if( DI10 )
{
_BitMoveNeg( OptOutpIPOS, 4, OptOutpIPOS, 4 );
_Wait( 500 );
}
else
{
_BitClear( OptOutpIPOS, 4);
_BitMove( VariableConmutable, 0, InputLevel, 13 );
}
}

Actividad 1
Escriba un programa en Compilador :
Active la salidas de la placa opcional DIO11A en orden.
Use un intervalo de 500 ms entre cada salida.
Desactive todas las salidas luego que la salida DO17 estuvo activa
500 ms.
Repetir.

Instrucciones aritmticas
Operadores unitarios

Example

Operadores
binarios

Description
Valores iniciales:
Multiplicacin
Division
Divisin modulo
Adicion
Substraccin
Mover izquierda
Mover derecha
Menor que
Menor o igual que
Mayor que
Mayor o igual que
Compara por igual
Compara por no igual
Bit por bit AND
Bit por bit Exclusive OR
Bit por bit OR
AND lgica
OR lgica

Operadores binarios notacin abreviada

Ejemplo 4
Escriba un programa en Compilador que:
Calcule un valor usando una formula de torque cuando DI10
conmuta de bajo a alto.
Use un contador para recordar la cantidad de clculos.
Primero, defina la mascara de la entrada digital para el
comando _WaitInput y el nombre de las variables lgicas.
/*=====================================================
IPOS Source File
=====================================================*/
#define DI10_mascara 0b1000000
long Torque, kW, rpm, eff, Contador;

Inserte el comando para lograr la transicin de la DI10 desde el


estado bajo al alto.

Inserte la formula de torque y el contador.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_WaitInput( IC_HIGH, DI10_mascara );
_WaitInput( IC_LOW, DI10_mascara );
if( rpm != 0 )
{
Torque = ((kW * 9550 * eff)/(rpm * 1000));
Contador++;
}
}
*El coeficiente 1000 se usa para permitir un decimal mas para los hp y dos decimales
para eff.
** Use solo parntesis ( ) en ecuaciones matemticas. No use corchetes [ ] o llaves { }.

Funciones de Sistema
Funciones de Comando del Sistema
_GetSys
Carga un valor interno del sistema a
una o mas variables.

Esta incluye:
Corriente activa
Velocidad actual
Cdigo de falla
Status de sistema
Posicin actual
Status de entradas/salidas
Status entradas/salidas
analgicas
Datos PO.

Estructuras Pre-definidas
Algunas funciones requieren mas
de una variable. El Compilador
incluye estructuras para esto.

Luego de compilar el programa,


estas variables pueden usarse en el
programa.

Funciones de comando del


sistema
_SetSys

Ajusta un valor del sistema


interno desde una o mas
variables.

Esta incluye:
Velocidades fijas
Datos PI
Modo de operacin
Corriente mxima
Rampa de
posicionamiento
Velocidad de pos.
Posicin actual

Ejemplo 5
Escriba un programa en compilador que:
Lea el valor de las entradas analgicas,
Escale el valor de AI1 por 1.5,
Use el valor escalado para ajustar la n11, y
Use la Palabra de Control para hacer trabajar el motor a esta
velocidad.

Variable del sistema H484 CONTROL WORD del Movidrive

Inicialice el equipo para que trabaje la velocidad n11.

/*=====================================================
Initialisation
=====================================================*/
_BitSet( ControlWord, 4 );

Bit 0NO FUNCT.

Bit 1NO FUNCT.

Bit 2CW / STOP

Bit 3CCW / STOP

Bit 4N11 / N21

Bit 5N12 / N22

Bit 6Fix SP Chg.

Bit 7Param. Chg.

Ver IPOSplusManual para ms


informacin

0V

AI1
-10V

Basic unit: X11 5

+10V

0V

AI2

-10V

DIO11A: X20 3

+10V

Estructure las variables para las entradas analgicas

/*=====================================================
IPOS Source File
=====================================================*/
GSAINPUT Ain;

Inserte el comando para leer la entrada analgica.

Escale el valor de AI1 por 1.5.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_GetSys( Ain.Input1, GS_ANINPUTS );
Ain.Input1 = (Ain.Input1 * 3)/2;
_
}

#160

N11 Valor en
RPM

Cambiar el Parmetro

Fix Setpoint
N11

Inserte el comando para cambiar un parmetro del sistema n11.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_GetSys( Ain.Input1, GS_ANINPUTS );
Ain.Input1 = (Ain.Input1 * 3)/2;
_SetSys( SS_N11, Ain.Input1 );
}

Ejemplo 6
El Movidrive provee 6 velocidades fijas.
Use el Compilador para expandir el numero de velocidades
fijas a 8. Seleccione las vel. fijas a travs de las entradas
digitales (DI15, DI16, DI17)
Muestre en el panel de comando el numero correspondiente
seleccionado (0...7) usando las salidas digitales (DO15, DO16,
DO17)

Determine el nivel de las entradas digitales DI15, DI16, y/o


DI17.
Placa opcional DIO11, Terminal X22

Unidad bsica. Terminal X13

Vel. Pre-fijada 0 ... 7

Nivel de terminales en la variable del sistema IPOSplus


Variable del sistema H483
Bit 14 - 31
reservado

Bit 13
DI 17

Bit 12
DI 16

Bit 11
DI 15

Bit 10
DI 14

Bit 9
DI 13

Bit 8
DI 12

Placa opcional DIO11

Bit 7
DI 11

Bit 6
DI 10

Bit 5
DI 05

Bit 4
DI 04

Bit 3
DI 03

Bit 2
DI 02

Bit 1
DI 01

Bit 0
DI 00

Unidad bsica Movidrive

"0"

"0"

"0"

"0"

6
1

10

11

Variable IPOSplus H483 nivel de entradas digitales


Bit 31

DI17 DI16 DI15


DI17 DI16 DI15
Bit 2 Bit 1 Bit 0
Bit14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit
Condicin Terminal

&

& & & & & & & & & & & & & & &
Mascara lgica AND de valorhex
7

"0"

Bit 31

"0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "1" "1"
Bit14

Bit 13 Bit 12 Bit 11 Bit 10

Bit 9

Bit 8

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

22=4

21=2 20=1

4 + 2 + 1=7
Variable IPOSplus VelocidadAsignada luego de la

"0"

Bit 31

"0" "0" operacin


"0" "0" AND
"0" "0" "0" "0" "0" "0" "0" "0"
Bit14

Bit 13 Bit 12 Bit 11 Bit 10

Bit 9

Bit 8

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

DI17
Bit 2

DI16
Bit 1

DI15
Bit 0

Condicin Terminal
Como resultado de la operacin AND, estos bits siempre son "0.

Defina un nombre de variable para aislar los niveles de entrada.

Defina el nombre de la variable para la velocidad deseada.

/*=====================================================
IPOS Source File
=====================================================*/
#define VelocidadAsignada ((InputLevel >> 11) & 0x7)
#define Velocidad1 H0
#define Velocidad2 H1
#define Velocidad3 H2
#define Velocidad4 H3
#define Velocidad5 H4
#define Velocidad6 H5
#define Velocidad7 H6
#define Velocidad8 H7
long Apuntador, VelocidadDeseada;

Escriba las siguientes velocidades en las variables:


500,

700, 750, 1000, 1100, 1200, 1500, 3000 rpm

Ajuste el bit que designa la velocidad n11 en la Palabra de


Control

/*=====================================================
Initialisation
=====================================================*/
Velocidad1 = 500 * 10;
Velocidad2 = 700 * 10;
Velocidad3 = 750 * 10;
Velocidad4 = 1000 * 10;
Velocidad5 = 1100 * 10;
Velocidad6 = 1200 * 10;
Velocidad7 = 1500 * 10;
Velocidad8 = 3000 * 10;
_BitSet( ControlWord, 4 );

Determine la velocidad deseada usando direccionamiento


indirecto.
VelocidadDeseada

VelocidadAsignada

n11 Valor en
rpm

Ve
l

oc
i

2.

d=
ida

1.

da
dD
es
.=

loc
Ve

75

[Apuntador]

H0
H1
H2
H3
H4
H5
H6
H7
Velocidad1 Velocidad2 Velocidad3 Velocidad4 Velocidad5 Velocidad6 Velocidad7 Velocidad8
500 (rpm) 700 (rpm) 750 (rpm) 1000 (rpm) 1100 (rpm) 1200 (rpm) 1500 (rpm) 3000 (rpm)

Variables con los valores de las 8 velocidades fijas

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
Apuntador = VelocidadAsignada;
VelocidadDeseada = *Apuntador;
}

#160

N11 Valor en
RPM

Cambia el parmetro

Fix Setpoint
N11

Inserte el comando que ajuste el parmetro del sistema n11


/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
Apuntador = VelocidadAsignada;
VelocidadDeseada = *Apuntador;
_SetSys( SS_N11, VelocidadDeseada );
}

Variable IPOSplus VelocidadAsignada


Bit 31

Bit14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8

DO17 DO16 DO17


Bit 7
Bit
7 Bit
Bit 66 Bit
Bit 55

Condition terminal

Bit 4 Bit 3

DO17DO16 DO15
Bit 2 Bit 1 Bit 0

OptOutpIPOS Variable H480


Bit 8-31 reservado

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


DO17 DO16 DO15 DO14 DO13 DO12 DO11 DO10

Inserte un comando para ajustar la salidas correspondientes.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
Apuntador = VelocidadAsignada;
VelocidadDeseada = *Apuntador;
_SetSys( SS_N11, VelocidadDeseada );
OptOutpIPOS = VelocidadAsignada << 5;
}

Actividad 2
Escriba un programa en Compilador que:
Use las salida digitales de la placa DIO11A como indicador de
torque.
A medida que el torque se incremente, encienda mas salidas
digitales.
A medida que el torque disminuya, apague salidas digitales.
Use los siguientes niveles para el torque:
DO10 > 5% IN
DO11 > 10% IN
DO12 > 20% IN
DO13 > 30% IN

DO14 > 40% IN


DO15 > 60% IN
DO16 > 80% IN
DO17 > 100% IN

Funciones del Sistema


Funciones de Comandos de
Ajuste
_SetInterrupt
Especifica una funcin
como una rutina de
interrupcin.
La rutina de interrupcin
puede generarse por:
Seal de falla
Valor de un timer
Entrada touchprobe.
_FaultReaction
Programa la respuesta de una
falla.

Funciones de Comando de
Programa
_Copy

Copia hasta un mximo de 10


variables sucesivas en otra
posicin.
_SetTask2

Especifica el lugar donde


comienza o para el Task 2.

Ejemplo 7
Agregue una rutina de interrupcin al Ejemplo 6:
Haga que la interrupcin se ejecute en funcin a una falla.
Use la entrada digital DI05 para disparar una falla externa.
Haga que la rutina de interrupcin determine cual fue la falla
ocurrida.
Haga que la rutina de interrupcin restablezca la falla externa.

Seleccione new y elija la rutina de interrupcin basada en


una falla.

Copie los comandos del Ejemplo 6.

Agregue otro nombre a la variable para el numero de falla.

/*=====================================================
IPOS Source File
=====================================================*/
long Apuntador, VelocidadDeseada, NumeroFalla;

#602
Binary Input
DI03
#603
Binary Input
DI04

Cambiar el parmetro

#604
Binary Input
DI05

Cambiar con Movitools.

Luego, programe la entrada digital DI05 para que dispare la


falla externa.

Parametros Movidrive.

Inserte el comando para leer el numero de falla.

NumeroFalla
Codigo error

25
EEPROM

26
27
External Terminal Limit Switches
Missing

28
Fieldbus Timeout

XX
Fault
codes

Lista de Fallas

/*=====================================================
Interrupt Service Routine
=====================================================*/
Interrupt()
{
_GetSys( NumeroFalla, GS_ERROR );
}

Inserte los comandos para restablecer la falla solo si es una


falla externa (External terminal).

/*=====================================================
Interrupt Service Routine
=====================================================*/
Interrupt()
{
_GetSys( NumeroFalla, GS_ERROR );
if( NumeroFalla == 26 )
{
_BitSet( ControlWord, 12 );
_BitClear( ControlWord, 12 );
}
}

Escriba un programa en Compilador que:

Copie un bloque de tres variables basado en el estado de tres


entradas digitales y

Haga parpadear una salida digital independientemente de la


copia.

Escoja new y seleccione la rutina Task #2

Haga conmutar la salida DO10 cada 500 ms en la rutina de Task #2.

OptOutpIPOS Variable H480


Bit 8-31 reservado

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


DO17 DO16 DO15 DO14 DO13 DO12 DO11 DO10

/*=====================================================
Task2
=====================================================*/
Task2()
{
_BitMoveNeg( OptOutpIPOS, 0, OptOutpIPOS, 0 );
_Wait( 500 );
}

Inserte la siguiente declaracin define y long.

/*=====================================================
IPOS Source File
=====================================================*/
#define ValorRequerido_a H0
#define ValorRequerido_b H1
#define ValorRequerido_c H2

long Bloque1_a, Bloque1_b, Bloque1_c,


Bloque2_a, Bloque2_b, Bloque2_c,
Bloque3_a, Bloque3_b, Bloque3_c;

Use las siguientes velocidades para los bloques de


variables:

1000, 1200, 1500 rpm


950, 1150, 1450 rpm
1175, 1375, 1675 rpm

/*=====================================================
Initialisation
=====================================================*/
Bloque1_a = 1000 * 10;
Bloque1_b = 1200 * 10;
Bloque1_c = 1500 * 10;
Bloque2_a = 950 * 10;
Bloque2_b = 1150 * 10;
Bloque2_c = 1450 * 10;
Bloque3_a = 1175 * 10;
Bloque3_b = 1375 * 10;
Bloque3_c = 1675 * 10;

Inserte el comando condicional en el bucle del programa


principal.
/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
if( DI10 )
{
}
if( DI11 )
{
}
if( DI12 )
{
}
}

Use el comando _Copy para terminar el programa.


/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
if( DI10 )
{
_Copy(ValorRequerido_a, Bloque1_a, 3);
}
if( DI11 )
{
_Copy(ValorRequerido_a, Bloque2_a, 3);
}
if( DI12 )
{
_Copy(ValorRequerido_a, Bloque3_a, 3);
}
}

Actividad 3
Escriba un programa en Compilador que:
Use una entrada digital para hacer parpadear un led.
Luego de 5 segundos, el motor debe arrancar en sentido
horario (CW).
Utilice una segunda entrada para detener el parpadeo del led
y el motor.

Funciones del Sistema


Funciones de Comando Especiales
_AxisStop
Permite la habilitacin o deshabilitacin del drive con el programa.
_Memorize
Permite grabar variables y el prog. en la memoria no voltil.
_WdOn y _WdOff
Activa y desactiva el watchdog funcin de monitoreo por tiempo.
_TouchProbe
Activa el procesamiento de la interrupcin touchprobe para capturar
posiciones basada en las entradas de alta velocidad.

Ejemplo 9
Escriba un programa en Compilador que:
Use las funciones touchprobe para utilizarlas como entradas rpidas.
/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_TouchProbe( TP_EN1_HI );
_TouchProbe( TP_EN2_HI );
}

Cambie el nivel de las entradas digitales rpidas con el motor girando,


para ver los efectos de la funcin touchprobe.

Funciones del Sistema


Funciones de Comando de Posicin

Busqueda del Home _Go0.

Posicionamiento en funcin de
un punto de referencia
_GoAbs.

Posicionamiento relativo a la
posicin actual _GoRel.

Cuando se utilizan comandos


de posicin, los parmetros
IPOS (P9xx) tienen que
programarse.

Cuando se utilizan comandos


de posicin, P700 tiene que
programarse como IPOS
mode.

Parmetros
Parmetros de posicionamiento
P90_ Reference Travel
Establece valores usados por el
comando _Go0

P91_ Travel Parameters


Establece valores para el movimiento
usados por los comandos _GoAbs y
_GoRel .

P92_ Monitoring
Establece valores de limites de
carrera software.
Establece valores de error de
posicin.

P93_ Special Functions


Permite variar la velocidad de
trabajo a travs de la entrada
analgica.

P94_ - Encoder

Establece la fuente del


encoder usada por los
comandos _Go0, _GoAbs, y
_GoRel.

P96_ - Modulo Function

Establece la correccin del


error para movimientos
repetitivos en la misma
direccin con reducciones (i)
no enteras.

Ejemplo 10
Escriba un programa en Compilador que:
Haga 5 revoluciones del motor, 10 veces, con una pausa de
un segundo entre cada movimiento.
Luego, vuelva a la posicin de home.
Esperar otro segundo.
Repetir.

Inserte la siguiente declaracin define y long.

/*=====================================================
IPOS Source File
=====================================================*/
#define MOVER 40960
#define HOME 0
long Contador;

Hacer la bsqueda de cero home.

/*=====================================================
Initialisation
=====================================================*/
_Go0( GO0_C_W_ZP );
Contador = 0;

Inserte el comando para hacer 5 veces 10 revoluciones.

Inserte el comando para volver al home.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
while( Contador <= 4 )
{
_GoRel( GO_WAIT, MOVER );
_Wait( 1000 );
Contador++;
}
_GoAbs( GO_WAIT, HOME );
_Wait( 1000 );
Contador = 0;
}

Ejemplo 11
Escriba un programa en Compilador que:
Contenga 8 posiciones de tabla.
Vaya a una de estas posiciones segn el estado de las
entradas digitales DI15, DI16 y DI17.
Use la entrada DI14 para sealizar cuando todas las entradas
estn listas.
Una vez que el motor este en posicin programe las
correspondientes salidas DO15, DO16 y DO17.

Determine el nivel de las entradas DI15, DI16 y DI17.

Placa opcional DIO11, Terminal X22

Unidad basica Terminal X13

Posicion preajustada 1 ... 8

Nivel de los terminales en la variable IPOS plus


Variable H483 Nivel de entradas
Bit 14 - 31
reservado

Bit 13
DI 17

Bit 12
DI 16

Bit 11
DI 15

Bit 10
DI 14

Bit 9
DI 13

Opcion DIO11

Bit 8
DI 12

Bit 7
DI 11

Bit 6
DI 10

Bit 5
DI 05

Bit 4
DI 04

Bit 3
DI 03

Bit 2
DI 02

Bit 1
DI 01

Movidrive Standard

Bit 0
DI 00

"0"

"0"

"0"

"0"

6
1

10

11

Variable IPOSplus H483 nivel de entradas digitales


Bit 31

DI17 DI16 DI15


DI17 DI16 DI15
Bit 1 Bit
Bit 0
Bit 2 Bit
Bit14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit
Condicin Terminal

&

& & & & & & & & & & & & & & &
Mascara lgica AND de valorhex
7

"0"

Bit 31

"0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "1" "1"
Bit14

Bit 13 Bit 12 Bit 11 Bit 10

Bit 9

Bit 8

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2
2

2 =4

Bit 1

Bit 0

2 =2 20=1

4 + 2 + 1=7
Variable IPOSplus VelocidadAsignada luego de la

"0"

Bit 31

"0" "0" operacin


"0" "0" AND
"0" "0" "0" "0" "0" "0" "0" "0"
Bit14

Bit 13 Bit 12 Bit 11 Bit 10

Bit 9

Bit 8

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

DI17
Bit 2

DI16
Bit 1

DI15
Bit 0

Condicin Terminal
Como resultado de la operacin AND, estos bits siempre son "0.

Defina el nombre de la variable que tendr los niveles de


entrada.

Defina el nombre de las variables con las posiciones


necesarias y la mascara para el comando _WaitInput .

/*=====================================================
IPOS Source File
=====================================================*/
#define PosicionSeleccionada ((InputLevel >> 11) & 0x7)
#define Posicion1 H0
#define Posicion2 H1
#define Posicion3 H2
#define Posicion4 H3
#define Posicion5 H4
#define Posicion6 H5
#define Posicion7 H6
#define Posicion8 H7
#define DI14_mascara 0b10000000000
long Apuntador, PosicionDeseada;

Escriba las siguientes posiciones en las variables


asignadas:
-20000, -10000, 10000, 20000, 30000, 40000, 60000,
100000 incrementos

Haga una bsqueda de Home para determinar la posicin


cero .

/*=====================================================
Initialisation
=====================================================*/
Posicion1 = -20000;
Posicion2 = -10000;
Posicion3 = 10000;
Posicion4 = 20000;
Posicion5 = 30000;
Posicion6 = 40000;
Posicion7 = 60000;
Posicion8 = 100000;
_Go0( GO0_C_W_ZP );

Inserte el comando para esperar una entrada digital DI14.

/*----------------------------------------------May Loop
-----------------------------------------------*/
while(1)
{
_WaitInput( IC_LOW, DI14_mascara );
}

Determine la posicin deseada usando direccionamiento indirecto


00

PosicionDeseada

H1
Posicion2
-10,000

H2
Posicion3
10,000

Po
si
ci

c i.

H0
Posicion1
-20,000

on
D

2.

c
ele
nS

1.

es
ea
da

io
s ic
Po
=3

20

Posicin Seleccin.
[Data Pointer]

H3
Posicion4
20,000

H4
Posicion5
30,000

H5
Posicion6
40,000

H6
Posicion7
60,000

Variables con los valores de posicin de la tabla

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_WaitInput( IC_LOW, DI14_mascara );
Apuntador = PosicionSeleccionada;
PosicionDeseada = *Apuntador;
}

H7
Posicion8
100,000

Moverse a la posicin deseada

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_WaitInput( IC_LOW, DI14_mascara );
Apuntador = PosicionSeleccionada;
PosicionDeseada = *Pointer;
_GoAbs( GO_WAIT, PosicionDeseada);
}

IPOSplus Variable PosicionSeleccionada


Bit 31

Bit14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8

DO17 DO16 DO17


Bit 7
7 Bit
Bit66 Bit
Bit 55

Bit 4

Bit 3

DO17 DO16 DO15


Bit 2 Bit 1 Bit 0

Condicin Terminal

OptOutpIPOS Variable H480


Bit 8-31 reservado

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


DO17 DO16 DO15 DO14 DO13 DO12 DO11 DO10

Inserte el comando para marcar la posicin seleccionada


con las salidas digitales.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_WaitInput( IC_LOW, DI14_mascara );
Apuntador = PosicionSeleccionada;
PosicionDeseada = *Apuntador;
_GoAbs( GO_WAIT, PosicionSeleccionada);
OptOutpIPOS = PosicionSeleccionad << 5;
}

Actividad 4
Escriba un programa en Compilador:
Que busque la posicin de home.
Moverse 10 revoluciones absolutas y -10 revoluciones
absolutas.
Lo siguiente es mover 10 revoluciones adicionales absolutas
hasta que el motor llegue a 50 revoluciones absolutas.
Luego moverse, volver a la posicin de home.
Repetir.

Funciones del Sistema


Funciones de Comando
de comunicacin
_MoviLink
El comando permite el intercambio de process data (PD) y/o e
intercambio de parmetros (PARAM) con otro MOVIDRIVE
va RS-485 o SBus. Es posible cambiar parmetros de la misma
unidad (no es posible el intercambio de PD para la misma
unidad)
Es posible comunicarse con el MOVIMOT (siempre el
receptor) va RS-485.

_SBusCommDef

Este comando se utiliza para intercambiar datos hasta 8 bytes


(solo variables) exclusivamente va el CAN bus (Sbus)

_SBusCommDef

La instruccin crea un dato objeto para la transferencia de datos


cclicos o asclicos. El dato objeto se escribe en una estructura de
variables
SCD_TRCYCL: transmisin cclica
SCD_REC: recepcin de transmisin
SCD_TRACYCL: transmisin asclica

_SBusCommOn
Esta instruccin permite iniciar la comunicacin

_MoviLink

Modifica parmetros de
Movidrive o Movidrive
compact.

Modifica parmetros de otra


unidad Movidrive,
Movidrive compact, o
Movitrac 07.

Intercambia valores de
proceso (process data) con
otra unidad Movidrive,
Movidrive compact,
Movimot, o Movitrac 07.

Usa dos estructuras


predefinidas.

_SBusCommDef y
_SBusCommOn

Intercambia datos en
aplicaciones IPOSplus
corriendo en otra unidad
Movidrive.

Usa dos estructuras


predefinidas.

Ejemplo 12
Escriba un programa en Compilador que:
Enve y reciba dos variables de y desde otro equipo.
Inserte las estructuras para enviar y recibir comandos
a travs de una comunicacin S-Bus.
/*=====================================================
IPOS Source File
=====================================================*/
SCTRCYCL Enviar;
SCREC Recibir;
long EviarDato,RecibirDato;

Crear el bloque de enviar.

Crear el bloque de recibir.

/*=====================================================
Initialisation
=====================================================*/
Enviar.ObjectNo
= 1025;
Enviar.CycleTime
= 1;
Enviar.Offset
= 0;
Enviar.Format
= 8;
Enviar.DPointer
= numof(Enviar);
Recibir.ObjectNo = 1026;
Recibir.Format
= 8;
Recibir.DPointer = numof(Recibir);

Inserte el comando de comunicacin S-Bus.

/*=====================================================
Initialisation
=====================================================*/
Enviar.ObjectNo
= 1025;
Enviar.CycleTime
= 1;
Enviar.Offset
= 0;
Enviar.Format
= 8;
Enviar.DPointer
= numof(EnviarData);
Recibir.ObjectNo = 1026;
Recibir.Format
= 8;
Recibir.DPointer = numof(RecibirData);
_SBusCommDef( SCD_TRCYCL, Enviar );
_SBusCommDef( SCD_REC, Recibir );
_SBusCommOn( );

Ejemplo 13
Escriba un programa en Compilador que:
Cambie el parmetro P130 de otro equipo.
Inserte la estructura para los comandos Movilink.
/*=====================================================
IPOS Source File
=====================================================*/
MOVLNK Ml;
MLDATA Mld;

Cree el bloque de datos necesarios para Movilink.

/*=====================================================
Initialisation
=====================================================*/
Ml.BusType
= 5;
Ml.Address
= 0;
Ml.Format
= 134;
Ml.Service
= 3;
Ml.Index
= 8470;
Ml.DPointer = numof(Mld);
Mld.WritePar = 1500;

Inserte el comando Movilink en el programa.

/*----------------------------------------------Main Loop
-----------------------------------------------*/
while(1)
{
_MoviLink( Ml );
}

Actividad 5
Escriba dos programas en Compilador:
Equipo #1 enve la velocidad actual a otro equipo.
Equipo #2 se mueva para atrs y adelante 30
revoluciones de motor.
Equipo #2 use la seal de velocidad del Equipo#1
para ajustar su velocidad de movimiento.

Das könnte Ihnen auch gefallen