Está en la página 1de 73

INTERFAZ CON EL PROCESO

TEMA 4
Contenidos

1 - OBJETIVOS
2 - INTRODUCCIÓN
NECESIDAD DE LA INTERFAZ CON EL PROCESO
QUÉ CONSTITUYE LA INTERFAZ
SENTIDO DE LA COMUNICACIÓN

3 - ADQUISICIÓN DE DATOS
TIPOS DE SEÑALES
SEÑALES DIGITALES
TARJETA DE E/S NI USB-6008
SEÑALES ANALÓGICAS

5 - BIBLIOGRAFÍA

INFORMÁTICA Interfaz con el Proceso 2


INDUSTRIAL
1 - Objetivos

• Conocer la necesidad de la interfaz con el proceso

• Conocer los conceptos básicos de la adquisición de datos

• Conocer la tarjeta de adquisición de datos NI USB-6008


y su programación

• Aprender a utilizar la tarjeta NI USB-6008 en aplicaciones


reales

INFORMÁTICA Interfaz con el Proceso 3


INDUSTRIAL
2 - Introducción

INFORMÁTICA Interfaz con el Proceso 4


INDUSTRIAL
2 - Introducción

Necesidad de la Interfaz con el Proceso


Supongamos que necesitamos controlar el nivel y temperatura
de un líquido en un depósito:

TEMPERATURA (EA)
100ºC

REBOSE (ED)
0ºC
NIVEL (EA)

BOMBA (SA)
VALVULA (SD)
Deposito

SOBRECALENTAMIENTO (ED)
CALEFACTOR (SD)

INFORMÁTICA Interfaz con el Proceso 5


INDUSTRIAL
2 - Introducción

Necesidad de la Interfaz con el Proceso


Sistema Informático Industrial
Hay que COMUNICAR Proceso a Controlar
la Imagen Interna (Depósito Real)
con el Proceso

Imagen Interna del Proceso


(Estructura de Datos Abstracta)

double Nivel,Temperatura;
int Valvula=CERRADA;

INFORMÁTICA Interfaz con el Proceso 6


INDUSTRIAL
2 - Introducción

Qué constituye la Interfaz con el Proceso


Circuitos y programas encargados de establecer la
comunicación

Sistema informático

Sensores
Imagen Proceso
Interfaz Proceso Interfaz
Sistema
Sistema
operador proceso
Industrial Industrial
Actuadores

double Nivel;
int Valvula;

INFORMÁTICA Interfaz con el Proceso 7


INDUSTRIAL
2 - Introducción

Sentido de la Comunicación en la Interfaz


Generalmente Bidireccional
ENTRADA desde los Sensores hacia la Imagen Interna
SALIDA desde la Imagen Interna hacia los Accionadores
INSPECCIÓN
Imagen Interna (ENTRADA)

Temperatura=27.0;
Termómetro
(Sensor)
DECISIÓN
if(Temperatura<30.0)
Calefactor=ENCENDIDO;
Calefactor
ACCIONAMIENTO (Accionador)
(SALIDA)
INFORMÁTICA Interfaz con el Proceso 8
INDUSTRIAL
2 - Introducción

Sentido de la Comunicación en la Interfaz


Sin embargo ... Sistemas de Control en Bucle Abierto
Sólo SALIDA hacia los Accionadores
El estado actual del proceso se estima

Imagen Interna

if(PosEstimada<PosObjetivo)
Pasos=PosObjetivo-PosEstimada; Motor Paso a Paso
en un Posicionador Lineal
no realimentado

INFORMÁTICA Interfaz con el Proceso 9


INDUSTRIAL
2 - Introducción

Sentido de la Comunicación en la Interfaz


Sistemas de Monitorización
Sólo ENTRADA desde los Sensores
El proceso no se manipula automáticamente

Imagen Interna
Sensor de Presencia
en la puerta de un museo
Visitantes++; (Sensor de paso de vehículos en
una carretera)

INFORMÁTICA Interfaz con el Proceso 10


INDUSTRIAL
3 - Adquisición de Datos

INFORMÁTICA Interfaz con el Proceso 11


INDUSTRIAL
3 - Adquisición de Datos

Tipos de Señales
• Las variables en el proceso pueden ser de distinta naturaleza:
– Temperatura, velocidad, presión, válvula, bomba, persiana, etc.

• Habitualmente son representadas mediante señales eléctricas con la


ayuda de Transductores.
• La magnitud eléctrica describe el valor de la variable original
Tensión (mV)

15.0 mV
Función de Transferencia de un Termopar
(Transductor)
Tensión = Tensión (Temperatura)
5.0 mV
Temperatura (ºC)
-100.0 ºC 0.0 ºC 100.0 ºC

INFORMÁTICA Interfaz con el Proceso 12


INDUSTRIAL
3 - Adquisición de Datos

Tipos de Señales

• Podemos clasificar las señales en:

– Digitales (Rango de Valores Discreto)


• Ejemplo: Apertura de la válvula en el depósito (Todo =1 / Nada =0)

– Analógicas (Rango de Valores Contínuo)


• Ejemplo: Temperatura del agua en el depósito (de [0.0, 100.0]ºC)

INFORMÁTICA Interfaz con el Proceso 13


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales
Señales digitales
• Si la variable física sólo puede tomar valores de un conjunto discreto, la
señal eléctrica que la representa es discontinua y se dice que la señal
eléctrica es DIGITAL

• Si sólo puede tomar 2 valores, es posible representarlo con


entrada/salida de sólo un bit.
Ejemplo: Apertura de la Válvula en el Depósito (Todo = ABIERTA /
Nada = CERRADA  2=21)
0/1

• Si puede tomar N valores, es necesario como mínimo log2(N) bits para


poder “codificar” todos los posibles valores.
Ejemplo: Tipo de moneda en euros (€) para una expendedora de
bebidas (0.01; 0.02; 0.05; 0.1; 0.2; 0.5; 1; 2  8 = 23)
0/1 0/1 0/1
INFORMÁTICA Interfaz con el Proceso 14
INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Señales digitales: Codificación

Si la señal es de 2 valores (Todo/Nada), hay que definir la Lógica:


Nivel de Tensión Alto = "1"  Válvula Abierta
Nivel de Tensión Bajo = "0"  Válvula Cerrada

Si la señal es de N valores, hay que definir cómo se codifican

Código de 3 bits Tipo de Moneda


000 0.01 euro
001 0.02 euro
010 0.05 euro
011 0.1 euro
100 0.2 euro
101 0.5 euro
110 1 euro
111 2 euros
INFORMÁTICA Interfaz con el Proceso 15
INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Asignación de registros del controlador

• La E/S Digital se realiza mediante Lecturas/Escrituras en registros (puertos)


• Los puertos permiten transferir una palabra cada vez (8, 16, 32, ... bits)
• Cada puerto se identifica con una dirección en un mapa
• Hay que realizar una asignación de puertos a variables
Un Puerto de 8 Bits
Mapa de Puertos
en la “Dirección x”

Dir x

2 Bits asignados 1 Bit asignado


a una Variable de 4 Estados a una Variable de 2 Estados
en la “dirección x” en la “dirección x”

controlador

INFORMÁTICA Interfaz con el Proceso 16


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Ejemplo de asignación de puertos de Salida

Realmente se escribe todo el Puerto


Imagen Interna
Mapa de Puertos
Valvula=ABIERTA;
Valvula 1
Escritura en el Puerto

Bit asignado a la Válvula

controlador Afecta a la Válvula

INFORMÁTICA Interfaz con el Proceso 17


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales
Tipo de Código de 3
Moneda bits
Ejemplo de asignación de puertos de 0.01 euros
0.02 euros
000
001
0.05 euros 010
Entrada 0.1 euros 011
0.2 euros 100
0.5 euros 101
1 euro 110
2 euros 111

Realmente se lee todo el Puerto


Imagen Interna
Mapa de Puertos
Moneda= 2_EUROS;
Moneda 1 1 1 2 euros
Lectura del Puerto

Monedero
Bits asignados al Monedero
Afecta al Puerto

INFORMÁTICA Interfaz con el Proceso 18


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Manipulación de Puertos

El acceso a los puertos se realiza sobre palabras (4, 8, 12, 16 ó 32 bits)


Conviene recordar los operadores C/C++ para manipular bits

Operador Binario Función


& (AND) Y a nivel de bit
| (OR) O a nivel de bit
^ (XOR) O Exclusiva a nivel de bit

Operador Monario Función


 (NOT) NO a nivel de bit

Operador Binario Función


<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha

INFORMÁTICA Interfaz con el Proceso 19


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Escritura: Forzar a “1” un Bit en un Conjunto de Bits


Ejemplo: Abrir la Válvula
Operador: OR
Máscara: “1” en el Bit 1, “0” en el resto de Bits
Sentencia: PuertoSalida = PuertoSalida | 0x0002;
Puerto de 8 bits
7 6 5 4 3 2 1 0
x x x x x x y x PuertoSalida (Antes)
OR
7 6 5 4 3 2 1 0
0 0 0 0 0 0 1 0 Máscara: 0002H

=
7 6 5 4 3 2 1 0
x x x x x x 1 x PuertoSalida (Después)

INFORMÁTICA Interfaz con el Proceso 20


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Escritura: Forzar a “0” un Bit en un Conjunto de Bits


Ejemplo: Apagar el Calefactor
Operador: AND
Máscara: “0” en el Bit 2, “1” en el resto de Bits
Sentencia: PuertoSalida = PuertoSalida & 0xFFFB;

Puerto de 8 bits
7 6 5 4 3 2 1 0
x x x x x y x x PuertoSalida (Antes)
AND
7 6 5 4 3 2 1 0
1 1 1 1 1 0 1 1 Máscara: FFFBH
=
7 6 5 4 3 2 1 0
x x x x x 0 x x PuertoSalida (Después)

INFORMÁTICA Interfaz con el Proceso 21


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Lectura: Extraer el Valor de un Bit de un conjunto


Ejemplo: ¿Hay Sobrecalentamiento?
Operador: AND
Máscara: “1” en el Bit 1, “0” en el resto de Bits
Sentencia: if (PuertoEntrada & 0x02)
Sobrecalentamiento = SI;
Puerto de 4 bits
3 2 1 0
x x y x PuertoEntrada
AND
3 2 1 0
0 0 1 0 Máscara: 0002H
= 3 2 1 0
0 0 y 0
Condición a Probar

INFORMÁTICA Interfaz con el Proceso 22


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Lectura: Extraer un Código (grupo de bits)


Ejemplo: ¿Qué Moneda?
Operadores: AND y >>
Máscara: “1” en los Bits del código, “0” en el resto de Bits
Sentencia: switch((PuertoEntrada & 0x01C) >> 2)

Puerto de 8 bits 7 6 5 4 3 2 1 0
x x x y y y x x PuertoEntrada
AND
7 6 5 4 3 2 1 0
0 0 0 1 1 1 0 0 Máscara: 001CH
>>2
7 6 5 4 3 2 1 0
0 0 0 0 0 y y y Código

INFORMÁTICA Interfaz con el Proceso 23


INDUSTRIAL
3 - Adquisición de Datos: Señales digitales

Ejemplo: Moneda de 2 Euros -> Código: “111”

Puerto de 8 bits

7 6 5 4 3 2 1 0
x x x 1 1 1 x x PuertoEntrada
AND
7 6 5 4 3 2 1 0
0 0 0 1 1 1 0 0 Máscara: 001CH
>>2
7 6 5 4 3 2 1 0 Valor 7 que
0 0 0 0 0 1 1 1 corresponde a la
moneda de 2 Euros

INFORMÁTICA Interfaz con el Proceso 24


INDUSTRIAL
3 - NI USB-6008. Características

• La tarjeta de adquisición de datos utilizada en prácticas


es la National Instruments USB-6008

INFORMÁTICA Interfaz con el Proceso 25


INDUSTRIAL
3 - NI USB-6008. Características

• Sus principales características son:


– económica, unos 150 Eur.

– interfaz de conexión USB con el ordenador

– 12 canales de entrada/salida digital compatibles TTL

– 8 entradas unipolares o 4 diferenciales como entrada

analógica de 12 bits

– ganancia variable en modo entrada diferencial

– 2 canales de salida analógica de 12 bits

– 1 contador digital de 32 bits

INFORMÁTICA Interfaz con el Proceso 26


INDUSTRIAL
3 - NI USB-6008. Características

• Una vez instalada en el computador, se puede probar fácilmente ejecutando


la utilidad “Run test panels” que aparece al conectarla

INFORMÁTICA Interfaz con el Proceso 27


INDUSTRIAL
3 - NI USB-6008. biblioteca NIDAQmx

• Las tarjeta de NI se explotan actualmente mediante las


bibliotecas NIDAQmx
– Interfaz común para todas las tarjetas. Los programas no necesitan cambios para
utilizar otra tarjeta.
– Multiplataforma: Microsoft Windows, Linux, Mac OSX
– Funciones de alto nivel: lectura directa del valor físico de termopares, acelerómetros,
programación multi-hilo, etc.
– Interfaz para NI Labview, NI Labwindows/CVI, Microsoft Visual Basic, Microsoft Visual
C++ y ANSI C.

• Para usarla en Borland C++ Builder


– Añadir el fichero de cabecera nidaqmx.h al módulo (#include “nidaqmx.h”)
– Incluir la biblioteca NIDAQmx_bcb.lib al proyecto.
Esta biblioteca se ha generado según información adicional en el material de la
asignatura.

INFORMÁTICA Interfaz con el Proceso 28


INDUSTRIAL
3 - NI USB-6008. biblioteca NIDAQmx
• La filosofía de esta biblioteca es:
– Crear tareas de adquisición asociadas a canales
– Usar la tarea cuando se quiera hacer una adquisición

• Tarea (task):
– Conceptualmente una tarea representa una medida o una generación de señal que
se desea llevar a cabo.
– En este caso es una colección de uno o más canales virtuales, con temporización,
disparo y otras propiedades.
– Todos los canales incluidos en una tarea deben ser del mismo tipo, como entrada
analógica, salidas digitales, salidas de contador ...
– Para llevar a cabo una medida o generar una señal con una tarea, hay que seguir
estos pasos:
• 1. Crear una tarea (o re-cargar una ya existente).
• 2. Configurar el canal y, si es necesario, la temporización y el disparo.
• 3. Leer o escribir las muestras.
• 4. Eliminar la tarea.
– Si se va a repetir más de una vez la tarea (i.e. un bucle), SÓLO se repite el paso 3!

INFORMÁTICA Interfaz con el Proceso 29


INDUSTRIAL
3 - NI USB-6008. biblioteca NIDAQmx

• Canal (“channel”):
– Dos tipos: canales físicos y canales virtuales.
– Un canal físico es un terminal, o pin, a través del cual se puede medir o generar una
señal analógica o digital. Cada canal físico tiene el formato básico:
"nombre dispositivo /nombre canal físico",
por ejemplo: Dev2/ao5 ó Dev6/ctr3.
– Los canales virtuales son entidades software que encapsulan el canal físico con
otra información específica del canal, (rango, configuración de terminales, escala,
etc.), que formatea el dato.
– Se pueden crear diferentes tipos de canales virtuales en función del tipo de señal –
analógica, digital o contador – y la dirección de la misma (entrada o salida):
• Canales de Entrada Analógicos.
• Canales de Salida Analógicos.
• Canales de Entrada/Salida Digital (basados en líneas o en puertos)
• Canales de Entrada/Salida de Contador.

INFORMÁTICA Interfaz con el Proceso 30


INDUSTRIAL
3 - NI USB-6008. biblioteca NIDAQmx

• Para conocer la identificación del dispositivo podemos usar la aplicación


“Measurement & Automation Explorer”
– Observar la tarjeta real (en verde) y una simulada (en amarillo)
– Si no se dispone de tarjeta, se recomienda añadir con esta aplicación una PCI-6221. La simulación
de la USB-6008 no está disponible.

INFORMÁTICA Interfaz con el Proceso 31


INDUSTRIAL
3 - NI USB-6008. biblioteca NIDAQmx

•Funciones para gestionar las tareas:


– DAQmxCreateTask()
– DAQmxClearTask()
Usa el manual para
– DAQmxStartTask()
conocer su función y
– DAQmxStopTask()
los parámetros
– ...

• Ejemplo de creación de una tarea


TaskHandle sensor_rebose; //nombre_de_la_tarea
void proceso_inicio(void) {
int32 daq_error;
daq_error = DAQmxCreateTask (“tarea del sensor rebose”, &sensor_rebose);
if (daq_error != 0) {
printf(“Error al crear la tarea”);
exit(1);
}
//Aqui se añaden los canales fisicos de E/S para la tarea

INFORMÁTICA Interfaz con el Proceso 32


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

• 12 líneas digitales, P0.<0..7>, P1.<0..3> y referencia a GND


– Configurables individualmente como entradas o salidas
– Configuración en colector abierto con resistencia de “pull-up”

1. P0.0 configurado como salida digital en colector abierto controlando un LED.


2. P0.2 configurado como salida digital push-pull controlando un LED.
3. P0.4 configurado como entrada digital recibiendo la señal TTL de puerta inversora
4. P0.7 configurado como entrada digital recibiendo señal de 0 ó 5V. de un interruptor

INFORMÁTICA Interfaz con el Proceso 33


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

•Para hacer una lectura de un puerto digital hay que primero crear un
canal, usando la función:
– DAQmxCreateDIChan()
daq_error = DAQmxCreateDIChan(sensor_rebose,”Dev0/port1”,"",DAQmx_Val_ChanForAllLines);

• Después se puede realizar “la lectura” de ese canal con las funciones:
– DAQmxReadDigitalScalarU32() -> para leer un puerto completo

– DAQmxReadDigitalLines() -> para leer líneas individuales o grupos

– DAQmxReadDigitalU8() -> para leer un puerto completo

– ...

INFORMÁTICA Interfaz con el Proceso 34


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

• Ejemplo depósito. Sensor de rebose conectado a P1.0


» Rebose: ED, activa a nivel bajo!

TEMPERATURA (EA)
100ºC
REBOSE (ED)
NIVEL (EA) 0ºC

BOMBA (SA) VALVULA (SD)


Deposito
SOBRECALENTAMIENTO (ED)
CALEFACTOR (SD)

INFORMÁTICA Interfaz con el Proceso 35


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

• Modelo de programa mínimo sensor REBOSE:


int proceso_leer_rebose (void) { // funcion de lectura digital

int32 daq_error;
Nombre Almacena
uInt32 data; Tarea Lectura
daq_error = DAQmxReadDigitalScalarU32 (sensor_rebose, 0.0, &data, NULL);

if (daq_error != 0)

process_error(daq_error,"proceso_leer_rebose()");

if ((data & 0x01) == 0){ //extraemos el bit 0 del puerto P1, REBOSE es activo a nivel bajo!!!

Datos_Escribir_Rebose(REBOSE_HAY);

// devuelve un entero, y guardo en el modulo de datos la variable

else {

Datos_Escribir_Rebose(REBOSE_NO_HAY);

// guardo en el modulo de datos la variable

INFORMÁTICA Interfaz con el Proceso 36


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital
• Ejemplo depósito. Sensor de rebose con lectura de puerto completo
// lectura del sensor de rebose del deposito conectado a P1.0
#define REBOSE_HAY 0
#define REBOSE_NO_HAY 1
#include "nidaqmx.h"
TaskHandle mi_primera_tarea; 1) Crear la medida
void proceso_iniciar(void) {
int32 errdaq;
errdaq = DAQmxCreateTask("mi_primera_tarea”,&mi_primera_tarea);
errdaq = DAQmxCreateDIChan(mi_primera_tarea,”Dev0/port1“, “”,DAQmx_Val_ChanForAllLines);
}
void proceso_leer_rebose(void){
int32 errdaq; 2) Crear el canal
uInt32 data;
errdaq = DAQmxStartTask(mi_primera_tarea); // arrancar, opcional, pues es implícito
errdaq = DAQmxReadDigitalScalarU32(mi_primera_tarea,0.0,&data, NULL);
errdaq = DAQmxStopTask(mi_primera_tarea); // opcional, si no se pone es implícito
if ((data & 0x01) == 0) //extraemos el bit 0 del puerto P1
Datos_Escribir_Rebose(REBOSE_HAY);
else 3) Obtener el dato
Datos_Escribir_Rebose(REBOSE_NO_HAY);
}

INFORMÁTICA Interfaz con el Proceso 37


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

• Para hacer una escritura de un puerto digital hay que crear

primero un canal usando la función


– DAQmxCreateDOChan()

• Después se puede realizar la escritura usando las funciones


– DAQmxWriteDigitalScalarU32() -> para escribir un puerto completo

– DAQmxWriteDigitalLines() -> para escribir líneas individuales o grupos

– DAQmxWriteDigitalU8() -> para escribir un puerto completo

– ...

INFORMÁTICA Interfaz con el Proceso 38


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital

Ejemplo depósito. Electroválvula, conectada al bit 0, de P0.0

TEMPERATURA (EA)
100ºC

REBOSE (ED)
0ºC
NIVEL (EA)

BOMBA (SA)
VALVULA (SD)
Deposito

SOBRECALENTAMIENTO (ED)
CALEFACTOR (SD)

INFORMÁTICA Interfaz con el Proceso 39


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital
• Ejemplo depósito. Electroválvula (con escritura del puerto completo)
TaskHandle tarea_valvula;
unsigned int ultima_salida_digital = 0x00; // Valor del puerto inicial
void ProcesoIniciar(void){ // ya creado antes!!!
... // código en practica 5
daq_error = DAQmxCreateTask("tarea actuador digital", &tarea_valvula);
daq_error = DAQmxCreateDOChan(tarea_valvula,“Dev0/port0”,"", DAQmx_Val_ChanForAllLines);
...
}
void ProcesoEscribirValvula(int estado){
if(estado==VALVULA_ABIERTA){
ultima_salida_digital= ultima_salida_digital|0x01; //Forzar Bit0 a "1" Máscara: 0000-0001 Operador: OR

DatosEscribirValvula(VALVULA_ABIERTA); // lo guardo en datos


}
else{
ultima_salida_digital=ultima_salida_digital&0xFE; //Forzar Bit0 a "0" Máscara: 1111-1110 Operador: AND

DatosEscribirValvula(VALVULA_CERRADA); // lo guardo en datos


}
daq_error=DAQmxWriteDigitalScalarU32(tarea_valvula,true, 0.0,ultima_salida_digital,NULL);
if(daq_error != 0)
ProcesoError(daq_error,"ProcesoEscribirValvula"); }

INFORMÁTICA Interfaz con el Proceso 40


INDUSTRIAL
3 - NI USB-6008. Entrada/salida digital
• Ejemplo depósito. Electroválvula (con escritura del puerto completo)
TaskHandle tarea_valvula; Preparar medida
unsigned int ultima_salida_digital = 0x00; // Valor del puerto inicial
void ProcesoIniciar(void){ // ya creado antes!!!
... // código en practica 5
daq_error = DAQmxCreateTask("tarea actuador digital", &tarea_valvula);
daq_error = DAQmxCreateDOChan(tarea_valvula,“Dev0/port0”,"", DAQmx_Val_ChanForAllLines);
...
} Preparar canal
void ProcesoEscribirValvula(int estado){
if(estado==VALVULA_ABIERTA){
ultima_salida_digital= ultima_salida_digital|0x01; //Forzar Bit0 a "1" Máscara: 0000-0001 Operador: OR

DatosEscribirValvula(VALVULA_ABIERTA); // lo guardo en datos


}
else{
ultima_salida_digital=ultima_salida_digital&0xFE; //Forzar Bit0 a "0" Máscara: 1111-1110 Operador: AND

DatosEscribirValvula(VALVULA_CERRADA); // lo guardo en datos


}
daq_error=DAQmxWriteDigitalScalarU32(tarea_valvula,true, 0.0,ultima_salida_digital,NULL);
if(daq_error != 0)
ProcesoError(daq_error,"ProcesoEscribirValvula"); }
Escribir dato

INFORMÁTICA Interfaz con el Proceso 41


INDUSTRIAL
PROTOTIPOS de funciones de E/S

Actividad Depósito:

/* Inspeccionan los sensores digitales*/


void ProcesoLeerRebose(void);
void ProcesoLeerSobrecalentamiento(void);

/* Escriben los actuadores digitales */


void ProcesoEscribirValvula(int state);
void ProcesoEscribirCalefactor(int state);

INFORMÁTICA Interfaz con el Proceso 42


INDUSTRIAL
Actividades: Módulo del proceso

1. Realizar la asignación de puertos E/S digital del miniproyecto, según las

especificaciones, para la tarjeta NI USB-6008

2. Implementar las funciones/prototipos que extraerán la información de las

variables de sensores digitales del miniproyecto, una vez leído el puerto de

entrada digital

3. Implementar las funciones/prototipos que modificarán la información de las

variables de accionamiento del miniproyecto en un dato común, que

posteriormente se escribirá en el puerto de salida digital

INFORMÁTICA Interfaz con el Proceso 43


INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Si la variable física puede tomar valores de un conjunto continuo, la señal eléctrica


que la representa es continua, y se dice que la señal eléctrica es ANALÓGICA

Las señales analógicas deben ser discretizadas, pues los procesadores trabajan
sólo sobre conjuntos discretos (datos)

DATOS
......
0000011101
0011011011
0011100000
0011101111
INFORMÁTICA Interfaz con el Proceso 44
INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Un Conversor Analógico / Digital es un dispositivo de interfaz capaz de


discretizar señales analógicas

Tensión (mV)

15.0 mV
Conversor
00011101
A/D 5.0 mV
11011011
11100000 -100.0 ºC 0.0 ºC 100.0 ºC
Temperatura (ºC)
11101111
Salida Entrada
Digital Analógica
INFORMÁTICA Interfaz con el Proceso 45
INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas
Sistema Típico A/D
Tensión
00011101
11011011 Conversor
11100000 A/D
11101111
Tiempo
Disparo Muestreador/ Filtro/
Retenedor Amplificador
1. Inicio de Conversión (Disparo)
2. Proceso de Conversión (Tiempo de Conversión)
Muestreo y Retención. Cuantificación y Codificación
3. Espera Fin de Conversión (Sincronización)
4. Adquisición y Uso del Dato Digital (Transferencia)

Proceso de Conversión
Muestreo Cuantificación Tiempo
Inicio de Conversión Fin de Conversión. Dato Disponible
INFORMÁTICA Interfaz con el Proceso 46
INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Cuantificación y Codificación en A/D


Bits Número de Estados Precisión (V)
n
n 2 (Para E = 5.0 Voltios)
Código 3 8 0.6250
4 16 0.3125
8 256 0.0195
Sdigital 10 1024 4.88 10-3
12 4096 1.22 10-3
111 14 16384 3.05 10-4
(dato digital 3 bits)

16 65536 7.63 10-5


110
101
100 Q = E/2n (E=5.0V, n=3bits -> Q = 5.0/8 = 0.625)
011
010 Q: Tamaño Cuantificación Analógica (Precisión V/bit)
E: Escala Analógica (V)
001 n: bits del conversor A/D
000
0.625 5 E (V)
EAnalógica

INFORMÁTICA Interfaz con el Proceso 47


INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Interpretación en A/D
Dato
Tensión (mV)
111
110
15.0 mV
101
100
011 5.0 mV
010 Temperatura (ºC)
001 -100.0 ºC 0.0 ºC 100.0 ºC
000 V
0V 5V

Tensión = F(Temperatura)
Dato = G(Tensión)

INFORMÁTICA Interfaz con el Proceso 48


INDUSTRIAL
NI USB-6008. Entrada analógica

• 1 conversor ADC de 12 bits


– Entradas multiplexadas
– 8 entradas de AI0 a AI7 con referencia a GND
• Rango de +/-10 V
– 4 entradas diferenciales. +AI0/-AI0 a +AI3/-AI3
• Rangos ±20 V, ±10 V, ±5 V, ±4 V, ±2’5 V,
±2 V, ±1’25 V, ±1 V

INFORMÁTICA Interfaz con el Proceso 49


INDUSTRIAL
NI USB-6008. Entrada analógica

• Para hacer una entrada analógica hay que crear primero


un canal usando las funciones
– DAQmxCreateAIVoltageChan()

– DAQmxCreateAIStrainGageChan()

– ...

• Después se puede realizar la entrada usando las funciones


– DAQmxReadAnalogScalarF64() -> para hacer una sola lectura

– DAQmxReadAnalogF64() -> para hacer varias lecturas

– ...

INFORMÁTICA Interfaz con el Proceso 50


INDUSTRIAL
NI USB-6008. Entrada analógica

• Ejemplo depósito. Sensor temperatura en AI0 y GND


Práctica 7: sensor LM335

SA

INFORMÁTICA Interfaz con el Proceso 51


INDUSTRIAL
NI USB-6008. Entrada analógica
• Ejemplo depósito. Lectura de un canal analógico…
TaskHandle temperature_sensor_task;
Preparar
//en la función de inicio para una lectura analógica escritura
daq_error =DAQmxCreateTask("temperature task",&temperature_sensor_task);
...
daq_error = DAQmxCreateAIVoltageChan (temperature_sensor_task,“Dev0/ai0”,"",DAQmx_Val_RSE, 0.0, 10.0,DAQmx_Val_Volts,NULL);
...
}
// sensor leer temperatura --------------------- Preparar
double proceso_leer_temperatura(void) {
int32 daq_error; canal
float64 volts;
double grados;
// inicia lectura
daq_error = DAQmxReadAnalogScalarF64 (temperature_sensor_task,1.0,&volts, NULL);
if (daq_error != 0)
process_error(daq_error,"proceso_leer_temperatura()");
// ... Y para
grados = (volts * 100.0) - 273.15; //LM335 transference function Realizar
return(grados); escritura
}

INFORMÁTICA Interfaz con el Proceso 52


INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Un Conversor Digital/Analógico es un dispositivo de interfaz capaz de


reconstruir señales analógicas

Tensión

00011101
11011011 Conversor
11100000 D/A
Tiempo
11101111
Entrada Salida
Digital Analógica
INFORMÁTICA Interfaz con el Proceso 53
INDUSTRIAL
3 - Adquisición de Datos: Señales analógicas

Conversor Digital (n bits) / Analógico


Vdac
Vref
sanalog

Vgnd

Dato_Digital
00...0 ..........din FF...F

2n datos

Sanalog = ((Vref-Vgnd)/(2 -1))  din + Vgnd


n

(Ej Tarjeta DAQ de 12 bits -> salida (de 0.0 a 5.0) V


Resolución -> 5V/212 = 0,00122 V / (por dato digital)
INFORMÁTICA Interfaz con el Proceso 54
INDUSTRIAL
NI USB-6008. Salida analógica

• 2 salidas analógicas, AO0 y AO1. Referencia a GND


– Conversor DAC de 12 bits
– Salida de tensión de 0 a 5 V.
Precisión = 5V/(2¹²) = 1'22 mV

INFORMÁTICA Interfaz con el Proceso 55


INDUSTRIAL
NI USB-6008. Entrada analógica

• Para hacer una salida analógica hay que crear primero un


canal usando las funciones
– DAQmxCreateAOVoltageChan()

...

• Después se puede realizar la salida usando las funciones


– DAQmxWriteAnalogScalarF64() -> para hacer una sola escritura

...

INFORMÁTICA Interfaz con el Proceso 56


INDUSTRIAL
NI USB-6008. Salida analógica

• Ejemplo depósito. Bomba conectada a AO0


– de 0.0 a 5.0 V pasa del 0% a 100% de potencia

SA

INFORMÁTICA Interfaz con el Proceso 57


INDUSTRIAL
NI USB-6008. Salida analógica
• Ejemplo depósito. Escritura de un canal analógico
TaskHandle pump_actuator_task;
…// funcion de inicio proceso
Preparar
daq_error = DAQmxCreateTask("pump task",&pump_actuator_task);
escritura
...

daq_error=DAQmxCreateAOVoltageChan(pump_actuator_task,“ Dev0/ao0”,””,0.0,5.0,DAQmx_Val_Volts,NULL);
...
}
// funcion de escribir actuador analógico (la bomba de subir liquido) -----------
Preparar
void proceso_escribir_bomba(double potencia) {
canal
double volts;
int32 daq_error;
volts = 5.0*(potencia/100.0); // 0.0V->0%, 5.0V->100%

daq_error = DAQmxWriteAnalogScalarF64 (pump_actuator_task, true, 1.0, volts, NULL);


if (daq_error != 0)
process_error(daq_error,"proceso_escribir_bomba()");
Realizar
}
escritura

INFORMÁTICA Interfaz con el Proceso 58


INDUSTRIAL
PROTOTIPOS de funciones de E/S

Ejemplo depósito

/* Inspeccionan los Sensores analógicos */


double proceso_leer_temperatura(void);
double proceso_leer_altura(void);

/* Controlan los Actuadores analógicos: */


void proceso_escribir_bomba(double data);

INFORMÁTICA Interfaz con el Proceso 59


INDUSTRIAL
Actividad

Implementar las funciones/prototipos de las

Entradas y Salidas Analógicas

para el miniproyecto.

INFORMÁTICA Interfaz con el Proceso 60


INDUSTRIAL
Actividades

Actividad

Un robot móvil puede circular en un rango de velocidades de 0 a 2


m/s con un comportamiento lineal. Para que el robot navegue a 2 m/s
se le debe aplicar una tensión de 10V y para que esté parado 0V. Si
el convertidor D/A que utilizamos es de 12 bits, indique que dato
digital se tiene que escribir en dicho registro para que el robot
navegue a:

A) 0.5 m/s
B) 1 m/s
C) 1.25 m/s
Solución

INFORMÁTICA Interfaz con el Proceso 61


INDUSTRIAL
Actividades

Actividad

Basándose en el código de la función anterior (Alarma), crear


otra con la cabecera siguiente:

int TipoAlarma (void);


El objetivo será que nos devuelva el siguiente valor entero
dependiendo del tipo de sensor activo:

0 -> No existe alarma


1 -> Existe rebose
2 -> Existe sobrecalentamiento
3 -> Existe rebose y sobrecalentamiento

Solución
INFORMÁTICA Interfaz con el Proceso 62
INDUSTRIAL
Actividades

Actividad
Un sensor mide la cantidad de líquido de un depósito entregando una
tensión directamente proporcional a la cantidad de líquido según
la función de transferencia:
Nivel (litros) = Tensión (voltios) * 100.0
La capacidad del depósito estará entre 0 y 500 litros, por lo que el
sensor entrega una tensión entre 0 y 5 voltios.
La salida del sensor se conecta a un conversor A/D lineal de 8 bits
(2^8=256) ajustado de manera que el valor binario 0000 0000
equivale a 0 Voltios y el valor binario 1111 1111 equivale a 5
voltios.
Suponiendo que se lee el conversor A/D y se deposita la lectura en la
variable unsigned int dato, determinar la expresión que
facilita el nivel a partir de la lectura del conversor A/D
double nivel, tension;
unsigned int dato;
// pasar de dato a tension
// pasar de tension a nivel

Solución
INFORMÁTICA Interfaz con el Proceso 63
INDUSTRIAL
Actividades

Actividad
Un termopar mide la temperatura del agua en el depósito, pudiendo
variar entre 0 ºC y 100 ºC. Su función de transferencia es lineal:
Tensión (mV) = 5.0 (mV) + 9 (mV/ºC) * Temperatura (ºC)

Un amplificador de instrumentación lineal amplifica la señal 10 veces

Un conversor de 12 bits y escala 0.0 a 10.0 V ofrece un dato


cuantificado

Determinar la expresión que facilita la temperatura en función del dato


double Temperatura, Tension; unsigned int dato;
Temperatura = ...

Solución
INFORMÁTICA Interfaz con el Proceso 64
INDUSTRIAL
Actividades

Actividad
Realizar una función con la cabecera siguiente:

void GenerarTensionAnalogica (unsigned int dato);

La función deberá trabajar únicamente con un dato de entrada


de 12 bits (0x000 a 0xFFF).

La salida analógica deberá obtenerse por AO1

Al final deberá aparecer un mensaje indicando el valor en voltios


en AO1 Solución

INFORMÁTICA Interfaz con el Proceso 65


INDUSTRIAL
NI USB-6008. Programación

Ejemplo para calcular la tensión


Vanalog

12 bits -> 0...4095


+5V

maxv

+5v ------> 4095


000H FFFH
Dato_digital
....

-5v ------> 0 -5V

minv

Vanalog = Dato_digital*((maxv-minv)/4095.0) – 5 = Dato_digital*(10.0/4095.0) – 5

INFORMÁTICA Interfaz con el Proceso 66


INDUSTRIAL
Bibliografía

INFORMÁTICA Interfaz con el Proceso 67


INDUSTRIAL
Bibliografía

Manual de referencia de la tarjeta NI USB-6008.


(Disponible en formato electrónico en el CD-ROM de
Utilidades de la Asignatura. Hay también una versión traducida
al castellano)

[Kernighan1991] Brian W. Kernighan, Dennis M. Ritchie.


El lenguaje de programación C.
Ed. Prentice-Hall Hispanoamericana, 1991.

[Charte1998] Francisco Charte Ojeda. C++ Builder 3. Ed. Anaya, 1998

INFORMÁTICA Interfaz con el Proceso 68


INDUSTRIAL
Solución

10V 10V
V V

0 dato_dig
0
0 4095 dato_dig 0 2m/s
Vanalog = 10/4095 * dato_dig Vanalog = 5 * Velocidad

Dato = 409.5 * Vanalog = 409.5 * 5 * Velocidad

Dato = 409.5 * (5*0.5) = 1024 = 400H


Dato = 409.5 * (5*1) = 2048 = 800H
Dato = 409.5 * (5*1.25) = 2559 = 9FFH

INFORMÁTICA Interfaz con el Proceso 69


INDUSTRIAL
Solución

Vanalog = Vgnd+((Vref-Vgnd)/2n)*Dato
= 0 + ((10-0)/ (212-1) )*Dato
= 0.00244*Dato
10V

0
Dato = 409.5 * Vanalog
0 2m/s
Vanalog = 5 * Velocidad

Dato = 409.5 * (5*0.5) = 1024 = 400H


Dato = 409.5 * (5*1) = 2048 = 800H
Dato = 409.5 * (5*1.25) = 2559 = 9FFH

INFORMÁTICA Interfaz con el Proceso 70


INDUSTRIAL
Solución

Litros = Volt * 100.0


n = 8 bits
500 l  5 V  FFH

0l 0V 00H

Volt = (5-0)/(28-1) * Dato_Digital = 5/255 * Dato_Digital


= 0.0196 * Dato_Digital

Litros = Volt * 100.0 = (0.0196 * Dato_Digital) * 100 =


= 1.96 * Dato_Digital

INFORMÁTICA Interfaz con el Proceso 71


INDUSTRIAL
Solución
9mV
Tensión _ Termopar  5mV   Tempº C
Tensión (V) ºC
Conv. A/D Dato Digital
10.0 V Termopar Amplificador
12 bits 000h para 0V
0ºC a 100ºC x 10 FFFh para 10V
Rango 0 a 10V
0.0 V
0.0 ºC 100.0 ºC Tensión _ Amplificador  Tensión _ Termopar10
Temperatura (ºC)

Para 0ºC: 0V (000h)

Tensión_Termopar = 5 + 9 x 0 = 5 mV =x10==> 50 mV Rango


Para 100 ºC: Entrada
A/D
Tensión_Termopar = 5 + 9x100 = 905 mV =x10=> 9050 mV
10V (FFFh)
1000
Tensión _ Amplificad or (mV )   Dato _ Digital 
4095
 0.244  Dato _ Digital

INFORMÁTICA Interfaz con el Proceso 72


INDUSTRIAL
Solución

Tensión _ Amplificador
5
Tensión _ Termopar 5 10
Temp(º C )   
9 9

2.44  Dato _ Digital


5
10 2.44  Dato _ Digital  50
  
9 90

 0.027  Dato _ Digital  0.55

INFORMÁTICA Interfaz con el Proceso 73


INDUSTRIAL

También podría gustarte