Nous écrivons le chargeur FPGA dans LabVIEW. Partie 1



La plupart des programmeurs "normaux", pour le moins, ont une attitude ambiguë envers la technologie LabVIEW . Ici, vous pouvez argumenter longtemps et en vain. La situation est aggravée par le fait qu'il existe de nombreux exemples de programmes LabVIEW sur le réseau, mais ils sont tous orientés vers un débutant et se résument à «oh, regardez comme c'est simple, connectez la torsion à l'indicateur, tournez le bouton, les changements de chiffres», ou au mieux, au graphique du cycle un nombre aléatoire ou sinus est affiché, tout cela est accompagné d'une interface furieuse sous la forme de commutateurs à bascule géants, de boutons rotatifs et d'indicateurs de cadran. Personnellement, cette approche de simplification consciente m'agace. Dans une courte série d'articles, j'essaierai de présenter au lecteur le processus de développement de logiciels d'application chez LabVIEW. Afin de ne pas consacrer beaucoup de temps au sujet, nous utiliserons l'algorithme détaillé pour télécharger le fichier de configuration sur le FPGA via FTDI en mode MPSSE ( Téléchargement de la configuration sur le FPGA via USB ou démontage FTDI MPSSE ). Dans cet article, je montrerai comment implémenter le même chargeur FPGA, mais en langage LabVIEW.


Comme mentionné ci-dessus, l'algorithme de chargement FPGA en mode Serial Passive (SP) et le principe de fonctionnement FTDI sont bien décrits dans l'article précédent. Je ne vais pas me répéter. Nous pensons que l'algorithme est testé et reconnu comme apte. Et oui, supposons que le lecteur soit au moins superficiellement familier avec le concept LabVIEW et qu'il connaisse bien la programmation classique.


Bien que le processus de création d'un chargeur de démarrage ne prenne pas beaucoup de temps, la description du processus n'a pas réussi à tenir dans le volume d'un article, il y aura donc une petite série. Étant donné que la phase d'expérimentation est déjà terminée et que je suis confiant dans l'opérabilité de l'algorithme, je vais me permettre de commencer le développement à partir de l'interface utilisateur. Dans le premier article, nous allons créer l'interface utilisateur du chargeur et implémenter la structure du programme. Dans la seconde - via la dll du pilote FTDI, nous implémentons le chargement du fichier * .rbf dans le FPGA.


Pour la productivité de la conversation, il n'est pas superflu de rappeler la terminologie adoptée dans LabVIEW. Dans LabVIEW, le programme d'application est appelé Instrument virtuel, également connu sous le nom de VI, également appelé Instrument virtuel ou VI pour faire court. Le VP a deux «côtés»: le panneau avant, où se trouvent les commandes et les indicateurs, et le schéma fonctionnel (schéma fonctionnel), où ces éléments sont interconnectés et les fonctions et les flux de traitement des données sont mis en œuvre. En règle générale, un VP a une structure hiérarchique; tous les VP d'un VP de niveau supérieur sont généralement appelés un sous-appareil ou un sous-VI.


Interface utilisateur


Notre application devrait charger le fichier de configuration dans le FPGA. Dans le même temps, nous voulons dire que plusieurs FTDI peuvent être connectés à un ordinateur en même temps, et certains d'entre eux peuvent potentiellement être utilisés pour configurer des FPGA. Je suggère de faire un choix de périphérique dans la liste déroulante, en sélectionnant un fichier via un bouton avec une sortie de chemin. Pour démarrer le téléchargement, ajoutez le bouton "programme". Une LED virtuelle indiquera l'état de l'opération. Lancez LabVIEW.


Ajoutez les éléments requis au panneau avant (panneau avant). J'utiliserai le style "Silver" pour le VP. La figure ci-dessous montre le résultat, tous les éléments dans leur état d'origine. Par nom, si nécessaire, ils sont assez faciles à trouver dans la palette.




Nous éditons des éléments: nous transférons, étirons, nous ajoutons des inscriptions - nous apportons au formulaire requis. Ici, en fait, la main du concepteur est requise, mais comme j'ai pu:




Et le diagramme:




J'attire votre attention. Chaque élément a deux propriétés qui déterminent le nom - Label et légende.




La première propriété définit le nom de l'élément, sous ce nom, il sera affiché sur le diagramme. L'étiquette, contrairement à Caption, ne peut pas être modifiée pendant l'exécution du VI. En relation avec cette fonctionnalité, je vous recommande de masquer l'étiquette dans vos VIs sur le panneau avant et d'afficher la légende. Pour Label, trouvez un nom significatif, sous forme de variable dans un langage de programmation classique, de préférence dans une disposition latine. Pour Caption, nous allons introduire un nom à caractère humain, il peut être assez long, inclure des espaces et, si nécessaire, en russe. En utilisant LabVIEW, vous pouvez personnaliser la police d'affichage de la légende. Je dois dire que personne ne nous oblige à jouer avec Caption: toute inscription peut être faite directement sur FP dans n'importe quel endroit libre.


Nous implémentons l'opération VP selon le schéma classique: Boucle While et gestionnaire d'événements. Ajoutez une boucle While (Programmation -> Structures -> Boucle While) au diagramme et une structure de gestionnaire d'événements (Programmation -> Structures -> Structure d'événement).


Aide succincte sur la structure des événements

La structure attend que l'événement se produise, puis le gestionnaire correspondant s'exécute. La structure des événements a un ou plusieurs sous-diagrammes - des gestionnaires d'événements, les soi-disant cas, dont l'un est exécuté lorsqu'un événement se produit. À l'aide du terminal dans le coin supérieur gauche, vous pouvez spécifier le nombre de millisecondes pendant lesquelles la structure attend un événement. Si pendant ce temps aucun événement ne s'est produit, le sous-diagramme «Timeout» sera exécuté. La valeur par défaut est moins 1, ce qui signifie que le délai d'expiration n'expire jamais.




  1. L'étiquette de sélection d'événement indique les événements qui déclenchent le cas actuel. Pour afficher d'autres gestionnaires, vous pouvez cliquer sur la flèche vers le bas à côté du nom de l'événement.
  2. Le terminal de timeout définit le nombre de millisecondes à attendre pour un événement. Si la valeur est différente de -1, le sous-diagramme Timeout doit être implémenté.
  3. Un terminal pour saisir des événements dynamiques. Ce terminal n'est pas affiché par défaut. Pour l'afficher, sélectionnez "Afficher les terminaux d'événements dynamiques" dans le menu contextuel.
  4. Noeud de données d'événement. Lorsqu'un événement se produit, LabVIEW génère des données associées à cet événement. Ce nœud fournit ces données au gestionnaire. Vous pouvez utiliser la souris pour redimensionner le nœud verticalement et sélectionner les éléments nécessaires. Certaines données, telles que Type et Time , sont communes à tous les événements, d'autres, telles que Char et VKey , dépendent du type d'événement configuré.
  5. Le nœud de filtre d'événements définit les données d'événements que vous pouvez modifier avant que l'interface utilisateur traite ces données. Ce nœud est affiché uniquement dans les gestionnaires dans lesquels le filtrage est disponible. Vous pouvez connecter et modifier des éléments du nœud de données d'événement au nœud de filtre d'événement. Vous pouvez également modifier ces événements en connectant les nouvelles valeurs aux terminaux du nœud. Puis-je annuler complètement la réaction de l'interface à l'événement si je soumets true au terminal Discard? . Si vous ne connectez pas la valeur à l'élément de filtre, cet élément de données reste inchangé.
  6. Comme la structure Case , la structure d'événement prend en charge les tunnels. Si vous ajoutez un tunnel dans un cas, il sera automatiquement créé pour chaque gestionnaire. Cependant, par défaut, il n'est pas nécessaire de connecter les tunnels de sortie de la structure d'événements dans chaque gestionnaire. Tous les tunnels non connectés utilisent la valeur par défaut pour le type de données de tunnel. Cela peut potentiellement conduire à des erreurs difficiles à détecter. Vous pouvez renvoyer le mode dans lequel le tunnel doit être câblé dans tous les gestionnaires, pour cela, sélectionnez "Utiliser par défaut si non câblé" dans le menu contextuel.

Tout d'abord, nous nous occuperons de la fin du cycle et de la sortie du programme. La façon la plus simple est d'ajouter un bouton d'arrêt, ce qui arrêtera le cycle, mais, à mon avis, il est habituel de terminer le programme avec une croix rouge dans le coin supérieur de la fenêtre.
Ajoutez le gestionnaire approprié à la Event Structure . Dans le menu contextuel, sélectionnez "Ajouter un cas d'événement". Comme source de l'événement, sélectionnez "Ce VI", l'événement indique "Panel Close?"


Modifier les événements


Image cliquable


Veuillez noter que si vous sélectionnez "Panel Close" (sans question), cet événement est sans filtre, il ne peut pas être annulé. Et si avec une question, alors lorsque vous cliquez sur la croix, nous pouvons prendre le contrôle et terminer correctement et indépendamment le programme. Dans le "Panel Close?" à travers le tunnel, nous connectons la constante booléenne true avec le terminal pour arrêter la while . Saisissez "Ignorer?" servent également true .


Maintenant, il n'y a pas de nuance évidente: si le VI actuel est lancé non pas dans l'environnement LabVIEW, mais sous la forme d'une application compilée, cliquer sur la croix ne ferme pas la fenêtre, mais arrête l'application, dont nous n'avons pas besoin. Pour résoudre ce problème, après l'achèvement du cycle principal, nous vérifierons si nous sommes dans l'environnement de développement ou en mode programme, si nous sommes toujours en mode programme, puis nous mettrons fin à l'application. Afin de comprendre où le VI actuel s'exécute, utilisez le nœud de propriété (Programmation -> Contrôle d'application -> Nœud de propriété). Ce nœud permet d'accéder aux propriétés d'un objet par référence à cet objet. Dans ce cas, nous devrions obtenir un lien vers l'ensemble de l'application dans son ensemble. Sélectionnez la constante VI Server Reference dans la même palette. Une fois la constante définie sur le diagramme, vous devez changer son type en This Application (bouton gauche de la souris). Nous connectons le lien résultant avec le nœud de propriété. Sélectionnez la propriété Application:Kind Property - renvoie le type du système LabVIEW dans lequel le VI actuel s'exécute. Nous connectons la sortie de la propriété à la structure de cas, ajoutons le cas "Run Time System", où nous terminons l'application ( Quit LabVIEW ). Pour que ce bloc soit exécuté après le cycle, et non avant, nous connectons l' error in borne d'entrée au cycle à travers le tunnel.



Image cliquable


Maintenant, lorsque vous démarrez le programme, vous pouvez l'arrêter en cliquant sur la croix de la fenêtre. Le programme lancé ressemble à ceci:




À mon avis, beaucoup de superflu. Allez dans les propriétés du VI (menu Fichier -> Propriétés du VI), sélectionnez la catégorie "Apparence de la fenêtre", définissez Personnalisé.


Désactivez l'affichage du menu (il reste en mode édition), désactivez la barre de défilement, masquez la barre d'outils lorsque l'application est en cours d'exécution (Afficher la barre d'outils lors de l'exécution). Nous interdisons le redimensionnement de la fenêtre, nous permettons de minimiser et de minimiser la fenêtre. C'est mieux:




Bien sûr, cela vaudrait la peine de supprimer l'inscription "National Instruments. Logiciel d'évaluation LabVIEW", mais je ne veux pas encore acheter une licence pour un ordinateur personnel, nous allons accepter l'inscription et gérer la période d'essai de 45 jours.


Naturellement, vous pouvez ajuster la couleur d'arrière-plan et chaque élément, choisir des polices, mais je ne suis pas designer, mais quelque chose me dit que je ne ferai qu'empirer les choses.


Liste des instruments


Le VP doit proposer à l'utilisateur une liste des périphériques connectés à l'ordinateur qui conviennent au micrologiciel FPGA afin que l'utilisateur puisse sélectionner celui qui lui convient. Dans la bibliothèque FTD2XX, les fonctions FT_CreateDeviceInfoList et FT_GetDeviceInfoDetail sont prévues à cet effet. Comme indiqué dans un article précédent , les bibliothèques de pilotes peuvent être utilisées pour utiliser l'API FTD2XX. LabVIEW dispose d'un mécanisme pratique pour interagir avec les bibliothèques dynamiques - le nœud Appeler le nœud de fonction de bibliothèque, vous pouvez le trouver dans la palette "Connectivité -> Bibliothèques et exécutables". Le nœud d'appel de fonction doit être configuré: tout d'abord, spécifiez le chemin d'accès à la DLL (l'onglet "Fonction"), après quoi le système analyse la bibliothèque et propose de sélectionner le nom de la fonction dans la liste "Nom de la fonction" - sélectionnez FT_CreateDeviceInfoList , convention d'appel - sélectionnez stdcall (WINAPI) . Deuxièmement, dans l'onglet "Paramètres", vous devez entrer une liste de paramètres de fonction, où le premier élément de la liste est la valeur de retour. Ici, il serait bon de garder à l'esprit la documentation de l'API ou le fichier d'en-tête. Lorsque vous définissez des paramètres dans la zone "Prototype de fonction", le prototype de la fonction importée s'affiche. Lorsque la signature de la documentation correspond au prototype configuré, cliquez sur OK.


Supposons que l'analyse doit être effectuée une fois par seconde. Nous plaçons le nœud d'appel dans la structure du gestionnaire d'événements sur l'onglet "Timeout", définissons le temps d'attente à 1000 ms. Nous ajoutons des indicateurs aux broches du nœud, et si tout est fait correctement, alors au démarrage du VI, le nombre d'appareils connectés avec FTDI devrait être affiché:


Panneau avant et schéma fonctionnel


Image cliquable



De même, créez un nœud pour la fonction FT_GetDeviceInfoDetail . Le prototype de la fonction est:


 FTD2XX_API FT_STATUS WINAPI FT_GetDeviceInfoDetail( DWORD dwIndex, LPDWORD lpdwFlags, LPDWORD lpdwType, LPDWORD lpdwID, LPDWORD lpdwLocId, LPVOID lpSerialNumber, LPVOID lpDescription, FT_HAN 

Lors de la description des paramètres, il convient de noter que lpdwFlags , lpdwType , lpdwID , lpdwLocId sont passés en tant que pointeurs vers uint32 . Les paramètres lpSerialNumber et lpDescription sont l'essence des chaînes d'octets (tableaux de caractères avec un terminateur nul). Les paramètres de ce type dans le nœud d'appel peuvent être décorés de différentes manières, vous pouvez les entrer dans un tableau de mots de 8 bits, mais je pense qu'il est plus pratique d'indiquer immédiatement qu'il s'agit d'une chaîne et de définir la taille attendue. Dans ce cas, la sortie sera immédiatement une ligne «labyrinthe» valide et aucune transformation supplémentaire ne sera requise.



Fonction de bibliothèque d'appels


Cette fonction renvoie des informations par le dwIndex série dwIndex . Si plusieurs FTDI sont connectés à l'ordinateur, pour lire les informations de chaque convertisseur, la fonction doit être appelée en boucle. Le nombre d'itérations de la boucle nous sera donné par la fonction précédente FT_CreateDeviceInfoList .


Panneau avant et schéma fonctionnel


Image cliquable



Il y a une caractéristique désagréable: tous les ports du nœud d'appel doivent être connectés au moins d'un côté. Par conséquent, un tunnel est créé dans la boucle pour les terminaux de sortie que nous n'allons pas utiliser.


Types tableau de Types contient des types de puce FTDI, nous en avons besoin afin de limiter le choix à ceux qui prennent en charge MPSSE et peuvent potentiellement être utilisés pour la programmation FPGA. Cependant, fonctionner avec des "nombres magiques" n'est pas pratique - je propose d'organiser les types FTDI sous forme d' enum . De plus, une telle enum déjà dans le fichier d'en-tête ftd2xx.h. Dans LabVIEW, vous pouvez utiliser deux contrôles pour créer une énumération: l'anneau de texte et l'énumération elle-même. Les deux contiennent des listes de chaînes avec des valeurs numériques entre lesquelles vous pouvez basculer. La principale différence est que "Enum" nécessite que les valeurs numériques soient des nombres entiers consécutifs, tandis que "Text Ring" a plus de liberté - vous pouvez spécifier n'importe quelle valeur.


Enum. La création

Nous entrons manuellement les valeurs, c'est dommage qu'il n'y ait pas de fonction pour importer l' enum de C



Sur le panneau avant, cet indicateur ressemble à ceci



Sélection d'une valeur par un clic gauche


Afin de lier et de synchroniser toutes les futures instances de la liste créée, il est pratique d'utiliser le "Make Type Def". (sélection via le menu contextuel de l'élément). Par conséquent, un type de données personnalisé sera créé. Le nouveau type est placé dans un fichier séparé avec l'extension * .ctl. La modification de ce fichier modifiera toutes les instances de cet élément. Je pense que cela ne vaut pas la peine d'expliquer à quel point cela peut être pratique. L'accès au fichier de définition peut être obtenu à partir du menu contextuel de l'instance en sélectionnant "Open Type Def", dans le même menu, vous devez faire attention aux éléments "Auto-Update from Type Def". et "Se déconnecter du type Def".


Nous changeons l'indicateur Types en un tableau d'indicateurs du FTDI Type et par conséquent, lorsque le VI démarre, le type du convertisseur connecté est affiché:



Trois appareils trouvés


Il est facile de remarquer que la fonctionnalité du code résultant dans le cas "Timeout" est terminée, il peut donc être déplacé vers un sous-VI distinct. Sélectionnez les éléments que nous voulons transférer vers le sous-appareil et sélectionnez "Créer un sous-VI" dans le menu principal Modifier.


schéma fonctionnel avec sous-instrument créé

Tous les indicateurs sont restés et un nouveau VI avec une icône standard a été formé à la place des nœuds d'appel.

Image cliquable


Double-cliquez sur le nouveau sous-VI pour ouvrir sa fenêtre d'édition. Tout d'abord, nous l'enregistrons et donnons un nom significatif, par exemple, "FT_GetDeviceInfo". Configurez les bornes d'E / S. Pour ce faire, utilisez le volet Connecteur:



Le panneau est un ensemble de bornes correspondant aux commandes et indicateurs VI.


Si vous sélectionnez un terminal sur le panneau de connexion, l'élément correspondant sur le panneau avant est mis en surbrillance. Si vous sélectionnez un terminal vide, puis cliquez sur un élément sur le panneau avant, l'élément sera attaché au terminal, mais avant cela, il ne doit pas être affecté à un autre terminal. Dans le menu contextuel, vous pouvez individuellement ou pour tous à la fois déconnecter les bornes des éléments, vous pouvez changer le motif du panneau dans son ensemble.


Je n'aime pas la façon dont les terminaux ont été attribués lors de la création du sous-VI actuel. Je sélectionne donc "Déconnecter tous les terminaux" et je le marque manuellement. Je recommande de placer les bornes d'entrée sur la gauche et la sortie sur la droite, l'entrée en option peut être placée en haut et la sortie en option en bas. Cela garantira une bonne lisibilité du code et un bon ordre visuel dans le diagramme.


Pour contrôler les erreurs, créez deux éléments supplémentaires, Error in et Error out . Le sujet de contrôle d'erreurs de LabVIEW est très étendu et dépasse le cadre de cet article, nous allons donc nous limiter à un minimum d'explications et respecter le principe "do as I". Ainsi, nous créons deux terminaux pour les erreurs - entrée et sortie.


Il est pratique de les créer à l'aide du menu contextuel

Cliquez avec le bouton droit sur le terminal d'erreur de n'importe quel nœud:



Dans LabVIEW, il est habituel de placer la borne d'entrée de l'erreur sur le panneau de connexion en bas à gauche et la borne de sortie en bas à droite.


Il sera plus pratique de combiner la sortie dans une structure. Pour la sortie, nous allons créer deux tableaux: le premier tableau contiendra tous les périphériques FTDI trouvés, le second tableau contiendra uniquement ceux qui peuvent MPSSE et théoriquement peuvent être utilisés pour configurer les FPGA.


La touche finale lors de la création d'un sous-instrument consiste à configurer l'icône. Un double-clic sur l'icône dans le coin supérieur droit de la fenêtre lance l'éditeur. Nous essayons de créer une sorte d'image significative qui nous permet d'interpréter sans ambiguïté le but de l'appareil dans le diagramme.


FT_GetDeviceInfo.vi

Face avant



Schéma fonctionnel


Et voici à quoi ressemble le cas «Timeout» après avoir mis les choses en ordre:

Image cliquable


Jusqu'à présent, la liste déroulante avec le nom "Sélectionnez un appareil" était vide, nous avons maintenant les données pour le remplir. Nous créons un nœud de propriété pour la liste avec la propriété "Strings []" (menu contextuel -> Créer -> Nœud de propriété -> Strings []). Toute propriété est accessible en écriture et en lecture; le mode actuel est sélectionné dans le menu contextuel du nœud de propriété. Lors de la création d'un nœud par défaut, les propriétés sont configurées pour lire. Changer pour écrire: "Changer pour écrire".


Dans le tableau de structures, sélectionnez le tableau avec la description et alimentez-le dans Strings[] . Vous pouvez sélectionner un tableau à l'aide de la For Loop .


Après avoir démarré le VI, en appuyant sur le bouton gauche de l'élément "Sélectionner un périphérique", vous pouvez spécifier le périphérique à configurer. Dans ce cas, la liste des appareils est mise à jour deux fois par seconde. Bien sûr, il ne serait possible de mettre à jour la propriété que si la liste a été mise à jour, mais jusqu'à présent, cela entraînera un encombrement inutile du diagramme.


Que s'est-il passé?

Face avant



Image cliquable


Plus tôt, j'ai oublié de mentionner une fonctionnalité intéressante, la boucle For n'a pas à spécifier explicitement le nombre d'itérations, il suffit de créer un tunnel d'entrée du tableau et la boucle s'exécutera pour chaque élément, ce comportement ressemble à la foreach en C ++ 11. Cependant, vous devez être prudent lorsque plusieurs baies arrivent à l'entrée de boucle.


Dans la structure de l'événement, ajoutez un gestionnaire pour appuyer sur le bouton "programme". Bien que nous n'ayons pas de VI chargé de charger le fichier dans le FPGA, nous allons créer un "stub" de sous-périphérique. Supposons qu'il prenne le chemin vers le fichier de configuration et le descripteur FTDI en entrée, et selon les résultats de l'opération, il renvoie l'état du micrologiciel: réussi ou non. Et pour le rendre plus intéressant pour tester l'interface du programme, nous allons rendre ce statut aléatoire.


Stub FT_MPSSE_SP_FPGA.vi

Face avant



Schéma fonctionnel


Nous passerons le descripteur FTDI à l'entrée de stub via la propriété list (menu contextuel -> Créer -> Nœud de propriété -> Texte en anneau -> Texte), pour transférer le chemin du fichier vers l'élément "Chemin du fichier", créer une variable locale (menu contextuel -> Créer -> Local Variable) et réglez-le sur lecture (Change To Read). Et connectez la sortie d'état directement à l'indicateur d' Status . Le bouton Programm est glissé dans le gestionnaire d'événements. Il est recommandé de placer les éléments sur lesquels l'événement est configuré dans les gestionnaires - maintenant un double-clic sur cet élément sur le panneau avant affichera non seulement l'élément correspondant dans le diagramme, mais également le gestionnaire d'événements associé à cet élément.


Maintenant, en appuyant sur le bouton "Program", l'indicateur devient vert (succès) ou vert foncé (non succès). Pas trop clair. Dans les propriétés de l'indicateur, changez la couleur "Off" en rouge. C’est mieux. Si l'indicateur est vert, alors on peut dire que le FPGA sur le périphérique sélectionné est configuré par un fichier, dont le chemin est indiqué dans la fenêtre:



Face avant


Mais cette déclaration devient fausse si nous avons modifié le fichier ou sélectionné un autre périphérique. Dans le même temps, nous ne pouvons pas colorer l'indicateur en rouge, car aucune erreur de programmation ne s'est produite. Dans le cas d'un changement de fichier ou de périphérique, il convient de souligner que la valeur de l'indicateur n'est pas pertinente - assombrissez-la. Pour cela, vous pouvez utiliser la propriété Indicateur Disabled . Cette propriété peut prendre trois valeurs: Enabled - affichage normal, l'utilisateur peut contrôler l'objet; Disabled - l'objet est affiché sur le panneau avant comme d'habitude, mais l'utilisateur ne peut pas contrôler l'objet; Disabled and Grayed Out - l'objet est affiché sur le panneau avant assombri et l'utilisateur ne peut pas contrôler l'objet.


Nous créons des gestionnaires d'événements pour la Devices list et le File Path , et dans ceux-ci, nous assombrissons l'indicateur d'état et dans le gestionnaire, nous attribuons le bouton "Programme" à la propriété Enabled .


Qu'est-il arrivé?


Gestionnaire "Programm": changement de valeur.



Gestionnaire de liste de périphériques: changement de valeur



Voici à quoi ressemble l'indicateur assombri


Rendons la recherche du fichier de configuration plus pratique pour l'utilisateur - nous allons configurer la fenêtre d'affichage des fichiers. Nous allons dans les propriétés de l'élément File Path , sur l'onglet "Browse Options", remplissons Prompt, Pattern Label, spécifions le filtre de type de fichier (Pattern) et le nom du bouton (Button Text).


Fenêtre de sélection des fichiers

Seuls les fichiers rbf sont affichés



La création d'une interface utilisateur peut être considérée comme terminée.



Lancer le chargeur de démarrage


Qu'avez-vous rencontré aujourd'hui?


Dans cet article, comme exemple de création d'une application fonctionnellement complète avec une interface minimaliste, j'ai essayé de montrer différentes approches pour travailler dans LabVIEW.


En conséquence, nous avons abordé ces points:


  • Définition des propriétés de l'appliance virtuelle. .
  • : .
  • .
  • .
  • dll.
  • .

API FTD2XX MPSSE. .



  1. USB FTDI MPSSE
  2. labview_mpsse . .
  3. .
  4. Software Application Development D2XX Programmer's Guide . API D2XX.

Source: https://habr.com/ru/post/fr427529/


All Articles