IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Lire et écrire des variables d'un automate PLC avec IdTCPClient


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 183
    Par défaut Lire et écrire des variables d'un automate PLC avec IdTCPClient
    Bonjour à tous,

    Je dois lire et écrire des variables dans un automate (Omron CJ2M/ Connexion RJ45) en mode Fins, j'ai D6 avec Indy 10.

    Je n'ai jamais eu l'occasion d'utiliser les composants d'Indy, je ne sais pas si le idtcpclient est le composant qui convient pour ça?


    Merci à tous

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    RJ45 c'est le port des cartes réseaux
    Il y a de grande chance que le TCP\IP puisse fonctionner
    Tout dépend ce qu'embarque ton Automate

    L'automate Omron CJ2M gère du "EtherNet/IP Data Link"
    EtherNet/IP est la mise en œuvre du protocole CIP via les protocoles TCP/IP et Ethernet (IEEE 802.3).

    Par dessus le TCP/IP, tu vas devoir créer ton parser de trame CIP pour comprendre ce que dit l'Automate et inversement

    C'est semble-t-il un équivalent du bon vieux ModBus-TCP mais avec une autre norme de trame
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 183
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    RJ45 c'est le port des cartes réseaux
    Il y a de grande chance que le TCP\IP puisse fonctionner
    Tout dépend ce qu'embarque ton Automate

    L'automate Omron CJ2M gère du "EtherNet/IP Data Link"
    EtherNet/IP est la mise en œuvre du protocole CIP via les protocoles TCP/IP et Ethernet (IEEE 802.3).

    Par dessus le TCP/IP, tu vas devoir créer ton parser de trame CIP pour comprendre ce que dit l'Automate et inversement

    C'est semble-t-il un équivalent du bon vieux ModBus-TCP mais avec une autre norme de trame
    Merci pour la réponse.

    Effectivement, j'ai fait le tour de la question, j'ai trouvé le compo. ModBus, sauf que je n'arrive pas à l'installer peut être à cause de mon installation d'Indy 10 / D6.

    Le partie mémoire à lire dans l'API est de type DM, j'ai trouvé un petit exemple sur le net mais on me demande 1000€ pour les sources.

    Concrètement, pourriez vous m'orienter vers les composants susceptibles de me faire avancer !!!

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 183
    Par défaut
    Bonjour à tous,

    Entre temps, j'ai trouvé 2 solutions pour accéder à l'API (IdUDPClient et Socket), j'ai dû installer un sniffer pour contrôler la sortie RJ45 et comparer les paquets avec un utilitaire qui fonctionne.

    Il me reste un problème à gérer, c'est l'adresse mémoire à lire ou écrire, dans le tableau suivant, les bytes 13 et 14 sont réservés pour l'adresse mémoire (à lire ou écrire).

    Comment je dois gérerl'adresse "D150" par exemple, j'ai essayé de la convertir en bin (16 octets) pour la scinder en 2 ou dire buffer[13] = 1 et buffer[14]=80 en décimal / 50 en hexa ?

    La réponse de l'API est :

    C0.00.02.01.02.00.01.01.00.01. / 01.01.85.01.00.01.

    Aussi, j'ai constaté que la connexion avec Socket ne se fait qu'avec le port 9600 ?

    Merci de votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
         buffer[0]:= Chr ($80);              // (Information Control Field)
         buffer[1]:= Chr ($00);              // Reserved
         buffer[2]:= Chr ($02);              // (Gate Count).  Indicates how many PLCs used as network
         buffer[3]:= Chr ($00);              // (Destination Network Address).
         buffer[4]:= Chr ($02);              // Destination Node)
         buffer[5]:= Chr ($00);              // (Destination Unit).  Set this for 00
         buffer[6]:= Chr ($00);              // (Source Network Address)
         buffer[7]:= Chr ($01);              // Source Node
         buffer[8]:= Chr ($00);              // (Source Unit).  Set this for 00
         buffer[9]:= Chr ($00);              // (Service Identifier) Compteur
         buffer[10]:= Chr ($01);             // FINS command for 'Read'
         buffer[11]:= Chr ($01);             // FINS command for 'Read'
         buffer[12]:= Chr ($82);             // 82 Memoire DM  // B0 Memoir CIO      0101B00064000001
         buffer[13]:= Chr (1);             // The channel number (64 is the HEX of 100).
         buffer[14]:= Chr (80);             // The channel number (64 is the HEX of 100).
         buffer[15]:= Chr ($00);             // bit position, which is always 00 when reading or writing by channel
         buffer[16]:= Chr ($00);             // the number of items to read.
         buffer[17]:= Chr ($01);             // the number of items to read.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 183
    Par défaut
    J'ai trouvé !!!

    Le code (buffer[12]:= $82) permet seulement de traiter les Word en lecture et écriture !!!

    Donc pour revenir à ma valeur de D150, je ne peux pas la traiter avec le code 82, il y a un autre code pour traiter les bytes qui est le 30

    En suite, pour lire avec le code 82, par exemple la valeur de 260, il faut mettre le buffer[13]:= 1 et buffer[14]:= 5

    Cela peut être pourra aider quelqu'un un jour !!!

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lire et envoyer des données dans un automate
    Par orj30754 dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/09/2007, 13h01
  2. Comment lire et envoyer des données dans un automate
    Par orj30754 dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/09/2007, 12h01
  3. Réponses: 15
    Dernier message: 20/06/2007, 10h21
  4. Lire et ecrire des variables dans un fichier texte
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2007, 14h16
  5. Réponses: 9
    Dernier message: 05/04/2005, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo