Home

Manuales del programador

image

Contents

1. 62 Varlables de SO rita ie 64 Command set of digital 1 0 Modules omacininin ici 84 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador vi Listado de ejemplos Ejemplo 1 1 Utilizaci n de la llamada al sistema OPEN occcccccnconcnconecnconnnnnns 3 Ejemplo 1 2 Utilizaci n de la llamada al sistema Write ocococccccncnconcnnonennnno 4 Ejemplo 1 3 Utilizaci n de la llamada al sistema read ocooccccccnonnnnconcnnannnnnno 4 Ejemplo 1 4 Utilizaci n de las funciones de configuraci n del puerto 9 Ejemplo 2 1 Interfaz EsAdA acaso 37 Ejemplo 3 1 Interfaz Esad narra 71 Ejemplo 4 1 Interfaz C Ad aa 96 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 1 de 107 1 Introduccion 1 1 Identificaci n del proyecto T tulo Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Directores V ctor Manuel Gonz lez Su rez Jos Antonio Cancelas Caso Autor Adolfo Antonio Fern ndez Trabanco Fecha Junio 2005 1 2 Visi n general del documento En el presente documento se incluyen los manuales del programador de las librer as desarrolladas Previamente al desarrollo de cada uno de los manuales se muestra en la Introducci n los conceptos necesarios sobre programaci n del puerto serie en Linux Dado que la implementaci n realizada para acceder al puerto serie es pr ctica
2. Leading Code Es el primer car cter de todas las tramas Addr Dos caracteres ASCII en hexadecimal Direcci n del m dulo a quien va dirigida la trama El rango de valores posibles est comprendido entre 00 y FF Command Longitud variable Indica el comando a ejecutar Data Longitud variable Es un campo opcional Utilizado por algunos comandos para indicar valores de datos Checksum Dos caracteres ASCII en hexadecimal Este campo es opcional Este campo activa el control de paridad para la trama Este valor se calcula seg n la siguiente f rmula Checksum LeadingCode Addr Command Data MOD 0x100 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 60 de 107 lt CR gt Un caracter ASCII en hexadecimal Indica el final de la trama Para finalizar las tramas se ha de utilizar el caracter de retorno de carro CR ASCII 13 3 1 2 Respuestas de los m dulos NuDAM Los mensajes de respuesta dependen del comando enviado La respuesta puede incluir varios campos de informaci n Las posibles respuestas a un comando se diferencian por el primer car cter campo Leading Code Si se responde al comando con o gt el comando enviado es correcto Si se responde al comando con el comando enviado es inv lido Existen condiciones en las que un comando no producir un mensaje de respuesta La direcci n especif
3. FP RLY 420 FP DI 301 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 28 de 107 2 2 2 Codigo C 2 2 2 1 Estructuras y variables utilizadas En el c digo fuente se definen una serie de macros estructuras y variables que se utilizan para realizar la implementaci n del driver Variables globales e COM1 y COM2 Indican el puerto serie a utilizar para la comunicaci n e _Digital_IN y _Digital_OUT Indican el tipo de m dulo entradas digitales y salidas digitales respectivamente e Variables de error Proporcionan informaci n sobre el estado en que finaliz la ltima operaci n En la Tabla 2 2 se muestran las variables de error utilizadas el valor que toman cada una de ellas y la descripci n Macros internas define _FPDI301 0x0105 define _FPRLY420 0x0108 Contienen los c digos del fabricante para identificar los distintos m dulos Este identificador es nico para cada tipo de m dulo Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 29 de 107 Error Valor Descripcion CORRECTO 0 En la ltima operaci n no se produjo ning n error ERROR_COM 101 Error en la comunicaci n con el puerto serie FD_INVALIDO 102 Descriptor del puerto inv lido Timeout al leer del puerto El dispositivo no ha TIMEOUT 103 respondido en el tiempo espe
4. Ada function ObtenerError return Var_Error Valor retornado C C Un entero que identifica la situaci n en que finaliz la ltima operaci n Los posibles valores est n definidos en las variables de error Ada Una variable de tipo Var_Error valor enumerado donde se definen los errores ObtenerErrorString Descripci n Esta funci n sirve para obtener una descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima llamada a una funci n se ha producido un error mediante una llamada a esta funci n se obtendr una descripci n de ste Sintaxis C C char ObtenerErrorString void Ada function ObtenerErrorString return string Valor retornado Una cadena con la descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima operaci n no se produjo ning n error se retornar una cadena vac a Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 43 de 107 Num_Lineas Descripcion Esta funci n proporciona informaci n sobre el n mero de canales que forman un m dulo Sintaxis C C int Num_Lineas int modulo Ada function Num_Lineas Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local Valor retornado El n mero de canales del m dulo si todo fue correcto 1 en caso de error Num_Modulos De
5. When host watchdog timer is enable host computer must send this command to every module before timeout otherwise host watchdog timer enable module s output value will go to safety state output value Timeout value and safety state output value is defined Set Host Watchdog Timer amp Safety Value Syntax KRR lt CR gt Command leading code Ea Host is OK Response Note Host is OK command has NO response Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Programmable I O Mode Setting Description Set the programmable input or output mode for ND 6058 Syntax Addr S IOFlag lt CR gt 6058 only Addr S IOFlag Response Command leading code Address ID Set programmable I O mode Status of programmable I O 0x00 A O P B O P CH O P CL O P 0x01 A O P B O P CH O P CL 1 P 0x02 A O P B O P CH P CL O P 0x03 A O P B O P CH P CL P 0x04 A O P B I P CH O P CL O P 0x05 A O P B 1 P CH O P CL P 0x06 A O P B 1 P CH 1 P CL O P 0x07 A O P B 1 P CH 1 P CL 1 P 0x08 A 1 P B O P CH O P CL O P 0x09 A 1 P B O P CH O P CL P Ox0A A I P B O P CH 1 P CL O P Ox0B A P B O P CH 1 P CL 1 P Ox0C A P B P CH O P CL O P Ox0D A I P B 1 P CH O P CL I P OxOE A 1 P B 1 P CH 1 P CL O P Ox0F A I P B P CH I P CLA P I P input mode O P output mode Addr lt CR gt or Addr lt CR gt
6. BaudRate Current setting of communication baud rate refer to Table 0 1 for details CheckSumFlag Current setting of check sum flag refer to Table 0 3 for details Example User command 302 lt CR gt Response 30400600 lt CR gt Command is valid 30 Address ID 40 Digital I O module 06 Baud rate is 9600 bps 00 checksum is disable 06 9600 bps 08 38400 bps 09 115200 bps Table 0 1 Baud rate setting code Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 86 de 107 Checksum 0 disable Reserved 1 enable Must to be 000 Module Type 000 ND 6050 001 ND 6060 010 ND 6052 011 ND 6053 100 ND 6058 101 ND 6063 Reserved Must to be O 110 ND 6054 111 ND 6056 Table 0 3 Response of check sum flag Read Module Name Description Read NuDAM module s name Syntax Addr M lt CR gt Command leading code Addr Address ID M Read module name Response Addr ModuleName lt CR gt or Addr lt CR gt Command is valid Command is invalid Addr Address ID ModuleName NuDAM module s name Example User command 30M lt CR gt Response 306050 lt CR gt Command is valid 30 Address 6050 ND 6050 Digital I O module Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 87 de 107 Digital Output Description Set digital output port
7. e Se actualiza el valor del canal en las variables locales e Se codifica el valor de los canales del m dulo para enviar el comando Write Discrete with Status M e Si falla alguno de los pasos anteriores se actualizaran convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 37 de 107 2 2 3 C digo Ada El lenguaje Ada proporciona la facilidad de reutilizar c digo escrito en otro lenguaje El paquete Interfaces C contiene los tipos b sicos constantes y subprogramas que permiten a un programa en Ada pasar par metros y cadenas a las funciones escritas en C Para llevar a cabo la utilizaci n de las funciones escritas en C se hace uso del pragma import Primero se declara la funci n como si se fuera a implementar en lenguaje Ada Luego se utiliza pragma import para utilizar la funci n escrita en C en nuestra implementaci n en Ada Este pragma necesita tres par metros e El lenguaje en que est implementada la funci n a importar e El nombre que tendr la funci n en nuestra implementaci n en Ada e El nombre de la funci n en lenguaje C En el Ejemplo 2 1 se muestra la utilizaci n de este pragma La llamada a la funci n NI EscribeLinea_DO en la interfaz en Ada hace uso de la funci n definida en lenguaje C con el mismo nombre function NI_EscribeLinea_DO Modulo Integer Linea Num_Linea_Salid
8. Command is valid Command is invalid Addr Address ID Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 89 de 107 Manuales del programador Pagina 90 de 107 Example User command 06S0C lt CR gt Response 06 lt CR gt Command is valid OC Port A and B are input mode high and low half byte of port C are output mode Set Host Watchdog Timer Safety Value Description Set host watchdog timer module will change to safety state when host is failure Define the output value in this command Syntax Addr 2 Flag TimeOut SafeValue lt CR gt Addr 2 Flag TimeOut SafeH SafeL lt CR gt 6056 only Addr 2 Flag cont TimeOut SafeA SafeB SafeC lt CR gt 6058 only Command leading code Addr Address ID range 00 FF 2 Set host watchdog timer and safe state value Flag 0 Disable host watchdog timer 1 Enable host watchdog timer 1 character TimeOut Host timeout value between this time period host must send Host is OK command to module otherwise module will change to safety state Range 01 FF 2 character One unit is 100 ms 01 1 100 100 ms FF 255 100 25 5 sec SafeValue 8 channels safety value of digital output channels when host is failure 2 character SafeH Safety value of digital output channels 14 8 when host is failure 2 character SafeL Safety
9. a sobre un solo canal de entrada salida Sintaxis long EDigitalOut long idnum long demo long channel long writeD long state Argumentos idnum N mero de serie Local ID 6 1 para el primer m dulo encontrado Identifica el m dulo sobre el que hay que ejecutar la operaci n demo Permite emplear la funci n sin necesidad de tener conectados los m dulos LabJack Se debe indicar cero para operar normalmente y un valor mayor que cero para operar en modo demo channel Canal a actualizar 0 3 para los canales IO 0 15 para los canales D writeD Si es mayor que cero se actualiza un canal D sino un canal IO state Si es cero el canal se activa sino se desactiva Valor retornado O si todo fue correcto Un c digo de error Labjack errorcodes si se produjo alg n error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 105 de 107 EDigitalIn Descripcion Esta funci n es una versi n simplificada de la funci n DigitallO que lee un canal de entrada salida Sintaxis long EDigitalIn long idnum long demo long channel long readD long state Argumentos idnum N mero de serie Local ID 6 1 para el primer m dulo encontrado Identifica el m dulo sobre el que hay que ejecutar la operaci n demo Permite emplear la funci n sin necesidad de tener conectados los m dulos LabJack Se debe indicar cero p
10. cualquier otra Sintaxis C C int LJ_Inicializar int modulo int tipo Ada function LJ_Inicializar Modulo Integer Tipo Device_Type return Integer Argumentos Modulo N mero de serie o Local ID Tipo Configuraci n que se desea otorgar a la tarjeta RB16 conectada al m dulo como entradas o salidas Utilizar las variables INPUT y OUTPUT O Valor retornado O si todo fue correcto 1 en caso de error durante la inicializaci n S lo para la versi n en C C 2 si la variable tipo no se corresponde con ninguna de las macros definidas Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 98 de 107 LJ_EscribeLinea_DO Descripci n Esta funci n actualiza el valor de un canal de salida de la tarjeta RB16 conectada al m dulo LabJack U12 correspondiente Sintaxis C C int LJ_EscribeLinea_DO int modulo int linea int valor Ada function LJ_EscribeLinea_DO Modulo Integer Linea Num_Linea Valor Ul return Integer Argumentos Modulo N mero de serie del m dulo o Local ID Linea N mero del canal de salida que se desea actualizar entre O y 15 Valor Valor de la linea a actualizar 1 activar 0 desactivar Valor retornado O si todo fue correcto 1 en caso de error LJ_EscribeModulo_DO Descripci n Esta funci n actualiza los diecis is canales de salida de la tarjeta RB16 conecta
11. n m dulos en el bus O Valor retornado O si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 73 de 107 ND_Liberar Descripcion Esta funci n libera el bus de comunicaciones y los recursos comprometidos durante la inicializaci n Sintaxis C C int ND_Liberar void Ada function ND_Liberar return Integer Valor retornado O si todo fue correcto 1 en caso de error ND_EscribeLinea_DO Descripcion Esta funci n actualiza el valor de una linea de salida de uno de los puertos de la tarjeta DIN 24R conectada al m dulo ND 6058 Sintaxis C C int ND_EscribeLinea_DO const int modulo const int puerto const int linea const int valor Ada function ND_EscribeLinea_DO Modulo Num_Modulo Puerto Puerto_Tarjeta Linea Num_Linea_Salida Valor Ul return Integer Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 74 de 107 Argumentos Modulo Posici n del m dulo en el bus local Puerto Puerto de la tarjeta donde se encuentra la l nea a actualizar utilizar las variables PUERTO_A PUERTO_B o PUERTO_C Linea N mero de l nea del puerto que se desea actualizar entre 0 y 7 Valor Valor de la linea a actualizar 1 activar 0 desactivar Valor retornado O si todo fue correcto 1 en caso de error ND_
12. retornar error 3 2 2 2 Funciones locales Existen un conjunto de funciones que se utilizan internamente para el correcto funcionamiento del driver expon Sintaxis int expon int base int exp Descripci n Realiza la operaci n base elevado a exp y retorna el resultado Aunque existe la funci n pow en C que realiza la misma operaci n se decidi implementar aqu esta funci n para evitar problemas de librer as en la implementaci n en Ada Init_bus Sintaxis int Init_bus void Descripci n Esta funci n inicializa todos los m dulos del bus Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 68 de 107 Init_modulo O Sintaxis int Init_ modulo int modulo Descripci n Esta funci n inicializa el m dulo que se le indica como argumento Para ello se siguen los siguientes pasos e Se desactiva el watchdog en el m dulo mediante el comando Set Host Watchdog Safety Value e Si el m dulo a inicializar es el ND 6058 se configuran las 24 l neas de E S programables como salidas mediante el comando Set Programmable I O Mode y se inicializan a cero e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror y _serror y se retornar 1 BuscaModulos Sintaxis int BuscaModulos int limite Descripci n Esta funci n busca los m dulos que forman el bus entre
13. 401 0107 FP TC 120 0108 FP RLY 420 0109 FP DI 300 010A FP AI 100 010B FP RTD 122 010C FP AI 111 010D FP CTR 500 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 51 de 107 modID Value Module Name 010E FP PWM 520 010F FP AO 210 0110 FP DO 410 0111 FP DO 403 FFFF Empty Base Example gt 00 B cr This command requests the FieldPoint network module at address 0x00 to return the IDs of all the modules in its bank A03000101020103 cs cr This response from the network module indicates that there are three modules in the bank with module IDs 0x0001 FP 1000 module 0x0102 FP AO 200 module and 0x0103 FP DI 330 module Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 52 de 107 Read Discrete with Status emdchars K Description The Read Discrete with Status command reads discrete data from all discrete input and output channels of the addressed module In addition the status of the targeted channels is reported to enable additional error checking Use the Read Module Status or Read Channel Status commands for details on the error condition of a bad channel Syntax IK Success Response A status data status Four ASCII hex characters specifying the status of the channels targeted by this command The most significant bit represents channel 15
14. E S incrementada seg n su posici n en el bus El m dulo de E S contiguo al m dulo tendr n como direcci n f sica la direcci n base de red tendr la direcci n f sica base 1 el siguiente base 2 y asi sucesivamente La implementaci n del driver se ha realizado para que el usuario no necesite conocer en ning n momento las direcciones f sicas de los m dulos conectados al bus El dato que ha de manejar es la direcci n del m dulo en el bus local Este bus local est formado nicamente por los m dulos de E S y se asignan las direcciones comenzando en cero a partir del primer m dulo de E S el contiguo al m dulo de red De esta forma el m dulo contiguo al m dulo de red tendr la direcci n cero el siguiente la uno y as sucesivamente En la Tabla 2 1 podemos ver un ejemplo M dulo M dulo M dulo M dulo FP 1000 FP DI 301 FP RLY 420 FP RLY 420 Direccion Ade base base 1 base 2 base 3 f sica Posici n 0 1 2 en el bus Tabla 2 1 Ejemplo de asignaci n de direcciones en el bus local La detecci n de los m dulos que componen el bus local y la asignaci n de direcciones se hacen de forma din mica No es necesario que los m dulos est n dispuestos f sicamente siempre en el mismo orden Podemos obtener tantas configuraciones hardware como posibilidades de conexi n Algunos ejemplos se muestran a continuaci n FP 1000 FP DI 301 FP RLY 420 FP RLY 420 FP 1000
15. O module for watchdog timer expiration A wdgImo of 0 disables the addressed I O module from being affected by a watchdog timer expiration Note The channel watchdog setups are not altered Therefore if you desire to re enable the I O module for watchdog timer expiration you need to re send this command to the I O module with a valid wdgTmo value All the channel setup you performed for setting watchdog data and enabling channels to source that pre specified is re enabled automatically Example gt 00 00015 cr This command tells the FieldPoint module at address 0x00 to set its watchdog timeout value to 210 ms and to start the watchdog timer gt 33 0002177 cr This command tells the FieldPoint module at address 51 0x33 to enable itself to react to watchdog timer expiration Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 55 de 107 Reset Module emdchars Z Description If a network module is addressed the Reset Module command resets all the I O modules in the bank and resets the turn around delay for all modules to zero If a module other than a network module is addressed the addressed module is reconfigured and the turn around delay for the addressed module is set to zero In both cases the FieldPoint modules are configured to factory default settings if the SnapShot feature is disabled or to stored SnapShot information if the SnapShot feature is e
16. admite varias posibilidades de configuraci n que dependen del sistema operativo En implementaciones antiguas se emplea el miembro c_cflag mediante las constantes definidas en la Tabla 1 3 En las nuevas implementaciones se han definido dos miembros nuevos c_ispeed y c_ospeed Como ya se ha visto existen dos llamadas al sistema operativo que permiten llevar a cabo la configuraci n de la velocidad de comunicaci n cfsetospeed y cfsetispeed Ejemplo 1 4 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 11 de 107 Constante Descripci n CBAUD Bit mask for baud rate BO O baud drop DTR B50 50 baud B75 75 baud B110 110 baud B134 134 5 baud B150 150 baud B200 200 baud B300 300 baud B600 600 baud B1200 1200 baud B1800 1800 baud B2400 2400 baud B4800 4800 baud B9600 9600 baud B19200 19200 baud B38400 38400 baud B57600 57 600 baud B76800 76 800 baud B115200 115 200 baud EXTA External rate clock EXTB External rate clock CSIZE Bit mask for data bits CS5 5 data bits CS6 6 data bits CS7 7 data bits CS8 8 data bits CSTOPB 2 stop bits 1 otherwise CREAD Enable receiver PARENB Enable parity bit PARODD Use odd parity instead of even HUPCL Hangup drop DTR on last close CLOCAL Local line do not change owner of port LOBLK Block job control output CNEW_RTSCT
17. alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror NI_LeeModulo_DI e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se env a al m dulo el comando Read Discrete with Status K para leer el estado de todos los canales e Se actualizan los valores locales de los canales del m dulo e Se retorna codificado en un entero el estado de todas las l neas e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 36 de 107 NI_EscribeModulo_DO e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se env a al m dulo el comando Write Discrete with Status M para escribir el estado de todos los canales e Se actualizan los valores locales de los canales del m dulo e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror NI_LeeLinea_DI e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se llama a la funci n NI_LeeModulo_DI e Se retorna el valor del canal solicitado e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror NI_EscribeLinea_DO e Se hacen las comprobaciones previas a la ejecuci n de la funci n
18. cadena con el nombre del modulo si todo fue correcto Una cadena con la descripci n del error sucedido en caso de error Get_Id Descripcion Esta funci n permite obtener el identificador de un m dulo Este identificador es nico para cada tipo de m dulo y se corresponde con el valor asignado por el fabricante Sintaxis C C int Get_Id int modulo Ada function Get_Id Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local O Valor retornado El n mero del fabricante que identifica el m dulo si todo fue correcto 1 en caso de error Get_Direccion Descripci n Esta funci n permite obtener la direcci n f sica que tiene asignada un m dulo Sintaxis C C int Get_Direccion int modulo Ada function Get_Direccion Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local Valor retornado La direcci n f sica que tiene asignada el m dulo si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 46 de 107 2 3 Anexo A FieldPoint Commands En este anexo se proporciona informaci n sobre los comandos que utilizan los m dulos FieldPoint En las tablas se muestran todos los comandos que soportan los m dulos nicamente se incluye la descripci n de aquellos comandos que se han utilizado para implementar el driver Esta in
19. channel value at specified address This command is only available to modules involving the multiport digital output function Syntax Addr Port OutData lt CR gt 6056 6058 only Command leading code 1 character Addr Address ID 2 character Port Set value to indivisual port OH for 6056 channel 14 to 8 OL for 6056 channel 7 to 0 OA for 6058 port A OB for 6058 port B OC for 6058 port C 2 character OutData Each bit is mapping to each channel number 2 character if the port of ND 6058 is in input mode output data to this port will beignore Response lt CR gt or Addr lt CR gt gt Command is valid Command is invalid Addr Address ID Example User command 2F0A10 lt CR gt Response lt CR gt 2F Address ID OA Set output to port A 10 Set channel 4 of port A ON Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 88 de 107 Digital Input Description Read the digital input channel value and readback the digital output channel value Syntax S Addr 6 lt CR gt Command leading code Addr Address ID 6 Digital data input command Response ND 6053 module response DataInH DataInL 00 lt CR gt or Addr lt CR gt Command is valid Command is invalid DataInH Value of digital input channel 15 8 2 character DataInL Value of digital input channel 7 0 2 character Host is OK Description
20. comando Cada bit representa un canal con un m ximo de 16 canales por m dulo FieldPoint El bit 15 representa el canal 15 y el bit O representa el canal 0 e modifier Cero o m s caracteres ASCII en hexadecimal Algunas tramas no contienen este campo Este campo es utilizado por comandos que realizan acciones distintas en funci n de un valor e data Cero o m s caracteres ASCII en hexadecimal Algunas tramas no contienen este campo Este campo contiene caracteres espec ficos del comando Dos caracteres ASCII en hexadecimal Este campo activa el control de paridad para la trama Este valor se calcula de la siguiente manera se suman los valores num ricos de los caracteres de los campos address y command y se haya el resto de dividir este valor por 256 m dulo 256 de la suma Este resto se convierte a dos caracteres ASCII en hexadecimal para formar el campo Si no se desea controlar el error de paridad este campo ha de contener dos interrogaciones Un car cter ASCII en hexadecimal Este campo indica el final de la trama Se puede utilizar un retorno de carro ASCII 13 o un ASCII 46 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 25 de 107 2 1 2 Respuestas de los m dulos FieldPoint 2 1 2 1 Respuestas de xito Si un comando se ejecuta correctamente el m dulo retornar una trama indicando esta situaci n Los formatos m
21. contiene toda la informacion del bus e int _nerror Contiene el n mero que identifica el estado en que finaliz la ltima funci n e char _serror 255 Cadena que contiene la descripci n del estado en que finaliz la ltima funci n Si la operaci n finaliz correctamente la cadena estar vac a En caso contrario contendr una descripci n del error producido Esta cadena incluye una traza de las funciones en que ha sucedido el error e int estado 0 Indica si en alg n momento se ha producido un error al asignar memoria din mica Se inicializa a cero y en el momento de asignar memoria din mica se actualiza a uno si se hizo correctamente la asignaci n Si no se asign memoria din mica correctamente no se permitir realizar ninguna operaci n Por lo tanto en toda funci n se debe comprobar antes de nada el valor de esta variable y si fuera cero retornar error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 33 de 107 2 2 2 2 Funciones locales Existen un conjunto de funciones que se utilizan internamente para el correcto funcionamiento del driver expon Sintaxis int expon int base int exp Descripci n Realiza la operaci n base elevado a exp y retorna el resultado Aunque existe la funci n pow en C que realiza la misma operaci n se decidi implementar aqu esta funci n para evitar problemas de librer as en la implemen
22. driver 4 1 1 Conceptos previos La empresa LabJack fabricante de la Tarjeta de Adquisici n de Datos LabJack U12 proporcionan un driver para manejar esta tarjeta bajo sistemas operativos Linux Por lo tanto la implementaci n de la interfaz en lenguaje C y Ada utilizar los drivers proporcionados por el fabricante En el ep grafe 4 2 se encuentra una descripci n detallada de las funciones de la librer a del fabricante que se han utilizado para desarrollar la interfaz 4 1 2 C digo C 4 1 2 1 Estructuras y variables utilizadas En el c digo fuente se definen una serie de variables y funciones que se utilizan para realizar la implementaci n del driver Variables globales e INPUT y OUTPUT Indican la configuraci n de la tarjeta RB16 como entradas y salidas respectivamente Variables internas e Int _numLineas 16 Esta variable contiene el numero de lineas de la tarjeta RB16 e long _nerror Contiene el n mero que identifica el estado en que finaliz la ltima funci n e char _serror 255 Cadena que contiene la descripci n del estado en que finaliz la ltima funci n Si la operaci n finaliz correctamente la cadena estar vac a En caso contrario contendr una descripci n del error producido Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 93 de 107 Estas dos ultimas variables son las variables de error que identifican el estado en qu
23. escritas en C Para llevar a cabo la utilizaci n de las funciones escritas en C se hace uso del pragma import Primero se declara la funci n como si se fuera a implementar en lenguaje Ada Luego se utiliza pragma import para utilizar la funci n escrita en C en nuestra implementaci n en Ada Este pragma necesita tres par metros e El lenguaje en que est implementada la funci n a importar e El nombre que tendr la funci n en nuestra implementaci n en Ada e El nombre de la funci n en lenguaje C En el Ejemplo 3 1 se muestra la utilizaci n de este pragma La llamada a la funci n ND_LeeLinea_DI en la interfaz en Ada hace uso de la funci n definida en lenguaje C con el mismo nombre function ND_LeeLinea_DI Modulo Num_Modulo Linea Num_Linea_Entrada return Integer is function ND_Ada_LeeLinea_DI Modulo Integer Linea Integer return Integer pragma Import C ND_Ada_LeeLinea_DI ND_LeeLinea_DI begin return ND_Ada_LeeLinea_DI Modulo Linea end ND_LeeLinea_DI Ejemplo 3 1 Interfaz C Ada La definici n de las variables de acceso al puerto serie variables de error de identificaci n del tipo de m dulo y del puerto de la tarjeta DIN 24R se definen como valores enumerados Tambi n se definen nuevos tipos derivados del tipo Integer y con el rango de valores limitado En las funciones que utilicen estos tipos si se realiza una llamada con un valor fuera del rango se producir una excepci n en
24. las direcciones f sicas cero y limite e inicializa correctamente todas las estructuras de datos y variables utilizadas Para ello sigue los siguientes pasos e Comprueba que existan en el bus los m dulos con direcci n f sica entre cero y limite Para ello se env a el comando Read Configuration a todos los m dulos e Tras conocer el n mero de m dulos que forman el bus se reserva memoria para el vector DeviceBus _bus que contendr la informaci n de todos ellos e Se contin a la inicializaci n de cada una de las variables que identifican los m dulos Para inicializar las variables correctamente es necesario conocer la identidad de los m dulos Para ello se env a el comando Read Module Name a cada uno de ellos Actualmente s lo se soportan los m dulos ND 6053 y ND 6058 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 69 de 107 e Si falla alguno de los pasos anteriores se actualizaran convenientemente las variables de error _nerror y _serror y se retornar 1 3 2 2 3 Funciones globales En este ep grafe nicamente se describe la estructura interna de aquellas funciones que por su importancia o complejidad as lo requieran La descripci n detallada de todas las funciones que forman la librer a se proporciona en el ep grafe 3 2 4 ND_Inicializar e Se inicializan los componentes _puerto Y _velocidad de la variable DeviceBus con lo
25. lenguaje C con el mismo nombre function LJ_LeeLinea_DI Modulo Integer Linea Num_Linea return Integer is function LJ_Ada_LeeLinea_DI Modulo Integer Linea Integer return Integer pragma Import C LJ_Ada_LeeLinea_DI LJ_LeeLinea_DI begin return LJ_Ada_LeeLinea_DI Modulo Linea end LJ_LeeLinea_DI Ejemplo 4 1 Interfaz C Ada Las variables de identificaci n del tipo de m dulo se definen como valores enumerados Tambi n se definen nuevos tipos derivados del tipo Integer y del tipo Float con el rango de valores limitado En las funciones que utilicen estos tipos si se realiza una llamada con un valor fuera del rango se producir una excepci n en tiempo de ejecuci n Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 97 de 107 4 1 4 Descripci n de las funciones Se puede ver que varias funciones necesitan el argumento modulo Este argumento hace referencia al n mero de serie del m dulo o al Local ID Si la ejecuci n de una funci n da lugar a un error se devuelve un valor negativo Se recomienda utilizar las funciones ObtenerError y ObtenerErrorString para obtener el c digo de error y una descripci n de este respectivamente LJ_Inicializar Descripci n Esta funci n sirve para inicializar el m dulo y configurarlo para manejar las entradas o salidas del proceso Se debe invocar esta funci n antes de llamar a
26. par metros de la funci n e Se abre el puerto serie e Se buscan los m dulos que forman el bus local mediante la funci n BuscaModulos e Se inicializa el bus e Si falla alguno de los pasos anteriores se actualizaran convenientemente las variables de error _nerror Y _serror ND_Liberar e Se cierra el puerto serie e Se libera la memoria asignada din micamente durante la inicializaci n e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror ND_LeeModulo_DI e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se env a al m dulo el comando Digital Input para leer el estado de todos los canales e Se actualizan los valores locales de los canales del m dulo e Se retorna codificado en un entero el estado de todas las l neas e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 70 de 107 ND_EscribePuerto_DO e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se env a al m dulo el comando Digital Output para escribir el estado de todos los canales del puerto indicado e Se actualizan los valores locales de los canales del m dulo e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerro
27. tiempo de ejecuci n Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 72 de 107 3 2 4 Descripcion de las funciones El argumento modulo utilizado en varias funciones hace referencia a la posici n en el bus local del m dulo al que se desea acceder Si la ejecuci n de una funci n da lugar a un error se devuelve un valor negativo y se actualizan las variables internas de error Se recomienda utilizar las funciones ObtenerError y ObtenerErrorString para obtener el c digo de error y una descripci n de ste respectivamente ND_Inicializar Descripcion Esta funci n sirve para inicializar el bus de comunicaciones de los m dulos NuDAM Se debe invocar esta funci n antes de llamar a cualquier otra Sintaxis C C int ND_Inicializar int puerto int velocidad int limite Ada function ND_Inicializar Puerto Puerto_Serie Velocidad Integer Limite Num_Modulo return Integer Argumentos Puerto Puerto serie del PC que se va ha emplear para la comunicaci n Se deben utilizar las variables COM1 y COM2 definidas Velocidad Velocidad del puerto serie a la que se va a llevar a cabo la comunicaci n Este valor ha de coincidir con el valor fijado en los m dulos Los valores permitidos son 300 1200 2400 9600 19200 28400 57600 115200 Si se indica un valor distinto a estos se producir un error Limite Direcci n f sica hasta la que se buscar
28. EscribePuerto_DO Descripci n Esta funci n actualiza los ocho canales de uno de los puertos de la tarjeta DIN 24R conectada al m dulo ND 6058 Sintaxis C C int ND_EscribePuerto_DO const int modulo const int puerto const U8 valor Ada function ND_EscribePuerto_DO Modulo Num_Modulo Puerto Puerto_Tarjeta Valor U8 return Integer Argumentos Modulo Posici n del m dulo en el bus local Puerto Puerto de la tarjeta que se desea actualizar utilizar las variables PUERTO_A PUERTO_B o PUERTO_C Valor Entero donde est n codificados los valores de los ocho canales del puerto Valor retornado El n mero de canales del puerto si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 75 de 107 ND_EscribeModulo_DO Descripci n Esta funci n actualiza los 3 puertos de la tarjeta m dulo ND 6058 Sintaxis C C int ND_EscribeModulo_DO const const const const Ada function ND_EscribeModulo_DO return Integer Argumentos int modulo U8 val U8 val U8 va Modulo ValorA ValorB Valorc orA orB lorC Num_Modulo U8 U8 U8 Modulo Posici n del m dulo en el bus local DIN 24R conectada al ValorA Entero donde est n codificados los valores de los ocho canales del puerto A de la tarjeta DIN 24R ValorB Entero donde
29. S Enable hardware flow control not CRTSCTS supported on all platforms Tabla 1 3 Constantes para el miembro c_cflag Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 12 de 107 1 3 2 2 Opciones locales El miembro para las opciones locales c_ flag permite controlar la forma en que seran tratados los caracteres de entrada En general se configurara para entrada can nica o para no can nica En la Tabla 1 4 se muestra las constantes para este miembro de la estructura termios Constante Descripci n ISIG Enable SIGINTR SIGSUSP SIGDSUSP and SIGQUIT signals ICANON Enable canonical input else raw XCASE Map uppercase lowercase obsolete ECHO Enable echoing of input characters ECHOE Echo erase character as BS SP BS ECHOK Echo NL after kill character ECHONL Echo NL NOFLSH Disable flushing of input buffers after interrupt or quit characters IEXTEN Enable extended functions ECHOCTL Echo control characters as char and delete as ECHOPRT Echo erased character as character erased ECHOKE BS SP BS entire line on line kill FLUSHO Output being flushed PENDIN Retype pending input at next read or input char TOSTOP Send SIGTTOU for background output Tabla 1 4 Constantes para el miembro c_Iflag Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programad
30. Se debe invocar esta funci n antes de llamar a cualquier otra Sintaxis C C int NI_Inicializar int puerto int velocidad int dir_ modulo Ada function NI_Inicializar Puerto Puerto Serie Velocidad Integer Dir_Modulo Integer return Integer Argumentos Puerto Puerto serie del PC que se va ha emplear para la comunicaci n Se deben utilizar las variables COM1 y COM2 definidas Velocidad Velocidad del puerto serie a la que se va a llevar a cabo la comunicaci n Este valor ha de coincidir con el valor fijado en el m dulo de red Los valores permitidos son 300 1200 2400 9600 19200 28400 57600 115200 Si se indica un valor distinto a estos se producir un error Dir_Modulo Direcci n f sica que se ha asignado al m dulo de red Valor retornado O si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 39 de 107 NI_Liberar Descripcion Esta funci n libera el bus de comunicaciones y los recursos comprometidos durante la inicializaci n Sintaxis C C int NI_Liberar void Ada function NI_Liberar return Integer Valor retornado O si todo fue correcto 1 en caso de error NI_EscribeLinea_DO Descripci n Esta funci n actualiza el valor de un canal de salida de un m dulo de salidas digitales FP RLY 420 Sintaxis C C int NI_EscribeLinea_DO const int modulo con
31. UNIVERSIDAD DE OVIEDO ESCUELA UNIVERSITARIA DE INGENIERIA TECNICA INFORMATICA Y TELEMATICA DE GIJON DOCUMENTO N 2 MANUALES DEL PROGRAMADOR CONJUNTO DE DRIVERS PARA TARJETAS DE ADQUISICI N DE SE ALES BAJO LINUX Adolfo Antonio Fern ndez Trabanco JUNIO 2005 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador i Indice ss e ei Po 1 1 1 Identificaci n del proyecto sai 1 1 2 Visi n general del dOCUMENtO sssssrrassrrrrrssrrrrrrssrrrrrnssrrrrnnane 1 1 3 El puerto serie en LINUX sssssssessssssesssnsnunnrnenrosesennnnnnenresessnne 2 1 3 1 Conceptos de entrada para dispositivos serie 665 5 1 3 1 1 Proceso de entrada Can nicoO s sssssssresresresresre 5 1 3 1 2 Proceso de entrada no Can nico 0coccccconononononanannso 5 1 3 1 3 Entrada asincron asii ds 5 1 3 1 4 Espera de entradas de origen m ltiple 6 1 3 2 Configuraci n del puerto serie en LINUX ccesee eee ee eee 6 1 3 2 1 Opciones de control uri 10 1 3 2 2 Opciones locales ocoococconorconcanccrancanaanarannnas 12 1 3 2 3 Opciones de Entrada ccsccsscceeseeeesseeseeeesenes 13 1 3 2 4 Opciones de salida sirio corrio 14 1 3 2 5 Caracteres de CONTO eddie 15 1 3 3 Implementaci n realizada viii tii 16 1 3 3 1 Abrir_Puerto_Serie seereis rena aiian 18 1 3 3 2 Cerrar_Puerto_Serie cccccccccceccen
32. _cc Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 16 de 107 1 3 3 Implementaci n realizada Para acceder al puerto serie se han implementado un conjunto de funciones En el archivo ComPort h se puede encontrar la especificaci n de estas funciones y en el archivo ComPort c la implementaci n Este c digo se ha desarrollado para poder comunicarse con los dispositivos FieldPoint y NuDAM La implementaci n realizada es pr cticamente com n para ambos nicamente se diferencia en los par metros de configuraci n del puerto serie Los par metros de configuraci n m s importantes a tener en cuenta para los m dulos FieldPoint son e El formato de las tramas 8 bits de datos 1 bit de parada sin paridad e El control del flujo de datos control por hardware Los par metros de configuraci n m s importantes a tener en cuenta para los m dulos NuDAM son e El formato de las tramas 8 bits de datos 1 bit de parada sin paridad e El control del flujo de datos NO existe control por hardware En el archivo ComPort h se definen un conjunto de variables que se utilizan en la implementaci n char _puerto 15 Nombre del fichero asociado al puerto por ejemplo dev ttyS1 int _npuerto 2 Numero del puerto identificado por las macros COM1 y COM2 Estas macros estan definidas en el archivo ComPort h y deben ser utilizadas para llamar a la funci n A
33. a Valor Ul return Integer is function NI_Ada_EscribeLinea_DO Modulo Integer Linea Integer Valor Integer return Integer pragma Import C NI_Ada_EscribeLinea_DO NI_EscribeLinea_DO begin return NI_Ada_EscribeLinea_DO Modulo Linea Valor end NI_EscribeLinea_DO Ejemplo 2 1 Interfaz C Ada La definici n de las variables de acceso al puerto serie variables de error y de identificaci n del tipo de m dulo se definen como valores enumerados Tambi n se definen nuevos tipos derivados del tipo Integer y con el rango de valores limitado En las funciones que utilicen estos tipos si se realiza una llamada con un valor fuera del rango se producir una excepci n en tiempo de ejecuci n Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 38 de 107 2 2 4 Descripci n de las funciones El argumento modulo utilizado en varias funciones hace referencia a la posici n en el bus local del m dulo al que se desea acceder Si la ejecuci n de una funci n da lugar a un error se devuelve un valor negativo y se actualizan las variables internas de error Se recomienda utilizar las funciones ObtenerError y ObtenerErrorString para obtener el c digo de error y una descripci n de ste respectivamente NI_Inicializar Descripcion Esta funci n sirve para inicializar el bus de comunicaciones de los m dulos FieldPoint
34. a l nea por defecto est finalizada con un NL y fin de fichero o con un car cter fin de l nea Un CR el fin de l nea por defecto en DOS Windows no terminar una l nea con la configuraci n por defecto El proceso de entrada can nica tambi n puede manejar los caracteres borrado borrado de palabra reimprimir car cter traducir CR a NL etc 1 3 1 2 Proceso de entrada no can nico Maneja un n mero fijo de caracteres por lectura y permite un car cter temporizador Este modo se deber a usar si la aplicaci n siempre lee un n mero fijo de caracteres o si el dispositivo conectado env a r fagas de caracteres 1 3 1 3 Entrada asincrona Los dos procesos de entrada descritos anteriormente se pueden usar en dos modos Modo s ncrono la sentencia read se bloquear hasta que la lectura est completa este es el modo por defecto Modo as ncrono la sentencia read devolver inmediatamente y enviar una se al al programa llamador cuando est completa Esta se al puede ser recibida por un manejador de se ales que la tratar adecuadamente Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 6 de 107 1 3 1 4 Espera de entradas de origen multiple No es un modo diferente de entrada pero puede ser util si se estan manejando dispositivos multiples En aplicaciones donde se esperen entradas de distintos origenes se procesaran aquellas entradas que est n d
35. alizar e Se invoca a la funci n InitLabjack de la librer a del fabricante para inicializar el m dulo e Se configura la tarjeta RB16 en funci n del valor del par metro tipo utilizando la funci n Digitall0 e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 95 de 107 LJ_EscribeLinea_DO e Se tratan adecuadamente los valores pues la tarjeta trabaja con l gica invertida e Se llama a la funci n EDigitalOut para actualizar el valor de la l nea e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror LJ_LeeLinea_DI e Se llama a la funci n EDigitalIn para obtener el valor de la linea e Se retorna el valor adecuado teniendo en cuenta que la tarjeta trabaja con l gica invertida e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror LJ_EscribeModulo_DO e Se tratan adecuadamente los valores pues la tarjeta trabaja con l gica invertida e Se llama a la funci n DigitalI0 para actualizar los valores de las diecis is l neas de la tarjeta RB16 e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror LJ_LeeModu
36. ara operar normalmente y un valor mayor que cero para operar en modo demo channel Canal a leer 0 3 para los canales IO 0 15 para los canales D readD Si es mayor que cero se lee un canal D sino un canal IO state Variable en la que se retorna el estado del canal le do Valor retornado O si todo fue correcto Un c digo de error Labjack errorcodes si se produjo alg n error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 106 de 107 4 3 Anexo B Description of errorcodes En este anexo se proporciona la descripci n de los errores que puede devolver la tarjeta LabJack U12 Esta informaci n se ha obtenido directamente del ep grafe 4 40 Description of errorcodes del manual de usuario LabJack U12 Users Guide O No error 1 Unknown error 2 No LabJacks found 3 LabJack n not found 4 Set USB buffer error 5 Open handle error 6 Close handle error 7 Invalid ID 8 Invalid array size or value 9 Invalid power index 10 FCDD size too big 11 HVC size too big 12 Read error 13 Read timeout error 14 Write error 15 Turbo error 16 Illegal channel index 17 Illegal gain index 18 Illegal AI command 19 Illegal AO command 20 Bits out of range 21 Illegal number of channels 22 Illegal scan rate 23 Illegal number of samples 24 Al response error 25 LabJack RAM chec
37. brir_Puerto_Serie y para comprobar el valor devuelto por Get_Puerto int _velocidad 2 Velocidad de comunicaci n del puerto serie Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 17 de 107 int _fd 2 Descriptor del fichero asociado al puerto una vez que se ha abierto Para ejecutar gran parte de las funciones se comprueba previamente que exista un descriptor de fichero valido Es por ello que se inicializa con un valor negativo struct termios _oldtio _newtio Estructuras para almacenar la vieja y la nueva configuraci n del puerto respectivamente A continuaci n se ofrece una descripci n detallada de cada una de las funciones incluyendo la estructura interna de cada una de ellas Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 18 de 107 1 3 3 1 Abrir_Puerto_Serie Descripci n Esta funci n abre el puerto serie con la configuraci n adecuada La estructura de la funci n es la siguiente Se abre el fichero asociado al puerto Se obtiene la configuraci n actual del puerto Este valor se utilizar para restaurar el puerto a su estado original cuando se cierre Se configura el puerto mediante los distintos miembros de la estructura termios La configuraci n ha de ser acorde con las caracter sticas de los m dulos En este punto es donde se diferencian las dos implementaci
38. bus Se hace una lectura de los m dulos que forman el bus Si la lectura anterior tuvo xito se reserva memoria para el vector que contendr los m dulos que forman el bus DeviceBus _bus Se contin a la inicializaci n de cada una de las variables que identifican los m dulos Actualmente s lo se soportan los m dulos FP DI 301 y FP RLY 420 Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror y _serror y se retornar 1 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 35 de 107 2 2 2 3 Funciones globales En este epigrafe unicamente se describe la estructura interna de aquellas funciones que por su importancia o complejidad as lo requieran La descripci n detallada de todas las funciones que forman la librer a se proporciona en el ep grafe 2 2 4 NI_Inicializar e Se inicializan los componentes _dirBase _puerto Y _velocidad de la variable DeviceBus con lo par metros de la funci n e Se abre el puerto serie e Se buscan los m dulos en el bus mediante la funci n BuscaModulos e Se resetean cada uno de los m dulos de E S que forman el bus local e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror NI_Liberar e Se cierra el puerto serie e Se libera la memoria asignada din micamente durante la inicializaci n e Si falla
39. chero es fd y guardarlos en la zona de memoria que empieza en buf En el Ejemplo 1 2 se puede ver una forma de uso La llamada al sistema read no finaliza el buffer donde deposita los datos con el ASCII nulo Es por ello que esta tarea se hace expl citamente buffer leo 0 Para obtener mas informaci n sobre esta llamada al sistema acuda a la ayuda en l nea de su operativo man 2 read int Leer_Datos char buffer int length ssize_t leo comprobamos qu xiste un descriptor de fichero valido if _fd lt 0 return 2 leo read _fd buffer length buffer leo 0 ponemos el caracter nulo de final return leo Ejemplo 1 3 Utilizacion de la llamada al sistema read Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 5 de 107 1 3 1 Conceptos de entrada para dispositivos serie Hay tres conceptos diferentes de entrada para dispositivos serie Segun la aplicaci n que se quiera realizar se debe escoger el concepto apropiado Siempre que sea posible se recomienda no obtener una cadena completa mediante un bucle que vaya leyendo car cter a car cter 1 3 1 1 Proceso de entrada can nico Es el modo de proceso normal para terminales pero puede ser til tambi n para comunicaciones con otros dispositivos Toda la entrada es procesada en unidades de l neas lo que significa que un read s lo devolver una l nea completa de entrada Un
40. ci n Esta funci n sirve para obtener el estado en que finaliz la ltima operaci n que se ha realizado En el ep grafe 4 3 Anexo C se pueden consultar todos los c digos de error que puede devolver la funci n ObtenerError Sintaxis C C int ObtenerError void Ada function ObtenerError return Integer Valor retornado Un entero que identifica la situaci n en que finaliz la ltima operaci n Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 102 de 107 ObtenerErrorString Descripci n Esta funci n sirve para obtener una descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima llamada a una funci n se ha producido un error mediante una llamada a esta funci n se obtendr una descripci n de ste Sintaxis C C char ObtenerErrorString void Ada function ObtenerErrorString return string Valor retornado Una cadena con la descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima operaci n no se produjo ning n error se retornar una cadena vac a Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 103 de 107 4 2 Anexo A Descripci n de las funciones propias del fabricante InitLabjack Descripci n Esta funci n inicializa las variables necesarias del driver y se debe inv
41. ctal que representan los caracteres XON y XOFF en el est ndar ASCII Para establecer los timeouts se utilizan los elementos VMIN y VTIME Mediante VMIN se especifica el n mero m nimo de caracteres a leer En funci n del valor de VMIN VTIME tiene uno u otro significado Si VMIN es cero el valor de VTIME especifica el tiempo que se ha de esperar para todas las lecturas Si VMIN es distinto de cero el valor de VTIME especifica el tiempo que se ha de esperar hasta la llegada del primer car cter Si un car cter llega antes de cumplirse el tiempo la lectura se bloquear hasta que lleguen el n mero de caracteres indicados en VMIN Si no llega ning n car cter en el tiempo especifico la llamada a la funci n de lectura retornar cero Esta forma de utilizar los elementos VMIN y VTIME permite indicarle al driver que deseamos hacer lecturas de N bytes de manera que un llamada a la funci n read retornar cero o los N bytes indicados en VMIN Constante Descripci n Clave VINTR Interrupt CTRL C VQUIT Quit CTRL Z VERASE Erase Backspace BS VKILL Kill line CTRL U VEOF End of file CTRL D VEOL End of line Carriage return CR VEOL2 Second end of line Line feed LF VMIN Minimum number of characters to read VSTART Start flow CTRL Q XON VSTOP Stop flow CTRL S XOFF VTIME Time to wait for data tenths of seconds Tabla 1 7 Caracteres de control para el miembro c
42. ction OFILL Use fill characters for delay OFDEL Fill character is DEL NLDLY Mask for delay time needed between lines NLO No delay for NLs NL1 Delay further output after newline for 100 milliseconds CRDLY Mask for delay time needed to return carriage to left column CRO No delay for CRs CR1 Delay after CRs depending on current column position CR2 Delay 100 milliseconds after sending CRs CR3 Delay 150 milliseconds after sending CRs TABDLY Mask for delay time needed after TABs TABO No delay for TABs TAB1 Delay after TABs depending on current column position TAB2 Delay 100 milliseconds after sending TABs TAB3 Expand TAB characters to spaces BSDLY Mask for delay time needed after BSs BSO No delay for BSs BS1 Delay 50 milliseconds after sending BSs VTDLY Mask for delay time needed after VTs VTO No delay for VTs VT1 Delay 2 seconds after sending VTs FFDLY Mask for delay time needed after FFs FFO No delay for FFs FF1 Delay 2 seconds after sending FFs Tabla 1 6 Constantes para el miembro c_oflag Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 15 de 107 1 3 2 5 Caracteres de control El array de caracteres c_cc contiene los caracteres de control y los parametros de configuraci n para los timeout Tabla 1 7 Los elementos VSTART y VSTOP contienen los caracteres utilizados para el control de flujo de datos por software Normalmente se emplean DC1 021 octal y DC3 023 o
43. d Ada function ObtenerErrorString return string Valor retornado Una cadena con la descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima operaci n no se produjo ning n error se retornar una cadena vac a Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 79 de 107 Num_Lineas Descripcion Esta funci n proporciona el n mero de canales que forman el m dulo Sintaxis C C int Num_Lineas int modulo Ada function Num_Lineas Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local Valor retornado El n mero de canales del m dulo si todo fue correcto 1 en caso de error Num_Modulos Descripci n Esta funci n proporciona el n mero de m dulos que se han detectado en el bus local Sintaxis C C int Num_Modulos void Ada function Num_Modulos return Integer Valor retornado El n mero de m dulos que forman el bus local si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 80 de 107 Get_Tipo Descripcion Esta funci n retorna informaci n sobre el tipo del m dulo entradas digitales salidas digitales Sintaxis C C int Get_Tipo int modulo Ada function Get_Tipo Modulo Integer return Device_Type Argu
44. d was ignored A command other than Power Up Clear was attempted after power up or power failure Once the error is received by the host it is unnecessary to send the Power Up Clear command because the next command is executed normally If this error message is received the FieldPoint network module has gone through its power up sequence and has reset all characteristics to defaults If SnapShot is enabled the module is configured in accordance with the stored SnapShot information 01 E_INVALID_CMD Undefined command The command character was not a legal command character or the addressed module does not support this command The command was ignored 02 E_BAD_CHECKSUM Checksum error The checksum received in the command did not match the calculated checksum of the characters in the command The command was ignored 03 E_INBUF_OVRFLO Input buffer overrun The received command was too long The command was ignored 04 E_ILLEGAL_CHAR Non printable ASCII character received Only characters from ASCII value 33 to 127 are permitted within commands The command was ignored 05 E_INSUFF_CHARS Data field error An insufficient or incorrect number of characters were received for the specified command 06 E_WATCHDOG_TMO Communications link network watchdog timed out The command was ignored 07 E_INV_LIMS_GOT Specified limits invalid for the command This i
45. da al m dulo LabJack U12 correspondiente Sintaxis C C int LJ_EscribeModulo_DO int modulo Ul6 valor Ada function LJ_EscribeModulo_DO Modulo Integer Valor Ul6 return Integer Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 99 de 107 Argumentos Modulo N mero de serie o Local ID del m dulo Valor Entero donde est n codificados los valores de los diecis is canales de la tarjeta RB16 O Valor retornado El n mero de canales de la tarjeta RB16 si todo fue correcto 1 en caso de error LJ_LeeLinea_DI Descripci n Esta funci n lee el estado de un canal de entrada de la tarjeta RB16 conectada al m dulo LabJack U12 correspondiente Sintaxis C C int LJ_LeeLinea_DI int modulo int linea Ada function LJ_LeeLinea_DI Modulo Integer Linea Num_Linea return Integer Argumentos Modulo N mero de serie o Local ID del m dulo Linea N mero del canal de entrada que se desea leer entre O y 15 Valor retornado El estado del canal de entrada 1 activo 0 inactivo si todo fue correcto Un n mero negativo si hubo alg n error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 100 de 107 LJ_LeeModulo_DI Descripci n Esta funci n lee el estado de los diecis is canales de entrada de la tarjeta RB16 conectada al m dulo LabJack U12 corresp
46. do al puerto COM2 se debe abrir en modo lectura y escritura La opci n O_NOCTTY indica que el fichero no se abrir como controlador de terminal tty Si no se especifica esta opci n una se al de finalizaci n abort enviada por la l nea finalizar a la ejecuci n strcpy _puerto dev ttyS1 _fd open _puerto O_RDWR O_NOCTTY if fd lt 0 No se pudo abrir el puerto return _fd Ejemplo 1 1 Utilizaci n de la llamada al sistema open Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 4 de 107 Para mandar datos al puerto se emplea la llamada al sistema write ssize_t write int fd const void buf size_t num Escribe hasta num bytes en el fichero referenciado por el descriptor de fichero fd desde el bufer que comienza en buf En el Ejemplo 1 2 se puede ver una forma de uso Para obtener m s informaci n sobre esta llamada al sistema acuda a la ayuda en l nea de su operativo man 2 write int Enviar_Datos const char comando ssize_t escribo comprobamos qu xiste un descriptor de fichero valido if _fd lt 0 return 2 escribo write _fd comando strlen comando return escribo Ejemplo 1 2 Utilizaci n de la llamada al sistema write Para leer datos del puerto se emplea la llamada al sistema read ssize_t read int fd void buf size_t nbytes Intenta leer hasta nbytes bytes del fichero cuyo descriptor de fi
47. dos Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 8 de 107 cfsetospeed Se utiliza para establecer la velocidad de salida int cfsetospeed struct termios termios_p speed_t speed Establece la velocidad de salida guardada en la estructura termios apuntada por termios_p a speed que debe ser una de estas constantes BO B50 B75 B110 B134 B150 B200 B300 B600 B1200 B1800 B2400 B4800 B9600 B19200 B38400 B57600 B115200 B230400 Los nuevos valores no hacen efecto hasta que se llame con xito a tcsetattr cfsetispeed Se utiliza para establecer la velocidad de entrada int cfsetispeed struct termios termios_p speed_t speed Establece la velocidad de entrada guardada en la estructura termios apuntada por termios_p a speed que debe ser una de estas constantes BO B50 B75 B110 B134 B150 B200 B300 B600 B1200 B1800 B2400 B4800 B9600 B19200 B38400 B57600 B115200 B230400 Si la velocidad de entrada se pone a cero entonces ser igual a la de salida Los nuevos valores no hacen efecto hasta que se llame con xito a tcsetattr En el Ejemplo 1 4 se puede ver un fragmento de c digo que muestra la utilizaci n de alguna de las funciones comentadas Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 9 de 107 VARIABLES GLOBALES T char _puerto 15 int _n
48. dulos Contiene el n mero de m dulos que forman el bus DEVICE _bus Contiene la informaci n de cada uno de los m dulos que forman el bus Esta variable es un array din mico de estructuras DEVICE que como vimos anteriormente contienen la informaci n de cada m dulo Se reserva din micamente la memoria tras conocer el n mero de m dulos que forman el bus Variables internas e BUS DeviceBus 0 Esta variable contiene toda la informaci n del bus e int _nerror Contiene el n mero que identifica el estado en que finaliz la ltima funci n e char _serror 255 Cadena que contiene la descripci n del estado en que finaliz la ltima funci n Si la operaci n finaliz correctamente la cadena estar vac a En caso contrario contendr una descripci n del error producido Esta cadena incluye una traza de las funciones en que ha sucedido el error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 67 de 107 e int estado 0 Indica si en alg n momento se ha producido un error al asignar memoria din mica Se inicializa a cero y en el momento de asignar memoria din mica se actualiza a uno si se hizo correctamente la asignaci n Si no se asign memoria din mica correctamente no se permitir realizar ninguna operaci n Por lo tanto en toda funci n se debe comprobar antes de nada el valor de esta variable y si fuera cero
49. e finaliz una operaci n Si la ejecuci n de una funci n da lugar a un error se devuelve un valor negativo y se actualizan estas variables El driver proporcionado por el fabricante define sus propios c digos de error En el ep grafe 4 3 se encuentra un listado de todos los posibles errores Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 94 de 107 4 1 2 2 Funciones locales expon Sintaxis int expon int base int exp Descripci n Realiza la operaci n base elevado a exp y retorna el resultado Aunque existe la funci n pow en C que realiza la misma operaci n se decidi implementar aqu esta funci n para evitar problemas de librer as en la implementaci n en Ada 4 1 2 3 Funciones globales En este ep grafe nicamente se describe la estructura interna de aquellas funciones que por su importancia o complejidad as lo requieran La descripci n detallada de todas las funciones que forman la interfaz de programaci n se proporciona en el ep grafe 4 1 4 Las funciones definidas utilizan internamente la librer a proporcionada por el fabricante En el ep grafe 4 2 Anexo A se puede encontrar la descripci n detallada de aquellas funciones de la librer a del fabricante que se han utilizado para realizar nuestra propia interfaz Las funciones de la librer a del fabricante se representan con el siguiente formanto InitLabjack LJ_Inici
50. eeneeneeneeneeens 19 Li Syed x BaUdiOS siencedcnmnventsnennertacdtedenunsawdvacealyccuudawysy 19 132324 Enviar Datos assenaar eden 20 1 3 3 5 Leer_DatOS ccccccesseeseeseecceeceucecceueeurensennenns 20 1 3 3 6 Leer Datos PlaZ0 ccccccccceeeeeeeeessseeneneeeenes 21 1 3 3 7 lt Get o POCA PR Eo n ani A rE Api 21 1 3 3 8 Get_Velocidad ooccccccccnnnnnoncncnnanaaa narran 22 1 3 3 9 0 Get PUGO iia a e a dias 22 FieldPoint manual del programador cccccccsseeesseeeeseeeeeeeeeeeeeseees 23 2 1 Protocolo de comunicaci n acia 23 2 1 1 Formato de las tramas FieldPoint seess 23 2 1 2 Respuestas de los m dulos FieldPoint oocccccoccccccccos 25 2 1 2 1 Respuestas de X tO arrancar melena 25 2 1 2 2 Respuestas de error iaa A a A 25 Manuales del programador ii 2 2 Implementaci n del driver ire 26 2 2 1 Conceptos previos el bus local cccccceseeeeeeeeseeeenaeneans 27 RA EErEE TEETE EE EENET EEE 28 2 2 2 1 Estructuras y variables utilizadas 28 2 2 2 2 Funciones locales rias 33 2 2 2 3 Funciones globales rra 35 22 3 Codigo AGS etenari rn a adaa 37 2 2 4 Descripci n de las FUNCIONES vicio 38 NI TniclalilZa Fina aii dao 38 NI Liberation ia 39 NI_EscribeLinea DO ion adi s tune 39 NI_EscribeModulo_DO cocccccccccccccnanannnnnnnnnnan anna rra 40 NI_LeeLinea_Dl c cece cceee eee rr 40 NI_LEQ MOdUlO_DI ccccccccccceeeeeeeeeeuuueeeeeeeeeeusuuugeuensenneng
51. est n codificados los valores de las ocho canales del puerto B de la tarjeta DIN 24R ValorC Entero donde est n codificados los valores de las ocho canales del puerto C de la tarjeta DIN 24R Valor retornado El n mero de l neas del m dulo si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 76 de 107 ND_LeeLinea_DI Descripcion Esta funci n lee el estado de un canal de entrada de un m dulo de entradas digitales ND 6053 Sintaxis C C int ND_LeeLinea_DI const int modulo const int linea Ada function ND_LeeLinea_DI Modulo Num_Modulo Linea Num_Linea_Entrada return Integer Argumentos Modulo Posici n del m dulo en el bus local Linea N mero del canal de entrada que se desea leer entre O y 15 Valor retornado El estado del canal de entrada 1 activo 0 inactivo si todo fue correcto Un n mero negativo si hubo alg n error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 77 de 107 ND_LeeModulo_DI Descripcion Esta funci n lee el estado de los diecis is canales de entrada del m dulo de entradas digitales ND 6053 El estado de las entradas se devuelve codificado en un entero que se ha de pasar a la funci n como argumento Sintaxis C C int ND_LeeModulo_DI const int modulo Ute valor Ada p
52. eturn the channel status A0000 cs cr This response from the FieldPoint module indicates that the channel status is good Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 54 de 107 Set Watchdog Delay cemdchars Q Description If a network module is addressed the Set Watchdog Delay command sets up the timeout value for the FieldPoint bank s watchdog timer If a module other than a network module is addressed the addressed module is enabled or disabled for watchdog timer expiration but the bank s watchdog timeout value is not affected You should set the watchdog data before you issue this command Syntax Q wdgTmo wdgTmo Four ASCU hex characters specifying the watchdog timeout value The result of this command depends on the type of module that is addressed Success Response A Command Sent to Network Module The watchdog timeout value is set equal to 10 times the number of milliseconds specified in this field In addition the watchdog timer is started Timeout values of less than 200 ms 0 lt wdgTmo lt 20 result in an error A wdgTmo of 0 disables the watchdog timer function for the bank Command Sent to I O Module The watchdog timeout value for the bank is not affected and the running stopped state of the watchdog timer is not altered Non zero delays of less than 200 ms wdgTmo lt 20 result in an error A wdgTmo gt 20 enables the I
53. formaci n se ha obtenido directamente de los cap tulos 3 4 y 5 del manual de usuario FP 1000 1001 Programmer Reference Manual Command Type and Name Command Syntax Success Response Utility Commands Power Up Clear A A Reset B A Configuration Commands Set Turn around Delay A Identify Optomux Type F Al type Configure Positions G positions A Configure As Inputs H positions A Configure As Outputs I positions A Read Module Configuration j A config Watchdog Commands Set Analog Watchdog Delay D positions wdgTmo A Set Analog Watchdog Data m positions data A Enhanced Discrete Watchdog m positions wdgTmo A Discrete Commands Write Outputs J positions A Activate Outputs K positions A Deactivate Outputs L positions A Read ON OFF Status M A data Analog Commands Write Analog Outputs J positions data A Read Analog Outputs K positions A data Read Analog Inputs L positions A data Update Analog Outputs S positions data A Tabla 2 3 Standard FieldPoint Commands and Syntax Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 47 de 107 Command Type and Name Command Syntax Success Response Utility Commands Read Module ID IA A modID Read All Module IDs IB A number modarray HotSwap Reporting Mode biflag A Resend Last Response le A Read Firmware Revision le Read Module Status IN A mod
54. har _deviceName 15 Contiene el nombre del dispositivo float _lineas Contiene el valor de cada uno de los canales que tiene el m dulo Esta variable es un array din mico de flotantes Una vez que se conoce el n mero de canales que forman el m dulo se reserva la memoria necesaria int _numLineas Contiene el n mero de canales de que dispone el m dulo Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 31 de 107 e typedef struct _Tbus BUS Esta estructura contiene los campos con las propiedades del bus gt int _dirBase Contiene la direcci n base del m dulo de red int _puerto Identifica el puerto serie utilizado Se deben utilizar las variables COM1 y COM2 definidas en el fichero de cabecera int _velocidad Contiene la velocidad de comunicaci n del puerto serie int _numModulos Contiene el n mero de m dulos que forman el bus DEVICE _bus Contiene la informaci n de cada uno de los m dulos que forman el bus Esta variable es un array din mico de estructuras DEVICE que como vimos anteriormente contienen la informaci n de cada m dulo Se reserva din micamente la memoria tras conocer el n mero de m dulos que forman el bus Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 32 de 107 Variables internas e BUS DeviceBus 0 Esta variable
55. icada no existe La sintaxis del comando es incorrecta Se produjo un error en la comunicaci n Algunos comandos especiales no producen mensajes de respuesta Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 61 de 107 3 2 Implementaci n del driver Los objetivos del presente proyecto planteaban la realizaci n de un driver que permitiera utilizar los dispositivos bajo Linux y la realizaci n de una interfaz en Ada para elaborar los programas de control en este lenguaje La implementaci n realizada se divide en dos partes El driver que permite utilizar los dispositivos en sistemas operativos Linux junto con la interfaz en lenguaje C para que el usuario pueda realizar sus programas de control en este lenguaje Esta parte est programada en lenguaje C y consta de los siguientes ficheros o El fichero DriverC_ND h Contiene la especificaci n de los tipos y funciones desarrolladas para manejar los m dulos o El fichero DriverC_ND c Contiene la implementaci n de las funciones desarrolladas para manejar los m dulos Una interfaz en lenguaje Ada para que el usuario pueda realizar los programas de control en este lenguaje Esta parte est programada en lenguaje Ada y se basa en la facilidad que proporciona el propio lenguaje para realizar llamadas a funciones programadas en otros lenguajes de programaci n como por ejemplo C Los ficheros inv
56. idad de comunicaci n del puerto Sintaxis int Baudios int vel Argumentos Vel Velocidad del puerto serie a la que se va a llevar a cabo la comunicaci n Los valores permitidos son 300 1200 2400 9600 19200 28400 57600 115200 Si se indica un valor distinto a estos se producir un error Valor retornado La velocidad a la que se ha configurado el puerto si todo fue correcto 1 en caso de error 2 si no existe un descriptor de fichero v lido Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 20 de 107 1 3 3 4 Enviar_Datos Descripci n Envia el comando que se le pasa como argumento al puerto serie Sintaxis int Enviar _Datos const char comando Argumentos Comando Cadena que contiene la informaci n a enviar a trav s del puerto Valor retornado El n mero de bytes enviados si todo fue correcto 1 en caso de error 2 si no existe un descriptor de fichero v lido 1 3 3 5 Leer_Datos Descripci n Esta funci n lee length caracteres del puerto serie y los retorna en la cadena apuntada por buffer Si no existen datos para leer en el puerto esta funci n se quedar bloqueada Sintaxis int Leer_Datos char buffer int length Argumentos Buffer Puntero al buffer en donde se almacenar n la informaci n le da Length Numero de caracteres que se desean leer Valor retornado El n mero de bytes
57. isponibles y una vez procesadas se esperara la llegada de nuevas entradas En el ep grafe 3 4 del documento C mo programar el puerto serie en Linux se puede obtener m s informaci n sobre este modo de entrada 1 3 2 Configuraci n del puerto serie en Linux En este ep grafe se mostrar la configuraci n del puerto serie en lenguaje C utilizando la interfaz que proporciona el est ndar POSIX acr nimo de Portable operating system interface La informaci n aqu mostrada se ha obtenido entre otras fuentes del documento Serial Programming Guide for POSIX Operating Systems En el archivo de cabecera lt termios h gt se definen las estructuras y funciones necesarias para llevar a cabo la configuraci n del puerto serie La estructura m s importante es la estructura termios formada por los miembros mostrados en la Tabla 1 2 Miembro Descripci n c_cflag Opciones de control c_lflag Opciones locales c_iflag Opciones de entrada c_oflag Opciones de salida Cx0C Caracteres de control c_ispeed Velocidad baudios de entrada c_ospeed Velocidad baudios de salida Tabla 1 2 Miembros de la estructura termios Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 7 de 107 Las funciones que se utilizar n para llevar a cabo la configuraci n del puerto serie son tcgetattr Se utiliza para obtener los par metros actuales del puer
58. jo Linux Manuales del programador Pagina 41 de 107 Argumentos Modulo Posici n del m dulo en el bus local Linea N mero del canal de entrada que se desea leer entre O y 15 Valor retornado El estado del canal de entrada 1 activo 0 inactivo si todo fue correcto Un n mero negativo si hubo alg n error NI_LeeModulo_DI Descripci n Esta funci n lee el estado de los diecis is canales de entrada del m dulo de entradas digitales FP DI 301 El estado de las entradas se devuelve codificado en un entero que se ha de pasar a la funci n como argumento Sintaxis C C int NI_LeeModulo_DI int modulo Ul6 valor Ada procedure NI_LeeModulo_DI Modulo in Integer Valor in out Ul6 Retorno out Integer Argumentos Modulo Posici n del m dulo en el bus local Valor Entero donde se codificar el estado de los diecis is canales de entrada del m dulo Valor retornado El n mero de l neas del m dulo si todo fue correcto 1 en caso de error La implementaci n de esta funci n en Ada se hace a trav s de un procedimiento El valor de retorno se devuelve a trav s de la variable Retorno Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 42 de 107 ObtenerError Descripci n Esta funci n sirve para obtener el estado en que finaliz la ltima operaci n que se ha realizado Sintaxis C C int ObtenerError void
59. ksum error 26 Al sequence error 27 Maximum number of streams 28 Al stream start error 29 PC buffer overflow 30 LabJack buffer overflow 31 Stream read timeout 32 Illegal number of scans 33 No stream was found 40 Illegal input 41 Echo error 42 Data echo error 43 Response error 44 Asynch read timeout error 45 Asynch read start bit error 46 Asynch read framing error 47 Asynch DIO config error 48 Caps error 49 Caps error 50 Caps error 51 HID number caps error 52 HID get attributes warning 57 Wrong firmware version error 58 DIO config error 64 Could not claim all LabJacks 65 Error releasing all LabJacks 66 Could not claim LabJack 67 Error releasing LabJack 68 Claimed abandoned LabJack 69 Local ID 1 thread stopped 70 Stop thread timeout Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador 71 Thread termination failed 72 Feature handle creation error 73 Create mutex error 80 Synchronous CS state or direction error 81 Synchronous SCK direction error 82 Synchronous MISO direction error P gina 107 de 107 83 Synchronous MOSI direction error 89 SHT1X CRC error 90 SHT1X measurement ready error 91 SHT1X ack error 92 SHT1X serial reset error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux
60. l 102 4 2 Anexo A Descripci n de las funciones propias del fabricante 103 4 3 Anexo B Description Of errorcodesS s sssssssrrrrssrrrrrsnrrnrssn 106 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador iv Tabla 1 1 Tabla 1 2 Tabla 1 3 Tabla 1 4 Tabla 1 5 Tabla 1 6 Tabla 1 7 Tabla 2 1 Tabla 2 2 Tabla 2 3 Tabla 2 4 Tabla 2 5 Tabla 2 6 Tabla 3 1 Tabla 3 2 Tabla 3 3 Manuales del programador V Listado de Tablas Asociaci n de puertos serie a ficheros de dispositivo 068 2 Miembros de la estructura termioS sssssssssssssssssrnnrnrrrrrnnrrrrrssssre 6 Constantes para el miembro C_CHA oococccconcnnncnnnnanannanan nana nas 11 Constantes para el miembro C_ lflaJD oooocccccncnccnnnnnnnnnnnnnnrna nana 12 Constantes para el miembro C_iflaD coococccccncnncnnnnnnnannnnnnnn aran 13 Constantes para el miembro C_0flaQ9 oococccncncnnncnnnnanannancnnanna nas 14 Caracteres de control para el miembro C_CC cccocccccccnnncnnnnnnnnnannnas 15 Ejemplo de asignaci n de direcciones en el bus local 27 Variables de TOP ri A ra 29 Standard FieldPoint Commands and SyntaX ssssssssesssssssrrsrrrn 46 Extended FieldPoint Commands and SyNtax ccccceeeeeeeee eee e ens 47 Standard Error RESPHONS Sir dida 57 Extended Error RESPONSES cria 58 Ejemplo de asignaci n de direcciones en el bus local
61. la interfaz en lenguaje C para que el usuario pueda realizar sus programas de control en este lenguaje Esta parte est programada en lenguaje C y consta de los siguientes ficheros o El fichero DriverC_NI h Contiene la especificaci n de los tipos y funciones desarrolladas para manejar los m dulos o El fichero DriverC_NI c Contiene la implementaci n de las funciones desarrolladas para manejar los m dulos Una interfaz en lenguaje Ada para que el usuario pueda realizar los programas de control en este lenguaje Esta parte est programada en lenguaje Ada y se basa en la facilidad que proporciona el propio lenguaje para realizar llamadas a funciones programadas en otros lenguajes de programaci n como por ejemplo C Los ficheros involucrados son o El fichero driverada_ni ads Contiene la especificaci n de los tipos y funciones desarrolladas para manejar los m dulos o El fichero driverada_ni adb Contiene la implementaci n de las funciones desarrolladas para manejar los m dulos Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 27 de 107 2 2 1 Conceptos previos el bus local Los distintos m dulos conectados para formar el sistema se identifican en el bus mediante una direcci n f sica La direcci n base se configura en el m dulo de red mediante unos peque os interruptores alojados en el frontal del m dulo El resto de m dulos de
62. le dos si todo fue correcto 1 en caso de error 2 si no existe un descriptor de fichero v lido Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 21 de 107 1 3 3 6 Leer_Datos_Plazo Descripci n Esta funci n lee length caracteres del puerto serie y los retorna en la cadena apuntada por buffer Si en el momento de la llamada no existen caracteres a leer en el puerto la funci n se quedar bloqueada durante plazo microsegundos Transcurrido este tiempo si no se ha llevado a cabo la lectura retornar un c digo de error Sintaxis int Leer_Datos_Plazo char buffer int length int plazo Argumentos Buffer Puntero al buffer en donde se almacenar la informaci n le da Length N mero de caracteres que se desean leer Plazo El tiempo de plazo para leer la informaci n en microsegundos O Valor retornado El n mero de bytes le dos si se ley con xito en el plazo indicado 3 si no se ha podido leer ning n byte en el plazo indicado 2 si no existe un descriptor de fichero v lido 1 3 3 7 Get_fd Descripci n Esta funci n retorna el valor del descriptor de fichero asociado al puerto Sintaxis int Get_fd void Valor retornado El descriptor de fichero asociado Un valor negativo indica que el descriptor de fichero no es v lido Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programad
63. lo_DI e Se llama a la funci n Digital1Io para obtener los valores de las diecis is l neas de la tarjeta RB16 e Se tratan adecuadamente los valores pues la tarjeta trabaja con l gica invertida para retornar en un entero la codificaci n de las diecis is l neas e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 96 de 107 4 1 3 C digo Ada El lenguaje Ada proporciona la facilidad de reutilizar c digo escrito en otro lenguaje El paquete Interfaces C contiene los tipos b sicos constantes y subprogramas que permiten a un programa en Ada pasar par metros y cadenas a las funciones escritas en C Para llevar a cabo la utilizaci n de las funciones escritas en C se hace uso del pragma import Primero se declara la funci n como si se fuera a implementar en lenguaje Ada Luego se utiliza pragma import para utilizar la funci n escrita en C en nuestra implementaci n en Ada Este pragma necesita tres par metros e El lenguaje en que est implementada la funci n a importar e El nombre que tendr la funci n en nuestra implementaci n en Ada e El nombre de la funci n en lenguaje C En el Ejemplo 4 1 se muestra la utilizaci n de este pragma La llamada a la funci n LJ_LeeLinea_DO en la interfaz en Ada hace uso de la funci n definida en
64. mente igual para los m dulos FieldPoint y NUDAM tambi n se incluye en la Introducci n la explicaci n de sta as como las diferencias que existen entre ambos sistemas cuando se desea realizar la configuraci n del puerto Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 2 de 107 Se incluyen en el documento tres manuales FieldPoint manual del programador ep grafe 2 Manual del programador de la librer a desarrollada para el sistema FieldPoint de la empresa National Instruments NuDAM manual del programador ep grafe 3 Manual del programador de la librer a desarrollada para el sistema NuDAM de la empresa ADLink Technology LabJack U12 manual de usuario ep grafe 4 Manual del programador de la librer a desarrollada para la Tarjeta de Adquisici n de Datos LabJack U12 de la empresa LabJack 1 3 El puerto serie en Linux En Linux los perif ricos se encuentran representados como simples ficheros del sistema de archivos De esta forma si se quiere enviar datos a trav s del puerto serie basta con abrir el fichero asociado al puerto y escribir con las funciones de siempre Cada uno de los puertos serie tiene asociado uno o m s ficheros de dispositivo En la Tabla 1 1 se muestra la asociaci n m s habitual entre los puertos serie y los ficheros del sistema de archivos Puerto Fichero COM1 dev ttySO COM2 dev ttyS1 COM3 dev ttyS2 COM4 dev
65. mentos Modulo Posici n del m dulo en el bus local O Valor retornado C C El n mero que identifica el tipo de m dulo variables _Digital_IN y _Digital_0UT 1 en caso de error Ada Una variable de tipo Device_Type valor enumerado donde est n definidos los tipos de dispositivos En caso de error el valor del enumerado retornado ser ERROR Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 81 de 107 Get_Nombre Descripcion Esta funci n permite obtener el nombre de un m dulo Sintaxis C C char Get_Nombre int modulo Ada function Get_Nombre Modulo Integer return String Argumentos Modulo Posici n del m dulo en el bus local Valor retornado Una cadena con el nombre del m dulo si todo fue correcto Una cadena con la descripci n del error sucedido en caso de error Get_Id Descripcion Esta funci n permite obtener el identificador de un m dulo Este identificador es nico para cada tipo de m dulo y se corresponde con el valor asignado por el fabricante Sintaxis C C int Get_Id int modulo Ada function Get_Id Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local O Valor retornado El n mero del fabricante que identifica el m dulo si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del pr
66. nabled Syntax IZ Success Response A Example gt 33 127 cr This command tells the FieldPoint module at address 51 0x33 to return to its power up state Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 56 de 107 2 4 Anexo B FieldPoint Responses En este anexo se proporciona la descripci n de los errores que pueden devolver los dispositivos Esta informaci n se ha obtenido directamente del cap tulo 2 FieldPoint Responses del manual de usuario FP 1000 1001 Programmer Reference Manual A FieldPoint module returns an error response when an erroneous condition is detected during the reception or execution of a command FieldPoint modules return only the Standard errors NOO through N07 in response to all standard commands which enables FieldPoint modules to work with host software that is written for the Optomux protocol In response to the extended commands FieldPoint modules return either standard or extended errors depending on which is most appropriate The error response to a FieldPoint command standard or extended has the following form N error number cr where error number is two ASCII hex characters Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 57 de 107 Error Number Hex Error Tag Description 00 E_PUCLR_EXP Power Up Clear expected The comman
67. ncluyes notification that an invalid digit hex or decimal was received Tabla 2 5 Standard Error Responses Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 58 de 107 Error Number Hex Error Tag Description 80 E_ILLEGAL_DIGIT One or more characters sent in the command could not be correctly converted to a digit hex or decimal 81 E_BAD_ADDRESS The command is valid but the addressed module does not support the command received 82 E_INBUF_FRMERR The FieldPoint network module detected a serial framing error in the command The command was ignored 83 E_NO_MODULE The addressed module does not exist 84 E_INV_CHNL One or more channels specified in the command either do not exist or do not support the operation specified The command was ignored 85 E_INV_RANGE One or more ranges specified in the command either do not exist or do not support the setting specified The command was ignored 86 E_INV_ATTR One or more attributes specified in the command either do not exist or do not support the setting specified The command was ignored 88 E_HOTSWAP The module has been hot swapped since it was last sent a command This response is sent only if the network module is enabled to report hot swaps and if the hot swap occurred after hot swap reporting mode was enabled The command was ignored This error number can be sent in
68. ocar antes de cualquier otra funci n Sintaxis int LJ _Inicializar int modulo int tipo DigitalIO Descripcion Lee y escribe los veinte canales de entrada salida digitales Sintaxis long DigitalIO long idnum long demo long trisD long trisI0O long stateD long statelO0 long updateDigital long outputD Argumentos idnum N mero de serie Local ID 6 1 para el primer m dulo encontrado Identifica el m dulo sobre el que hay que ejecutar la operaci n demo Permite emplear la funci n sin necesidad de tener conectados los m dulos LabJack Se debe indicar cero para operar normalmente y un valor mayor que cero para operar en modo demo trisD Configuraci n de las direcciones DO D15 O Input 1 Output trisIO Configuraci n de las direcciones 100 103 O Input 1 Output stateD Estado de las l neas DO D15 statelO Estado de las l neas 100 103 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 104 de 107 updateDigital Si es mayor que cero se escribiran los valores de las variables tris y state En caso contrario se realizara una lectura de los canales y se retornara en estas variables Valor retornado O si todo fue correcto Un c digo de error Labjack errorcodes si se produjo algun error EDigitalOut Descripci n Esta funci n es una versi n simplificada de la funci n DigitallO que act
69. ogramador Pagina 82 de 107 Get_Direccion Descripci n Esta funci n permite obtener la direcci n f sica que tiene asignada un m dulo Sintaxis C C int Get_Direccion int modulo Ada function Get_Direccion Modulo Integer return Integer Argumentos Modulo Posici n del m dulo en el bus local Valor retornado La direcci n f sica que tiene asignada el m dulo si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 83 de 107 3 3 Anexo A Command Set digital I O modules En este anexo se proporciona informaci n sobre los comandos que utilizan los m dulos NuDAM de E S digitales En la Tabla 3 3 se muestran todos los comandos que soportan los m dulos nicamente se incluye la descripci n de aquellos comandos que se han utilizado para implementar el driver Esta informaci n se ha obtenido directamente del cap tulo tres Command Set del manual de usuario de los m dulos de E S digitales del sistema NuDAM Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 84 de 107 Command Set of Digital I O Modules Command Syntax Module General Commands Set Configuration OldAddr NewAddr TypeCode ALL BaudRate CheckSumFlag Read Configuration Addr 2 ALL Read Module Name Addr M ALL Read Firmware Ve
70. olucrados son o El fichero driverada_nd ads Contiene la especificaci n de los tipos y funciones desarrolladas para manejar los m dulos o El fichero driverada_nd adb Contiene la implementaci n de las funciones desarrolladas para manejar los m dulos Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 62 de 107 3 2 1 Conceptos previos el bus local Los distintos m dulos conectados para formar el sistema se identifican en el bus mediante una direcci n f sica Estas direcciones ni siquiera tienen porque ser correlativas de tal forma que podr amos tener dos m dulos uno con direcci n cinco y otro con direcci n treinta La implementaci n del driver se ha realizado para que el usuario no necesite conocer en ning n momento las direcciones f sicas de los m dulos conectados al bus El dato que ha de manejar es la direcci n del m dulo en el bus local Este bus local est formado nicamente por los m dulos de E S La detecci n de los m dulos que componen el bus local y la asignaci n de direcciones se hacen de forma din mica durante la fase de inicializaci n En esta fase se buscan m dulos en el bus entre las direcciones cero y limite siendo limite un valor indicado por el usuario Se comprueba que exista el m dulo con direcci n x en el bus y en caso afirmativo se le asigna una posici n en un bus local Estas posiciones son correlativas y
71. ondiente El estado de las entradas se devuelve codificado en un entero que se ha de pasar a la funci n como argumento Sintaxis C C int LJ_LeeModulo_DI int modulo Ul6 valor Ada procedure LJ_LeeModulo_DI Modulo in Integer Valor in out Ul6 Retorno out Integer Argumentos Modulo N mero de serie del m dulo o Local ID Valor Entero donde se codificar el estado de los diecis is canales de la tarjeta RB16 Valor retornado O si todo fue correcto 1 en caso de error La implementaci n de esta funci n en Ada se hace a trav s de un procedimiento El valor de retorno se devuelve a trav s de la variable Retorno Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 101 de 107 LJ_EscribeLinea_AO Descripci n Esta funci n actualiza el valor de uno de los dos canales de salida anal gicos de los que dispone el m dulo LabJack U12 AOO AO1 Sintaxis C C int LJ_LeeModulo_DI int modulo U16 valor Ada function LJ_EscribeLinea_AO Modulo Integer Linea Num_Linea_Salida_Analog Valor Valor_Salida_Analog return Integer Argumentos Modulo N mero de serie o Local ID del m dulo Linea Numero del canal de salida anal gico que se desea actualizar 0 6 1 Valor Valor de la l nea a actualizar entre 0 0 y 5 0 O Valor retornado O si todo fue correcto 1 en caso de error ObtenerError Descrip
72. ones de acceso al puerto serie para los sistemas FieldPoint y NUDAM Se activa la configuraci n del puerto realizada Se establece la velocidad de comunicaci n Si falla alguno de los pasos anteriores se retornar un estado de error Sintaxis int Abrir_Puerto_Serie int puerto int velocidad Argumentos Puerto Puerto serie del PC que se desea abrir Se deben utilizar las macros COM1 y COM2 definidas Velocidad Velocidad del puerto serie a la que se va a llevar a cabo la comunicaci n Los valores permitidos son 300 1200 2400 9600 19200 28400 57600 115200 Si se indica un valor distinto a estos se producir un error Valor retornado 1 en caso de error El valor del descriptor de fichero retornado por la funci n open si todo fue correcto Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 19 de 107 1 3 3 2 Cerrar_Puerto_Serie Descripcion Esta funci n cierra el puerto serie La estructura de la funci n es la siguiente e Se restaura la configuraci n original del puerto e Se cierra el fichero asociado al puerto e Si falla alguno de los pasos anteriores se retornar un estado de error O Sintaxis int Cerrar_Puerto Serie void Valor retornado O si todo fue correcto 1 en caso de error 2 si no existe un descriptor de fichero v lido 1 3 3 3 Baudios Descripci n Esta funci n configura la veloc
73. or Pagina 13 de 107 1 3 2 3 Opciones de entrada El miembro c_iflag permite controlar el procesamiento de los caracteres de entrada que son los que se reciben por el puerto En la Tabla 1 5 se muestra las constantes para este miembro de la estructura termios Constante Descripci n INPCK Enable parity check IGNPAR Ignore parity errors PARMRK Mark parity errors ISTRIP Strip parity bits IXON Enable software flow control outgoing IXOFF Enable software flow control incoming IXANY Allow any character to start flow again IGNBRK Ignore break condition BRKINT Send a SIGINT when a break condition is detected INLCR Map NL to CR IGNCR Ignore CR ICRNL Map CR to NL IUCLC Map uppercase to lowercase IMAXBEL Echo BEL on input line too long Tabla 1 5 Constantes para el miembro c_iflag Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 14 de 107 1 3 2 4 Opciones de salida El miembro c_oflag contiene las opciones para el procesamiento de la salida En la Tabla 1 6 se muestra las constantes para este miembro de la estructura termios Constante Descripci n OPOST Postprocess output not set raw output OLCUC Map lowercase to uppercase ONLCR Map NL to CR NL OCRNL Map CR to NL NOCR No CR output at column 0 ONLRET NL performs CR fun
74. or Pagina 22 de 107 1 3 3 8 Get_Velocidad Descripci n Esta funci n retorna la velocidad de comunicaci n del puerto lt gt Sintaxis int Get_Velocidad void Valor retornado La velocidad de comunicaci n a la que est configurado el puerto Un valor negativo indica una configuraci n err nea del puerto 1 3 3 9 Get_Puerto Descripci n Esta funci n retorna el n mero que identifica el puerto utilizado Sintaxis int Get_Puerto void Valor retornado El puerto utilizado identificado por las macros COM1 y COM2 definidas Un valor negativo indica que no se ha inicializado el puerto Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 23 de 107 2 FieldPoint manual del programador 2 1 Protocolo de comunicacion La comunicaci n a trav s del puerto serie entre el PC y un dispositivo se basa en el env o y recepci n de una serie de tramas Para poder llevar a cabo esta comunicaci n es necesario conocer el protocolo que utiliza el fabricante En este caso National Instruments mediante el documento FP 1000 FP 1001 Programmer Reference Manual explica en detalle el protocolo que siguen los m dulos FieldPoint En el ep grafe 2 3 se pueden consultar las tablas resumen de todos los comandos que soportan los m dulos FieldPoint y los detalles de los comandos utilizados para implementar el driver 2 1 1 Formato de las t
75. puerto 2 int _velocidad 2 int _fd 2 struct termios _oldtio _newtio int Baudios int vel speed_t baud comprobamos qu xiste un descriptor de fichero valido if _fd lt 0 return 2 Leer atributos del puerto if tcgetattr _fd amp _newtio 1 return 1 switch vel case 300 baud B300 _velocidad vel break case 1200 baud B1200 _velocidad vel break case 2400 baud B2400 _velocidad vel break case 9600 baud B9600 _velocidad vel break case 19200 baud B19200 _velocidad vel break case 38400 baud B38400 _velocidad vel break case 57600 baud B57600 _velocidad vel break case 115200 baud B115200 _velocidad 115200 break default return 1 cfsetospeed amp _newtio baud cfsetispeed amp _newtio baud if tcsetattr _fd TCSANOW amp newtio 1 return 1 return _velocidad Ejemplo 1 4 Utilizaci n de las funciones de configuraci n del puerto Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 10 de 107 1 3 2 1 Opciones de control El miembro c_cflag de la estructura termios permite controlar la velocidad del puerto el numero de bits de datos y de parada la paridad y el control del flujo de datos por hardware Entre todas las opciones de configuraci n bTabla 1 3 existen dos que siempre se deben activar CLOCAL y CREAD La velocidad de comunicaci n
76. r Y _serror ND_EscribeModulo_DO e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se llama a la funci n ND_EscribePuerto_DO para establecer los valores de cada uno de los puertos e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror ND_LeeLinea_DI e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se llama a la funci n ND_LeeModulo_DI e Se retorna el valor del canal solicitado e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror ND_EscribeLinea_DO e Se hacen las comprobaciones previas a la ejecuci n de la funci n e Se actualiza el valor del canal en las variables locales e Se codifica el valor de los canales del m dulo para enviar el comando Digital Output para escribir el estado de todos los canales del puerto al que pertenece la l nea e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror Y _serror Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 71 de 107 3 2 3 C digo Ada El lenguaje Ada proporciona la facilidad de reutilizar c digo escrito en otro lenguaje El paquete Interfaces C contiene los tipos b sicos constantes y subprogramas que permiten a un programa en Ada pasar par metros y cadenas a las funciones
77. r failure and that the FieldPoint module has been reset to power up configuration Syntax A Success Response A Example gt 33A cr This example sends Power Up Clear to the FieldPoint module at address 51 0x33 is the checksum field Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 50 de 107 Read All Module IDs cmdchars B Description The Read All Module IDs command reads the number of modules in the bank and the module IDs for the network module and all the modules in the bank This command should be sent to a network module only Use the Read Module ID command A to read the module ID for a single module Syntax IB Success Response A number mod array number Two ASCHU hex characters representing the number of modules in the bank including the network module mod array Four ASCII hex characters per module in the bank representing the module ID The first entry four characters is the ID of the network module that was addressed Each subsequent entry corresponds to the module at the next higher address in the bank Each module ID is four ASCII hex characters It is a 16 bit number representing the module ID as shown in the following table modID Value Module Name 0001 FP 1000 0002 FP 1001 0101 FP AI 110 0102 FP AO 200 0103 FP DI 330 0104 FP DO 400 0105 FP DI 301 0106 FP DO
78. rado El dispositivo ha devuelto una respuesta RESPUESTA_ERRONEA 200 f E considerada err nea No hay memoria din mica reservada Se puede producir por dos causas e Si no se ha llamado a la funci n de inicializaci n ERROR_MEM 300 i 7 antes de llamar a cualquier otra funci n e Si ha fallado la reserva din mica de memoria durante la inicializaci n El n mero de m dulo al que se quiere acceder no NO_MODULO 400 existe en el bus local NO_DINPUT 401 El m dulo no es un m dulo de entradas digitales NO_DOUTPUT 402 El m dulo no es un m dulo de salidas digitales NO_LINEA 500 La l nea a la que se quiere acceder no existe Tabla 2 2 Variables de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 30 de 107 Estructuras e typedef struct _Tdevice DEVICE Esta estructura contiene los campos que identifican a cada uno de los modulos gt int _direccion Contiene la direcci n f sica del m dulo necesaria para enviar las tramas al bus int _deviceType Identifica el tipo de m dulo Para ello se utilizan las macros _Digital_IN y _Digital_ouT definidas en el fichero de cabecera Estas dos macros identifican los m dulos de entradas y de salidas digitales respectivamente int _deviceNumber Contiene la identificaci n del dispositivo Este identificador es nico y se corresponde con las macros _FPDI301 y _FPRLY420 c
79. ramas FieldPoint Todas las tramas FieldPoint tienen la sintaxis mostrada en este ep grafe y contienen los cinco campos mostrados a continuaci n start address command checksum end start Todas las tramas comienzan con el caracter gt ASCII 62 address Dos caracteres ASCII en hexadecimal Tras el campo start todas las tramas deben especificar la direcci n del m dulo a quien va dirigido Este campo ha de tener un valor entre 00 y F9 para redes construidas con los m dulos de red FP 1000 y FP 1001 command Este campo es el cuerpo de la trama Se subdivide en cuatro campos algunos de los cuales no se utilizan siempre e cmdchars Uno o dos caracteres ASCII en hexadecimal Todas las tramas contienen este campo Indica el c digo de la operaci n a llevar a cabo Para los comandos est ndar est formado por un nico car cter dentro del rango A Z o a i Para los comandos Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 24 de 107 checksum end extendidos esta formado por dos caracteres siendo el primero el caracter ASCII 33 y el segundo el caracter que identifica la operaci n dentro del rango A Z o a z e position De cero a cuatro caracteres ASCII en hexadecimal Algunas tramas no contienen este campo Este campo especifica los canales del m dulo que se ver n afectados por el
80. re 16 bit Data g positions data A Store Discrete h positions data A Store Discrete Watchdog Data ti positions wdgData A Store 16 bit Watchdog Data tj positions wdgData A Store Watchdog Data Status Ik positions mask A Store Watchdog Enable I wdgTmo A Store Watchdog Delay V wdgTmo A Store SnapShot 1W A Use SnapShot X flag A flag Read SnapShot Status 1Y A status Tabla 2 4 Extended FieldPoint Commands and Syntax Continued Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 49 de 107 Comandos utilizados Power Up Clear cmdchars A Description Power Up Clear should be the first command issued to a FieldPoint module This command prevents the FieldPoint module from returning a power up clear expected error E_PONCLR_EXP message in response to the first command following application of power This command functions only if it is the first command sent after power up If this command is sent to a module after the first command has been sent the module responds with a success response A power up clear expected error is returned if any other command is sent first After a power up clear expected error is returned this command does not need to be sent the next command executes normally This command has no effect on the FieldPoint module operation or setup the power up clear expected error provides an indication to the host that there has been a powe
81. reported to enable additional error checking Use the O command for more information on a channel s status Use the Read Module Status or Read Channel Status commands for details on the error condition of a bad channel Syntax M positions data positions Four ASCII hex characters specifying the channels targeted by this command A 1 in any bit means that the corresponding channel s data is to be written A zero in any bit means that the corresponding channel is not targeted by this command Targeting channels that are inputs returns an error Targeting channels that do not exist returns an error data Four ASCII hex characters specifying the channel levels A 1 in any bit means that the corresponding channel is to be driven ON A zero in any bit means that the corresponding channel is to be driven OFF Success Response A status status Four ASCU hex characters specifying the status of the channels targeted by this command The most significant bit represents channel 15 the least significant bit represents channel 0 A 1 in any bit means that the corresponding channel s status is bad A zero in any bit means that the corresponding channel s status is good Channels that are not targeted return a zero in the corresponding status bit Example gt 33 M00010000 cr This command tells the FieldPoint module at address 51 0x33 to turn channel 0 to OFF This command also tells the module to r
82. response to a standard command if you have enabled hot swap reporting for the bank 89 E_ADDR_NOT_SAME The module addressed by the Resend Last Response is not the same as the module addressed by the previous command 8A E_NO_RESEND_BUF The response to the last command is unavailable 8B E_HW_FAILURE An irrecoverable fault has occurred 8C E_UNKNOWN An unidentifiable error condition has occurred Tabla 2 6 Extended Error Responses Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 59 de 107 3 NUDAM manual del programador 3 1 Protocolo de comunicaci n La comunicaci n a trav s del puerto serie entre el PC y un dispositivo se basa en el env o y recepci n de una serie de tramas Para poder llevar a cabo esta comunicaci n es necesario conocer el protocolo que utiliza el fabricante El protocolo utilizado por lo m dulos de E S digitales de la empresa NuDAM se puede obtener de los manuales de usuario de estos m dulos cap tulo 3 Command Set En el ep grafe 3 3 se puede consultar la tabla resumen de todos los comandos que soportan los m dulos de E S digitales NUDAM y los detalles de los comandos utilizados para implementar el driver 3 1 1 Formato de las tramas Todas las tramas NuDAM tienen la sintaxis mostrada en este ep grafe y contienen los cinco campos mostrados a continuaci n Leading Code Addr Command Data Checksum lt CR gt
83. rn ND LeeLinea Dl wsaciscrsieveesccenesedesaeeecdeaeniannentenes tiaadaaasaxocdes ND LeeModulo Dl ata ObtenerError serenos adan rd aia dae da ObtenerErrorString utorrent NuM_LINeaAS cocino ic nena NuM_MOOU OS 0 0occccccccccnnnononocnnnn anna Get TPO scia E sade Soa cdeaded sae cbease eden nace Get Nombre cintia da Get DIFECCION its AAA Rd 3 3 Anexo A Command Set digital I O modules Comandos utilizados oocccconnnnnnncnnnnnnnnon anna 4 LabJack U12 manual del programador ccccccceseceesceeeseeueeeeueseeuseees 4 1 Implementaci n del driver sides 4 1 1 Conceptos Pre MIOS caciones 4 1 2 C digo C sssssssssrsrsssrrrrrssrrrrrrsrrrrrrrsrrrrrrnsrrrrrssserrrrssnnn 4 1 2 1 Estructuras y variables utilizadas 4 1 2 2 Funciones locales ini 4 1 2 3 Funciones globales sssssssssssnsneressessssenrnrsrrnenre 4 1 3 Codigo Ada eiai Meee ind oe a de 4 1 4 Descripci n de las fUNCIONES cococcocccnnoncononnannnanannnnncn nano ET INICIALI ZAR easar E E AAE E t LJ EscribeLin a DO icovinosiaranin dada LJ_EscribeModulo_DO ssssssssssssnrssnsssnrnnnnnnnnnnnnnnnnnnnrnnrrnnnnn LJ LeeLin a_D1 ccccecccececceeeeeeeeeeeeeeeeeeeeeeeeenesenennenenega O LeeMod lo DI ou cccccccccccseeeeeeeeeuseeeueeeeeeeeuueaugaueeueees 1 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux EJ ESCribG lLin a AO 101 ObtenerErrO isiisricaana dd daa 101 ODt enerEro St israe
84. rocedure ND_LeeModulo_DI Modulo in Num_Modulo Valor in out Ul6 Retorno out Integer Argumentos Modulo Posici n del m dulo en el bus local Valor Entero donde se codificar el estado de los diecis is canales de entrada del m dulo O Valor retornado El n mero de l neas del m dulo si todo fue correcto 1 en caso de error La implementaci n de esta funci n en Ada se hace a trav s de un procedimiento El valor de retorno se devuelve a trav s de la variable Retorno Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 78 de 107 ObtenerError Descripci n Esta funci n sirve para obtener el estado en que finaliz la ltima operaci n que se ha realizado Sintaxis C C int ObtenerError void Ada function ObtenerError return Var_Error Valor retornado C C Un entero que identifica la situaci n en que finaliz la ltima operaci n Los posibles valores est n definidos en las variables de error Ada Una variable de tipo Var_Error valor enumerado donde se definen los errores ObtenerErrorString Descripci n Esta funci n sirve para obtener una descripci n del estado en que finaliz la ltima operaci n realizada Si en la ltima llamada a una funci n se ha producido un error mediante una llamada a esta funci n se obtendr una descripci n de ste Sintaxis C C char ObtenerErrorString voi
85. rsion Addr F ALL Reset Status Addr 5 ALL Functional Commands Synchronized Sampling He 6050 6052 6053 6054 6058 6060 Read Synchronized Data Addr 4 6050 6052 6053 6054 6058 6060 Digital Output Addr ChannelNo OutData 6050 6060 6063 Addr Port Odata 6056 6058 Addr Port ChannelNo BitData 6056 6058 Addr T OdataA OdataB OdataC 6058 Digital Input Addr 6 ALL Set Programmable I O Mode Addr S IOSts 6058 Special Commands Read Command Leading Code Setting Addr 0 ALL Change Command Leading Code Setting Addr 10 C1 C2 C3 C4 C5 C6 ALL Set Host Watchdog Safety Value Addr 2 Flag TimeOut SafeValue ALL Read Host WatchDog Safe Value Addr 3 ALL Change Polarity Addr CP Status ALL Read Polarity Addr CR ALL Host is OK FR ALL Tabla 3 3 Command set of digital I O modules Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 85 de 107 Comandos utilizados Read Configuration Description Read the configuration of module on a specified address ID Syntax Addr 2 lt CR gt Command leading code Addr Address ID 2 Command code for reading configuration Response Addr TypeCode BaudRate CheckSumFalg lt CR gt or Addr lt CR gt Command is valid Command is invalid Addr Address ID TypeCode It always be 40 Hex for digital I O modules
86. s 41 ODtenerErrOr pci A AA 42 ObtenerErrorString aviidina ion ENAA ETENEE 42 Num Lineas siii n a a a a 43 Num_ ModulOS tiro rex auaenvened seater di 43 GOMA 44 Get NOMDM Gi iii 44 E A o PES y eo 45 Get_DIFecciON cconccnnonnanananaa naa ra ara rar rra rr rr ar rr 45 2 3 Anexo A FieldPoint COMMONS visas 46 Comandos utilizados srta AAA 49 2 4 Anexo B FieldPoint RESPONSES cccceesesseeeeseeeeeseeeeeetseeensaees 56 3 NUDAM manual del programador cccscceesseeeeeeeseeeeseeeeseeteseeneenenes 59 3 1 Protocolo de comunicaci n session did 59 3 1 1 Formato de las Fama 59 3 1 2 Respuestas de los m dulos NUDAM ceceeeeeeeeeeeeenees 60 3 2 Implementaci n del driver aa la 61 3 2 1 Conceptos previos el bus local cece ecee cece eee eeeeeees 62 CONG C arama EI E E E EEE 63 3 2 2 1 Estructuras y variables utilizadas cccccceeee ees 63 322 2 F nciones locales quindio 67 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador 2212 3 Funciones globales rr 3 2 3 Codigo AAA A 3 2 4 Descripci n de las fUNCIONES cccccocconcconcnnnconanoncnnnanaronnos ND_Inicializar ooococcccccnnnnncncnnnncna nana nn nn nn nana rr ND Libera aviacion a ad ot ND_EscribeLinea_DO ccccccccceeeeeeeeceueeeeeeeeeeeuuugeeeneeneenes ND EscribePuerto DO iuuurmicona as ND_EscribeModulo_DO oooncccccccccccnannnannnnnnnna nana
87. s comunes de estas tramas son los siguientes A cr Este tipo de respuesta se obtiene de los comandos que no solicitan informaci n al m dulo A response data checksum cr Este tipo de respuesta se obtiene de los comandos que han solicitado informaci n al m dulo El campo checksum se obtiene sumando los valores num ricos de todos los caracteres del campo response data y calculando el m dulo 256 de la suma El m dulo de la divisi n se convierte a dos caracteres ASCII en hexadecimal 2 1 2 2 Respuestas de error Un m dulo retornar una respuesta de error cuando detecte condiciones err neas durante la recepci n o ejecuci n del comando La respuesta de error a un comando tiene la siguiente sintaxis N error number cr donde error number son dos caracteres ASCII en hexadecimal En el ep grafe 2 3 se ofrece la descripci n de los errores que pueden devolver los dispositivos FieldPoint Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 26 de 107 2 2 Implementaci n del driver Los objetivos del presente proyecto planteaban la realizaci n de un driver que permitiera utilizar los dispositivos bajo Linux y la realizaci n de una interfaz en Ada para elaborar los programas de control en este lenguaje La implementaci n realizada se divide en dos partes El driver que permite utilizar los dispositivos en sistemas operativos Linux junto con
88. s del programador Pagina 64 de 107 Error Valor Descripci n CORRECTO 0 En la ltima operaci n no se produjo ning n error ERROR_COM 101 Error en la comunicaci n con el puerto serie FD_INVALIDO 102 Descriptor del puerto inv lido Timeout al leer del puerto El dispositivo no ha TIMEOUT 103 respondido en el tiempo esperado El dispositivo ha devuelto una respuesta RESPUESTA_ERRONEA 200 considerada err nea No hay memoria din mica reservada Se puede producir por dos causas e Si no se ha llamado a la funci n de ERROR_MEM 300 inicializaci n antes de llamar a cualquier otra funci n e Si ha fallado la reserva din mica de memoria durante la inicializaci n El n mero de m dulo al que se quiere acceder no NO_MODULO 400 existe en el bus local NO_DINPUT 401 El m dulo no es un m dulo de entradas digitales NO_DOUTPUT 402 El m dulo no es un m dulo de salidas digitales NO_LINEA 500 La l nea a la que se quiere acceder no existe El puerto especificado no es un puerto v lido para NO_PORT 600 la tarjeta DIN 24R BUS_VACIO 700 No se ha encontrado ning n m dulo en el bus Tabla 3 2 Variables de error Macros internas define _ND6053 6053 define _ND6058 6058 Contienen los c digos del fabricante para identificar los distintos m dulos Este identificador es nico para cada tipo de m dulo Conjunto de drivers para tarjetas de adqui
89. scripci n Esta funci n proporciona informaci n sobre el n mero de m dulos que se han detectado en el bus local Sintaxis C C int Num_Modulos void Ada function Num_Modulos return Integer Valor retornado El n mero de m dulos que forman el bus local si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 44 de 107 Get_Tipo Descripcion Esta funci n retorna informaci n sobre el tipo del m dulo entradas digitales salidas digitales Sintaxis C C int Get_Tipo int modulo Ada function Get_Tipo Modulo Integer return Device_Type Argumentos Modulo Posici n del m dulo en el bus local O Valor retornado C C El n mero que identifica el tipo de m dulo variables _Digital_IN y _Digital_0UT 1 en caso de error Ada Una variable de tipo Device_Type valor enumerado donde est n definidos los tipos de dispositivos En caso de error el valor del enumerado retornado ser ERROR Get_Nombre Descripci n Esta funci n permite obtener el nombre de un m dulo Sintaxis C C char Get_Nombre int modulo Ada function Get_Nombre Modulo Integer return String Argumentos Modulo Posici n del m dulo en el bus local Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 45 de 107 Valor retornado Una
90. se asignan empezando por cero seg n se van encontrando m dulos De esta forma podr amos tener conectados al bus tres m dulos con direcciones f sicas cinco ciento cinco y noventa y durante la fase de inicializaci n se les asignar a las direcciones cero dos y uno en el bus local respectivamente Tabla 3 1 M dulo M dulo M dulo ND 6053 ND 6058 ND 6053 Direcci n pa 5 105 90 f sica Posici n 0 2 1 en el bus Tabla 3 1 Ejemplo de asignaci n de direcciones en el bus local Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 63 de 107 3 2 2 C digo C 3 2 2 1 Estructuras y variables utilizadas En el c digo fuente se definen una serie de macros estructuras y variables que se utilizan para realizar la implementaci n del driver Variables globales e COM1 y COM2 Indican el puerto serie a utilizar para la comunicaci n e PUERTO_A PUERTO_B y PUERTO_C indican el puerto de la tarjeta DIN 24R sobre el que actuar e _Digital_IN y _Digital_OUT Indican el tipo de m dulo entradas digitales y salidas digitales respectivamente e Variables de error Proporcionan informaci n sobre el estado en que finaliz la ltima operaci n En la Tabla 3 2 se muestran las variables de error utilizadas el valor que toman cada una de ellas y la descripci n Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuale
91. sici n de se ales bajo Linux Manuales del programador Pagina 65 de 107 Estructuras e typedef struct _Tdevice DEVICE Esta estructura contiene los campos que identifican a cada uno de los modulos gt int _direccion Contiene la direcci n f sica del m dulo necesaria para enviar las tramas al bus int _deviceType Identifica el tipo de m dulo Para ello se utilizan las macros _Digital_IN y _Digital_0UT definidas en el fichero de cabecera int _deviceNumber Contiene la identificaci n del dispositivo Este identificador es nico y se corresponde con las macros _ND6053 y _ND6058 char _deviceName 15 Contiene el nombre del dispositivo float _lineas Contiene el valor de cada uno de los canales que tiene el m dulo Esta variable es un array din mico de flotantes Una vez que se conoce el n mero de canales que forman el m dulo se reserva la memoria necesaria int _numLineas Contiene el n mero de canales de que dispone el m dulo Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 66 de 107 e typedef struct _Tbus BUS Esta estructura contiene los campos con las propiedades del bus gt int _puerto Identifica el puerto serie utilizado Se deben utilizar las macros com1 y com2 definidas en el fichero de cabecera int _velocidad Contiene la velocidad de comunicaci n del puerto serie int _numMo
92. st int linea const int valor Ada function NI_Escribelinea_DO Modulo Integer Linea Num_Linea_Salida Valor Ul return Integer Argumentos Modulo Posici n del m dulo en el bus local Linea Numero del canal de salida que se desea actualizar entre O y 7 Valor Valor de la l nea a actualizar 1 activar 0 desactivar Valor retornado O si todo fue correcto 1 en caso de error Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 40 de 107 NI_EscribeModulo_DO Descripcion Esta funci n actualiza los ocho canales del m dulo de salidas digitales FP RLY 420 Sintaxis C C int NI_EscribeModulo_DO const int modulo const U8 valor Ada function NI_EscribeModulo_DO Modulo Integer Valor U8 return Integer Argumentos Modulo Posici n del m dulo en el bus local Valor Entero donde est n codificados los valores de los ocho canales del m dulo Valor retornado El n mero de canales del m dulo si todo fue correcto 1 en caso de error NI_LeeLinea_DI Descripci n Esta funci n lee el estado de un canal de entrada de un m dulo de entradas digitales FP DI 301 Sintaxis C C int NI_LeeLinea_DI const int modulo const int linea Ada function NI_LeeLinea_DI Modulo Integer Linea Num_Linea_Entrada return Integer Conjunto de drivers para tarjetas de adquisici n de se ales ba
93. status Read Channel Status O positions A chnl_status Read Bank Status IP A bank_status Reset Module 17 A Execute Channel Command n positions command A type command pairs Configuration Commands Set Attributes D positions attrMask A rangeMask settings triplets Get Attributes E positions attrMask A settings array rangeMask pairs Discrete Commands Read Discrete y A data Read Discrete with Status IK A status data Write Discrete L positions data A Write Discrete with Status M positions data A status Analog Commands Read 16 bit Data F positions A data Read 16 bit Data with Status IG positions A status data Write 16 bit Data H positions data A positions data Write 16 bit Data with Status I positions data A status Tabla 2 4 Extended FieldPoint Commands and Syntax Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 48 de 107 Command Type and Name Command Syntax Success Response Watchdog Commands Set Watchdog Delay Q wdgTmo A wdgTmo Set Discrete Watchdog Data IR positions wdgData A Set 16 bit Watchdog Data S positions wdgData A Set Watchdog Data Status T positions mask A Get Watchdog Info IU A moduleInfo chnlEnable chnlWdgData SnapShot Programmable Power Up Commands Store Attributes f positions attrMask A rangeMask settings triplets Sto
94. taci n en Ada Reset_bus Sintaxis int Reset_bus void Descripci n Esta funci n inicializa el m dulo de red Para ello se siguen los siguientes pasos e Se env a el comando Reset Module Z al m dulo Tras enviar este comando los m dulos pasan a estar un tiempo inaccesibles Es por ello que se ha de esperar un tiempo prudencial para continuar e Se env a el comando Power Up Clear A al m dulo e Se desactiva el watchdog Para ello se utiliza el comando Set Watchdog Delay Q e Si falla alguno de los pasos anteriores se actualizar n convenientemente las variables de error _nerror y _serror y se retornar 1 Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 34 de 107 Reset_modulo Sintaxis int Reset_modulo int modulo Descripci n Esta funci n inicializa el m dulo que se le indica como argumento Para ello se env a el comando Power Up Clear A al m dulo indicado Si se produce alg n fallo durante la ejecuci n se actualizar n convenientemente las variables de error _nerror y _serror y se retornar 1 BuscaModulos Sintaxis int BuscaModulos void Descripci n Esta funci n lee todos los dispositivos que est n conectados al bus e inicializa correctamente todas las estructuras de datos y variables utilizadas Para ello sigue los siguientes pasos Se inicializa el bus mediante la funci n Reset_
95. the least significant bit represents channel 0 A 1 in any bit means that the corresponding channel s status is bad A zero in any bit means that the corresponding channel s status is good Channels that do not exist return a zero in the corresponding status bit Channels that are not discrete return a zero in the corresponding status bit data Four ASCII hex characters specifying the channel levels A 1 in any bit means that the corresponding channel is ON A zero in any bit means that the corresponding channel is OFF Channels that do not exist return a zero in the corresponding data bit Channels that are not discrete return a zero in the corresponding data bit Note Even if a channel has a bad status a value is returned for that channel in data Example gt 33 K cr This command tells the FieldPoint module at address 51 0x33 to return the status of all its channels A000000FF cs cr This response from a 16 channel discrete FieldPoint module indicates that all channels have a good status channels 15 through 8 are OFF and channels 7 through 0 are ON Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 53 de 107 Write Discrete with Status cmdchars M Description The Write Discrete with Status command drives outputs ON or OFF on targeted channels of the addressed FieldPoint module In addition the status of the targeted channels is
96. to int tcgetattr int fd struct termios termios_p Obtiene los parametros asociados con el objeto referido por fd y los guarda en la estructura termios referenciada por termios_p tcsetattr Se utiliza para actualizar los par metros del puerto int tcsetattr int fd int optional_actions struct termios termios_p Establece los parametros de la terminal con descriptor de fichero fd desde la estructura termios referenciada por termios_p El argumento optional_actions especifica cuando tienen efecto los cambios e TCSANOW El cambio ocurre inmediatamente e TCSADRAIN El cambio ocurre despu s de que toda la salida escrita a fd haya sido transmitida Esta funci n deber a emplearse cuando se cambien par metros que afecten a la salida e TCSAFLUSH El cambio ocurre despu s de que toda la salida escrita al objeto referenciado por fd haya sido transmitida y toda la entrada que se haya recibido pero no le do ser descartada antes de que se haga el cambio tcflush Se utiliza para vaciar los buffers de entrada salida int tcflush int fd int queue_selector Descarta datos escritos al objeto referido por fd pero no transmitidos o datos recibidos pero no le dos dependiendo del valor de queue_selector e TCIFLUSH Vuelca datos recibidos pero no le dos e TCOFLUSH Vuelca datos escritos pero no transmitidos e TCIOFLUSH Vuelca tanto los datos recibidos pero no le dos como los escritos pero no transmiti
97. ttyS3 Tabla 1 1 Asociaci n de puertos serie a ficheros de dispositivo Para acceder al puerto nicamente es necesario abrir el fichero asociado mediante la llamada al sistema open Se debe tener en cuenta que en Linux los ficheros asociados a los dispositivos no suelen tener permiso de acceso para los usuarios Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 3 de 107 Para evitar este problema existen varias soluciones Cambiar los permisos del fichero s asociado al dispositivo y dar permisos de lectura y escritura a los usuarios Ejecutar el programa realizado en modo super usuario root La especificaci n de la funci n open es la siguiente int open const char camino int flags Se debe indicar el fichero que se desea abrir y las opciones de apertura necesarias Estas opciones se indican mediante el uso de constantes definidas por el operativo Para obtener una descripci n detallada de todas las opciones existentes ejecute man 2 open en su consola La funci n retorna un n mero negativo si no se pudo abrir el fichero indicado Si el fichero se abri correctamente se retorna un descriptor de fichero un entero no negativo que se utiliza en las operaciones de E S posteriores como en read write etc En el Ejemplo 1 1 se muestra el uso de la llamada al sistema open La opci n O_RDWR indica que el fichero dev ttyS1 fichero asocia
98. value of digital output channels 7 0 when host is failure 2 character SafeA Safety value of port A channels 7 0 when host is failure while A in output mode 2 character Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 91 de 107 SafeB Safety value of port B channels 7 0 when host is failure while B in output mode 2 character SafeC Safety value of port C channels 7 0 when host is failure while C in output mode 2 character Response Addr lt CR gt or Addr lt CR gt Command is valid Command is invalid Addr Address ID Example Example for NuDAM 6050 User command 0621121C lt CR gt Response 06 lt CR gt 06 Address ID 2 Set host watchdog timer and safe state value 1 Enable host watchdog timer 12 Timeout value 0x12 18 18 100 1800 ms 1C 1C 00011100 Digital output channel DO2 DO3 and DO4 are high the others are low Example for NuDAM 6058 User command 0621121C1C1C lt CR gt Response 06 lt CR gt 06 Address ID 2 Set host watchdog timer and safe state value 1 Enable host watchdog timer 12 Timeout value 0x12 18 18 100 1800 ms 1C1C1C 1C 00011100 port A B and C channel 2 3 and 4 are high the other are low Conjunto de drivers para tarjetas de adquisici n de se ales bajo Linux Manuales del programador Pagina 92 de 107 4 LabJack U12 manual del programador 4 1 Implementaci n del

Download Pdf Manuals

image

Related Search

Related Contents

  Philips FM wire antenna CRP688    Powerplus Dragonfly  Bluetooth+NFC搭載アウトドアスピーカー MXSP  matinées 3>12 ans sai son 13>14  SMC Networks SMC8926EM User's Manual  Downloaded from www.vandenborre.be  BENDIX 03-A-05B User's Manual    

Copyright © All rights reserved.
Failed to retrieve file