Función de Transferencia: © Festo Didactic GMBH & Co. KG 136
Función de Transferencia: © Festo Didactic GMBH & Co. KG 136
Con esta correlación es fácil configurar una función de transferencia 63 de forma que la tensión
analógica se corresponda con la distancia al objeto en cm. Tenga en cuenta que esta correlación es la
inversa de la mostrada arriba. Esto significa que debemos omitir distancias inferiores a 4 cm. Una
distancia inferior a 4 cm no puede distinguirse de una distancia superior a 4 cm, puesto que la tensión
analógica de la salida del sensor es la misma.
La correlación entre la tensión analógica y la distancia también viene influida por el material del objeto a
detectar. Por todo ello, es una buena práctica establecer la correlación por medios propios en cada caso.
Los valores de la función de transferencia 63 se dan a continuación- Puede Copiar y Pegar estos valores
en su propia función de transferencia 63 .
0.3 40
0.39 35
0.41 30
0.5 25
0.75 18
0.8 16
0.95 14
1.05 12
1.3 10
1.4 9
1.55 8
1.8 7
2 6
2.35 5
2.55 4
Esta carpeta contiene bloques de función para utilizar la cámara del Robotino.
[Link].1 Cámara
Salidas
Imagen imag La imagen de la cámara del Robotino
en
Para ajustar la resolución de la imagen, puede utilizar el diálogo del dispositivo 128 .
[Link].1 Diálogo
Muestra la última imagen. Para ajustar la resolución de la imagen, véase diálogo del dispositivo 128 .
Aquí puede encontrar bloques de función para acceder al conector de E/S del Robotino.
[Link].1 Relé
Relés conmutadores 1 y 2
[Link] Navegación
[Link].1 Odometría
Para esta función se necesita una tarjeta de memoria Compact-Flash de 1GB para
Robotino (V1.7 o superior).
(No funciona con tarjetas de memoria de 256MB ni versiones <=1.6)
La odometría es la utilización de datos procedentes del movimiento de los actuadores para estimar los
cambios de posición en el tiempo. Véase [Link]
La rotación de las ruedas se mide con la mayor resolución posible en el tiempo. A cada paso de tiempo,
se calcula la distancia recorrida por el vehículo a partir de la velocidad de rotación de las ruedas. Estas
distancias muy pequeñas obtenidas de los pasos, se integran a lo largo del tiempo. Con ello se obtiene la
posición actual relativa a la posición de partida. Con este método se obtienen unos buenos resultados
locales. En largas distancias o bajo condiciones adversas (deslizamiento de las ruedas debido a polvo en
el suelo, deriva producida por un sentido preferente del piso), este método produce errores muy
apreciables. Teniendo esto en cuenta, la odometría siempre se combina con otros métodos para
compensar los errores citados.
Salidas
x float mm La posición x actual de la odometría en las coordenadas globales.
y float mm La posición y actual de la odometría en las coordenadas globales.
phi float Grado La orientación actual de la odometría en las coordenadas globales.
s
North Star ® es un sensor que determina la posición absoluta del Robotino® con la ayuda de proyectores.
Salidas
x float mm La posición x actual en las coordenadas globales.
y float mm La posición y actual en las coordenadas globales.
phi float Grado La orientación actual en las coordenadas globales.
s
Proyectore int Número de proyectores visibles.
s
El detector NorthStar puede fijarse al Robotino de diferentes formas. Según la configuración, el archivo: /
etc/robotino/[Link] del robotino debe ser adaptado con un editor de texto. El valor de la
orientación debe establecerse según la figura inferior.
<NorthStar>
<!--The orientation of the northstar sensor. See [Link]-->
[Link].2 Diálogo
[Link].2 Ejemplo
NorthStar detectará el proyector que pertenece a la sala número 4. El nuevo proyector NorthStar debe
establecerse para la sala 1.
Restando los componentes de NorthStar y odometría, puede verse el error que se produce entre
odometría y NorthStar.
Esta carpeta contiene bloques de función para otros interfaces de hardware del Robotino.
Este bloque de función lee valores del transmisor giratorio (encoder) del Robotino.
La entrada del transmisor giratorio interpreta las señales de un encoder digital (Canales A-B, código de
Gray).
Se tienen en cuenta los flancos ascendente y descendente. Esto produce una resolución efectiva de 4
cuadrantes.
Ejemplo: El encoder de los motores de accionamiento del Robotino tiene una resolución de 500 pulsos.
De forma efectiva, se cuentan 2000 pulsos.
Salidas
Velocidad int pulso El voltaje medido.
actual s/s
Posición int pulso La suma de todos los pulsos medidos desde la puesta en marcha de
actual s Robotino o desde que "Restablecer posición" = true.
Este bloque de función asigna valores de consigna a la salida de potencia del Robotino (anteriormente
Motor 4). La salida de potencia sólo puede utilizarse si el subprograma no utiliza la pinza.
La salida es materializada por un puente H, que puede suministrar hasta 5A de corriente continua.
El puente H es controlado por una señal PWM de alta frecuencia y un bit para la dirección.
El signo del valor de consigna dado por la entrada corresponde al bit de dirección.
El valor absoluto del valor de consigna influye la señal PWM.
Un valor de consigna de 0 no genera ninguna señal PWM, es decir, el puente H no suministra corriente
alguna.
Un valor de consigna de 50 produce una relación high-low (alto-bajo) de la señal PWM del 50%.
Un valor de consigna de 100 genera una señal permanente alta, es decir, el puente H suministra la
máxima corriente.
Salidas
Intensidad float A Intensidad (corriente) que fluye por el puente H.
[Link].3 Pinza
Utilice este módulo con una Pinza Robotino de Festo. La Pinza sólo puede utilizarse si el subprograma
actual no contiene ninguna salida de potencia 152 .
Salidas
Abierta bool Verdadera (true) si la pinza ha alcanzado su posición abierta.
Cerrada bool Verdadera (true) si la pinza ha alcanzado su posición cerrada.
Salidas
Consumo float A La intensidad actual consumida por las baterías del Robotino.
de
potencia
Batería float Volt Tensión de la batería.
[Link].2 Desconexión
6.4 Joystick
El dispositivo "Joystick" permite el acceso a una palanca de mando conectada localmente.
6.4.1 Diálogo
1 Lista de joysticks El cuadro combinado contiene una entrada para cada joystick disponible
disponibles en el ordenador. La lista se actualiza cada vez que se añade o se retira un
joystick del ordenador. Al seleccionar un joystick, sus botones y ejes están
disponibles a través de los correspondientes bloques de función.
2 Número de ejes El número de ejes del joystick seleccionado.
[Link] Botón
[Link] Eje
6.5.1 Diálogo
1 Lista de cámaras Aquí se muestran todas las cámaras conectadas al sistema. La lista se
disponibles actualiza cuando se conecta o se retira una nueva cámara del ordenador.
2 Escaneo Actualiza la lista de cámaras disponibles.
3 Conectar/Desconectar Establece/Cierra la conexión con la cámara seleccionada.
4 Resolución/Profundidad Aquí puede ajustar la resolución y la profundidad de color. Se muestran
de color todas las resoluciones soportadas por la cámara.
5 Ventana de mensajes Muestra los diferentes mensajes en forma de texto.
Tras seleccionar una cámara, se establece la conexión. Entonces es posible ajustar la resolución.
[Link] Cámara
Salidas
Imagen imag Imagen en directo
en
[Link].1 Diálogo
El diálogo de la cámara muestra la imagen actual Para ajustar la resolución de la imagen, véase diálogo
del dispositivo 156 .
En la muestra que sigue, Festo EasyPort se conectará al Robotino View a través del Servidor Festo EzOPC
gratuito.
El Servidor EzOPC asigna las entradas/salidas de hasta 4 EasyPorts utilizando los denominados "Grupos
(Groups)" y "Etiquetas (Tags)":
1. Instalar el EzOPC-Server.
2. Ejecutar el EzOPC Server y elegir "Process Simulation…" y "PLC via EasyPort".
3. Poner en marcha Robotino View.
4. Añadir el dispositivo "OPC Client"
5. En el menú de diálogo del dispositivo, seleccionar Ajustes predeterminados "Festo EzOPC EasyPort".
Los valores predeterminados para el EasyPort serán cargados.
Sugerencia: Si desea utilizar un PLC de otro fabricante, necesitará el OPC Server y el OPC Client de este
fabricante. Utilice un OPC Client para ver qué etiquetas están disponibles en el OPC Server de su PLC.
6.6.1 Diálogo
1 Seleccionar OPC Server La lista muestra los Servidores OPC disponibles localmente.
[Link] Entradas
[Link] Salidas
6.7.1 Servidor
El servidor de intercambio de datos puede ser utilizado por un número cualquiera de clientes para
intercambiar datos a través de un número cualquiera de canales de comunicación. Los canales de
comunicación se crean en el lado del servidor. Los canales de comunicación creados son difundidos a
todos los clientes. Los clientes pueden elegir los canales con los que van a intercambiar datos con el
servidor.
Servidor y clientes tienen los mismos derechos durante el intercambio de datos. Cuando un cliente
escribe datos en un canal de comunicación, los datos se transfieren al servidor y de allí a todos los demás
clientes. Si más de un participante está escribiendo en el mismo canal. es impredecible saber qué dato
contendrá finalmente el canal de comunicación.
El nombre del canal debe ser único y debe contener sólo caracteres ASCII, excluyendo el carácter "/".
Presionando "Aceptar" se crea el canal. En la librería de bloques de función aparecen dos nuevos
bloques con el nombre "nombre del canal Escritor" y "nombre del canal Lector". Estos bloques de
función se utilizan para escribir o para leer datos de un canal de comunicación.
[Link] Diálogo
El diálogo del servidor de intercambio de datos se abre haciendo doble clic en el símbolo del dispositivo
en la librería de bloques de función.
El puerto del servidor es el puerto TCP por el que escucha el servidor para conexiones de entrada.
El intervalo de envío es el intervalo de tiempo que debe transcurrir tras una transmisión hasta que se
permita la siguiente transmisión.
Con "Iniciar servidor" el servidor empieza a escuchar. A partir de entonces, los clientes pueden
conectarse con el servidor.
6.7.2 Cliente
El cliente de intercambio de datos se conecta a un servidor de intercambio de datos 163 . Tras ello, pueden
intercambiarse datos con el servidor utilizando los canales de comunicación del servidor.
Una vez que el cliente se ha conectado correctamente con el servidor de intercambio de datos 163 se
dispone de una lista de canales de comunicación.
En el lado del servidor se han creado los canales de comunicación a,b del tipo I32 (entero (integer) de 32
bit) y c,d del tipo FLOAT32 (número real de coma flotante de 32 bit). Ahora pueden añadirse los canales al
cliente en la librería de bloques de función.
Como en el servidor de intercambio de datos 163 la librería de bloques de función muestra dos bloques de
función tras añadir un canal al cliente. A través del menú de contexto del cliente, pueden añadirse
canales uno por uno o todos a la vez. Utilizando la entrada "Conectar" del menú de contexto puede
establecerse la conexión con el servidor sin utilizar el diálogo del cliente.
[Link] Diálogo
La dirección del servidor es la dirección IP del servidor con el cual desea conectarse el cliente. Si sólo se
da la dirección IP, la conexión se establece utilizando el puerto predeterminado del servidor 9080. Si el
servidor está escuchando por un puerto diferente, puede especificarse el número del puerto en la
dirección IP, separándolo por ":".
Si el servidor está escuchando en el host local por el puerto 8000, la dirección del servidor para el cliente
deberá ser [Link]:8000.
Si está activa la opción "Reconexión automática" los clientes tratan de establecer una nueva conexión si
se pierde la conexión actual.
El intervalo de envío es el intervalo de tiempo que debe transcurrir tras una transmisión hasta que se
permita la siguiente transmisión.
[Link] Lector
[Link] Escritor
6.8.1 Protocolo
Especificación de la estructura de los datos
Byte Función
0 Message ID
1-2 Número de bytes de todo el mensaje N. El tipo es UINT16 172
3 Checksum (a inicializar con 0 cuando se genera el paquete, véase Suma de prueba 171 )
N-1 Último byte del mensaje
Si la longitud del mensaje es inferior a 100 bytes, la suma s0 se calculará a partir de los bytes de todo el
paquete. Si el mensaje contiene 100 o más bytes, s0 se calculará a partir del primero y los últimos 50
bytes del mensaje.
En ambos casos el byte de suma de prueba (checksum) debe inicializarse con 0. La suma de prueba se
calcula para
checksum = 0xff - s0
unsigned char checksum( const unsigned char* payload, unsigned int payloadLength ) const
{
unsigned char s0 = 0;
return ( 0xFF - s0 );
}
Para verificar si el paquete ha sido transmitido correctamente, los bytes de todo el mensaje serán
acumulados al byte de suma s1 si la longitud del mensaje es inferior a 100 bytes. Si contiene 100 bytes o
más, s1 se calcula a partir del primero y los últimos 50 bytes del mensaje.
El paquete es correcto si
s1 = 0xFF
//decoding
value = *( reinterpret_cast<const uint16*>( payload ) );
INT 4 Byte0: low
32 Byte3: high
En un pequeño sistema endian, un valor de datos INT32 puede copiarse directamente en el
payload.
Ejemplo:
//encoding
int32 value = -3459873;
char payload[4];
int32* p = reinterpret_cast<int32*>( payload );
*p = value;
//decoding
value = *( reinterpret_cast<const int32*>( payload ) );
UIN 4 Byte0: low
T32 Byte3: high
En un pequeño sistema endian, un valor de datos UINT32 puede copiarse directamente en el
payload.
Ejemplo:
//encoding
uint32 value = 3459873;
char payload[4];
uint32* p = reinterpret_cast<uint32*>( payload );
*p = value;
//decoding
value = *( reinterpret_cast<const uint32*>( payload ) );
[Link] Mensaje 0
Byte Función
0 0
1 36
2 0
3 Suma de prueba 171
4-7 INT0 del tipo INT32 172
8-11 INT1 del tipo INT32 172
12-15 INT2 del tipo INT32 172
16-19 INT3 del tipo INT32 172
20-23 INT4 del tipo INT32 172
24-27 INT5 del tipo INT32 172
28-31 INT6 del tipo INT32 172
32-35 INT7 del tipo INT32 172
[Link] Mensaje 1
Byte Función
0 1
1 36
2 0
3 Suma de prueba 171
4-7 INT0 del tipo INT32 172
8-11 INT1 del tipo INT32 172
12-15 INT2 del tipo INT32 172
16-19 INT3 del tipo INT32 172
20-23 INT4 del tipo INT32 172
24-27 INT5 del tipo INT32 172
28-31 INT6 del tipo INT32 172
32-35 INT7 del tipo INT32 172
6.8.2 Diálogo
El diálogo del dispositivo de intercambio de datos UDP se abre haciendo doble clic en el dispositivo en la
librería de bloques de función.
Con "Puerto del servidor" se configura el número de puerto UDP en el cual escucha datagramas el
servidor y desde el cual se envían.
Con "Iniciar servidor" el servidor empieza a escuchar. Una vez se ha puesto en marcha el servidor, los
paquetes de datos UDP se reciben, se interpretan y se envían.
El "intervalo" es el intervalo de tiempo que debe transcurrir tras una transmisión hasta que se permita la
siguiente transmisión.
Para cada mensaje (mensaje 0 ó mensaje 1) el envío puede activarse (on) o desactivarse (off)
individualmente.
Las direcciones IP y puertos de los receptores de datos pueden introducirse en la tabla "Receptores"
(Listeners). Si no se especifica un puerto, se utilizará el 9180 de forma predeterminada.
[Link] Mensaje 0
[Link].1 Entrada
[Link].1 Lector
El lector lee datos y emite los datos recibidos. Hay un lector para cada uno de los INT0 a INT7.
[Link].2 Salida
[Link].2 Escritor
El escritor toma los datos a enviar y los pasa al dispositivo para enviarlos a los receptores a través de
UDP. Hay un escritor para cada uno de los INT0 a INT7.
[Link] Mensaje 1
6.8.4 Ejemplo
7 Programación
Para compilar bloques de función y dispositivos de Robotino® View 2 es necesario el API.
%ProgramFiles%\Festo\RobotinoView2\units\robview\MyFunctionsBlocks
o respectivamente
%ProgramFiles(x86)%\Festo\RobotinoView2\units\robview\MyFunctionsBlocks
desde la carpeta de tutorial actual. El script genera ajustes específicos del usuario, que no pueden ser
almacenados en el archivo sln y permite la depuración de bloques de función.
Para que funcione la depuración, Robotino View 2 debe especificarse como ejecutable con el directorio
de trabajo correcto en los ajustes de proyecto como se muestra a continuación. Estos ajustes serán
establecidos automáticamente si ha ejecutado antes "RUN THIS FIRST THEN START [Link]" como se ha
descrito arriba.
7.1.1 Tutorial 1
Carpeta: [Link]
Este tutorial explica cómo crear un bloque de función con un conector de entrada y uno de salida. El
código correspondiente puede hallarse en [Link] en la funcion step().
El valor de entrada "in" es multiplicado por 2 y luego escrito en la salida. Haga aquí lo que desee. Para
ver lo que sucede en su código. inicie el depurador presionando la tecla F5. El bloque de función es
compilado y enlazado y se inicia Robotino View 2. Ignore el mensaje de diálogo acerca de que Robotino
View 2 no contiene información de depuración. Como sea que usted no desea depurar Robotino View 2,
sino sólo su bloque de función, este mensaje es irrelevante.
Cree un subprograma en Robotino View 2 conteniendo el bloque de función Tutorial 1 de Mis bloques de
función. Ejecute la simulación del subprograma.