Este documento describe los conceptos básicos de la API de canal para el software controlador NI-CAN. Es útil para ingenieros que recién comienzan con NI-CAN 2.0 y superior. Para obtener una visión general completa del software, consulte el Manual del usuario de hardware y software NI-CAN.
NI-CAN es compatible con versiones de LabVIEW hasta LabVIEW 2018, para los usuarios que utilicen versiones posteriores LabVIEW, revise la guía para migrar NI-CAN Applications a NI-XNET.
El software controlador NI-CAN proporciona 2 interfaces de programación de aplicaciones (API) con todas las funciones, además de herramientas para la configuración y el análisis dentro de NI Measurement & Automation Explorer (MAX). Las API NI-CAN le permiten desarrollar aplicaciones personalizadas según sus requisitos de prueba y simulación. Con la API de canales, puede utilizar funciones de alto nivel y fáciles de usar para acceder a los canales CAN definidos en los archivos de la base de datos Vector (.dbc) o de la base de datos NI CAN (.ncd). La API de canal se recomienda para principiantes en CAN. La API Frame proporciona acceso de bajo nivel a los bits transmitidos a través del bus CAN y se recomienda para usuarios avanzados. Este documento se centra en la API del canal. Para obtener más información sobre la API de marcos, consulte el Manual de hardware y software NI-CAN.
La API del canal NI-CAN aprovecha los canales CAN predefinidos para hacer una programación CAN similar a la programación NI-DAQ. El modelo básico de programación para la API de canal se muestra en la Figura 1.
Figura 1 Modelo básico de programación de API de canal NI-CAN en LabVIEW
Primero, los canales CAN deben ser definidos o importados. Esto se puede hacer usando Measurement & Automation Explorer (MAX), una utilidad basada en la configuración que se utiliza para instalar, probar y configurar la mayoría del hardware de NI, incluidas las interfaces CAN. MAX también se puede utilizar para importar o crear archivos de base de datos CAN e incluye herramientas adicionales como el monitor de bus CAN y paneles de prueba de canal CAN.
Figura 2 Canales CAN en el Explorador de medición y automatización
A menudo es deseable importar Canales CAN desde archivos de base de datos. Para importar Canales CAN desde un archivo de base de datos Vector (.dbc), expanda el árbol Vecindario de datos para ver Canales CAN. Haga clic derecho en CAN Channels y seleccione Importar desde archivo CANdb. Estos archivos de base de datos son creados a menudo por los ingenieros que diseñan los dispositivos CAN. Ahora navegue hasta encontrar el archivo de base de datos deseado. Una vez que se encuentre y seleccione el archivo, puede elegir importar todos los mensajes en el archivo o puede seleccionar canales específicos para importar. Haga clic en el botón Importar y, a continuación, haga clic en Hecho. Los Mensajes y Canales ahora aparecerán en MAX bajo Canales CAN como se muestra en la Figura 2. Estos mensajes y canales se pueden ver y editar expandiendo el árbol de mensajes, haciendo clic derecho sobre el canal deseado e ir a propiedades. Al ver las propiedades de un canal, puede ver la ubicación del canal dentro del mensaje en la cuadrícula de mensajes.
A veces puede que no tenga un archivo de base de datos Vector disponible y tendrá que crear los canales en MAX. Comience haciendo clic derecho en Canales CAN y seleccionando Crear mensaje. Especifique el nombre, el ID de arbitraje, el número de bytes de datos y la interfaz predeterminada y, a continuación, seleccione Aceptar. Ahora se crean canales individuales haciendo clic derecho sobre el mensaje y eligiendo Crear canal. Debe especificar el nombre del canal, el bit de inicio, el número de bits, la información de escala y las unidades. Tenga en cuenta que a medida que especifica los bits de inicio y el número de bits, la cuadrícula en la parte inferior derecha muestra la ubicación del canal dentro del mensaje.
Una vez que haga clic en Aceptar, el canal se mostrará en MÁXIMO en el Mensaje. Para crear otro canal, haz clic derecho de nuevo en el mensaje y elige Crear canal. Esta vez, observa que la cuadrícula ha resaltado los bits que reservaste para el canal anterior. Si intenta configurar otro canal para los mismos bits, verá un indicador de error rojo. Los pasos restantes son los mismos para crear canales para completar el mensaje. Puede configurar el mensaje con una combinación de canales analógicos y digitales; puede utilizar hasta 64 canales digitales de 1 bit cada uno.
Una vez que tenga la configuración de canal deseada, puede guardarla para su uso en otros equipos. Haga clic derecho en Canales CAN y seleccione Guardar configuración. Esto guarda la configuración como un archivo de base de datos NI CAN (.ncd) que se puede importar a MAX o llamar directamente desde su aplicación utilizando el software controlador NI-CAN 2.0 o posterior. Como se demostró anteriormente con los archivos de base de datos de Vector (.dbc), también puede importar archivos de base de datos de NI (.ncd) a MAX desde una configuración guardada. Para ello, haga clic derecho en CAN Channels y seleccione Load Channel Configuration, navegue hasta el archivo .ncd y seleccione los mensajes deseados. Elija Cargar y, a continuación, haga clic en Hecho, los canales ahora aparecen de nuevo en MÁX.
El programa NI-CAN básico consiste en una Inicialización, Lectura o Escritura, y un Borrado (ver Figura 1). El vínculo entre las funciones es la Tarea. Una Tarea CAN es una colección de Canales CAN que tienen la misma temporización y dirección de comunicación (lectura/escritura). Una tarea puede abarcar varios mensajes, pero todos deben estar en la misma interfaz (puerto). Este modelo de programación es el mismo tanto si está trabajando en LabVIEW, LabWindows/CVI, C/C++ o Visual Basic 6.0. Para un tutorial sobre LabVIEW por favor vaya a ni.com/tutorials.
CAN Inicio VI: La función CAN Init Start inicializa una lista de canales como una sola tarea e inicia la comunicación para esa tarea. La función CAN Init Start utiliza los siguientes parámetros de entrada:
Lista de canales: especifica la lista de canales para la tarea
interfaz: especifica la interfaz CAN (CAN0, CAN1, etc.) que se utilizará para la tarea.
modo: especifica el modo de E/S (dirección de transferencia de datos) que se utilizará para la tarea.
velocidad de muestreo: especifica la velocidad de muestreo (muestras por segundo) para la transferencia de datos
Múltiples modos de lectura facilitan la personalización de su aplicación. Hay 3 modos de lectura en NI-CAN. Cada uno de ellos se analizará en las siguientes secciones:
1. Punto único
2. Continua
3. Sello de tiempo
Si el modo de Inicio de inicio es Entrada, su aplicación debe llamar a la función Leer para obtener muestras. La aplicación suele llamar a Leer en bucle hasta que se haga. La función Read es CAN Read in LabVIEW (todos los tipos que no terminan en Time & Dbl) y nctRead en otros idiomas. El comportamiento de Read depende de la frecuencia de muestreo inicializada:
VI de lectura de CAN:
Punto único Lectura (Modo = Entrada, frecuencia de muestreo = 0)
Esta lectura devuelve una sola muestra del mensaje o mensajes más recientes recibidos de la red. Se devuelve una muestra por cada canal de la lista Inicio de inicio. Es más útil cuando desea un acceso rápido al mensaje CAN más reciente.
La figura 3 muestra un ejemplo de lectura con frecuencia de muestreo = 0. A, B y C representan mensajes para los canales inicializados. Si no se recibe ningún mensaje desde el inicio de la aplicación, se devuelve el valor predeterminado en MAX (def), junto con una advertencia.
Lectura continua (Modo = Entrada, frecuencia de muestreo > 0)
El modo continuo es útil cuando desea registrar datos junto con datos analógicos o digitales desde un dispositivo DAQ. Esta lectura devuelve una matriz de muestras para cada canal de la lista Inicio de inicio. Cada vez que pasa el tiempo especificado, se inserta una muestra de los mensajes más recientes en las matrices. En otras palabras, las muestras se repiten en la matriz a la velocidad especificada hasta que se recibe un nuevo mensaje. El modo continuo es útil cuando desea registrar datos junto con datos analógicos o digitales desde un dispositivo DAQ. Usando la misma frecuencia de muestreo con los canales de entrada analógica NI-DAQ, puede comparar muestras CAN y DAQ a lo largo del tiempo.
La figura 4 muestra un ejemplo de lectura con frecuencia de muestreo > 0. A, B y C representan mensajes para los canales inicializados. Δt representa el tiempo entre muestras especificado por la frecuencia de muestreo. def representa el valor predeterminado en MAX.
Lectura con sello de tiempo (Modo = Entrada con sello de tiempo)
El modo de marca de tiempo es útil para aplicaciones de prueba donde se necesita sincronización CAN/DAQ, pero no hay necesidad de procesamiento de datos CAN adicional. Si el modo Inicio de inicio es Entrada con sello de tiempo, la aplicación debe llamar a la función Leer sello de tiempo para obtener valores. La aplicación suele llamar a Read Timetamped en bucle hasta que se haga. La función Read Timetamped devuelve muestras que corresponden a mensajes recibidos de la red. Para cada mensaje, se devuelve una muestra asociada junto con una marca de tiempo que especifica cuándo llegó el mensaje. Se devuelve una matriz de muestras con marcas de tiempo para cada canal de la lista InitStart. La función Read Timestamped es CAN Read in LabVIEW (tipos que terminan en Time & Dbl) y nctReadTimestamped en otros idiomas.
La Figura 5 muestra un ejemplo de Read Timetamped. A, B y C representan mensajes para los canales inicializados. At, B, y Ct representan los momentos en que se recibió cada mensaje.
Múltiples modos de escritura facilitan la personalización de su aplicación. Hay 3 modos de escritura en NI-CAN. Cada uno de ellos se analizará en la siguiente sección:
1. Punto único
2. Continua
3. Sello de tiempo
Si el modo Inicio de inicio es Salida (o Salida reciente), la aplicación debe llamar a la función Escribir para que emita valores. La aplicación suele llamar a Write in a loop hasta que se haga. La función Write es CAN Write en LabVIEW y nctWrite en otros idiomas. El comportamiento de Write depende de la frecuencia de muestreo inicializada:
VI de escritura de CAN
Escritura no periódica de un solo punto (Modo = salida, frecuencia de muestreo = 0)
Write transmite un mensaje inmediatamente en la red. Las muestras proporcionadas para escribir se utilizan para formar los bytes de datos del mensaje. Se debe especificar una muestra para cada canal de la lista Inicio de inicio. El modo Inicio de salida debe ser Salida para este comportamiento (no Salida reciente). La figura 6 muestra un ejemplo de escritura con frecuencia de muestreo = 0. A, B, C y D representan mensajes para los canales inicializados. Para cada escritura, los mensajes asociados se transmiten lo más rápido posible.
Figura 6. Ejemplo de escritura con frecuencia de muestreo = 0
Escritura continua (Modo = salida, frecuencia de muestreo > 0)
Proporciona una matriz de muestras para cada canal de la lista Inicio de inicio. Cada vez que pasa el tiempo especificado, se transmite el siguiente mensaje. Cada mensaje utiliza la siguiente muestra de la matriz para formar los bytes de datos del mensaje. En otras palabras, las muestras de la matriz se transmiten periódicamente a la red. Al utilizar la misma frecuencia de muestreo con los canales de salida analógica NI-DAQ, puede emitir muestras CAN y DAQ simultáneas a lo largo del tiempo.
La figura 7 muestra un ejemplo de escritura con frecuencia de muestreo > 0 y modo de salida. A, B, C y D representan mensajes para los canales inicializados. Δt representa el tiempo transcurrido entre la transmisión del mensaje especificado por la frecuencia de muestreo.
Single Point Write (Modo = Salida Reciente, frecuencia de muestreo > 0, Proporciona una sola muestra para cada canal de la lista Inicio de inicio. Cada vez que el reloj avanza a la velocidad especificada, el siguiente mensaje se transmite utilizando la muestra más reciente que haya proporcionado. El modo Salida reciente es útil cuando se ejecutan varias tareas a diferentes velocidades, ya que puede escribir muestras para todas las tareas en un solo bucle. La figura 8 muestra un ejemplo de escritura con frecuencia de muestreo > 0 y modo de salida reciente.
Figura 8. Ejemplo de escritura con frecuencia de muestreo > 0, modo reciente de salida
CAN Clear VI: La función Borrar detiene la comunicación para la tarea y borra la configuración. Para cada tarea que inicialice, debe llamar a Clear antes de salir de su aplicación. La función Clear es CAN Clear en LabVIEW y nctClear en otros idiomas.
Las siguientes secciones proporcionan información que puede utilizar para ampliar el modelo de programación básico.
Obtener nombres
Si está desarrollando una aplicación que otra persona utilizará, es posible que no desee especificar una lista de canales fija en su aplicación. Idealmente, desea que su usuario final seleccione los canales de interés de los controles de interfaz de usuario, como los cuadros de lista. La función Obtener nombres consulta MAX o una base de datos CAN y devuelve una lista de todos los canales o mensajes de esa base de datos. Puede utilizar esta lista para rellenar los controles de interfaz de usuario. A continuación, puede seleccionar canales de estos controles, evitando la necesidad de escribir cada nombre con el teclado. Una vez realizadas las selecciones, la aplicación puede pasar la lista resultante a Inicio de inicio. La función Get Names es CAN Get Names en LabVIEW y nctGetNames en otros idiomas.
Sincronización
La API del canal NI-CAN utiliza RTSI para sincronizar unidades funcionales específicas en cada tarjeta. Para las tarjetas CAN, la unidad funcional es la interfaz (puerto). Para las tarjetas DAQ, la unidad funcional es una medida específica como entrada analógica o salida analógica. Cada función encamina dos señales a través de la conexión RTSI:
· Base de tiempo: especifica un reloj común compartido por varias tarjetas para evitar la deriva del reloj.
· disparador de inicio: especifica la señal de inicio enviada de una placa a otra para evitar latencias de inicio
Establecer propiedad
Esta función le permite establecer las propiedades de la red, incluida la velocidad de baudios, el tipo de transceptor y el modo de filtro. La función Inicio de inicio utiliza la interfaz y la configuración de canal como se especifica en MAX o el archivo de base de datos CAN. Si necesita cambiar esta configuración dentro de su aplicación, no puede usar Init Start, porque la mayoría de las propiedades no se pueden cambiar mientras se ejecuta la tarea. En su lugar, use Init primero, luego establezca la propiedad e inicie la tarea.
Obtener propiedad
Esta función le permite obtener las propiedades de sus canales, mensajes o redes, incluida la velocidad de transmisión de baudios, el ID del mensaje y el factor de escala de canales.
Para obtener más información sobre la API de canal o la API de marco, descargue el manual y las especificaciones de hardware y software de NI-CAN de ni.com/manuals.
Enlaces relacionados:
Página principal de la red de controladores de área (CAN)
Sincronización de CAN y señales analógicas para validación de dispositivos