2017-06-26 1 views
0

Je contrôle un périphérique sur une connexion série à l'aide de LabVIEW (version 7.0). Il est connecté via USB et installé en tant que port série virtuel sur l'ordinateur (sous Windows XP). De temps en temps, mon appareil tombe en panne quand mon programme envoie une commande, et il est incapable d'accepter plus d'entrée (le périphérique lui-même cesse également de fonctionner) jusqu'à ce qu'il ait expiré.Échec de la communication série dans LabVIEW

J'ai regardé le trafic de port série en utilisant Portmon. Chaque fois que le périphérique plante, le pilote série envoie la commande que j'envoie en utilisant mon programme quatre fois au lieu d'une seule fois, avec une commande IOCTL_SERIAL_GET_COMMSTATUS entre les deux. Je ne peux pas voir ce que cette dernière commande retourne, mais je suppose que quelque chose se passe dans la communication plus tôt. Je pense que ma configuration du port n'est pas tout à fait correcte, mais je n'ai aucune idée de comment ou pourquoi. J'ouvre et ferme la connexion à mon appareil chaque fois que je veux écrire quelque chose. Par souci d'exhaustivité: il a une vitesse de transmission de 9600, 8 bits, aucune parité, 1 bit d'arrêt et aucun contrôle de flux. Je suis conscient que les paramètres corrects de ces paramètres dépendent de l'appareil, mais le fabricant n'a fourni aucun paramètre recommandé.

+1

Outre Portmon, vous pouvez également obtenir la perspective LabVIEW des communications série à l'aide de NI I/OTrace - http://digital.ni.com/public.nsf/allkb/282C5D41E2BA04F2862574BA007803B9. Les lignes qui apparaissent en rouge indiquent les conditions d'erreur. –

+0

Afin de vous aider, vous devez fournir des informations plus spécifiques. À quel périphérique vous connectez-vous, quel pilote utilisez-vous et pouvez-vous publier un extrait de votre code labview, même si, comme suggéré, cela pourrait ne pas être le problème. Avez-vous un autre programme qui n'a pas ce problème en utilisant le même pilote. –

+0

@ D.J.Klomp Spécifiquement, l'appareil est un générateur RF (fabriqué par WindFreak, le modèle est SynthUSBii). Il contient un microcontrôleur ATmega32U2. Comme je l'ai décrit ci-dessous, l'ajout d'un retour chariot à chaque commande a résolu mon problème, de sorte qu'il ne dépend pas du programme qui contrôle le périphérique. Je me rends compte que ce problème peut être un peu trop spécifique pour être traité ici, car je suppose que cela dépend beaucoup de la façon dont le microcontrôleur est programmé. – Julius

Répondre

0

Le pilote est une DLL de quelque sorte? Si c'est le cas, c'est la source la plus probable de votre problème, et vous devrez probablement contacter l'auteur du pilote. LabVIEW a des bogues qui tombent en panne, mais de loin la source la plus commune de plantages dans les applications de communication simples est une DLL tierce buggée. En d'autres termes, je doute que ce soit un problème LabVIEW et que vous auriez la même difficulté si vous écriviez un programme C pour parler à ce pilote. Je ne sais que ce que vous avez posté ici sur votre système, mais après de nombreuses années de recherche de ces problèmes, je commencerais par le fabricant de l'appareil/l'auteur du pilote.

Si vous avez des preuves du contraire, s'il vous plaît partager.

+1

Si j'utilise un programme pour communiquer directement avec mon appareil via un port série, il se bloque également si j'envoie rapidement plusieurs commandes l'une après l'autre. J'ai découvert que cela n'arrive pas si j'ajoute un retour chariot à la fin de chaque commande. Lorsque j'ai ajouté le retour chariot aux commandes que mon programme LabVIEW envoie, cela a résolu le problème. – Julius