Ce document décrit les principes de base de l ' API Channel pour les logiciels drivers NI-CAN. Il est utile pour les ingénieurs qui viennent de démarrer avec NI-CAN 2.0 et version ultérieure. Pour un aperçu complet du logiciel, veuillez consulter le Manuel de l'utilisateur du matériel et des logiciels NI-CAN.
NI-CAN est compatible avec les versions de LabVIEW jusqu'à LabVIEW 2018, pour les utilisateurs utilisant des versions ultérieures de LabVIEW, veuillez consulter le guide de migration des applications NI-CAN vers NI-XNET.
Le driver NI-CAN fournit 2 interfaces de programmation d'applications (API) complètes en plus des outils de configuration et d'analyse dans NI Measurement & Automation Explorer (MAX). Les API NI-CAN vous permettent de développer des applications personnalisées en fonction de vos exigences de test et de simulation. Avec l'API Channel, vous pouvez utiliser des fonctions de haut niveau et faciles à utiliser pour accéder aux voies CAN définies dans les fichiers de base de données vectorielles (.dbc) ou de base de données CAN (.ncd) de NI. L'API Channel est recommandée pour les débutants au CAN. L'API de trame fournit un accès de bas niveau aux bits transmis via le bus CAN et est recommandée pour les utilisateurs avancés. Ce document se concentre sur l'API Channel. Pour en savoir plus sur l'API Frame, consultez le Manuel du matériel et des logiciels NI-CAN.
L'API NI-CAN Channel tire parti des voies CAN prédéfinies pour rendre la programmation CAN similaire à la programmation NI-DAQ. Le modèle de programmation de base de l’API Channel est illustré à la figure 1.
Figure 1 Modèle de programmation NI-CAN Channel API de base dans LabVIEW
Tout d'abord, les voies CAN doivent être définies ou importées. Pour ce faire, vous pouvez utiliser Measurement & Automation Explorer (MAX), un utilitaire de configuration utilisé pour installer, tester et configurer la majorité du matériel NI, y compris les interfaces CAN. MAX peut également être utilisé pour importer ou créer des fichiers de base de données CAN et inclut des outils supplémentaires tels que le moniteur de bus CAN et les panneaux de test de voies CAN.
Figure 2 Voies CAN dans Measurement & Automation Explorer
Il est souvent souhaitable d'importer des voies CAN à partir de fichiers de base de données. Pour importer des voies CAN à partir d'un fichier de base de données vectorielle (.dbc), développez l'arborescence Voisinage de données pour voir Voies CAN. Cliquez avec le bouton droit sur Voies CAN et sélectionnez Importer du fichier CANdb. Ces fichiers de base de données sont souvent créés par les ingénieurs qui conçoivent les périphériques CAN. Naviguez maintenant jusqu'à ce que le fichier de base de données désiré soit trouvé. Une fois le fichier trouvé et sélectionné, vous pouvez choisir d'importer tous les messages du fichier ou de sélectionner des voies spécifiques à importer. Cliquez sur le bouton Importer puis cliquez sur Terminé. Les messages et les voies apparaîtront maintenant dans MAX sous Voies CAN, comme le montre la figure 2. Ces messages et voies peuvent être affichés et édités en développant l'arborescence de messages, en cliquant avec le bouton droit sur la voie désirée et en accédant aux propriétés. En affichant les propriétés d'une voie, vous pouvez voir l'emplacement de la voie dans le message dans la grille de messages.
Parfois, il se peut que vous n'ayez pas de fichier de base de données vectorielle disponible et que vous deviez créer des voies dans MAX. Commencez par cliquer avec le bouton droit sur Voies CAN et sélectionnez Créer un message. Spécifiez le nom, l'ID d'arbitrage, le nombre d'octets de données et l'interface par défaut, puis sélectionnez OK. Maintenant, des voies individuelles sont créées en cliquant avec le bouton droit sur le message et en choisissant Créer une voie. Vous devez spécifier le nom de la voie, le bit de départ, le nombre de bits, les informations de mise à l'échelle et les unités. Remarquez que lorsque vous spécifiez les bits de départ et le nombre de bits, la grille en bas à droite affiche l'emplacement de la voie dans le message.
Une fois que vous cliquez sur OK, la voie apparaîtra dans MAX sous le Message. Pour créer une autre voie, cliquez à nouveau avec le bouton droit sur le message et choisissez Créer une voie. Cette fois, remarquez que la grille a mis en évidence les bits que vous avez réservés pour la voie précédente. Si vous essayez de configurer une autre voie pour les mêmes bits, vous verrez un indicateur d'erreur rouge. Les autres étapes sont les mêmes pour créer des voies pour compléter le message. Vous pouvez configurer le message avec une combinaison de voies analogiques et numériques ; vous pouvez utiliser jusqu'à 64 voies numériques de 1 bit chacune.
Une fois que vous avez la configuration de voie désirée, vous pouvez l'enregistrer pour l'utiliser sur d'autres ordinateurs. Cliquez avec le bouton droit sur Voies CAN et sélectionnez Enregistrer la configuration des voies. Cela enregistre la configuration en tant que fichier de base de données NI CAN (.ncd) qui peut être importé dans MAX ou appelé directement à partir de votre application à l'aide du driver NI-CAN 2.0 ou version ultérieure. Comme démontré précédemment avec les fichiers de base de données vectorielle (.dbc), vous pouvez également importer des fichiers de base de données National Instrument (.ncd) dans MAX à partir d'une configuration enregistrée. Pour cela, cliquez avec le bouton droit sur Voies CAN et sélectionnez Load Channel Configuration, naviguez jusqu'au fichier .ncd et sélectionnez les messages désirés. Choisissez Charger puis cliquez sur Terminé, les voies apparaissent à nouveau dans MAX.
Le programme de base NI-CAN comprend un cours Initialization, Read or Write et un cours Clear (voir la figure 1). Le lien entre les fonctions est la tâche. Une tâche CAN est un ensemble de voies CAN qui ont le même sens de cadencement et de communication (lecture/écriture). Une tâche peut englober plusieurs messages, mais ils doivent tous être sur la même interface (port). Ce modèle de programmation est le même que vous travailliez dans LabVIEW, LabWindows/CVI, C/C++ ou Visual Basic 6.0. Pour un tutoriel sur LabVIEW veuillez aller sur ni.com/tutorials.
VI CAN Init Start : La fonction CAN Init Start initialise une liste de voies en tant que tâche unique et démarre la communication pour cette tâche. La fonction CAN Init Start utilise les paramètres d'entrée suivants :
liste des voies — Spécifie la liste des voies de la tâche
interface — Spécifie l'interface CAN (CAN0, CAN1, etc.) à utiliser pour la tâche.
mode — Spécifie le mode d'E/S (direction du transfert de données) à utiliser pour la tâche.
fréquence d'échantillonnage — Spécifie la fréquence d'échantillonnage (échantillons par seconde) pour le transfert de données
Plusieurs modes de lecture facilitent la personnalisation de votre application. NI-CAN comporte 3 modes de lecture. Chacune sera abordée dans les sections suivantes :
1. Point par point
2. Continu
3. Horodatage
Si le mode de Démarrage initial est Entrée, votre application doit appeler la fonction Lire pour obtenir des échantillons. Votre application appelle généralement Lire dans une boucle jusqu'à ce que vous ayez terminé. La fonction Lire est CAN Read dans LabVIEW (tous les types qui ne se terminent pas par Time & Dbl) et nctRead dans d’autres langages. Le comportement de Lire dépend de la fréquence d'échantillonnage initialisée :
VI CAN Lire :
Lecture point par point (Mode = Entrée, fréquence d'échantillonnage = 0)
Cette lecture renvoie un seul échantillon des messages les plus récents reçus du réseau. Un échantillon est renvoyé pour chaque voie de la liste Démarrage initial. Il est particulièrement utile lorsque vous voulez accéder rapidement au message CAN le plus récent.
La figure 3 montre un exemple de lecture avec fréquence d'échantillonnage = 0. A, B et C représentent des messages pour les voies initialisées. Si aucun message n'est reçu depuis le démarrage de l'application, la Valeur par défaut dans MAX (déf) est renvoyée avec une mise en garde.
Lecture continue (Mode = Entrée, fréquence d'échantillonnage > 0)
Le mode continu est utile lorsque vous voulez enregistrer des données avec des données analogiques ou numériques d'un périphérique DAQ. Cette lecture renvoie un tableau d'échantillons pour chaque voie de la liste Démarrage initial. Chaque fois que le temps spécifié passe, un échantillon du ou des messages les plus récents est inséré dans les tableaux. Autrement dit, les échantillons sont répétés dans le tableau à la fréquence spécifiée jusqu'à ce qu'un nouveau message soit reçu. Le mode continu est utile lorsque vous voulez enregistrer des données avec des données analogiques ou numériques d'un périphérique DAQ. En utilisant la même fréquence d'échantillonnage avec les voies d'entrée analogique NI-DAQ, vous pouvez comparer les échantillons CAN et DAQ au fil du temps.
La figure 4 montre un exemple de lecture avec une fréquence d'échantillonnage > 0. A, B et C représentent des messages pour les voies initialisées. Δt représente le temps entre les échantillons tel que spécifié par la fréquence d'échantillonnage. def représente la Valeur par défaut dans MAX.
Lecture horodatée (Mode = Entrée horodatée)
Le mode horodatage est utile pour les applications de test où la synchronisation CAN/DAQ est nécessaire, mais il n’est pas nécessaire de poursuivre le traitement des données CAN. Si le mode Init Start est Timestamped Input, votre application doit appeler la fonction Read Timestamped pour obtenir des valeurs. Votre application appelle généralement Lire horodaté dans une boucle jusqu'à ce que vous ayez terminé. La fonction Lire un horodatage renvoie les échantillons qui correspondent aux messages reçus du réseau. Pour chaque message, un échantillon associé est renvoyé avec un horodatage qui spécifie quand le message est arrivé. Un tableau d'échantillons horodatés est renvoyé pour chaque voie de la liste InitStart. La fonction Lire horodaté est CAN Read dans LabVIEW (types qui se terminent par Time & Dbl) et nctReadTimestamped dans d'autres langages.
La figure 5 montre un exemple de lecture horodatée. A, B et C représentent des messages pour les voies initialisées. At,Bt et Ct représentent les temps auxquels chaque message a été reçu.
Plusieurs modes d'écriture facilitent la personnalisation de votre application. NI-CAN comporte 3 modes d'écriture. Chacun d'entre eux sera examiné dans la section suivante :
1. Point par point
2. Continu
3. Horodatage
Si le mode Démarrage initial est Sortie (ou Sortie récente), votre application doit appeler la fonction Écrire pour renvoyer des valeurs. Votre application appelle généralement Écrire dans une boucle jusqu'à ce que vous ayez terminé. La fonction Écrire est CAN Write dans LabVIEW et nctWrite dans d'autres langages. Le comportement d'Écrire dépend de la fréquence d'échantillonnage initialisée :
VI CAN Écrire
Écriture point par point non périodique (Mode = sortie, fréquence d'échantillonnage = 0)
Écrire transmet un message immédiatement sur le réseau. Les échantillons fournis pour écrire sont utilisés pour former les octets de données du message. Un échantillon doit être spécifié pour chaque voie de la liste Init Start. Le mode Init Start doit être Output pour ce comportement (pas Output Recent). La figure 6 montre un exemple d'écriture avec fréquence d'échantillonnage = 0. A, B, C et D représentent des messages pour les voies initialisées. Pour chaque écriture, les messages associés sont transmis le plus rapidement possible.
Figure 6. Exemple d'écriture avec fréquence d'échantillonnage = 0
Écriture continue (Mode = sortie, fréquence d'échantillonnage > 0)
Vous fournissez un tableau d'échantillons pour chaque voie de la liste Init Start. Chaque fois que le temps spécifié passe, le message suivant est transmis. Chaque message utilise l’échantillon suivant du ou des tableaux pour former les octets de données du message. Autrement dit, les échantillons du tableau sont transmis périodiquement sur le réseau. En utilisant la même fréquence d'échantillonnage avec les voies de sortie analogique NI-DAQ, vous pouvez générer des échantillons CAN et DAQ simultanés au fil du temps.
La figure 7 montre un exemple d'écriture avec une fréquence d'échantillonnage > 0 et un mode Sortie. A, B, C et D représentent des messages pour les voies initialisées. Δt représente le temps entre la transmission du message spécifié par la fréquence d'échantillonnage.
Écriture point par point (Mode = Sortie récente, fréquence d'échantillonnage > 0, Vous fournissez un seul échantillon pour chaque voie de la liste Démarrage initial. Chaque fois que l'horloge tourne à la fréquence spécifiée, le message suivant est transmis en utilisant l'échantillon le plus récent que vous avez fourni. Le mode Sortie récente est utile lorsque plusieurs tâches s'exécutent à des fréquences différentes, car vous pouvez écrire des échantillons pour toutes les tâches dans une seule boucle. La figure 8 montre un exemple d'écriture avec une fréquence d'échantillonnage > 0 et un mode Sortie récente.
Figure 8. Exemple d'écriture avec fréquence d'échantillonnage > 0, mode Sortie récente
VI CAN Clear : La fonction Effacer arrête la communication pour la tâche et supprime la configuration. Pour chaque tâche que vous initialisez, vous devez appeler Effacer avant de quitter votre application. La fonction Clear est CAN Clear dans LabVIEW et nctClear dans les autres langages.
Les sections suivantes fournissent des informations que vous pouvez utiliser pour étendre le modèle de programmation de base.
Obtenir les noms
Si vous développez une application qu'une autre personne utilisera, vous pouvez ne pas spécifier de liste de voies fixe dans votre application. Idéalement, vous voulez que votre utilisateur final sélectionne les voies d'intérêt à partir des commandes de l'interface utilisateur, telles que les listes déroulantes. La fonction Obtenir des noms interroge MAX ou une base de données CAN et renvoie la liste de toutes les voies ou de tous les messages de cette base de données. Vous pouvez utiliser cette liste pour remplir les commandes de l'interface utilisateur. Vous pouvez ensuite sélectionner des voies à partir de ces commandes, ce qui évite d'avoir à taper chaque nom à l'aide du clavier. Une fois les sélections effectuées, votre application peut transmettre la liste résultante à Init Start. La fonction Obtenir des noms est CAN Obtenir des noms dans LabVIEW et nctGetNames dans d'autres langues.
Synchronisation
L'API NI-CAN Channel utilise le RTSI pour synchroniser des unités fonctionnelles spécifiques sur chaque carte. Pour les cartes CAN, l'unité fonctionnelle est l'interface (port). Pour les cartes DAQ, l'unité fonctionnelle est une mesure spécifique telle que l'entrée analogique ou la sortie analogique. Chaque fonction achemine deux signaux via la connexion RTSI :
· base de temps — Spécifie une horloge commune partagée par plusieurs cartes pour éviter la dérive de l'horloge.
· déclenchement de démarrage — Spécifie le signal de démarrage envoyé d'une carte à une autre pour éviter les latences de démarrage
Définir une propriété
Cette fonction vous permet de définir les propriétés du réseau, notamment le débit en bauds, le type d'émetteur-récepteur et le mode de filtre. La fonction Init Start utilise la configuration d'interface et de voie spécifiée dans MAX ou dans le fichier de base de données CAN. Si vous devez modifier cette configuration dans votre application, vous ne pouvez pas utiliser Init Start car la plupart des propriétés ne peuvent pas être modifiées pendant l'exécution de la tâche. À la place, utilisez d'abord Init, puis définissez la propriété et démarrez la tâche.
Obtenir une propriété
Cette fonction vous permet d'obtenir les propriétés de vos voies, messages ou réseau, y compris le débit en bauds, l'ID de message et le facteur d'échelle des voies.
Pour en savoir plus sur l'API Channel ou l'API Frame, téléchargez le manuel et les spécifications du matériel et des logiciels NI-CAN sur ni.com/manuals.
Liens associés :
Page d'accueil de NI Controller Area Network (CAN)
Synchronisation des signaux CAN et analogiques pour la validation du périphérique