Communication série avec interruption

Bonjour,
je suis novice en Labwindows CVI et je cherche un exemple de communication série en utilisant une interruption en reception 
Merci.

You can serach among the examples shipped with CVI: samples\rs232\commcallback.cws is a program that uses InstallComCallback to install an asyncronous function executed in interrupt.
(Sorry for not answering in French: you may post in the French board or you can write in English into this board)
Proud to use LW/CVI from 3.1 on.
My contributions to the Developer Zone Community
If I have helped you, why not giving me a kudos?

Similar Messages

  • Detection d'un port USB pour une communication série

    Bonjour à tous,
    J'ai développer une application qui recepionne des données texte d'une communication série 422. Cette communication est configuré par l'utilisateur de l'application qui choisit le prot série sur lequel les données sont receptionnée et envoyer ( ce sont les meme ).
    Mon probleme est que dans certain cas, le poste qui heberge l'application n'a pas de port série, la communication se fait donc via un adaptateur 422 - USB, or avec la commande VISA Ressource Name en selection d'une classe VISA, je ne vois pas les ports USB qui pourrait servir à la communication.
    J'ai essayé de regardé les fonction VISA USB mais elles ne receptionne que des données integer, or je dois recevoir des strings..
    Quelqu'un saurait comment je pourais resoudre ce problème ?
    Cordialement
    Nathan
    Résolu !
    Accéder à la solution.

    A titre d'information, il arrive dans certains cas, et sur des longues périodes de communication que les convertisseurs USB se déconnectent.
    Je n'ai encore jamais trop compris d'ou venait le problème, et suite à recherche sur le net, nous sommes plusieurs à le rencontrer de manière ponctuelle.
    Donc s'il s'agit d'un début de développement, je te conseille de réfléchir à une étape de reconnexion en cas de perte du lien, si ton application te l'autorise.
    Bonne journée,
    Michael.

  • Numéro de série avec un produit étudiant

    Bonjour, j'ai acheté la série Creative Suite 6 Design Standard étudiant. En ouvrant la boite, je constate qu'il n'y a pas de numéro de série et qu'il faut que j'aille sur le site internet pour m'en procurer un. Hélas, la page web ne marche pas. J'ai mon numéro de produit mais qui ne fonctionnement pour activer mes logiciels.
    J'aimerais qu'on puisse m'aider à me donner un numéro de série avec le numéro de produit que j'ai avec ma boite.
    Espérant qu'un vrai technicien puisse passer par ici.
    Contacter moi -> Deliaku

    Contact your regional S&T support by web chat or phone. Nobody here can do anything in such matters.
    Mylenium

  • Labview : Communicat​ion série avec un périphériq​ue

    Bonjour,
    Sous Labview, j'essaie de communiquer via un port série à un périphérique. En parallèle, j'essaie de recevoir et d'envoyer des données. Je voudrais me placer en mode écoute (Activer la réception sur ce port : Visa read) puis envoyer une commande (Visa write). De ce fait, en se plaçant en écoute avant l'envoie de la commande, je suis sûr de recevoir la réponse du périphérique.
    Je veux donc envoyer un caractère tout en écoutant sur le même port com la réponse de mon périphérique (J'ai déjà un doute à ce sujet. Avec un port série, on peut lire et écrire en même temps ? )
    Mon problème est le suivant : En lançant ce programme sous Labview, il se place en écoute mais n'envoie pas le caractère de commande (montage en parallèle). Après le timeout de l'écoute (Visa read), le programme écrit bien le caractère (Visa write) comme un fontionnement série.
    Comment réaliser des tâches multiples en parallèle sur LabView ? Auriez-vous un exemple ou plus d'information à ce sujet ?
    Merci,
    Jérémy

    Bonjour,
    je confirme le fait qu'un UART ne peut pas travailler en "parallèle".
    Pour dialoguer avec un équipement, il faut envoyer une commande "Write" si besoin, pour que le produit te réponde.
    Tu récupères ensuite la réponse avec un "Read".
    Pour dimensionner le nombre de données à lire, plusieurs méthodes par la suite se présente à toi.
    - Attendre un certain temps : Interruption de la lecture sur timeout
    - Attendre un caractère de terminaison \A : 0xD par défaut.
    - Lire un certain nombre d'octet : Utilisation du noeud de propriétés nbre de bytes sur la liaison fortmeent conseillé.
    Si après une manipulation simple, tu ne relies pas de données, n'hésites pas à mettre une temporisation de 100 ms entre ta requête et ton écoute, il n'est pas rare d'avoir des équipements avec un temps de réponse de l'ordre de 50ms sur port série (spécification présente dans la documentation de l'équipement en général).
    Bonne journée,
    Michael

  • Communication série cRIO

    Bonjour,
    J'ai un cRIO 9074 qui doit communiquer avec un équipement qui a un pc via le port série.
    Mon cRIO va "poser des questions" au pc supervisant l'équipement et l'ordinateur lui enverra une réponse.
    Je voulais savoir s'il fallait que le pc distant possède visa aussi?
    Merci d'avance
    Bastien
    Résolu !
    Accéder à la solution.

    J'ai un pc de supervision qui communique avec mon cRIO via TCP/IP.
    Mais j'aimerai faire un contrôle/commande d'un équipement qui possède son propre ordinateur.
    Selon la version du logiciel de supervision propre installé sur cet équipement, j'ai le choix entre série ou TCP/IP.
    L'équipement étant un système fermé, je ne suis pas sûr de pouvoir installé de logiciel supplémentaire.
    J'aimerai donc savoir si la communication TCP/IP nécessite également l'installation de Visa sur l'équipement ou si juste la connaissance de l'adresse IP et du port de communication était nécessaire au cRIO pour communiquer avec l'ordinateur de l'équipement?

  • Récupérer les données du port de communication série

    Bonjour,
    Je pilote des moteurs pas à pas par Labview via des modules de commande moteurs.
    Je communique avec eux par la liaison série du PC.
    Ces modules de commandes me renvoie des informations en retour mais je ne sais pas comment les récupérer via Labview. J'ai essayé le "visa read" mais sans succès...
    Quelle méthode dois-je utiliser?
    Merci d'avance de vos réponses.
    Cordialement.

    Bonjour,
    Et merci d'avoir posté sur nos forums.
    Il nous manque quelques informations pour répondre à votre problème :
    - Est-ce que votre moteur est visible sous MAX ou sous le VISA Interactive Control ? Quel est le driver que voit votre instrument sous le gestionnaire de périphériques de Windows ?
    - Avez-vous cherché si des drivers existaient déjà pour votre instrument (fournis par le constructeur, ou téléchargeables ici )
    Par ailleurs, je vous suggère, avant d'essayer des VIs tout faits, d'essayer d'envoyer une commande simple et la lire. Pour cela, vous trouverez un ou deux exemples dans l'aide de LabVIEW (Aide-> Recherche d'exemples -> E/S Matérielles -> Série)
    Pour ce qui est de la réponse de Tinnitus, il se peut effectivement qu'un instrument ne marche pas très bien via VISA, mais mieux avec l'hyperterminal. Cela est dû aux caractères de terminaison employés, ou à la vitesse d'écriture vers l'instrument.
    Par ailleurs, quel est le type de commandes que vos moteurs accepte ?
    Cordialement,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

  • Communication série - problème utilisation du port

    Bonjour à tous,
    Je n'ai que peu d'expérience avec LabView et j'ai démarré un projet où je dois communiquer avec un instrument. Cet instrument est connecté par USB mais il s'agit d'un port COM virtuel.
    J'ai utilisé "Instrument I/O Assistant" pour créer mes fonctions et les tests de communication que j'ai fais depuis l'Hyperterminal sont concluants comme ceux que j'ai fais sous LabView (j'arrive à envoyer une requête à l'instruement et récupérer sa réponse).
    Il arrive parfois que je n'arrive plus à communiquer et j'obtiens le message "The ressource is valid but VISA cannot currectly access it". J'arrive parfois à relancer la communication mais sans trop savoir exactement ce qui s'est passé. Ces problèmes sont encore plus fréquents depuis que j'ai ajouté 2 autres "Instrument I/O"...
    Voici mon code, comme je vous le disais, c'est la 1ère fois que je dois coder pour communiquer avec un instrument... alors j'ai peut-être fais de grosses erreurs...
     Merci d'avance pour votre aide
    Solved!
    Go to Solution.
    Attachments:
    code.JPG ‏77 KB

    Bonjour,
    je vous suggère de poster dans la communauté française du forum, vous aurez des réponses plus rapides.
    Je vous suggère aussi d'aller jetter un coup d'oeil sur les fonctionnalités de la palette VISA (qui gère les ports COM).
    Concernant l'architecture, soit vos trois appareils sont sur un port com différent, et la vous pouvez paralléliser les acquisitions, soit ils ne le sont pas, et vous ne pouvez pas le faire et il faudra bien veiller a ce que les lectures//écritures sur le port COM soient faites de manière successives.
    Quand Labview vous dit "The ressource is valid but VISA cannot currectly access it", c'est que la ressource est utilisée par un autre processus (soit l'hyperterminal, ou bien une ancienne session visa qui n'a jamais été refermée). donc faites attention à bien fermer (le close écrit dans la même erreur, donc si ça se trouve un ou deux close Visa ne sont pas correctement exécutés.
    Cordialement,
    V-F

  • Communication Série Etuve

    Bonjour,
    Je souhaiterais piloter mon étuve en RS232, lorsque j'utilise le VI lecture et écriture Série, peu importe sur quel port je suis (COM1 ou COM2), le VI s'exécute entièrement mais l'étuve ne bouge pas, et encore mieux si je débranche l'étuve, le VI s'exécute quand même alors qu'il n'y a aucune ressource VISA à trouver.
    Peut on m'éclairer car là je ne vois pas vraiment où ça coince ?
    Rémi  

    Bonjour,
    Tout dépend du controle de flux que tu as mis, mais les VIs de lecture et écriture série ne génèrent pas d'erreur si ils ne lisent rien, ou si le système en face n'a pas reçu les trames.
    Du coup, même lorsque tu es débranché, le vi fonctionne normalement, mais ne t'affiche rien puisqu'il n'a pas eu de réponses.
    En revanche, si ton etuve ne réagit pas, c'est peut-être que les paramètres de communication sont incorrects, ou que la commande que tu envoie n'est pas comprise par ton étuve, du coup elle ne réagit pas...
    Vérifi bien les paramètres de la communication, la configuration de l'appareil, et les commandes que tu dois lui envoyer (fais bien attention au caractère de terminaison également)!
    Olivier L. | Certified LabVIEW Developer

  • Probleme numero de série avec lightroom

    Bonjour
    lightroom me dit que mon numéro de série correspond à une mise à niveau !!!

    S'il s'agit d'un achat CC, il y en a pas. Vois la réponse:
    Re: Où pouvons-nous avoir accès à notre numéro de série quand on a acheté un abonnement sur le creative cloud? Merci !

  • Pb communication TCP/IP avec un oscillo Lecroy 6100 et librairie Visa

    Hello,
    I am trying to communicate with a remote Lecroy 6100 scope through TCP/IP, using the visa library.
    I have configured my device with MAX but it can not
    open an INSTR session. I have check the IP address, my
    device respond to a ping. I have installed a VisaServer
    on my device but from my PC, no INSTR session can be
    opened.
    Does someone have any idea ?
    Thank you.

    Hello,
    First of all, I advice you to use the instrument driver for your device:
    * WR 6100 - WaveRunner 6000 series Oscilloscope
    http://zone.ni.com/idnet97.nsf/9b2b33e1993d877786256436006ec498/DF35A33EF5129A8586256E920052E226?OpenDocument#rank
    NI-VISA 2.5 (and higher), on Windows32 platforms only, allows you to connect to ethernet instruments via TCP/IP. This is done by specifying a TCP/IP Instrument (INSTR) Resource or TCP/IP Socket (SOCKET) Resource. The syntax for each is as follows:
    TCPIP[board]::host address[::hostname][::INSTR]
    To use the INSTR resource type, the device must support the TCP/IP Instrument Protocol, also known as VXI-11.
    TCPIP[board]::host address[::host name]:ort:OCKET
    The SOCKET Resource exposes the capability of a raw ne
    twork socket connection over TCP/IP (usually, but not restricted to, an ethernet interface). Without TCP/IP Instrument Protocol support, you must use the SOCKET resource type.
    If there is only one interface type present on the host machine, then the board type is optional. For example, "TCPIP0::..." is the same as "TCPIP::...", because 0 after TCPIP is optional. Also, host name has to be used only when there is more than one hostname (instrument) in the host address.
    Refer to the link below for more informations:
    * How Do I Configure an Instrument to Communicate via TCP/IP in MAX?
    http://digital.ni.com/public.nsf/websearch/D7D8E3E1B682022286256D4A00771A52?OpenDocument
    Hope this helps.
    Regards.
    Matthieu Gourssies
    National Instruments

  • Comment récupérer avec Labview des données délivrées par un autocollérateur via la port série ( RS232)

    Bonjour à tous,
      J'écris pour solliciter une aide car je dois recupérer avec Labview des données délivrées par un autocollérateur via la port série ( RS232). Sera la bienvenue, des sites, des cours,  des codes ds d'autres langages, tout ce qui peut m'aider.
       Merci d'avance à touste et à tous
    j'attends avec impatiance votre réponse

    Bonjour,
    comme l'a très bien dit "tbob", il existe de nombreux exemples de communication série fourni avec LabVIEW.
    Si vous débutez en LabVIEW, il existe des ressources pédagogiques sur le site de National Instruments qui vous aideront à commencer à programmer avec LabVIEW.
    Ci-joint un lien depuis lequel vous pourrez accéder à ces différents tutoriaux :
    http://www.ni.com/academic/lv_training/how_learn_lv.htm
    De plus, il existe dans le "Developper zone" du site de NI, un grand nombre de bibiothèque de fonctions spécialement dévéloppées pour le contrôle instruments, un grand nombre d'instruments possède sa librairie, peut-être y trouverez vous le votre.
    http://sine.ni.com/apps/we/niid_web_display.drv_search
    En espérant que ces différents liens vous aideront,
    Cordialement,
    Benjamin M
    NIF

  • Communications avec un fluke 45

    Bonjour,
    Je suis actuellement en train de créer de travailler sur un projet TRES URGENT (récupération de données d'un multimètre Fluke 45 avec LV) pour tester Labview. dans lequel nous communiquons via RS232 avec un multimètre Fluke 45.
    J'ai utilisé le driver figuré sur le site national instruments Fluke 45.vi .
    J'arrive à procéder à une acquisition de données avec le VI Application Function Fluke 45 (ici acquisition de la tension indiquée par le multimètre) mais il y a un problème sur les circulations des données : en effet, lorsque j'observe l'évolution temporelle de l'acquisition de données avec un tableau de réel dans Labview: le programme acquiert les données : 0 - 0 - VALEUR - 0 - 0 - VALEUR - 0 - 0 - VALEUR .... et ainsi de suite. Il y a une périodicité que je n'arrive pas à comprendre.
    De plus, lorsque je modifie la tension, le programme ne détecte le changement qu'après 2 minutes : c'est à dire : je mesure 4 V à t = 0 (le programme affiche 0 et ce jusqu'à t = 2  min puis affiche 4 V) or moi je voudrais que le programme détecte la variation immédiatement
    Pouvez-vous m'aider SVP c'est assez urgent ?
    Cordialement.
    Résolu !
    Accéder à la solution.

    Salut, j'ai travaillé sur du Fluke aussi l'an dernier lors de mon stage je peux peut etre t'aider.
    Déjà je sais pas si tu le sais mais tu as la doc du multimètre qui explique le fonctionnement en émission/réception de commande.
    Ensuite comme tu dois le savoir le RS232 est une communication série synchrone ou asynchrone, il faut que tu regardes dans les réglages de ton multimètre le mode dans lequel tu es.
    Ce qu'il se passe c'est que l'ordinateur (Labview) n'est certainement pas à la même vitesse que le multimètre (les Bauds en général 19200 mais regardes la doc), et donc il essaie de lire les trames plus souvent qu'il n'en recoit, donc comme il ne recoit rien il met zéro, je pense que ton problème vient de là
    Sinon une astuce que j'avais utilisé pour déchiffrer des trames spécifiques à un modèle de thermomètre c'est de trier tes chaines de caractères que tu recois avec des fonctions Labview et ainsi tu obtiens juste la valeur entre tel et tel caractère que tu ne veux pas.
    J'espère t'avoir aidé, un peu
    Sinon pour le 2eme problème, je travaillais en thermique donc il y avait un temps de stabilisation pour le thermomètre, peut etre qu'en électricité il y en a aussi un ce qui justifierait les 2 min d'attentes de commandes de la part du multi
    a+

  • Interrupt

    Bonjour, je travail actuellement sur une communication série (visa). Je voudrait utiliser la boucle Event structur... et exécuter un truc avec mathscrip seulement si j'ai reçus de quoi sur le visa. Alors ma question est la suivant. Est t'il possible de faire une interruption avec labview, qui arrêterait tout se que le programme est en rain de faire pour aller dans une boucle externe... et ensuite revenir ou j'en étais avec le prog..... Si non, est-il possible de rentrer un event autre que le timout dans le Event Structure, par exemple une nouvelle entré dans le uart.
    J'espère que j'ai été assez claire.
    Merci de votre aide.
    Maxime Boisvert

    Bonjour Maxime,
    body { margin: 0 0 0 0; padding:0 0 0 0 }
    td,div { font-family:Tahoma;font-size:10pt;vertical-align:top }
    body { margin: 0 0 0 0; padding:0 0 0 0 }
    .transcript { background-color:#d2d2d2; }
    .messageBlock { margin-left:4px; margin-bottom:3px }
    .message { margin-left:100px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-spacere; }
    .messageCont { margin-left:100px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-spacere;}
    .other { color:#39577a;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .myself { color:#da8103;font-style:normal;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont { font-size:8px;text-align:right; color:#39577a;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .myselfCont { font-size:8px;text-align:right; color:#da8103;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .system { margin-left:4px; word-wrap:break-word;color:#da8103;font-style:normal;font-weight:normal; white-space:-moz-pre-wrap; _white-spacere; }
    .showTimestamp { margin-right:3px; float:right; color:#999999;font-style:normal;font-weight:normal; }
    .other1 { color:#ac2000;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont1 { font-size:8px;text-align:right; color:#ac2000;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other2 { color:#3c9fa8;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont2 { font-size:8px;text-align:right; color:#3c9fa8;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other3 { color:#e25614;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont3 { font-size:8px;text-align:right; color:#e25614;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other4 { color:#0b6ac8;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont4 { font-size:8px;text-align:right; color:#0b6ac8;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other5 { color:#b23290;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont5 { font-size:8px;text-align:right; color:#b23290;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other6 { color:#02e7c7;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont6 { font-size:8px;text-align:right; color:#02e7c7;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .other7 { color:#5b3284;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
    .otherCont7 { font-size:8px;text-align:right; color:#5b3284;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
    .tsDisplay { display:block }Une fois qu'un événement est détecté, le code qui s'exécute dans le Event Structure ne peut pas ètre arrêté.  Si un autre évément a lieu, il sera ignoré ou il passera à l'arriere de la queue (dépendament des options sélectionnées).  Le code associé avec le prochain événement dans la queue commencera aussitôt que le code associé avec le premier termine et si celui-ci ne prends pas longtemps à s'éxécuter, cela aura le même effet qu'un interrupt.
    Aussi, il est possible de simuler un événement à chaque fois que vous recevez de quoi sur le VISA et cet événement peut être ajouté aux événements dans votre Event Structure.  Il y a un exemple qui vient avec LabVIEW qui s'appelle "Programatically Fire Events" qui explique ceci, vous avez juste à chercher pour le mot "events" dans votre LabVIEW Example Finder.  Vous pourrez utiliser le VI "Generate User Events" dans un while loop parallèle qui contient un case structure pour générer l'événement. 
    J'espère que ces réponses vous ont aidé.  Si vous voulez des clarifications, n'hésitez pas à me demander.
    Kamalina
    Kameralina
    Ask NI (ni.com/ask)
    Search The KnowledgeBase
    NI Developer Zone
    Measure It. Fix It. ni.com/greenengineering/
    NI Vision ni.com/vision/

  • Créer un émulateur terminal avec labview

    envoyer des caractères ascii sur le port série à partir d'une commande chaine de caracteres sans devoir cliquer en dehors de la commande chaine de caracteres.Plus précisement, comme avec hyperterminal, je veux que a chaque appui sur une touche clavier le code ascii soit transmis immédiatement sans devoir cliquer en dehors de la commande chaine de caractères

    Bonjour,
    Lors de l'appui de l'utilisateur sur une touche clavier, vous pouvez sous LabVIEW récupérer la valeur du caractère ASCII correspondant avec la structure événementielle. Une fois la valeur ASCII récupérée, il suffit de l'envoyer sur le port série avec une fonction VISA Write.
    Vous trouverez ci-dessous un exemple sous LabVIEW de détection de l'événement "appui sur une touche clavier" qui vous retournera la valeur ASCII du caractère:
    http://sine.ni.com/apps/we/niepd_web_display.DISPLAY_EPD4?p_guid=B45EACE3E2DD56A4E034080020E74861&p_node=dz52023_us&p_submitted=N&p_rank=&p_answer=&p_source=External
    J'ai joint également 2 VIs (pour LabVIEW 7.0) de détection de l'événement "KeyDown".
    Je vous souhaite une bonne continuation.
    Cordialement.
    Attachments:
    KeyboardEvents.vi ‏27 KB
    KeyDown.vi ‏56 KB

  • "Waiting for real-time target (RT PXI target) to respond" error when the program waits interrupts

    Hi there,
    I have developed an application to detect interrupts generated by a electronic card and act in consequence. The program has been developed in labview but it calls a dll; that was created with labwindows. The dll is programmed to open the visa communication, enable events and install the interrupt handler and when an interrupt is detected, it reads the value of the different registers of the card and returns it to labview to visualize them. 
    The problem is that when the program waits for an interrupt, a prompt appears with the message "Waiting for real-time target (RT PXI target) to respond" and the only option I have is to click on the button to disconnect from the pxi or just wait. If I wait and I generate an interrupt, the prompt disappears and the application visualize the data like it was expected. 
    To wait for the interrupt the following code has been programmed in the function:
                    while (flag == 0)
                                    Sleep (1000);
    When an interrupt occurs, the value of flag changes to 1 and the function continue without any problem. I am not really sure, but probably here is the problem and probably this is not the best way to wait for an interrupt because the sleep function suspends the thread for the configured time, but at least the computing load in the PXI is between 0% and 1%. I was wondering if somebody knows how to wait for an interrupt without "lost" the communication with the PXI and if there is a better way to do it. 
    Any answer will be welcome and thanks for them,
    Jaime
    Solved!
    Go to Solution.

    Hello Naity,
    First of all, in which thread runs the waiting process? Is it scheduled in another thread than the function setting the flag?
    It scheduled in the same thread that I use to configure the communications and configure the card. Anyway, here is the pseudo code of the function interrupt that I programmed under labwindows,.
    char* interrupt(void)
    1. Open visa communications
    2.Install handler interrupt --> status = viInstallHandler (instr, VI_EVENT_PXI_INTR, IntrHandler, VI_NULL);   // the function IntrHandler will be called when an interrupt occurs
    3. Enable event PXI interrupt
    4. Wait
    while (flag == 0)
                  Sleep (1000);
    5. Visualize the data coming from the interrupt (registers and values measured with the card)
    6. Uninstall handler interrupt
    7. Close visa session
    The interrupt handler function IntrHandler is called immediately when an interrupt occurs and the pseudo code is like this
    ViStatus _VI_FUNCH IntrHandler(ViSession instr, ViEventType etype, ViEvent event, ViAddr userhandle)
    1. Disable some functions of the card to avoid damages. 
    2. Read registers and put them in a buffer
    3. Change the value of flag ---> flag = 1;
    In labview, I call the function interrupt with a call library function node (see the capture attached) and the program reads and saves the data from returned from the function.
    Secondly, I am not sure this method is the most elegant. You could for example register an event with the function and, insteand of setting a flag to 1, trigger the event and schedule it in another thread (if the function is thread safe). This could reduce your CPU Load even more and seem a bit cleaner to me.
    I've never used events before in labwindows but I will try to do it in this way. But anyway, I suppose that I should; somehow, wait the event to occurs in labview while the waiting for the event is programmed inside the dll...and probably the same prompt that i am trying to avoid is going to appear again, because I am not returning the "control" to labview (I mean, labview executes the dll and waits for the event to occur. Then the execution of the labview program is stopped in the call library function node executing the dll)
    Third point, which environment of development are you using?
    I am working with LV 2010 sp1 and Labwindows cv 10.0.1 and with the real time module.
    I did also another test, I divided the program in different functions, one to initialize the communication, another to wait until a interrupt has been detected and the other to obtain the data from the interrupt and close communications. With labview I call first with the call library function node the function to initialize, later I call inside a while loop the wait function like this
    int waitAseconds (double seconds, short stop_waiting)
    if(flag==1 || stop_waiting == 1)
    flag = 1; //to detect the stop_waiting button
    printf("flagAA =1 stop waiting = %d time = %d\n", stop_waiting, clock());
    return flag;
    else
    SleepUS(seconds*1000000);
    //a++;
    printf("flag a= %d stop waiting = %d time = %d\n", flag, stop_waiting, clock());
    return flag;
     and when the program detects an interrupt, the function returns to labview the flag and stops the loop. Finally, it reads the values and close communications. 
    In this way, the prompt appears but after running the application for 10 or 20 minutes and also i checked that there is a time gap between the executions in the loop.
    Thanks for your reply and your help,
    Jaime
    Attachments:
    capture.png ‏40 KB

Maybe you are looking for