Está en la página 1de 36

4- Controlador de alto nivel del LabJackUD Las funciones de bajo nivel del U3 son descritas en la Seccin 5, pero en su lugar

la mayora de las aplicaciones de Windows usan el controlador del LabJackUD. La ltima versin del controlador necesita correrse en un PC con Windows XP, Vista o 7. La versin 3.07 apoya al Windows 98, ME, 2000. Se recomienda instalar el software antes de hacer la conexin por USB de una LabJack. La versin para descargar del instalador consiste en solo un archivo ejecutable. Este instalador coloca el controlador (LabJackUD.dll) en el directorio del sistema de Windows, junto con un soporte de DLL (LabJackUSB.dll). Generalmente, este directorio es c:\Windows\System\ on Windows 98/ME, y c:\Windows\System32\ on Windows 2000/XP. Otros archivos, incluyendo la cabecera y la librera de archivos de visual C, son instalados en el directorio de controladores el cual por defecto es c:\ProgramFiles\LabJack\drivers\. 4.1 Informacin General El funcionamiento general de las funciones del LabJackUD son las siguientes: Abrir el LabJackUD. Construir una lista de requerimientos para llevar a cabo (Add). Ejecutar la lista (Go). Leer el resultado de cada requerimiento (Get).

En el ncleo, el controlador de la UD solo posee 4 funciones bsicas: Open (Abrir), AddRequest (Agregar requerimiento), Go (Ir) y GetResult (Obtener resultado). Con esas funciones, hay muchas constantes utilizadas para especificar las acciones que se desean llevar a cabo. Al programar en cualquier lenguaje, es recomendable tener el encabezado del archivo a mano, de tal modo que las constantes se puedan copiar y pegar en el cdigo a utilizar.

El primer tipo de constante es un IOType, el cual siempre es pasado como un parmetro en la funcin IOType llamada. Un ejemplo de un IOType es la constante LJ_ioPUT_DAC, el cual es utilizado para actualizar el valor de una salida analgica (DAC). El segundo tipo de constante es un canal constante, tambin llamado Special Channel (Canal especial). Estas constantes siempre se pasan en el parmetro del canal de la funcin llamada. En su mayor parte, estos se utilizan cuando el requerimiento no es especfico para un determinado canal, y va con la configuracin IOTypes (LJ_ioPUT_CONFIG K LJ_ioGET_CONFIG). Un ejemplo de Special Channel es la constante LJ_chLOCALID, la cual es utilizada para leer o escribir el ID (identificador) local del dispositivo. El tercer tipo de constantes importantes usadas por el controlador del UD es un valor constante. Estas constantes siempre son pasadas en el valor del parmetro de la funcin llamada. Un ejemplo de un valor constante es el de la constante LJ_tmPWM8, el cual especifica el modo de temporizador. Esta constante tiene un valor numrico de 1, el cual puede pasarse, pero el usar la constante LJ_tmPWM8 hace que la programacin del cdigo sea ms fcil de leer. A continuacin un pseudocdigo que realiza varias acciones. En primer lugar, una llamada hecha para abrir el dispositivo. El trabajo principal realizado con esta llamada es encontrar el dispositivo deseado y la creacin de un identificador que le indica al dispositivo los puntos donde se hace el llamado a las funciones. Adems, la apertura del dispositivo realiza varias acciones de configuracin e inicializacin, como la lectura de constantes y la calibracin del dispositivo:

//Use la siguente linea de cdigo para abrir por primera vez la bsqueda del //LabJack U3 a travs de USB y obtener un identificador del dispositivo. //La forma general de la funcin Open es: //OpenLabJack (TipoDispositivo, TipoConexion, Direccion, PrimerEncuentro, //*Identificador) //Abrir el primer encuentro del LabJack U3 por medio de conexion USB. lngErrorcode = OpenLabJack (LJ_dtU3, LJ_ctUSB, "1", TRUE, &lngHandle);
En Segundo lugar, la lista de requerimientos en el controlador del UD est basada en el uso de llamadas addRequest. No se trata de cualquier comunicacin de bajo nivel con el dispositivo y por lo tanto el tiempo de ejecucin de la solicitud es casi instantneo:

//Requerimiento que coloca DAC0 en 2.0 Voltios //La forma general de la funcin AddRequest es: // AddRequest (Identificador, TipoES, Canal, Valor, x1, DataUsuario) lngErrorcode = AddRequest (lngHandle, LJ_ioPUT_DAC, 0, 2.50, 0, 0); //El requerimiento lee desde AIN3 (FIO3), asumiendo que este ha sido //habilitado en la lnea analgica lngErrorcode = AddRequest (lngHandle, LJ_ioGET_AIN, 3, 0, 0, 0);
En tercer lugar la lista de requerimientos es procesada y ejecutada usando un llamado a la funcin Go. En este paso, el controlador determina cul comando de bajo nivel debe ejecutarse para procesar todos los requerimientos, llama a las funciones de bajo nivel y almacena los resultados. Este ejemplo consiste en dos requerimientos, una lectura por una entrada analgica y una escritura por una salida analgica, las cuales se pueden manipular en una simple retroalimentacin de bajo nivel (Seccin 5.2.5):

//Ejecutar los requerimientos //lngErrorcode = GoOne(lngHandle);

Por ltimo, la funcin GetResult es llamada para recuperar los resultados (cdigo de errores y valores) que fueron almacenados por el controlador durante la llamada a la funcin Go. No se trata de cualquier comunicacin de bajo nivel con el dispositivo y por lo tanto el tiempo de ejecucin de la solicitud es casi instantneo:

//Obtener el resultado del requerimiento de DAC0 solamente para comprobar //si hay un cdigo de error //La forma general de la funcin GetResult es: //GetResult(Identificador,TipoES,Canal,Valor) lngErrorcode = GetResult (lngHandle, LJ_ioPUT_DAC, 0, 0); //Obtener el voltaje desde AIN3. Le pasamos la direccin a dblValue y el //voltaje ser retornado en dicha variable. lngErrorcode = GetResult (lngHandle, LJ_ioGET_AIN, 3, &dblValue)
El mtodo AddRequest/Go/GetResult suele ser el ms eficiente. Como se mostr anteriormente, mltiples requerimientos pueden ser ejecutados con una simple llamada a la funcin Go() GoOne(), y el controlador es capaz de optimizar el requerimiento en menos llamadas de bajo nivel. La otra opcin es usar las funciones eGet ePut las cuales combinan AddRequest/Go/GetResult en una llamada. El cdigo anterior tendra el siguiente aspecto (asumiendo que la U3 ya est abierta):

//Colocar 2.5 voltios en DAC0 // La forma general de la funcin ePut es: //ePut (Identificador, TipoES, Canal, Valor, x1) lngErrorcode = ePut (lngHandle, LJ_ioPUT_DAC, 0, 2.50, 0);

//Leer desde AIN3. // La forma general de la funcin eGet es: //eGet (Identificador, TipoES, Canal, *Valor, x1) lngErrorcode = eGet (lngHandle, LJ_ioGET_AIN, 3, &dblValue, 0);
En el caso de la U3, el primer ejemplo usando add/go/get utiliza los comandos de los identificadores DAC y AIN en una simple llamada de bajo nivel, mientras que en el segundo ejemplo usando ePut/eGet se utilizan dos comandos de bajo nivel. Los ejemplos en la siguiente documentacin usan el mtodo add/go/get y el mtodo ePut/eGet, estos generalmente son intercambiables. Ver la seccin 4.3 para ms ejemplos de pseudocdigos. Todos los requerimientos y resultados de las funciones tienen 4 parmetros comunes y algunas de las funciones tienen 2 parmetros extras: Handle (Identificador): Esta es una entrada a todas las funciones requerimientos/resultados la cual le dice al LabJack de qu funcin se trata. El identificador se obtiene desde la funcin OpenLabJack. IOType (TipoES): Esta es una entrada a todas las funciones requerimientos/resultados la cual especifica el tipo de accin que debe realizarse. Channel (Canal): Esta es una entrada a todas las funciones requerimientos/resultados que generalmente especifica que canales de E/S van a leer/escribir, aunque con la configuracin IOTypes se pasan constantes especiales para especificar que canal se est configurando. Value (Valor): Esta es una entrada o salida a todas las funciones requerimientos/resultados que generalmente lee o escribe el valor del elemento con el que se est trabajando. x1: Este parmetro se utiliza solamente en algunas funciones de requerimientos/resultados y es usado cuando se necesita informacin extra para ciertos IOTypes.

UserData (DatosUsuario): Este parmetro se utiliza solamente en algunas funciones de requerimientos/resultados, y es una data que se pasa simplemente con el requerimiento y es retornada sin modificar el resultado. Puede utilizarse para almacenar cualquier tipo de informacin que genere el requerimiento, tambin utiliza un analizador genrico que determina qu se debe hacer con los resultados cuando estos son recibidos.

4.1.1 Flexibilidad de las Funciones El controlador est diseado para ser flexible y as poder trabajar con diferentes LabJacks de diferentes capacidades. Tambin est desarrollado para trabajar con diferentes plataformas de desarrollo con diferentes capacidades. Por esta razn, muchas de las funciones se repiten pero con diferentes parmetros, a pesar de que su funcionalidad interna permanece casi igual. En esta documentacin, se referir a un grupo de funciones por sus nombres ms cortos. Por ejemplo, la referencia a Add AddRequest es ms probable que se haga por cualquiera de sus tres variaciones: AddRequest(), AddRequestS() AdRequestSS(). En el cdigo ejemplo, las funciones alternas (versiones S SS) pueden generalmente sustituirse si se desea, cambiando los tipos de parmetros. Todos los ejemplos usados ac estn escritos en pseudo-C. Las funciones con S SS agregadas al final se usan en lenguajes de programacin que no pueden incluir el archivo LabJackUD.h y por lo tanto no puede utilizar las constantes incluidas. Esto generalmente es una forma no recomendable para programar y codificar lascantidades en las llamadas a la funcin, a dems de ser muy difcil de leer. Las funciones con una sola S reemplazan el parmetro IOType con un const char* el cual es un carcter. Un carcter luego puede ser pasado con el nombre de la constante deseada. Las funciones con una SS reemplazan IOType y Channel con cadenas. OpenLabJack reemplaza DeviceType y ConnectionType con cadenas desde que ambos se vuelven constantes.

Por ejemplo: En C, donde el archivo LabJackUD.h puede incluirse y se usan las constantes directamente:

AddRequest(Handle,LJ_ioGET_CONFIG,LJ_chHARDWARE_VERSION,0,0,0);
Una mala forma de programar (difcil de leer) cuando el LabJackUD.h no puede ser incluido:

AddRequest(Handle, 1001, 10, 0, 0, 0);


La mejor forma de programar cuando el LabJackUD.h no puede incluirse es pasar las cadenas:

AddRequestSS(Handle,LJ_ioGET_CONFIG,LJ_chHARDWARE_VERSION, 0,0,0);
Seguidamente la funcin StringToConstant() es muy til para el manejo de errores en las rutinas o con las funciones GetFirst/Next, las cuales no reciben cadenas. La funcin StringToConstant() toma un carcter y retorna una constante numrica. Por ejemplo:

LJ_ERROR err; err=AddRequestSS(Handle,LJ_ioGETCONFIG,LJ_chHARDWARE_VERSIO N,0,0,0); if (err == StringToConstant(LJE_INVALID_DEVICE_TYPE)) do some error handling..


Una vez ms, esto es mucho ms claro que:

if (err == 2)

4.1.2 Operaciones Multiprocesos El controlador de la UD es totalmente seguro para subprocesos. Con muy pocas excepciones, todas estas funciones se pueden llamar desde varios subprocesos al mismo tiempo, y el controlador mantiene todo en su debido orden. Debido a esto, las funciones Add, Go y Get deben ser llamadas desde el mismo subproceso para un conjunto particular de requerimientos/resultados. Internamente la lista de requerimientos y resultados son divididas por el subproceso. Si los Esto permite que son se usen multiprocesos y los para realizar retornan requerimientos sin obtener datos de un subproceso a otro de manera accidental. requerimientos agregados resultados

LJE_NO_DATA_AVAILABLE o un error similar, las opciones del origen del


error estn en que los requerimientos y los resultados se encuentran en diferentes subprocesos. Si se anula un subproceso y luego se crea otro nuevo, es posible que este tenga el mismo ID del anterior. Esto no representa un problema si se llama primero a la funcin Add, pero si se llama primero a Get en un nuevo subproceso los resultados pueden ser devueltos por el subproceso que ya finaliz. Como se mencion, la lista de requerimientos/resultados se mantiene en una base de subproceso a subproceso. Dado que el controlador no se da cuenta cuando un subproceso controlador borrar ha todo terminado, los cuando resultados se lo guardan en que puede la ser memoria automticamente. Esto no es un problema en general, ya que el finalice. En un problema es en las situaciones en las se crean y se anulan continuamente los subprocesos. Esto dar como resultado un consumo lento de la memoria por los requerimientos anteriores hechos por los subprocesos. Dado que cada solicitud utiliza solo 44 bytes, y como se dijo que los IDs pueden reutilizarse frecuentemente, esto no representa una gran prdida de memoria. En general, se recomienda no crear y anular gran cantidad de subprocesos. Esto es muy

lento e ineficiente. Se recomienda usar grupos de subprocesos y otras tcnicas para mantener al mnimo la creacin de nuevos subprocesos. Internamente esto es lo que se hace. La nica gran excepcin de la seguridad de los subprocesos de este controlador est en el uso de la funcin TerminateThread(). Como se advirti en la documentacin de MSDN, el uso de la funcin TerminateThread() anular el subproceso sin liberar los recursos y aun ms importante sin liberar la sincronizacin de objetos. Si TerminateThread() se usa en un subproceso que se encuentra en medio de una llamada al controlador, es ms que probable que una sincronizacin de objetos quede abierta en un dispositivo en particular y el acceso a este dispositivo ser imposible hasta que sea reiniciada la aplicacin. En algunos dispositivos puede ser peor. En los dispositivos que tienen sincronizacin entre procesos, tales como el U12, el llamado a TerminateThread() puede anular todos los accesos al dispositivo a travs del controlador, sin importar ni el proceso que se est usando ni la que la aplicacin se reinicie. Evite usar TerminateThread()! Todas las llamadas de este dispositivo tienen un tiempo lmite por defecto de 1 segundo, pero este puede cambiarse. Asegrese de tener un tiempo suficiente de espera para que el controlador pueda llegar hasta el final. 4.2 Funciones de Referencia El archivo del controlador de LabJack se llama LabJackUD.dll, y contiene las funciones que se describen en esta seccin. Algunos parmetros son comunes para muchas funciones. LJ_ERROR: Un LabJack contiene un cdigo de error especfico. Si se tiene un 0 significa que no hay error. (long, signed 32-bit integer).

LJ_HANDLE: Este valor es devuelto por OpenLabJack, y luego se pasa pasa a otras funciones para identificar la apertura del LabJack. (long, signed 32-bit integer).

Para mantener la compatibilidad con la mayor cantidad de lenguajes posibles, se han hecho muchos intentos para mantener los tipos de parmetros lo ms bsicos posibles. Tambin, muchas funciones tienen mltiples prototipos. Las siguientes declaraciones estn escritas en C. Para ayudar a aquellos que no estn familiarizados con las cadenas en C, se espera que estas funciones terminen en una cadena de caracteres de 8 bits del cdigo ASCII. Como esto se traduce en un entorno de desarrollo en particular, esta fuera del mbito de aplicacin de esta documentacin. Un const char* es un puntero a un carcter que no puede ser reemplazado por el controlador. Por lo general esto significa que solo puede ser una constante tal como Esto es una cadena. Un char* es un puntero a un carcter que puede ser cambiado. Suficientes bytes pueden ser pre asignados para mantener las posibles cadenas que pueden ser retornados. Las funciones con char* en su declaracin tendrn la longitud requerida por el buffer (memoria intermedia), seguidamente la documentacin. Los punteros en general deben ser inicializados, aunque null (0) puede ser pasado por valores no utilizados o innecesarios. Los punteros para los requerimientos GetStreamData y RawIn/RawOut no son opcionales. Los Arreglos y las cadenas tipo char * deben pasarse antes del DLL. 4.2.1 ListAll() Esta funcin devuelve todos los dispositivos encontrados por DeviceType y ConnectionType. Actualmente solamente es soportada por una conexin USB.

ListAll() es una versin especial donde DeviceType y ConnectionType son cadenas ms largas. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera. Las cadenas deben contener el nombre de la constante como se indica en el archivo de cabecera (tales como LJ_dtU3 y LJ_ctUSB). La declaracin para abrir la versin S es la que sigue a continuacin excepto para (const char *pDeviceType, const char *pConnectionType, ). Declaracin: LJ_ERROR _stdcall ListAll ( long DeviceType, long ConnectionType, long *pNumFound, long *pSerialNumbers, long *pIDs, double *pAddresses) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 cuando no hay error. Entradas: DeviceType: El tipo de LabJack a buscar. Las constantes estn en el archivo labjackud.h. ConnectionType: Introduce la constante para el tipo de conexin que se va a usar en la bsqueda. En la actualidad, esta funcin solamente es compatible con USB. pSerialNumbers: Se le debe pasar al buffer un puntero con al menos 128 elementos. pIDs: Se le debe pasar al buffer un puntero con al menos 128 elementos. pAddresses: Se le debe pasar al buffer un puntero con al menos 128 elementos.

Salidas: pNumFound: Retorna en forma de arreglos la cantidad de dispositivos encontrados, y por lo tanto la cantidad de elementos vlidos. pSerialNumbers: Un arreglo que contiene el nmero de serial de cualquier dispositivo encontrado. pIDs: Un arreglo que contiene el ID local de cualquier dispositivo encontrado. pAddresses: Un arreglo que contiene la direccin IP de cualquier dispositivo encontrado. La funcin DoubleToStringAddress() es muy til para convertir estos a notacin de cadena. 4.2.2 OpenLabJack() Esta llama a la funcin OpenLabJack() antes de comunicarse con un dispositivo. Esta funcin puede ser invocada varias veces, sin embargo, una vez abierto el LabJack, permanece as hasta que finalice la aplicacin (o el DLL sea descargado). Si la funcin OpenLabJack se invoca repetidamente con los mismos parmetros, y requiere el mismo tipo de conexin al mismo LabJack, el controlador siempre retornar simplemente el mismo LJ_HANDLE. Internamente, no sucede nada ms. Esto incluye cuando el dispositivo es reseteado o desconectado. Una vez que el dispositivo se conecta de nuevo, el controlador mantendr el mismo identificador. Si una llamada de apertura es hecha por USB y luego Ethernet, se devolver un identificador diferente para cada tipo de conexin y ambas conexiones estarn abiertas. La funcin OpenLabJackS() es una versin especial de apertura donde el DeviceType y el ConnectionType son cadenas mucho ms largas. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera. Las cadenas deben contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_dtU3 y LJ_ctUSB). La declaracin para abrir la versin S es la que sigue a continuacin excepto para (const char *pDeviceType, const char *pConnectionType, ).

Declaracin: LJ_ERROR _stdcall OpenLabJack ( long DeviceType, long ConnectionType, const char *pAddress, long FirstFound, LJ_HANDLE *pHandle) Descripcin de parmetros: Devuelve: Cdigo de errores LabJack o 0 cuando no hay error. Entradas: DeviceType: El tipo de LabJack a buscar. Las constantes estn en el archivo labjackud.h. ConnectionType: Introduce la constante para el tipo de conexin que se va a usar en la bsqueda. Para el U3 solamente el tipo de conexin es por USB. pAddress: Pasa el ID local o el nmero de serial del LabJack deseado. Si FirstFound retorna verdadero, entonces Address se ignora. FirstFound: Si esta funcin retorna verdadero, entonces Address y ConnectionType se ignoran y el controlador abre el primer LabJack encontrado con el DeviceType especifico. Generalmente, se recomienda cuando se conecta slo unLabJack Salidas: pHandle: Un puntero a un identificador para un LabJack.

4.2.3 - eGet() and ePut() Las funciones eGet y ePut realizan AddRequest, Go, y GetResult en un solo paso. Las versiones de eGet estn diseadas para entradas o para la recuperacin de parmetros del mismo tamao que el de un puntero a doble donde se coloca el resultado, pero tambin puede usarse para salidas si pValue es preestablecido con un valor deseado. Esto tambin es til para cosas tales como StreamReader

(lector de flujo) donde un valor es entrada y salida (lacantidad de escaneos solicitados y la cantidad de escaneos devueltos). Las versiones de ePut son diseadas para salidas o para establecer una configuracin de parmetros y no devolver nada, excepto el cdigo de errores. Las funciones eGetS() y ePutS() son versiones especiales de esas funciones donde IOType es una cadena mucho ms larga. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente es usada con todos los IOTypes excepto en la configuracin de put/get. La cadena debe contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioANALOG_INPUT). Las declaraciones para la versin S son las mismas de la declaracin normal excepto para (, const char *pIOType, ). Las funciones eGetSS() y ePutSS() son versiones especiales de esas funciones donde IOType es una cadena mucho ms larga. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente es usada con todos los IOTypes excepto en la configuracin de put/get. La cadena debe contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioPUT_CONFIG and LJ_chLOCALID). Las declaraciones para la versin S son las mismas de la declaracin normal excepto para (, const char *pIOType, ). Las declaraciones para la versin SS son las mismas de la declaracin normal excepto para (, const char *pIOType, const char *pChannel, ). La declaracin para ePut es la misma que para eGet excepto que Value no es un puntero (, double Value, ), y por lo tanto es una entrada nica.

Declaracin: LJ_ERROR _stdcall eGet ( LJ_HANDLE Handle, long IOType, long Channel, double *pValue, long x1) Descripcin de los Parmetros: Devuelve: Errores de cdigo LabJack o 0 cuando no hay error. Entradas: Handle: Identificador devuelto por OpenLabJack(). IOType: El tipo de requerimiento. Revisar la seccin 4.3. Channel: La cantidad de canales de un IOType particular. pValue: Un puntero al valor que enva y recibe datos. x1: Un parmetro opcional usado para algunos IOTypes. pValue: Un puntero al valor que enva y recibe datos.

Salidas:

4.2.4 - eAddGoGet() Esta funcin pasa mltiples requerimientos a travs de arreglos, seguidamente ejecuta un GoOne() y devuelve todos los resultados a travs del mismo arreglo. Los parmetros que comienzan con *a son arreglos, y todos deben inicializarse con al menos una cantidad de elementos iguales a NumRequest. Declaracin: LJ_ERROR _stdcall eAddGoGet ( LJ_HANDLE Handle, long NumRequests, long *aIOTypes, long *aChannels, double *aValues,

long *ax1s, long *aRequestErrors, long *GoError, long *aResultErrors) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). NumRequests: Esto es la cantidad de requerimientos que se harn y tambin la cantidad de resultados que sern devueltos. Todos los arreglos deben inicializarse con una mnima cantidad de estos elementos. aIOTypes: Un arreglo el cual es la lista de los IOTypes. aChannels: Un arreglo el cual es la lista de los Canales. aValues: Un arreglo el cual es la lista de los valores que sern escritos. ax1s: Un arreglo el cual es la lista de los x1s. aValues: Un arreglo el cual es la lista de los valores ledos. aRequestErrors: Un arreglo el cual es la lista de cdigos de error de cada AddRequest(). GoError: El cdigo de error devuelto por la llamada a la funcin GoOne(). aResultErrors: Un arreglo el cual es la lista cdigos de error de cada funcin GetResult().

Salidas:

4.2.5 - AddRequest()

Esta funcin agrega un elemento a la lista de requerimientos que se realizarn en la prxima llamada a Go() o GoOne(). Cuando se invoca a la funcin AddRequest() con identificador en particular, toda la data previa es eliminada y no puede ser recuperada por ninguna de las funciones Get mientras una funcin Go es invocada nuevamente. Esto es el fundamento de cada dispositivo, entonces ocupado con sus labores de E/S. La funcin AddRequest() solamente limpia la lista de requerimientos y de resultados en el identificador del dispositivo que es pasado solamente para el subproceso actual. Por ejemplo, si se agrega un requerimiento a dos dispositivos diferentes, y luego se agrega un nuevo requerimiento al primer dispositivo pero no al segundo, una llamada a la funcin Go() podra traer como consecuencia que el primer dispositivo ejecute el nuevo requerimiento y que el segundo dispositivo ejecute el requerimiento original. En general, el orden de ejecucin de la lista de requerimientos en un simple llamado a la funcin Go es impredecible, excepto que toda la configuracin del tipo de requerimiento sea ejecutada antes de la adquisicin y devolucin del mismo. La funcin AddRequestS() es una versin especial de la funcin Add donde IOType es una cadena mucho ms larga. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente es usada con todos los IOTypes excepto en la configuracin de put/get. La cadena debe contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioANALOG_INPUT). La declaracin para la se puede invocar la funcin AddRequest() con un identificador diferente mientras que el dispositivo est

versin S de Add es la que se encuentra a continuacin excepto para (, const char *pIOType, ). La funcin AddRequestSS() es una versin especial de la funcin Add donde IOType y Channel son cadenas mucho ms largas. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente solo se usa con la configuracin put/get de los IOTypes. La cadena debe contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioPUT_CONFIG y LJ_chLOCALID). La declaracin para la versin S de Add es la que se encuentra a continuacin excepto para (, const char *pIOType, const char *pChannel, ). Declaracin: LJ_ERROR _stdcall AddRequest ( LJ_HANDLE Handle, long IOType, long Channel, double Value, long x1, double UserData) Descripcin de los parmetros: Devuelve: de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). IOType: Es el tipo de requerimiento. Ver la seccin 4.3. Channel: El nmero de canales de un IOType en particular. Value: Valor pasado para los canales de salida. x1: Parmetro opcional usado para algunos IOTypes. UserData: Datos que se pasan a lo largo del requerimiento y que son devueltos por GetFirstResult() o GetNextResult() sin modificarlos. Puede ser usado para almacenar cualquier tipo de informacin con el

requerimiento, tambin utiliza un analizador genrico que determina qu se debe hacer con los resultados cuando estos son recibidos. Salidas: Ningunas.

4.2.6 - Go() Despus de usar AddRequest() para hacer una lista interna de requerimientos a realizar, se invoca a la funcin Go() para llevar a cabo efectivamente los requerimientos. Esta funcin hace que todos los requerimientos en todos los LabJack que estn abiertos se lleven a cabo. Despus de invocar a la funcin Go(), se llama a la funcin GetResult() o a alguna funcin similar para recuperar cualquier informacin o errores devueltos. La funcin Go() se puede invocar repetidamente en la lista de los requerimientos. Al contrario, despus de llamar a la funcin Go(), el primer AddRequest() invocado para un dispositivo en particular, borrar la lista previa de los requerimientos solamente en ese dispositivo en particular. Debe tener en cuenta que para un simple llamado a Go() o a GoOne(), el orden de ejecucin de la lista de requerimientos no se puede predecir. Desde el momento que el controlador lleva a cabo su optimizacin interna, no es muy probable que se mantenga el mismo orden de invocacin a la funcin AddRequest(). Lo que s se sabe es que, la configuracin de parmetros como los rangos, la configuracin del flujo, y varios ms, pueden ejecutarse antes de realizar la adquisicin actual o el ajuste de las salidas. Declaracin: LJ_ERROR _stdcall Go() Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores.

Entradas: Ningunas Ningunas Salidas:

4.2.7 - GoOne() Despus de usar AddRequest() para hacer una lista interna de requerimientos a realizar, se invoca a la funcin Go() para llevar a cabo efectivamente los requerimientos. Esta funcin hace que todos los requerimientos en un LabJack en particular se lleven a cabo. Despus de invocar a la funcin GoOne(), se llama a la funcin GetResult() o a alguna funcin similar para recuperar cualquier informacin o errores devueltos. La funcin GoOne() se puede invocar repetidamente en la lista de los requerimientos. Al contrario, despus de llamar a la funcin GoOne(), el primer AddRequest() invocado para un dispositivo en particular, borrar la lista previa de los requerimientos solamente en ese dispositivo en particular. Debe tener en cuenta que para un simple llamado a Go() o a GoOne(), el orden de ejecucin de la lista de requerimientos no se puede predecir. Desde el momento que el controlador lleva a cabo su optimizacin interna, no es muy probable que se mantenga el mismo orden de invocacin a la funcin AddRequest(). Lo que s se sabe es que, la configuracin de parmetros como los rangos, la configuracin del flujo, y varios ms, pueden ejecutarse antes de realizar la adquisicin actual o el ajuste de las salidas. Declaracin: LJ_ERROR _stdcall GoOne( LJ_HANDLE Handle)

Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). Ningunas. Salidas:

4.2.8 - GetResult() El invocar a cualquier funcin Go crea una lista de resultados que coinciden con la lista de requerimientos. Se debe usar la funcin GetResult() para leer el resultado y el cdigo de error para un IOType y un Channel en particular. Normalmente esta funcin es invocada para cada elemento asociado con AddRequest(). Incluso si el requerimiento fue una salida, el cdigo de error debe ser evaluado. Ninguna de las funciones Get borrarn los resultados de la lista. La primera llamada a AddRequest() seguida de una llamada a Go borrar las listas internas de los requerimientos y los resultados de un dispositivo en particular. Al procesar los requerimientos de flujos de datos de entrada/salida, el llamado a la funcin Get en realidad no causa que el arreglo de datos se llene. Los arreglos se llenan durante el llamado a la funcin Go (si la informacin est disponible) y el llamado a la funcin Get es usado para determinar los elementos que fueron colocados en el arreglo. La funcin GetResultS() es una versin especial de la funcin Get donde IOType es una cadena mucho ms larga. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente se usa con todos los IOTypes, excepto con la configuracin

put/get. La cadena debe contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioANALOG_INPUT). La declaracin para la versin S de Get es la que se encuentra a continuacin excepto para (, const char *pIOType, ). La funcin GetResultSS() es una versin especial de la funcin Get donde IOType y Channel son cadenas mucho ms largas. Esta se usa para pasar cadenas constantes en lenguajes en los que no se puede incluir el archivo de cabecera y generalmente solo se usa con la configuracin put/get de los IOTypes. Las cadenas deben contener el nombre de la constante como se indica en el archivo de cabecera (tal como LJ_ioPUT_CONFIG y LJ_chLOCALID). La declaracin para la versin SS de Get es la que se encuentra a continuacin excepto para (, const char *pIOType, const char *pChannel, ). Esto es aceptable para pasar un NULL (o un 0) para cualquier puntero que no sea necesario. Declaracin: LJ_ERROR _stdcall GetResult ( LJ_HANDLE Handle, long IOType, long Channel, double *pValue) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). IOType: Es el tipo de requerimiento. Ver la seccin 4.3. Channel: El nmero de canales de un IOType en particular. pValue: Un puntero al valor de resultado.

Salidas:

4.2.9 - GetFirstResult() and GetNextResult() El invocar a cualquier funcin Go crea una lista de resultados que coinciden con la lista de requerimientos. Se debe usar la funcin GetFirstResult() y GetNextResult() para desplazarse ordenadamente en la lista de resultados. Cuando cualquier funcin devuelve LJE_NO_MORE_DATA_AVAILABLE, es porque no hay ms elementos en la lista de resultados. Los elementos pueden leerse ms de una vez cuando se llama a la funcin GetFirstResult() para moverlos hacia el comienzo de la lista La informacin UserData se proporciona para su seguimiento o para los resolver las necesidades que tenga el usuario. Ninguna de las funciones Get borrarn los resultados de la lista. La primera llamada a AddRequest() seguida de una llamada a Go borrar las listas internas de los requerimientos y los resultados de un dispositivo en particular. Al procesar los requerimientos de flujos de datos de entrada/salida, el llamado a la funcin Get en realidad no causa que el arreglo de datos se llene. Los arreglos se llenan durante el llamado a la funcin Go (si la informacin est disponible) y el llamado a la funcin Get es usado para determinar los elementos que fueron colocados en el arreglo. Esto es aceptable para pasar un NULL (o un 0) para cualquier puntero que no sea necesario. La lista de parmetros es la misma que para las declaraciones de las funciones GetFirstResult() y GetNextResult()

Declaracin: LJ_ERROR _stdcall GetFirstResult ( LJ_HANDLE Handle, long *pIOType, long *pChannel, double *pValue, long *px1, double *pUserData) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). pIOType: Un puntero a un IOType de la lista. pChannel: Un puntero al nmero de canal de la lista. pValue: Un puntero el valor de resultado. px1: Un puntero al parmetro x1 de la lista. pUserData: Un puntero a la informacin que se pasa a lo largo del requerimiento y se devuelve sin ser modificada. Puede ser usado para almacenar cualquier tipo de informacin con el requerimiento, tambin utiliza un analizador genrico que determina qu se debe hacer con los resultados cuando estos son recibidos. 4.2.10 - DoubleToStringAddress() Algunos canales especiales de la configuracin IOType pasan la direccin IP (y otras) en un double. Esta funcin se utiliza para convertir el double a una cadena normal con notacin decimal o hexadecimal. Salidas:

Declaracin: LJ_ERROR _stdcall DoubleToStringAddress ( double Number, char *pString, long HexDot) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Number: Nmero de doble precision a ser convertir pString: Debe pasar un buffer para la cadena de al menos 24 bytes. HexDot: Si no es igual a cero, la cadena estar en notacin hexadecimal en lugar de notacin decimal. Salidas: pString: Un puntero para la representacin de la cadena.

4.2.11 - StringToDoubleAddress() Algunos canales especiales de la configuracin IOType pasan la direccin IP (y otras) en un double. Esta funcin se utiliza para convertir una cadena normal con notacin decimal o hexadecimal a un double. Declaracin: LJ_ERROR _stdcall StringToDoubleAddress ( const char *pString, double *pNumber, long HexDot) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: pString: Un puntero para la representacin de la cadena.

HexDot: Si no es igual a cero, la cadena estar en notacin hexadecimal en lugar de notacin decimal.

Salidas: pNumber: Un puntero para la representacin del elemento de doble precisin. 4.2.12 - StringToConstant() Esta funcin convierte una cadena dada en un nmero constante apropiado. Es utilizado internamente por las funciones S, pero puede ser til para el usuario final cuando se utilizan las funciones GetFirst/Next sin la posibilidad de incluir el archivo de cabecera. En este caso se debe hacer una comparacin en los valores de retorno tales como: if (IOType == StringToConstant("LJ_ioANALOG_INPUT")) Esta funcin retorna LJ_INVALID_CONSTANT si no se reconoce la cadena. Declaracin: long _stdcall StringToConstant ( const char *pString) Descripcin de los parmetros: Devuelve: Constante del nmero de la cadena que se pasa. Entradas: pString: Un puntero para la representacin de la cadena. Ningunas Salidas:

4.2.13 - ErrorToString() Devuelve una cadena de salida que contiene el cdigo error o una cadena vaca si no se encuentra. Declaracin: void _stdcall ErrorToString ( LJ_ERROR ErrorCode, char *pString) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: ErrorCode: El cdigo error. *pString: Debe pasar un buffer para la cadena de al menos 256bytes. *pString: Un puntero para la representacin de la cadena del cdigo error. 4.2.14 - GetDriverVersion() Esta funcin devuelve el nmero de versin del controlador de Windows del LabJack. Declaracin: double _stdcall GetDriverVersion(); Descripcin de los parmetros: Devuelve: La versin del controlador. Entradas: None None Salidas:

Salidas:

4.2.15 - TCVoltsToTemp() Esta es una funcin muy til para convertir el voltaje obtenido por una termocupla a una temperatura. Declaracin: LJ_ERROR _stdcall TCVoltsToTemp ( long TCType, double TCVolts, double CJTempK, double *pTCTempK) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: TCType: Constante que especifica el tipo de termocupla, tal como LJ_ttK.. TCVolts: El voltaje de la termocupla. CJTempK: La temperature de la union en fro en K. pTCTempK: Devuelve la temperatura calculada por la termocupla.

Salidas:

4.2.16 - ResetLabJack() Esta funcin enva un comando para reiniciar el equipo. El reinicio del LabJack no invalida al identificador, por lo cual el dispositivo no tiene que abirse nuevamente luego de reiniciarlo, pero la llamada a la funcin Go puede fallar por un par de segundos mientras que se alista de nuevo el LabJack. En una futura versin del controlador, se le podr dar a esta funcin un parmetro adicional que determine el tipo de reinicio.

Declaracin: LJ_ERROR _stdcall ResetLabJack ( LJ_HANDLE Handle); Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). Ningunas. Salidas:

4.2.17 - eAIN() Es una funcin sencilla que devuelve la lectura de una entradas analgica. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Cuando sea necesario, esta funcin configura automticamente el(los) canal(es) especfico para una entrada analgica. Declaracin: LJ_ERROR _stdcall eAIN ( LJ_HANDLE Handle, long ChannelP, long ChannelN, double *Voltage, long Range, long Resolution, long Settling, long Binary, long Reserved1, long Reserved2) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores.

Entradas: Handle: Identificador devuelto por OpenLabJack(). ChannelP: El canal AIN positive para la adquisicin. ChannelN: El canal AIN negativo para la adquisicin. Para los canales de un solo terminal en la U#, este parmetro debe ser 31 o 199 (ver la seccin 2.6.1). Range: Se ignora en la U3. Resolution: Se pasa un valor distinto de cero para activar el QuickSample (muestreo rpido). Settling: Se pasa un valor distinto de cero para activar el LongSettling (muestreo profundo). Binary: Si este valor es distinto de cero (verdadero), el parmetro del voltaje devolver el valor binario. Reserved (1&2): Pasa un 0. Voltage: Devuelve la lectura hecha desde la entrada analogical, la cual generalmente es un voltaje. 4.2.18 - eDAC() Es una funcin sencilla escribe el valor en una de salida analgica. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Cuando sea necesario (en las revisiones de hardware tal vez anteriores a la revisin 1.30), esta funcin activa automticamente la salida analgica especificada. Declaracin: LJ_ERROR _stdcall eDAC ( LJ_HANDLE Handle, long Channel, Salidas:

double Voltage, long Binary, long Reserved1, long Reserved2) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). Channel: El canal de salida analgico para escribir. Voltage: El voltaje para escribir en la salida analgica. Binary: Si este valor es distinto de cero (verdadero), el parmetro del voltaje devolver el valor binario. Reserved (1&2): Pasa un 0.

4.2.19 - eDI() Es una funcin sencilla que lee el estado de las entradas digitales. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Cuando es necesario, esta funcin automticamente configura un canal especfico como una entrada digital. Declaracin: LJ_ERROR _stdcall eDI ( LJ_HANDLE Handle, long Channel, long *State) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle Identificador devuelto por OpenLabJack().

Channel: El canal para leer. En el rango desde 0-19 corresponde al FIO0CIO3.

Salidas: State: Devuelve el estado de la entrada digital. 0= False=Bajo y 1=Verdadero=Alto. 4.2.20 - eDO() Es una funcin sencilla escribe el valor en una de salida analgica. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Cuando sea necesario, esta funcin configura automticamente un canal especfico como una salida digital. Declaracin: LJ_ERROR _stdcall eDO ( LJ_HANDLE Handle, long Channel, long State) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle: Identificador devuelto por OpenLabJack(). Channel: El canal para leer. En el rango desde 0-19 corresponde al FIO0CIO3. State: Devuelve el estado de la entrada digital. 0=Falso=Bajo y 1=Verdadero=Alto

4.2.21 - eTCConfig() Es una funcin sencilla que configura e inicializa todos los temporizadores y contadores. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Cuando sea necesario, esta funcin configura automticamente las lneas necesarias como digitales. Declaracin: LJ_ERROR _stdcall eTCConfig ( LJ_HANDLE Handle, long *aEnableTimers, long *aEnableCounters, long TCPinOffset, long TimerClockBaseIndex, long TimerClockDivisor, long *aTimerModes, double *aTimerValues, long Reserved1, long Reserved2) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle Identificador devuelto por OpenLabJack(). aEnableTimers: Un arreglo donde cada elemento especifica que temporizador est activo. Los temporizadores deben ser activados comenzando desde 0, como por ejemplo, el Timer1 no puede activarse si no se ha activado tambin el Timer0. Un valor distinto de cero en los elementos del arreglo especifica que temporizador se encuentra activo. Para el U3, este arreglo debe tener siempre al menos 2 elementos. aEnableCounters: Un arreglo donde cada elemento especifica que contador est activo. Los contadores no tienen que ser activados en orden

para comenzar desde cero, por lo tanto, el Counter1 puede activarse cuando el Counter0 est desactivado. Un valor distinto de cero en los elementos del arreglo especifica que temporizador se encuentra activo. Para el U3, este arreglo debe tener siempre al menos 2 elementos. TCPinOffset: Valor en un rango de 4-8 que especifica donde comienza la asignacin de temporizadores y contadores. TimerClockBaseIndex: Pasa una constante para fijar el tiempo base del temporizador. Por defecto es LJ_tc48MHZ. TimerClockDivisor: Pasa un divisor en un rango de 0-255 donde 0 es un divisor de 256. aTimerModes: Un arreglo donde cada elemento es una constante que especifica el modo para cada temporizador. Para el U3, este arreglo siempre debe tener al menos 2 elementos. aTimerValues: Un arreglo donde cada elemento especifica el valor inicial para cada temporizador. Para el U3, este arreglo siempre debe tener al menos 2 elementos. Reserved (1&2): Pasa un 0.

4.2.22 - eTCValues() Es una funcin simple que actualiza y lee todos los temporizadores y todos los contadores. Esta es una alternativa ms simple para los mtodos IOType ms flexibles normalmente usados por el controlador. Declaracin: LJ_ERROR _stdcall eTCValues ( LJ_HANDLE Handle, long *aReadTimers, long *aUpdateResetTimers, long *aReadCounters, long *aResetCounters, double *aTimerValues,

double *aCounterValues, long Reserved1, long Reserved2) Descripcin de los parmetros: Devuelve: Cdigo de errores LabJack o 0 si no hay errores. Entradas: Handle Identificador devuelto por OpenLabJack(). aReadTimers: Un arreglo donde cada elemento especifica que temporizador debe ser ledo. Un valor distinto de cero en los elementos del arreglo especifica que temporizador debe ser ledo. Para el U3, este arreglo debe tener siempre al menos 2 elementos. aUpdateResetTimers: Un arreglo donde cada elemento especifica que temporizador debe ser actualizado/reiniciado. Un valor distinto de cero en los elementos del arreglo especifica que temporizador debe ser actualizado/reiniciado. Para el U3, este arreglo debe tener siempre al menos 2 elementos. aReadCounters: Un arreglo donde cada elemento especifica que contador debe leerse. Un valor distinto de cero en los elementos del arreglo especifica que contador debe ser ledo. Para el U3, este arreglo debe tener siempre al menos 2 elementos. aResetCounters: Un arreglo donde cada elemento especifica que contador debe reiniciarse. Un valor distinto de cero en los elementos del arreglo especifica que contador debe ser reiniciado. Para el U3, este arreglo debe tener siempre al menos 2 elementos. aTimerValues: Un arreglo donde cada elemento es el nuevo valor para cada temporizador. Cada valor se actualiza solamente si el elemento apropiado se coloca en el arreglo aUpdateResetTimers. Para el U3, este arreglo debe tener siempre al menos 2 elementos. Reserved (1&2): Pasa un 0.

Salidas: aTimerValues: Un arreglo donde cada elemento es el valor ledo desde el temporizador si el elemento apropiado se coloca en el arreglo aReadTimers. aCounterValues: Un arreglo donde cada elemento es el valor ledo desde el contador si el elemento apropiado se coloca en el arreglo aReadCounters.

También podría gustarte