PLC - automatisme et iPhone

Transactions ModBus : adressage

Transaction MODBUS

La transaction MODBUS d'une cellule est déclenchée par la présence des balises de lecture et d'écriture suivantes et une adresse de transaction sur 16 bits :

Pratiquement tous les éléments représentatifs de PLCLink pour une variable peuvent utiliser le mode Modbus disponible de facto dans la plupart des automates.

Adresse de transaction

L'adresse 16 bits pour la transaction Modbus est dans la balise de lecture ou d'écriture :

N'inventez pas d'autre syntaxe, le tag IB ou OB et l'adresse sont indispensable, la liste possible des préfixes est plus bas et le tableau donne la correspondance de l'adresse modbus qui sera effective.

En exploitation le protocole du ModBus/IP passe par le port 502 sur Internet, il faut donc que votre iPhone soit sur le même réseau que l'automate ou que votre routeur dispose d'une règle de routage du port 502 (TCP et UDP) vers votre automate. Ne cherchez pas à modifier le port 502 PLCLink utilise ce port par défaut analogie avec un navigateur qui utilise le port 80 pour vous fournir des pages.

Avec un routage vous pouvez donc accéder de n'importe où à votre automate.

Adresses IEC1131

C'est l'usage normal de PLCLink avec les automates type WAGO qui utilisent la notation IEC1131, voir plus bas le table exacte des affectations mémoire et entrée sorties - utilisable presque uniquement avec les WAGO.

L'usage de cette notation est plus simple en Modbus car certaines zones n'ont pas la même adresse en écriture et en lecture un décalage de 512 (0x0200) est à prévoir par exemple :
QW0 utilise l'adresse modbus 512 = (0x200) en écriture mais 0 (0x0000) en écriture (pas toujours utilisable en ecriture).

Adresses décimales

C'est l'usage plus délicat car vous devez connaître l'adresse décimale de la transaction ModBus, cette adresse n'est pas nécessairement la même en lecture ou en écriture pour la même variable.

Vous décidez le l'usage d'un WORD ou d'un BIT en ajoutant un point décimal.

Le bit suivant est en <IB>12289.0</IB>, le 0 terminal est inactif.

Adresses Hexadecimales

  • <IB>0x3000</IB> : lecture de la mémoire hexa 0x3000 = 12288 en WORD
  • <IB>0x3000.0</IB> : lecture de la mémoire hexa 0x3000 - 1 seul BIT
  • <OB>0x3000.1</BB> : écriture de la mémoire hexa 0x3001 - 1 seul BIT en 0x3001
  • C'est le modèle d'utilisation ModBus le plus universel pour les PLC n'utilisant pas le mode IEC1131. L'adresse est simple 0x1234 et la transaction porte sur un WORD fonction FC3 ou FC16, l'adresse est composée avec un point décimal et la transaction porte sur un bit fonction FC1 ou FC15.

    On ne dispose pas de solution pour la lecture d'un double mot.

    Tableau de correspondance des adresses IEC1131

    L'usage de la notation IEC implique une adresse ModBus associée, exemple :
    MW0 fera un transfert mémoire à l'adresse ModBus : 0x3000 soit 12288.
    Avec IX, IW et QX, QW l'adresse associée n'est pas la même pour une lecture qu'avec une écriture.
    Vous devez composez avec les adresses pour votre automate si besoin. l'usage direct en décimal ou en hexadécimal étant toujours possible.

    Les seules adresses IEC utilisables dans PLCLink sont :

    Le symbole (MX etc..) avec deux lettres est nécessaire sinon l'adresse décimale est utilisée.
    exemple : MW0 sera 12288 mais M0 sera 0 (erreur d'écriture). Ce symbole décide aussi de la véritable adresse utilisée en fonction du tableau ci-dessus. N'inventez pas d'autres symboles ils ne seront pas utilisés.

    Utiliser la simple notation décimale pour éviter les erreurs, la version suivante utilisera aussi la notation hexadécimale pour les WORD et les BITS. Le support des LONG (D) et des REAL n'est pas encore au programme, vous devez composer avec CodeSys pour obtenir une information exploitable.

    La mantisse donne l'adresse effective, MW0 commence donc en mémoire à 12288, MW1 = 12289 etc...
    L'écriture MX0.1 est valide pour désigner un bit et une opération associée.

    L'écriture MW0.1.2 n'est pas supportée, reportez la valeur de l'unité modbus "1" sur le tag <unitID>

    Adresse Modbus et CodeSys

    ATTENTION : L'adresse Modbus et l'adresse utilisé par CodeSys peuvent différer, certaines cartes introduisent un décalage dans la nomination des adresses. En Modbus sur Wago la règle de l'adresse fonction de la position physique de la carte semble s'appliquer toujours.

    La règle pour obtenir l'adresse exploitable en ModBus sur PLCLink est simple, il faut suivre l'ordre naturel des cartes de la gauche vers la droite.
    Il y a une table pour les entrées et une table pour les sorties.
    Le contrôleur commence par placer dans la table d’entrée les données correspondant aux entrées analogiques et aux bornes spécifiques (comptage rapide, interfaces séries, etc.). Ces données sont placées dans l’ordre des bornes, en partant du contrôleur, et en allant vers la borne finale. Viennent ensuite les bits correspondant aux entrées TOR. Ces bits sont concaténés dans le mot suivant. le dernier mot occupé par les bornes d’entrées analogiques et les bornes spécifiques. Si le nombre de bits occupés par les entrées TOR dépasse 16 bits, un nouveau mot est automatiquement commencé. Le principe est identique pour les sorties.

    Extrait descriptif : Adresses exemple
    On utilisera la dénomination symbolique QW, MW etc... sans ajouter le %.

    ModBus spécifications

    Spécifications du modBus

    Sur le site WAGO :
    http://www.wago.com/wagoweb/documentation/app_note/a4707/a470700f.pdf

    ModBus debug

    Enregistrement des transactions ModBus

    PLCLink permet l'enregistrement des transactions. On ajoute une balise <modbuslog> dans la room pour toutes les transactions de la room. Si la balise est incluse au niveau supérieur <rooms> toutes les transactions sont enregistrées.
    La balise comporte le nom de fichier de log, c'est du texte avec séparation des champs par une virgule, la meilleure extension est .csv
    Vous devez choisir le séparateur décimal en fonction de l'application de relecture, sur Excel (Fr) utilisez une virgule comme séparateur pour une intégration facile. Certain tableur nécessite un point décimal.
    Vous sélectionnez le séparateur des nombres dans les préférences de l'application.

    Extrait de texte

    	2012-01-01 17:06:11 +0000;S:000300000006000300010001
    	2012-01-01 17:06:11 +0000;S:000100000006000300000001
    	2012-01-01 17:06:11 +0000;S:000200000006000300020001
    	2012-01-01 17:06:11 +0000;S:000000000006000300000001
    	2012-01-01 17:06:12 +0000;R:00030000000500030259DC
    	2012-01-01 17:06:12 +0000;R:0001000000050003020740
    	2012-01-01 17:06:12 +0000;R:0000000000050003020740
    	2012-01-01 17:06:12 +0000;R:0002000000050003020030
    

    On trouve la date et l'heure de la transaction et l'indicateur "S" pour une demande et "R" pour la réception.
    L'exemple montre 4 demandes successives, le premier mot est une référence : 0x0003, 0x0001, 0x0002, 0x0000
    Les demandes de lecture d'un mot 'opération FC3 = 0x03' sur : 0x0001, 0x0000, 0x0002, 0x0000 soit IW1, IW0, IW2, IW0
    Les réponses sont préfixés par la même référence que la demande, les réponses n'arrivent pas nécessairement dans l'ordre.

    Extrait d'écran

           

    La présence de la balise <modbuslog> avec le nom du fichier de log fait apparaître une case à la fin du tableau. La case active permet l'affichage du fichier.
    Ce fichier est exportable par e-mail ou vers une autre application.

    ModBus performances

    Modbus asynchrone

    Par défaut c'est le mode utilisé pour les demandes modBus.
    Dans une room, chaque item avec un lien modBus réalise une demande de lecture avec un identifiant destiné à la bonne case d'affichage, certain automates sont peu performants sur ce point, la réponse n'arrive jamais si des demandes multiples sont cumulées. Les PLC Wago ne posent pas de soucis avec le cumul des demandes asynchrones, extrait d'un log avec 6 demandes en attente sur un Wago 750-841 :

    	2012-01-03 14:20:09 +0000;S:0BBA00000006000102040001
    	2012-01-03 14:20:09 +0000;S:0BB800000006000102020001
    	2012-01-03 14:20:09 +0000;S:0BBD00000006000102070001
    	2012-01-03 14:20:09 +0000;S:0BBB00000006000102050001
    	2012-01-03 14:20:09 +0000;S:0BB900000006000102030001
    	2012-01-03 14:20:09 +0000;S:0BBC00000006000102060001
    	2012-01-03 14:20:09 +0000;R:0BBD0000000400010100
    	2012-01-03 14:20:09 +0000;R:0BB80000000400010101
    	2012-01-03 14:20:09 +0000;R:0BBA0000000400010101
    	2012-01-03 14:20:09 +0000;R:0BBB0000000400010101
    	2012-01-03 14:20:09 +0000;R:0BB90000000400010100
    	2012-01-03 14:20:09 +0000;R:0BBC0000000400010100
    

    Le préfixe indique la correspondance de la réponse avec la demande, sur certains automates Scheider certaines réponses n'arrivent pas. Il faut alors limiter le nombre de demandes dans une <room>, le mode synchrone modBus est spécifiquement implémenté pour résoudre ce problème.

    ModBus synchrone

    Pour obtenir ce mode il faut placer un tag <mbsynchrone> dans <setting>
    Voici un extrait des transactions synchrones sur un automate Télémécanique (Schneider):

    	2012-01-19 13:14:47 +0000;S:000000000006000300000001
    	2012-01-19 13:14:47 +0000;R:0000000000050003020000
    	2012-01-19 13:14:47 +0000;S:000500000006000300050001
    	2012-01-19 13:14:47 +0000;R:0005000000050003020000
    	2012-01-19 13:14:48 +0000;S:000300000006000300030001
    	2012-01-19 13:14:48 +0000;R:0003000000050003020000
    	2012-01-19 13:14:48 +0000;S:000100000006000300010001
    	2012-01-19 13:14:49 +0000;R:0001000000050003020000
    	2012-01-19 13:14:49 +0000;S:000400000006000300040001
    	2012-01-19 13:14:49 +0000;R:0004000000050003020000
    	2012-01-19 13:14:49 +0000;S:000200000006000300020001
    	2012-01-19 13:14:49 +0000;R:0002000000050003020000
    

    Respectivement on trouve des opérations de lecture '03' sur les adresses modBus 0x0000, 0x0005, 0x0003, 0x0001, 0x0004, 0x0002 et les réponses associées. La demande suivante n'est effective qu'après réception de la réponse.


    index


    contact : index

    Valid XHTML 1.0 Transitional