Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

Serial Register

I´m using LabView 7.0 and i'm working on Serial Communication. I can receive and send information, but I need to have a register of all the information that I receive from serial port. I use the text indicator but it reset every time I receive something new.
What can I do, to make this register.
I have tried to use de listbox function but I don't know how to used.
0 Kudos
Message 1 of 7
(3,715 Views)
You can concantenate new strings to the old by using a shift register. You could also create an array of responses. This could be done with a shift register and the build array, by a while/for loop with autoindexing, or a replace array element function. Several examples of shift registers and building arrays are included with LabVIEW. If you to display results in a table or listbox, you'll need to create an array. To populate a listbox, you create a property node for it and select the property ItemNames. The data required is a 1D string array.
0 Kudos
Message 2 of 7
(3,710 Views)
Hello, every body.
Scuse me but I'm french...
I'm using LbV 6.1 on Windows 2000 Pro.
I want to talk whit a spectrometer by RS232.
I can dial simply whit Visa componant.
But I wan a autonom and seep talk with the spectrometer.
How can I do for have "Interup identification register" ???
I want to know how to read a Bit in the register.
This bit say when I can read the buffer.

example: Write command: "LM"
Correct Read answer: "LM",XXX,XXX,XXX....

If i read too much early or too late, i don't have a correct answer
example false answer: "XXX,XX...
",XX..
I have only a part of the answer...
Can you help me?
Thanks for all.
Iko
0 Kudos
Message 3 of 7
(3,637 Views)
Bonjour Ikoria !
Etre français n'est pas une maladie honteuse ! 😉
Je ne pense pas que la solution à votre problème soit la lecture d'un bit d'interruption.
La lecture de l'info sur le port série doit être réalisée comme suit :
1/ s'assurer que le buffer de réception est vide (en comptant le nombre de caractères présents puis en les lisant)
2/ envoyer la commande LM
3/ lire les caractères reçus (éventuellement dans une boucle, en les concaténant) jusqu'à ce qu'une condition de fin soit atteinte. La condition de fin peut correspondre 1) à la réception d'un nombre prédéfini de caractères, 2) à la réception d'un caractère particulier (RC ou LF par exemple, 3) à la détection d'un silence sur la liaison série, supérieur à un temps prédéfini (timeout). Il serait possible également de jouer avec les signaux de handshaking (DSR/DTR), mais seulement si l'appareil correspondant (le spectro) les gère...

Une solution simple pourrait être d'inclure une temporisation après l'envoi de LM, avant de lire le buffer.

CC
Chilly Charly    (aka CC)

         E-List Master - Kudos glutton - Press the yellow button on the left...
        
0 Kudos
Message 4 of 7
(3,607 Views)
Salut chilly charly .
Je sais qu'être français n'est pas une malladie honteuse...C'est mon anglais qui l'est...
Je te remercie pour tes infos. Voici commen je pense procéder:
1)j'envoie la commande: "LM"
2)je lie en boucle le buffer et sauvegarde tout grace à un registre à décalage
3)je sort de la boucle lorsque le message est complet: debut= "LM", fin= cr lf

évidement je met des conditions suivant que le retour correspons à des réponses valide du spectro.
ex: message non comprit = "K",

Je ne peut faire confiance à des délais d'attente fixe (que je définit) ,car le temp de réponse du spectro est aléatoire....(10;20;30 ms..)

Encore merci pour vos lumières..
Iko
0 Kudos
Message 5 of 7
(3,597 Views)
En utilisant les fonctions VISA, à la place des anciennes fonctions série, on peut définir le caractère de fin et une durée limite d'attente (timeout) qui permet de reprendre la main si le spectro ne répond pas au bout d'un temps prédéfini.
Pensez à vider le buffer de réception AVANT d'envoyer la commande LM, car il peut contenir des caractères issus d'un communication précédente avortée. Auquel cas, il deviendrait impossible de lire quoi que ce soit, sauf à développer une fonction d'analyse de string évoluée.
Exemple de pb : une comm interrompue précocement laisse dans le buffer les caractères suivants :
456 RC LF
On envoie LM
Ce qui arrive ensuite dépend de la manière de lire et décoder les caractères.
Par exemple, si on lit une longueur fixe, on obtient :
456 RC LF 123, ce qui n'a pas de sens
Si on attend le LF, on obtient
456 RC LF, la valeur num sera absurde, mais la valeur suivante semblera correcte, puisqu'on laisse dans le buffer 123456 RC LF. Sauf qu'on sera décalé dans le temsp, puisque on lira la valeur précédente !
etc...

CC
Chilly Charly    (aka CC)

         E-List Master - Kudos glutton - Press the yellow button on the left...
        
Message 6 of 7
(3,593 Views)
OKi 😉

Dit, je suis passé sous LB 7 :-))

il est vraiment génial!!!

Tu connais pas les adresses des registres d'interuption des ports com sous W2k ?
(juste pour la culture si le pb est future...)

Merci beaucoup....

Iko
0 Kudos
Message 7 of 7
(3,570 Views)