17.01.2015 Views

Examen Informática Industrial – Septiembre 2011 ... - PoliformaT

Examen Informática Industrial – Septiembre 2011 ... - PoliformaT

Examen Informática Industrial – Septiembre 2011 ... - PoliformaT

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Examen</strong> Informática <strong>Industrial</strong> – <strong>Septiembre</strong> <strong>2011</strong><br />

Primera parcial (PC)<br />

Apellidos, nombre:<br />

Intrucciones:<br />

1. Rellenar “apellidos, nombre” en esta página.<br />

2. Rellenar “apellidos, nombre” y firmar en las hojas en blanco para contestar el<br />

examen.<br />

3. Entregar cada problema en hojas separadas.<br />

Problema 1: Módulo de datos y descomposición modular (3 ptos.).<br />

En una aplicación industrial para PC se desea compartir entre los distintos módulos la<br />

información de temperatura de 50 depósitos de líquidos.<br />

Se pide: Desarrollar el código adecuado para el módulo de datos que tiene que ver con<br />

almacenar y recuperar esta información y las funciones asociadas. Indica también el<br />

código contenido en el fichero de cabecera que permite el correcto acceso a estas<br />

funciones desde otros módulos.<br />

Problema 2: Módulo de proceso y salida digital (3,5 ptos.).<br />

Una electroválvula se conecta en la línea P0.4 de la tarjeta de adquisición de datos NI<br />

USB6008. Un valor alto abre la válvula.<br />

Se pide: Desarrollar una función con el prototipo void proceso_escribir_valvula (int<br />

estado) que maneje adecuadamente la válvula sin modificar el resto de líneas (utilizar<br />

una variable espejo). Desarrolla también la función void proceso_iniciar (void) que<br />

prepara la tarjeta de adquisición de datos para ser usada por la función desarrollada. El<br />

código propuesto debe comprobar el código de error en las llamadas a las funciones de la<br />

tarjeta.<br />

Problema 3 Módulo de proceso y entrada analógica (3,5 ptos.).<br />

Para conocer el nivel de un depósito de líquidos se emplea un sensor de comportamiento<br />

lineal que entrega 4 voltios cuando el depósito está vacío y 1 voltio cuando el depósito<br />

está lleno con 2000 litros. La salida del sensor se conecta a la entrada analógica AI0 de<br />

una tarjeta de adquisición de datos NI USB6008.<br />

Se pide: Desarrollar la función con prototipo double proceso_leer_nivel (void) que<br />

devuelve el nivel en litros del depósito utilizando esta configuración y con la mayor<br />

precisión posible. Desarrolla también la función void proceso_iniciar (void) que prepara<br />

la tarjeta de adquisición de datos para ser usada por la función desarrollada.


Información adicional: Lista de funciones de la tarjeta NI USB6008<br />

int32 DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);<br />

Ejemplo: daqerr = DAQmxCreateTask("mi primera tarea",&tarea);<br />

int32 DAQmxStartTask (TaskHandle taskHandle);<br />

Ejemplo: daqerr = DAQmxStartTask(tarea);<br />

int32 DAQmxStopTask (TaskHandle taskHandle);<br />

Ejemplo: daqerr = DAQmxStopTask(tarea);<br />

int32 DAQmxClearTask (TaskHandle taskHandle);<br />

Ejemplo: daqerr = DAQmxClearTask(tarea);<br />

int32 DAQmxCreateDOChan (TaskHandle taskHandle, const char lines[], const char<br />

nameToAssignToLines[], int32 lineGrouping);<br />

Ejemplo: daq_error = DAQmxCreateDOChan (actuators_task, “Dev0/port0”,"",<br />

DAQmx_Val_ChanForAllLines);<br />

int32 DAQmxCreateDIChan (TaskHandle taskHandle, const char lines[], const char<br />

nameToAssignToLines[], int32 lineGrouping);<br />

Ejemplo: errdaq = DAQmxCreateDIChan(mi_primera_tarea,”Dev0/port1“, “”,<br />

DAQmx_Val_ChanForAllLines);<br />

int32 DAQmxCreateAOVoltageChan (TaskHandle taskHandle, const char physicalChannel[],<br />

const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, const char<br />

customScaleName[]);<br />

Ejemplo: daq_error = DAQmxCreateAOVoltageChan (pump_actuator_task, “Dev0/ao0”, "", 0.0,<br />

5.0, DAQmx_Val_Volts, NULL);<br />

int32 DAQmxCreateAIVoltageChan (TaskHandle taskHandle, const char physicalChannel[],<br />

const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal,<br />

int32 units, const char customScaleName[]);<br />

Ejemplo: daq_error = DAQmxCreateAIVoltageChan (temperature_sensor_task, “Dev0/ai0”,<br />

"", DAQmx_Val_RSE, 0.0, 10.0, DAQmx_Val_Volts, NULL);<br />

int32 DAQmxWriteDigitalScalarU32 (TaskHandle taskHandle, bool32 autoStart, float64 timeout,<br />

uInt32 value, bool32 *reserved);<br />

Ejemplo: daq_error = DAQmxWriteDigitalScalarU32 (actuators_task, true, 0.0, mirror_DO,<br />

NULL);<br />

int32 DAQmxReadDigitalScalarU32 (TaskHandle taskHandle, float64 timeout, uInt32 *value,<br />

bool32 *reserved);<br />

Ejemplo: errdaq = DAQmxReadDigitalScalarU32(mi_primera_tarea,0.0,&data,NULL);<br />

int32 DAQmxWriteAnalogScalarF64 (TaskHandle taskHandle, bool32 autoStart, float64 timeout,<br />

float64 value, bool32 *reserved);<br />

Ejemplo: daq_error = DAQmxWriteAnalogScalarF64 (pump_actuator_task, true, 1.0, volts,<br />

NULL);<br />

int32 DAQmxReadAnalogScalarF64 (TaskHandle taskHandle, float64 timeout, float64 *value,<br />

bool32 *reserved);<br />

Ejemplo: daq_error = DAQmxReadAnalogScalarF64 (temperature_sensor_task, 1.0, &volts,<br />

NULL);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!