luc desruelle's Blogue

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

ModBus et LabVIEW

Desruelle_luc
Trusted Enthusiast

1- résumé "simple", avec code toolkit NI

 

Avec les API LabVIEW, il est possibile d'utiliser le protocole Modbus, sans savoir comment il est codé.

Cela est totalement transparent pour le développeur.

Il est "quand même intéressant" de connaître quelques bases.

autres liens : http://www.developpez.net/forums/blogs/884588-luc-desruelle/b752/protocole-modbus-tcp-labview/

 

1.A) Modbus série "ASCII" ou "RTU"

En Modbus série, le maître se connecte à l'esclave. Dès que la liaison est établie, le maître envoie des requêtes Modbus (Requests) à l'esclave. Ces requêtes sont traitées par l'esclave. Le résultat est renvoyé au maître sous forme de réponse Modbus (Response).

 

Il existe 2 protocoles série :

  • RTU est le protocle le plus utilisé, avec calcul de CRC
  • ASCII avec calcul du LRC

 

configuration serie modbus VISA.png

 

1.A.a) exemple create Modbus serial ASCII master exemple

create Modbus serial ASCII master exemple.png

 

1.A.b) exemple create Modbus serial RTU master exemple

 

create Modbus serial RTU master exemple.png

 

B) Modbus "TCP"

En Modbus TCP, le client (maître) se connecte au serveur (esclave). Dès que la liaison est établie, le client envoie des requêtes Modbus (Requests) au serveur. Ces requêtes sont traitées par le serveur. Le résultat est renvoyé au client sous forme de réponse Modbus (Response).

 

Il existe, dans la spécification modbus, uniquement le transport TCP ou IP.

 

1.B.a) exemple create Modbus TCP master exemple

 

create Modbus TCP master exemple.png

 

Il est utilisé, rarement, 2 autres modes:

1.B.b) avec Gateway modbus, besoin d'ajouter le "Unit ID" : exemple create Modbus TCP master with unit_ID exemple

create Modbus TCP master with unit_ID exemple.png

 

1.B.c) le protocole RTU sur couche de transport TCP, sous le nom "modbus RTU over TCP"

( pour le code Modbus RTU over TCP Master with LabVIEW)

exemple create Modbus RTU over TCP master exemple

create Modbus RTU over TCP master exemple.png

 

 

Plus d'information : Modbus RTU over TCP Master with LabVIEW

 

 

2 - résumé PDU, ADU et Frame d'une trame Modbus

 

A) Protocole PDU

Le protocole Modbus définit un (Protocol Data Unit) Modbus-PDU, qui ne dépend pas de la couche de communication correspondante. Ce Modbus-PDU se compose des deux champs "Function Code" et "Data".

Grâce au blindage de "Function Code" et "Data" dans Modbus-PDU, les services Modbus et le modèle d'objet restent identiques pour toutes les variantes Modbus.

 

PDU modbus.png

B) Transport et ADU

En fonction de la représentation sur les différents protocoles réseau, Modbus-PDU est complété par des champs supplémentaires (MBAP Header) pour le Modbus-ADU (Application Data Unit).

 

 

Modbus-PDU et Modbus-ADU composent ensemble le message Modbus, également désigné par "Frame" (trame).

 

3 - Introduction à ModBus

MASTER VS SLAVE

Ethernet TCP/IP VS Serial

 

Master donne l'ordre de l'action de lire ou écrire au slave qui va réaliser l'action de donner la valeur (lecture) ou sauvegarder la valeur dans sa mémoire (écriture)

En ethernet TCP/IP Master (client) VS Slave (Serveur de données)

 

 

Un très bon article, en français, sur le protocole ModBus : http://www.ni.com/white-paper/52135/fr/

 

http://www.ni.com/white-paper/7675/en

The Modbus protocol follows a master/slave architecture where a master will request data from the slave. The master can also ask the slave to perform some action. The master initiates a process by sending a function code that represents the type of transaction to perform. The transaction performed by the Modbus protocol defines the process a controller uses to request access to another device, how it will respond to requests from other devices, and how errors will be detected and reported. The Modbus protocol establishes a common format for the layout and contents of message fields.

The messages exchanged between the master and the slave are called frames. There are two types of Modbus frames: Protocol Data Unit (PDU) and Application Data Unit (ADU). The PDU frames contain a function code followed by data. The function code represents the action to perform and the data represents the information to be used for this action. ADU frames add a little more complexity with an additional address part. ADU frames also provide some error checking. Both the ADU and PDU frames follow Big-Endian encoding.

 

fig3_modbus_frame_20120316151705.png

 

Primary Tables Object Type Type of
Discrete Input Single bit - boolean Read-Only
Coils Single bit - boolean Read-Write
Input Registers 16-bit word Read-Only
Holding Registers 16-bit word Read-Write

Table 1: Modbus Data Types1

 

4 - Serial Implementation

There are two serial modes that the Modbus application layer can follow: RTU and ASCII. 

In RTU, the data is represented in Binary format, whereas the ASCII mode represents the data such that it is human readable. 

 

Figure 8: Modbus ASCII Serial Frame1

 

Figure 9: Modbus TCP Frame1

  Description Size Example
MBAP Header Transaction Identifier Hi 1 0x15
Transaction Identifier Lo 1 0x01
Protocol Identifier 2 0x0000
Length 2 0x0006
Unit Identifier 1 0xFF

Figure 10: MBAP Header1

 

5 - TCP Implementation

As in many TCP applications, the first requirement is to establish a connection between the master and the slave.  When connection has been established, the master can build a request for the slave.  The request contains a PDU (Modbus frame described above) followed by a MPAB header, as shown in Figure 9.  Figure 10 represents a template for the MPAB header.     

 

 

 

6 - Using LabVIEW With Modbus, version gratuite librairie Modbus LabVIEW

L'ancienne : Bibliothèque LabVIEW Modbus le toolkit de NI

 

Nouvelle librairie Modbus utilisant la POO  à partir de  LabVIEW 2011  :  https://decibel.ni.com/content/docs/DOC-30140

 

7 - Exemples codes, tester communication modbus, analyse problèmes

http://www.ni.com/white-paper/3055/en

http://www.ni.com/white-paper/4433/en

http://www.ni.com/white-paper/3982/en

http://forums.ni.com/t5/Discussions-au-sujet-de-NI​/labview-tcp-ip-multi-client/m-p/1999103/highligh...

 

Analyse d'un problème ModBus :

> version de l'OS Windows ? + 32bits ou 64?

 

> test ping

> firewall sur PC serveur (le port modbus utilise le port 502 sur un PC serveur ModBus. Il n'y a pas de firewall sur le PC qui a le serveur? Firewall de Windows le désactiver pour test)

> Faire vi exemple : Open TCP + Read Input register + close avec affichage du code cluster d’erreur

 

Tester l'EXE sur qui fonctionne avec labVIEW développement  : valider que cela fonctionne sans erreur

Tester l'EXE sur le PC sur lequel l'application ne fonctionne et sur plusieurs PC pour comparer

 

http://forums.ni.com/t5/Discussions-au-sujet-des-autres/Liaison-TCP-IP-sous-appli-windows-7/td-p/177...

http://forums.ni.com/t5/Discussions-au-sujet-des-autres/Liaison-TCP-IP-sous-appli-windows-7/td-p/177...

 

 

ModBus TCP exemple Mesulog Luc Desruelle.png

 

 

 

 

 

 

Luc Desruelle | avatar_ld.gifVoir mon profil | Mon blog LabVIEW
Co-auteur livre LabVIEW : Programmation et applications
Certified LabVIEW Architect (CLA)
LabVIEW Champion

banniere Luc Livre.png

Contact

banniere Luc Livre NXG Champion.png

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

Commentaires
DaHelmut
Active Participant

Bon article

Quand on ne se souvient plus du fonctionnement exact de Modbus, ça donne une bonne piqûre de rappel.

Par contre, il faut noter que NI vient de sortir une version gratuite d'une nouvelle librairie Modbus (qui est censée être compatible avec l'ancienne) utilisant la POO et le dynamic dispatch.

Celle-ci est plutôt pas mal, l'ayant déja utilisée sur plusieurs projets (dispo uniquement pour LabVIEW 2012 et 2011 en allant sur la page dédiée au support) :

https://decibel.ni.com/content/docs/DOC-30140

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
Desruelle_luc
Trusted Enthusiast

Salut ! C’est plus un mémo qu’un article. J’ai rien fait… j’ai juste centralisé des infos.  Mais merci.

J’utilise souvent ModBus, et souvent je vois sur le forum des grosses erreurs sur l’utilisation et définition. Cela me permet de répondre en retrouvant mes notes.

La nouvelle je l’ai pas encore utilisée, mais merci de ton retour. A utiliser ! Surtout si validé par DaHelmut !!

A+

banniere Luc Livre NXG Champion.png

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

Desruelle_luc
Trusted Enthusiast

http://www.ni.com/white-paper/52135/fr/

nouveau document de National Instruments, pour ModBus

banniere Luc Livre NXG Champion.png

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