11-16-2020 02:00 AM - modifié 11-16-2020 02:01 AM
Bonjour à toutes et à tous,
J'ai développé une application pour communiquer via ethernet avec différents automates (TLCC et TM258 de chez S.E.). Le code côté serveur est identique sur les TLCC et les TM258.
Mon application utilise les fonctions TCP Open Connection, TCP Write et TCP Read afin de communiquer avec les automates.
Lorsque je clique sur un bouton "Connexion" de ma face-avant, j'envoie une liste d'instructions dans une file d'attente qui seront lues et exécutées dans mon autre boucle. (voir Capture 1 et 2)
Chaque instruction exécute les mêmes fonctions : envoi d'une commande via TCP Write, puis lecture de la réponse via TCP Read. (voir Capture 3)
Mon problème est le suivant :
Lorsque je me connecte une première fois à un TM258, tout fonctionne correctement.
Si je me déconnecte via TCP Close Connection (bouton Disconnect sur ma face-avant), puis que j'essaie de me reconnecter au même automate TM258, le VI TCP Open Connection ne me renvoie aucune erreur, mais lorsque je lui envoie une commande via TCP Write, puis que j'attends la réponse avec TCP Read, ce dernier VI me retourne une erreur 66 (l'erreur sort du TCP Read, et non du TCP Write). Dans les instructions suivantes, les VI me renvoient l'erreur 62.
Le problème survient peu importe l'ordre des instructions. Si l'on reprend la Capture 1, que ce soit "read param 1" ou "get feedback mode" en premier, ce sera toujours dans la première instruction que l'erreur 66 apparaîtra au TCP Read.
Il n'y a aucun problème si j'essaie de me connecter/reconnecter plusieurs fois de suite sur un TLCC avec cette application.
Nous avons une ancienne appli (développée en CVI) obsolète pour communiquer avec ces automates, il n'y a aucun problème pour me connecter aux automates via cette ancienne appli, même quand je rencontre l'erreur 66 sur mon appli LabVIEW.
Je suis obligé de redémarrer l'automate pour pouvoir à nouveau communiquer avec lui via mon appli LabVIEW.
Auriez-vous des pistes de réflexions pour résoudre ce bug ?
N'hésitez pas à me demander des infos complémentaires 🙂
Thibaut M.
le 12-02-2020 02:08 AM
Bonjour,
Je me permets de remonter ce sujet, car je n'ai toujours pas trouvé de solution 🙂
le 12-02-2020 02:53 AM
Bonjour,
Avez-vous isolé les fonctions de communication avec cet automate afin de s'affranchir du reste du code ?
Vous pouvez réaliser ces modifications :
- Ajouter des temporisations entre open / Write / read / close
- Répéter les actions après erreur
Bonne journée!
le 12-02-2020 03:11 AM
Bonjour,
J'ai un timer de 500ms après la fonction Open, mais je n'ai pas encore testé entre les fonction Write, Read et Close. Je testerai ça 🙂