Discussions au sujet de NI LabVIEW

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

ethernet sur labview

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

Tout télécharger
Message 1 sur 9
2 976 Visites

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

0 Compliments
Message 2 sur 9
2 875 Visites

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é

Message 3 sur 9
2 857 Visites

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

0 Compliments
Message 4 sur 9
2 792 Visites

 

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 :

Walker34_0-1594969411593.png

 

Ensuite recherche NI Modbus Library :

Walker34_1-1594969475206.png

 

Ensuite lance le Modbus Server example :

Walker34_2-1594969533235.png

 

Cet example te permettra de te connecter à tes capteurs. Ensuite, suivant ce modèle, à programmer une app qui le fait de manière autonome.

Walker34_3-1594969595372.png

 

 

0 Compliments
Message 5 sur 9
2 788 Visites

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.

VIPM.PNG

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.

0 Compliments
Message 6 sur 9
2 771 Visites

 

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 :

https://forums.ni.com/t5/Reference-Design-Content/LabVIEW-Modbus-API/ta-p/3524019?profile.language=e...

 

0 Compliments
Message 7 sur 9
2 751 Visites

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:

exemple prog MB.PNG

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:

Face graphique MB.PNGFace avant MB.PNG

 

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.

exemple prog MB.PNG

Merci pour votre aide.

 

Adrien

 

 

 

  

0 Compliments
Message 8 sur 9
2 725 Visites

 

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.

 

 

Walker34_0-1595836499624.png

 

0 Compliments
Message 9 sur 9
2 677 Visites