le 06-30-2020 03:12 AM
Bonjour,
Afin de réaliser un projet d'étude, j'ai besoin de récupérer les informations d'une antenne pour capteurs sans fils, connecté par liaison Ethernet, à un pc possédant LabView 2017.
Pour récupérer ces informations, je doit utiliser LabView afin de décomposer la trame Ethernet pour ensuite identifier les données de chaque capteurs connectés à l'antenne.
Le problème est que je ne récupère aucune information sur LabView. J'ai essayé d'utiliser les modules TCP mais cela ne fonctionne pas.
Avez-vous déjà eu une situation similaire et avez-vous déjà réussi à récupérer des informations par liaison Ethernet via LabView?
Je vous joint ce que j'ai essayé de faire sur LabView ainsi qu'un schéma qui récapitule la situation.
PS: Sur le module TCP servant à ouvrir la connnexion, qu'est ce que "remote port or service name"?
Merci de votre aide
07-01-2020 02:36 AM - modifié 07-01-2020 02:48 AM
Bonjour,
Le "remote port" permet de savoir sur quel port les données sont disponibles. Vous trouverez une très bonne explication sur ce post : What is the "remote port or service name"
Vous devriez trouver cette information dans la documentation de vos capteurs.
Je vous joins également un document qui pourra vous aider :
Basic TCP/IP Communication in LabVIEW
Bonne journée.
Eloise
NI France
le 07-01-2020 07:37 AM
Bonjour,
Il est iportant également de savoir si les trames Ethernet sont des trames TCP/IP. L'ethernet est une couche matérielle de transport de données. Sur la couche physique Ethernet, on peut faire transiter plein de protocole différents. Les fonctions LabVIEW Permet d'utiliser les protocoles TCP/IP ou UDP. Ces fonctions couvrent la majeure partie des cas d'utilisation dans les applications.
Si les trames Ethernet que vous devez récupérer sont d'un autre protocole que ces 2 là, vous ne verrez jamais une seule information depuis les fonctions LabVIEW.
la solution est de se tourner vers une autre technique qui permet de lire n'importe qu'elle donnée qui arrive à sur la carte Ethernet. La solution se base sur la couche driver WinPCap qui permet d'installer un driver permettant de récupérer toutes les trames. Un soft très connu qui permet de regarder ce qu'il se passe sur le réseau et qui utilise cette couche est Wireshark.
Wireshark installe d'ailleurs le driver WinPCap. Une bonne recherche sur le web te permettra de trouver ce qu'il faut.
Pour l'utiliser en LabVIEW, il existe des exemples qui fonctionnent qui permettent de récupérer ce qui passe sur la carte réseau : https://forums.ni.com/t5/Example-Code/Ethernet-Packet-Sniffer-Utility-Using-WinPcap-Functions/ta-p/3...
Je ne sais plus si c'est celui la le mieux, il y a un autre exemple disponible aussi. Les exemples fourni ne font que la lecture.
Attention tout de même, si les trames sont très rapides, ont peut ne pas en voir passer, il faut modifier la dll est refaire une version capable de lire plusieurs messages.
Cordialement
MaximeR
Maxime R.
CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
CTA - Certified TestStand Architect / Architecte TestStand Certifié
le 07-17-2020 01:58 AM
Merci de vos réponse, en me renseignant plus profondément sur les trames transmises, ce sont des trames Modbus TCP/IP que je doit récupérer sur LabView pour ensuite récupérer les informations des modbus via des registres. Savez-vous comment je pourrait procéder afin de réaliser cela?
Adrien
le 07-17-2020 02:06 AM
Pour le modbus TCP, je te conseille d'utiliser la bibliothèque Labview.
Pour cela, ouvre le VI Package Manager qui est normalement installé sur ton PC avec Labview 2017 :
Ensuite recherche NI Modbus Library :
Ensuite lance le Modbus Server example :
Cet example te permettra de te connecter à tes capteurs. Ensuite, suivant ce modèle, à programmer une app qui le fait de manière autonome.
le 07-17-2020 07:08 AM
Merci pour ta réponse, j'essaie de partir sur la voie que tu m'a indiqué. Le seul problème est que dans l'application VI Package Manager, je n'ai rien du tout.
J'ai donc téléchargé la librairie nécessaire avec le lien:
http://www.ni.com/example/29756/en/
Mais je n'ai aucune idée de comment l'installer.
07-21-2020 01:36 AM - modifié 07-21-2020 01:37 AM
Il faudrait voir ce qui ne va pas avec le VI Package manager. Un problème de firewall ou de proxy probablement.. Ce serait mieux parce que ton lien ce n'est pas exactement cette librairie là.
Est-ce que ce lien fonctionne?
https://forums.ni.com/ni/attachments/ni/3016/492/8/ni_lib_modbus_library-1.2.1.42.vip
Il vient de cette page :
le 07-23-2020 04:31 AM
En effet, avec ce lien j'ai pu installer correctement la librairie et ainsi l'utiliser, merci.
J'essaie maintenant de créer un programme afin de récupérer la valeur des registres.Pour ce faire, je me sers de ce modèle qui utilise le module Read Input Registers:
J'ai donc réalisé la même chose, sauf que je n'obtient aucune donnée. ,Coup j'ai rajouté un mudule en parallèle afin devoir si j'obtiens des Read Holding Registers.J'en obtiens; le problème est que je n'ai aucune idée de leurs significations.
Voici mon programme:
De plus, dans la constante Adress Starting je remarque sur l'exemple qu'il y a un d devant le 10000. Je trouve cela étrange car je ne peux pas mettre un autre chiffre que 0 ou 1 sur mon programme.
Merci pour votre aide.
Adrien
le 07-27-2020 03:03 AM
Salut,
Désolé pour la réponse tardive. L'addresse d10'000 représente l'adresse 10'000 en base décimale. le petit d signifie décimal, au contraire de hexadécimal par exemple.
Voici un exemple selon l'image en annexe ci-dessous :
1: Si tu veux lire 1 input (DI_status):
tu dois faire un Read Input (func 02) à l'adresse 0.
2: Si tu veux lire tous les inputs (DI-all_statusFromDI00) :
tu dois faire un Read Input Register (func 04) à l'adresse 48.
Donc, si tu veux lire l'input no. 0, tu as deux méthodes. Soit tu lis un bit avec la méthode 1. Soit tu lis un registre avec la méthode 2, dont tu extraits le bit 0.
De manière générale, en modbus TCP on lit les registres. On le fait même de manière cyclique. Je ne vois pas l'avantage d'économiser de la bande passante en lisant un seul bit.