Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

perte connexion Modbus TCP

Résolu !
Accéder à la solution
Bonjour
Mon programme scrute en permanence des entrées sorties déportées en ethernet TCP Modbus, dont l'état d'un bouton d'arrêt.
hors , si aucune action n'est menée sur la machine pendant plusieurs minute , on fini par détecter un arrêt alors que l'entrée est restée à 1.
J'ai peut être fait une erreur dans le cheminement de données au niveau des éléments lecture / écriture sur le modbus...
j'ai mis à -1 l'entrée timeout du bloc "TCP ouvrir une connexion", ce qui à priori , le met en scrutation illimitée dans le temps.
 
ci joint une copie d'écran du diagramme principal
 
Pourriez vous m'aider?
0 Compliments
Message 1 sur 9
4 178 Visites

bonjour, je ne suis pas sûr de comprendre. Sauf erreur, il y a "-1" sur "l'ouverture" de la connexion TCP, donc l'établissement de la connexion TCP avec ton device. Il n'y a pas "-1" sur la lecture de la donnée. Si je regarde l'image de ton code, le code va boucler régulièrement sur la lecture de la valeur modbus. 

Par contre, il n'y a pas de gestion de l'erreur dans ta boucle. Que va-t'il arriver si l'adresse IP est invalide? une erreur, mais tu rentres dans la boucle. Or l'arrêt est conditionné par F10 etF11.

Dans la même idée, si la connexion est établie, mais que le serveur "perd" la connexion, alors la fonction "read" retourne une erreur, qui n'est pas gérée. Par ailleurs, si erreur sur la lecture modbus, tu vas récupérer un tableau de "0" donc de False, dont tu détectes l'arrêt de ton système.

C'est une supposition, mais tu dois gérer l'erreur dans ton code. Quelques remarques

  • Ne pas rentrer dans ta boucle, si tu n'ouvres pas la connexion avec le serveur Modbus.
  • Ne pas décoder l'arrêt du système, si la fonction read TCP retourne une erreur.
  • Gérer l'erreur dans la boucle, car elle est perdue, car la boucle ne va pas s'arrêter sur erreur.
  • Ne pas mettre de fonction "exit" sur le bouton F10 (en source, arrêt brutal de LV?) mais doit arrêter la boucle "proprement et quitter le programme.

A suivre.. A+

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

Message 2 sur 9
4 136 Visites

bonjour et merci

effectivement , n'ayant aucune aide sur le "MB Ethernet Master Query.vi" , je n'avais pas câbler leur Timeout , mais je suppose qu'il faut également mettre "-1" pour avoir un temps infini.

Ce que je viens de faire

par contre , j'utilise ce vi une trentaine de fois dans mon code. Faut il gérer l'erreur pour chacun ?

ci joint un des endroit ou il est utilisé.

Ou puis je trouver un exemple de gestion d'erreur pour ce type de vi  modbus?

Sachant que c'est un fichier exe généré par le builder qui tourne sur la machine grâce à un runtime Engine , comment puis je quitter l'executable par F10 , sans utiliser Exit?

Laurent

 

 

0 Compliments
Message 3 sur 9
4 127 Visites

salut Laurent,


je suppose qu'il faut également mettre "-1" pour avoir un temps infini. 


non je ne pense pas. Tu as une communication avec un serveur de données Modbus TCP. En classique, tu dois avoir une réponse en quelques centaines de millisecondes. Le timeout est par définition un temps supérieur au temps de réponse normal. Il doit permettre de ne pas bloquer le code, et permettre de gérer un problème d'absence de réponse. Donc 2000 ms voir 5000 ms me semble un temps "normal".

 


par contre , j'utilise ce vi une trentaine de fois dans mon code. Faut il gérer l'erreur pour chacun ? 


Je vais te poser une question. Dans ma voiture j'ai 500 capteurs, j'ai 500 fonction de lecture, penses-tu que le calculateur doit gérer une erreur (de communication) avec les 500 fonctions de lecture? ou faut-il me satisfaire de déclencher un airbag car la fonction de lecture a une erreur, et retourne "valeur = 0" mais "erreur pas de communication"?

Je pense que tu vas être en accord avec moi : une valeur n'a pas de sens si il y a une erreur. Donc dans ton code, tu dois avoir un cas logiciel " que faire si pas erreur" et mode dégradé "si erreur".

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

Message 4 sur 9
4 101 Visites
Solution
Accepté par lodevo2

Ou puis je trouver un exemple de gestion d'erreur pour ce type de vi  modbus? 


tu communiques avec un instrument en modbus TCP : personnellement, je commence à écrire un driver d'instrument. Fonctions de lecture des données avec décodage et gestion des erreurs. C'est ces fonctions que je vais par la suite utiliser dans mon programme. Je ne fais pas appel directement à l'API modbus puis décodage dans le main. Mais je fais un code plus modulaire, avec des sous-fonctions pour l'instrument (appeler driver d'instrument). 

 

pour la gestion des erreurs, pas exemple tu peux regarder par là exemple de Gestion des erreurs sous LabVIEW

 

après j'utilise mon driver dans un "projet LabVIEW", ou Framework, que je choisis en fonction de mon besoin (design)

par exemple le QMH (Queue Driven Message Handler) ou modèle Gestionnaire de messages dans une file d'attente (GM...

je te conseille un tour vers cette présentation Architecture : Les modèles de projet sous LabVIEW, zoom sur le QDMH (ou QMH)

cela permet de répondre à ta question


Sachant que c'est un fichier exe généré par le builder qui tourne sur la machine grâce à un runtime Engine , comment puis je quitter l'executable par F10 , sans utiliser Exit? 


Le but n'est pas de quitter sans faire "F10", mais ma remarque est de te signaler "avant de quitter LabVIEW, il faut fermer les références TCP, passer par une phase de fermeture logicielle". Un logiciel comment par une initialisation (setup), puis le code principal (Main), puis un arrêt propre (cleanup)  Donc ne pas fermer brutalement, mais quitter ta boucle logicielle, et faire un cleanup. 

 

Je pense que ton code peut fonctionner. Il ne manque pas beaucoup. Mais si tu vais un code plus important à faire, si tu devais le maintenir dans le temps, gérer des versions, si d'autres développeurs devaient intervenir, .... C'est le but de ma réponse, si tu veux aller plus loin, je pense qu'il manque quelques règles de développement. Par exemple gestion des erreurs, code modulaire, utilisation d'un Framework connu et approuvé, documentation

si tu cherches quelques idées, par exemple, au hasard. 

A+

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

Message 5 sur 9
4 099 Visites

Très utiles toutes ces explications .je vais essayer de les appliquer sur ce projet et sur les suivants.En tant qu'autodidacte , j'ai zappé quelques bases de programmation LV.

j'ai trouvé ce qui perturbait mon réseau d'e/s.une étape de séquence sur laquelle le programme attend une réponse opérateur , n'était pas traversée par le flux de données du réseau...Smiley frustré

Merci pour l'aide

0 Compliments
Message 6 sur 9
4 067 Visites

salut, bonne nouvelle. Afin d'aider des personnes qui trouveront le post par une recherche, tu peux le fermer, avec la réponse que tu juges adaptée à ton problème. Si tu veux il y a aussi la possibilité de mettre des compliments.

A+ et bonne suite

Luc

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

Message 7 sur 9
4 051 Visites

Bonjour

Je n'avais lancé Labview 2016 depuis quelques semaines , et à présent ,aucun de mes projets ne veulent s'ouvrir.

J'ai toujours ce message:

Sans titre 1.jpg

 

Dois je réinstaller Labview?

y a t il un risque de perte de license?

 

Merci 

0 Compliments
Message 8 sur 9
3 935 Visites

salut bonne année! tu devrais faire un nouveau post. Smiley heureux

Pour ton problème, dans ajout suppression de programme (ou Panneau de configuration\Tous les Panneaux de configuration\Programmes et fonctionnalités) tu peux « réparer » LabVIEW.

Pour la licence, même si elle « saute » tu peux la réactiver sans problème.

A+ Luc

 

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 9 sur 9
3 895 Visites