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 :
Code C# : 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
20
21
22
23
24
25
26
27
28
29
30
31
32 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(102, "192.168.X.X"); fds.rfd = libnodave.openSocket(0, "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
EDIT : en faisant un balayage des numéros de port (de 1 à 9999 à l'aide d'une boucle), j'ai pu trouver le bon port.
Par contre, je bloque à ce passage :
où res prend la valeur -1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dc = new libnodave.daveConnection(di, 0, 0, 3); res = dc.ConnectPLC();
D'après cette page, il faut que res prenne la valeur 0 ... je suis paumé là, alors qu'on m'a donné les bons paramètres rack et slot ....
Partager