none
Automates Siemens S7 - librairie libnodave.net.dll RRS feed

  • Question

  • Bonjour,

    Je suis actuellement en déplacement afin de réaliser un développement sur place.
    Après avoir perdu du temps afin d'avoir le strict minimum d'outils pour pouvoir travailler, j'ai finalement pu me procurer (sur internet) les fichiers libnodave.dll et libnodave.net.dll
    J'ai ajouté le fichier libnodave.dll dans c:\Windows\System32 et j'ai ajouté dans mon projet la librairie libnodave.net.dll

    Dans mon projet, je dois me connecter sur l'un des 2 automates présents sur place, je connais leurs adresses ip, le numéro rack (dans mon cas, 0) et le slot (qui est de 3)

    J'ai voulu faire un test de connexion et récupération d'une donnée à l'aide du code suivant :

           public static libnodave.daveOSserialType fds; 
            public static libnodave.daveInterface di; 
            public static libnodave.daveConnection dc; 
            public static int res;
            public static byte plcValue; 
            public static int memoryRes; 
            public static byte[] memoryBuffer = new byte[16]; 
     
            public static void connectTo()
            {
                //fds.rfd = libnodave.openSocket(0, "192.168.X.X"); 
                fds.rfd = libnodave.openSocket(102, "192.168.X.X"); 
     
                fds.wfd = fds.rfd;
                di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
                res = di.initAdapter();
                dc = new libnodave.daveConnection(di, 0, 0, 3);
                res = dc.connectPLC();
                if (res==-1)
                {
                    System.Windows.Forms.MessageBox.Show("Erreur de connexion");
                }
                else
                {
                //memoryRes = dc.readBytes(libnodave.daveFlags, 0, 0, 1, memoryBuffer); 
                memoryRes = dc.readBytes(libnodave.daveFlags, 172, 0, 1, memoryBuffer); 
                plcValue = memoryBuffer[0]; 
                }
     
                dc.disconnectPLC(); 
                di.disconnectAdapter(); 
                libnodave.closePort(fds.rfd);

    Je me suis inspiré du code présent sur cette page.

    Concernant les informations complémentaires que je pourrais apporter, concernant la méthode readBytes :
    - j'interroge la db 172 afin de connaitre la quantité, ainsi que la disponibilité (cela se fait en traduisant en hexadécimal la valeur de la variable plcValue, pour moi, le numéro de db se fait à l'aide du second paramètre de la méthode), lé numéro de DW va de 1 à 17 (pour l'instant, je ne sais pas comment donner cette information, je dirais que chaque position se retrouve dans la variable memoryBuffer).

    Pour l'instant, je ne connais pas le numéro de port à utiliser, de ce fait, la connexion ne peut pas se faire.
    Est-ce que l'un de vous serait assez affuté sur le sujet pour me guider?

    Merci

    mercredi 8 juin 2016 09:13

Réponses

  • Bonjour, un petit retour pour dire que j'étais tellement déçu de voir que ça ne marchait pas que j'ai fini par utiliser une autre librairie, la librairie S7.Net, plus simple à utiliser.

    Là aussi,  je rencontrais des problèmes de connexion, au final, je me suis rendu compte que mon pc n'avait pas les droits de se connecter sur le réseau des automates

    mercredi 27 juillet 2016 14:16

Toutes les réponses

  • Bonjour Romulus001,

    Pour l'instant, je ne connais pas le numéro de port à utiliser, de ce fait, la connexion ne peut pas se faire.

    Essayez avec le port 102 et passez en deuxième paramètre IPcodée.GetBytes("192.168.X.X").

    UTF8Encoding IPcodee = new UTF8Encoding();
    fds.rfd = libnodave.openSocket(102, IPcodee.GetBytes("192.168.X.X"));


    Cordialement,
    Dimitar

    jeudi 9 juin 2016 09:07
    Modérateur
  • Bonjour, j'ai pensé à faire un balayage des ports (de 1 à 9999), j'ai trouvé le port 25.

    Le second paramètre ne peut pas être utilsé car il n'est pas de type string, je connais les adresses ip, pour des soucis de sécurité, j'ai préféré les cacher sur ce forum.

    Cependant,impossible de me connecter au PLC :

    - Quand je me sers du protocole UserTransport, la connexion marche mais en lisant une donnée, mon programme a droit à un joli plantage.

    - Quand je me sers des protocoles ISOTCP ou MPI, la connexion ne se fait pas...

    Sur d'autres forum, on me demande d'avoir un serveur OPC, j'ai installé la version gratuite de TwinCat 2 OPC Server, version 4.1.94

    jeudi 9 juin 2016 09:33
  • Bonjour, un petit retour pour dire que j'étais tellement déçu de voir que ça ne marchait pas que j'ai fini par utiliser une autre librairie, la librairie S7.Net, plus simple à utiliser.

    Là aussi,  je rencontrais des problèmes de connexion, au final, je me suis rendu compte que mon pc n'avait pas les droits de se connecter sur le réseau des automates

    mercredi 27 juillet 2016 14:16