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

Automation Discussion :

Beckhoff - Conversion Adresses et Offsets Twincat ADS en Modbus


Sujet :

Automation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut Beckhoff - Conversion Adresses et Offsets Twincat ADS en Modbus
    Bonjour à toutes et tous,

    J'ai un petit soucis de conversion d'adresses.
    J'ai un automate Beckhoff BC9000 avec une carte KL2114 (4 Digital Output), j'ai une solution Twincat System Manager et un code PLC. Jusque là tous va bien.
    Je veux activer les DO via un programme C#.
    Actuellement j'utilise la dll Twincat.Ads.dll, avec celle-ci je peux "écrire" et activer ma DO.
    Je voudrais faire la même chose mais en ModBus.

    Voici une partie du code
    MyObjectTwinCat = new TcAdsClient();
    MyObjectTwinCat.Connect(Serveur, Port);
    ...
    AdsStream ds = new AdsStream(1);
    BinaryWriter bw = new BinaryWriter(ds);
    ds.Position = 0;
    MyObjectTwinCat.Write(0xF031, 0X20, ds);

    Ce que je ne trouve pas, c'est les adresses et offsets correspondants en ModBus, dans ce cas : 0xF031 et 0x20 ET la méthode Write...
    MyObjectModBus.Write...(Adresse + offset, True);
    Avec Write... = WriteSingleRegister ou WriteMultipleCoils ou WriteMultipleRegisters ou WriteSingleCoil ?

    J'espère avoir été clair dans mes explications.

    D'avance un grand merci pour votre aide

    @+ GargouilleBL

  2. #2
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    Mai 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 177
    Points : 265
    Points
    265
    Par défaut
    salut

    ceci devrait te donner les info sur les adresses modbus :
    http://infosys.beckhoff.com/content/...10712971841013

    Citation Envoyé par gargouilleBL Voir le message
    Avec Write... = WriteSingleRegister ou WriteMultipleCoils ou WriteMultipleRegisters ou WriteSingleCoil ?
    le mot Coils désigne une sortie digitales ( %QX dans au iveau de l automate ) donc un booléen , register ce sont les mémoires interne ( %MW ) en format Word(16bits).
    single, multiple si tu écrits/lis 1 ou plusieurs données :p .

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Merci mais non,
    j'ai déjà épluché ce site (https://infosys.beckhoff.com/english...apping.htm&id= , https://infosys.beckhoff.com/english...Ranges.htm&id= ,http://infosys.beckhoff.com/italiano...ersion.htm&id= )
    Et j'en passe.
    Mais rien à faire j'ai beau essayé plusieurs adresses je n'arrive pas a activer les DO
    En fait il faudrait que je modifie la variable %IX128.0 ou %QX0.0 du PLC

    Merci quand même

  4. #4
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    Mai 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 177
    Points : 265
    Points
    265
    Par défaut
    %IX128, je doute que les adresses des entrées puissent être modifiée via modbus.
    tu as essayer d écrire dans la zone mémoire (%MW)?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Non, je n'ai pas essayé.
    Le problème c'est que j'aurais des dizaines de Beckhoff à modifier et que je ne peux pas toucher au code PLC
    Hors pour écrire en %MW je pense que je dois modifier le code PLC.

    Pour info, voici le code PLC (TwinCat_Import)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    VAR_GLOBAL (* DO NOT CHANGE THIS SHEET MANUALLY! *)
        DO1    AT %IX128.0:    BOOL;    (* Signal 1 *)
        DO2    AT %IX130.0:    BOOL;    (* Signal 2 *)
        nDuree    AT %IB132:    UINT;    (* Durée des signaux sur niveau haut *)
        DO3    AT %IX134.0:    BOOL;    (* Signal 3 *)
        DO4    AT %IX136.0:    BOOL;    (* Signal 4 *)
        KL2114_PLC_1_Output    AT %QX0.0:    BOOL;
        KL2114_PLC_2_Output    AT %QX0.1:    BOOL;
        KL2114_PLC_3_Output    AT %QX0.2:    BOOL;
        KL2114_PLC_4_Output    AT %QX0.3:    BOOL;
    END_VAR
    Et le C# attaque les adresses 0xF031, Offset0X20 via ads.
    Sur le Net, je trouve des tableaux ModBus / Twincat mais je trouve comme correspondance: 0xF031 en ADS area = 0x0000 à 0x7FFF en Modbus pour les Digital Outputs et pour les Digital Inputs pareil 0x0000 à 0x7FFF en Modbus mais 0xF021 en ADS area.
    Donc je suis complètement perdu.

    Merci @+

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut %IX128.0:
    sts,
    ça peut pas marcher, les adresses %IX128.0 c'est pas des adresses ModBus
    il faut dans le PLC copier les bits d'entrées / Sorties %IX128.0 dans un mot %MWxxxx
    et en ModBus venir lire ce mot %MWxxxx xxxxx=adresse ModBus

    Ceci dit, la seule chose que tu faire c'est lire l'état des entrées %IX128.0 ou l'état des sorties %QX0.0
    en aucun cas Tu peux écrire sur les entrées ou les sorties car elles sont gérées par le PLC

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Hi,

    Donc si j'ai bien compris on ne peut pas faire en Modbus ce que l'on peut faire via la dll TwinCat, c-à-d : MyObjectTwinCat.Write(0xF031, 0X20, ds); (code qui fonctionne actuellement) ?
    Et de plus, il faut modifier le code PLC, ce que je ne peux pas faire, je ne connais rien aux automates ni au code PLC, et modifier plusieurs dizaines de boîtiers en milieu industriel.

    Tant pis, on va garder cette vielle dll 32 bits.

    Merci quand même
    @+

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut ceci dit
    slts,
    ceci dit, je sais toujours pas ce que tu veux faire ?
    Lire les entrées du PLC ou écrire (commander) les sorties du PLC ?
    ou autre chose ?

    actuellement l'instruction MyObjectTwinCat.Write(0xF031, 0X20, ds); elle fait quoi exactement ???

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Salut

    Tout d'abord merci de prendre un peu de temps pour m'aider.
    En gros j'ai plusieurs Beckhoff BC9000 et BC9100.
    Pour faire simple, j'ai des cartes KL2xxx Relais et d'autre qui active des relais, mais le principe est le même, donc quand je parle d'activer un relais je veux dire "allumer" un des 4 outputs sur la carte
    Sur certains de ceux-ci j'ai des cartes KL1xx4 (IN) et KL2xx4 (OUT) et sur d'autres juste des KL2xx2 ou KL2xx4.
    Le but est d'activer de 1 à 4 relais sur les KLxxx. Pour répondre à ta question, commander les sorties du PLC
    L'instruction MyObjectTwinCat.Write(0xF031, 0X20, ds); active justement ces relais, ds = 1 à 4
    Exemple trouvé sur
    http://infosys.beckhoff.com/espanol.php?content=../content/1034/tcadsnet/html/twincat.ads.setup.htm&id

    N'hésite pas si je n'ai pas été clair ou si il faut d'autre infos
    Et encore merci
    @+

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut entrees ss
    slts,
    Je prends un exemple: Si les sorties sont commandées par le PLC , (par le programme du PLC)
    on ne peut pas les commander via d'autre système,

  11. #11
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    Mai 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 177
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par itasoft Voir le message
    sts,
    ça peut pas marcher, les adresses %IX128.0 c'est pas des adresses ModBus
    il faut dans le PLC copier les bits d'entrées / Sorties %IX128.0 dans un mot %MWxxxx
    et en ModBus venir lire ce mot %MWxxxx xxxxx=adresse ModBus

    Ceci dit, la seule chose que tu faire c'est lire l'état des entrées %IX128.0 ou l'état des sorties %QX0.0
    en aucun cas Tu peux écrire sur les entrées ou les sorties car elles sont gérées par le PLC
    chez beckhoff comme chez wago, les IO sont accessibles via modbus, toutefois pour les sorties il ne faut pas qu'elles soient utilisées dans le programme automate.

    Et le C# attaque les adresses 0xF031, Offset0X20 via ads.
    Sur le Net, je trouve des tableaux ModBus / Twincat mais je trouve comme correspondance: 0xF031 en ADS area = 0x0000 à 0x7FFF en Modbus pour les Digital Outputs et pour les Digital Inputs pareil 0x0000 à 0x7FFF en Modbus mais 0xF021 en ADS area.
    Donc je suis complètement perdu.
    mise a part que 0xF031 n'est pas une adresse, mais l id d'un groupe, l'équivalent en modbus des fonctions, ici l équivalent en modbus de 0xF031 est la fonction 5 (Write Single Coil).
    cf : https://infosys.beckhoff.com/content...48167519721969

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut ecrire
    slts,
    Je sais toujours pas ce qu'il veut faire sur les E/S du PLC
    LOL

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par itasoft Voir le message
    slts,
    Je sais toujours pas ce qu'il veut faire sur les E/S du PLC
    LOL
    Re,
    Je voudrais activer un ou plusieurs Outputs, qui derrière active des relais.
    Exemple sur une carte KL2204, il y a 4 DO et je voudrais pouvoir les passer à True et/ou à False via C#

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par madpo Voir le message
    chez beckhoff comme chez wago, les IO sont accessibles via modbus, toutefois pour les sorties il ne faut pas qu'elles soient utilisées dans le programme automate.

    mise a part que 0xF031 n'est pas une adresse, mais l id d'un groupe, l'équivalent en modbus des fonctions, ici l équivalent en modbus de 0xF031 est la fonction 5 (Write Single Coil).
    cf : https://infosys.beckhoff.com/english..._intro.htm&id=
    C'est exactement ce que je veux faire.
    Sur le Net, j'ai trouvé une dll en libre, nModBus (https://github.com/NModbus4/NModbus4), et avec celle-ci je peux écrire MyObjectModBus.WriteSingleCoil(?????, True) et ce que je cherche c'est l'adresse ?????
    Voir le point 2.11 page 17 ici http://ftp.icpdas.com/pub/cd/8000cd/...al_v1.2_en.pdf, je voudrais savoir quoi mettre dans le coilAdress pour master.WriteSingleCoil(slaveID , coilAddress ,value); pour pouvoir passer à True ou False mes 4 Digital Outputs
    Encore merci pour votre aide, je pense qu'on va finir par y arriver
    @+

  15. #15
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    Mai 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 177
    Points : 265
    Points
    265
    Par défaut
    en théorie qx0.0 c'est l adresse 0x0, donc essaie avec cette dernière.
    si cela ne fonctionne pas essaie la 0x20, bizarrement la com ads a la même plage d'adresse mais qx0.0 est est sur 0x20 d'après tes test.

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut sorties
    slts,
    Si ces sorties sont déjà utilisées dans le programme du PLC , c'est pas possible de les commander par un autre système,
    ou alors ça veut dire que ces 4 sorties ne sont pas déjà utilisées par le PLC,
    c'est ça ?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par madpo Voir le message
    en théorie qx0.0 c'est l adresse 0x0, donc essaie avec cette dernière.
    si cela ne fonctionne pas essaie la 0x20, bizarrement la com ads a la même plage d'adresse mais qx0.0 est est sur 0x20 d'après tes test.
    Salut, j'ai essayer toutes les adresses que j'avais trouvé sur un autre tableau. 0x0000, 0x2000, 0x4000 et 0x8000, me demande pourquoi, surement au pif.
    Par contre j'ai pas essayé 0x20, j'essayerais
    Merci

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par itasoft Voir le message
    slts,
    Si ces sorties sont déjà utilisées dans le programme du PLC , c'est pas possible de les commander par un autre système,
    ou alors ça veut dire que ces 4 sorties ne sont pas déjà utilisées par le PLC,
    c'est ça ?
    Comme je l'ai déjà dit précédemment, je ne connais absolument rien en automate, PLC etc...
    Tous ce que je sais c'est que je reprends un projet existant et que je dois le modifier pour ne plus utiliser les serveurs TwinCat et donc la dll ADS.
    Dans le code existant (avec ADS), on pouvait mettre à True les DO, et je suppose que le PLC est utiliser si non pourquoi y en aurait'il un ?
    De ce que j'ai compris, le code PLC est injecté dans le Beckhoff, Boot Project ou quelque chose comme ça, c'est donc qu'il doit bien servir ?
    Dans l'autre partie du projet, il y a les mêmes boîtiers Beckhoff mais pour une autre utilisation, là ce n'est que de la lecture seule et mon code lit parfaitement.
    Le code PLC, c'est bien des variables non ? Et si j'arrive à lire, je devrais pouvoir écrire.
    Je sais également qu'avec mon BC9000 de test, j'ai du "mapper" les variables avec TwinCat System Manager puis après que l'on en avait plus besoin, il ne servait qu'une fois pour faire la liaison des données.
    Est-ce pareil avec le PLC ?
    Lorsque la solution TwinCat est en mode Run et le PLC aussi en Run, si je force la variable à 1 via Twincat System Manager, la variable dans le PLC passe à True et la led sur la carte KL2114 s'allume.
    Voilà tous ce que je peux dire malheureusement mes connaissances s'arrête là en ce qui concerne l'automation.
    Merci encore pour l'aide apportée,
    @+

  19. #19
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    Mai 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 177
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par gargouilleBL Voir le message
    Salut, j'ai essayer toutes les adresses que j'avais trouvé sur un autre tableau. 0x0000, 0x2000, 0x4000 et 0x8000, me demande pourquoi, surement au pif.
    ce sont des offset "standard"

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut reflechir
    slts,
    tu as le listing du programme du PLC pour voir comment sont gérées ces sorties ?

Discussions similaires

  1. [Excel] Conversion adresse cellule - indices de tableau
    Par Invité dans le forum Téléchargez
    Réponses: 0
    Dernier message: 30/07/2013, 18h54
  2. Réponses: 0
    Dernier message: 17/10/2011, 22h00
  3. Conversion adresse/longitude latitude
    Par Alex06 dans le forum 4D
    Réponses: 8
    Dernier message: 20/07/2010, 15h28
  4. Problème de conversion adresse IP en HostName
    Par GhostDady dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/05/2009, 00h45
  5. Adresse de bloc - Conversion hexadecimal en numerique
    Par thomasjcj dans le forum Oracle
    Réponses: 4
    Dernier message: 07/10/2005, 16h56

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