Bonjour à tous,
Je dois développer une appli Windev qui permette une lecture périodique des entrées d'un automate via Modbus TCP. Je dispose pour cela d'une dll me permettant d'appeler les fonctions de connexion et de lecture ( pp.13 et 18)http://www.wago.com/wagoweb/document...2/m931200e.pdf).
Ma première idée est la suivante :Après avoir établi la connexion Modbus TCP (lors d'un clic sur un bouton Connexion qui appelle la fonction MBTConnect) ,j'appelle une procédure automatique qui toutes les 100 ms lit la valeur d'un bit (procédure lect1() avec les commentaires).
Cette méthode ne fonctionne pas,je récupère à chaque fois dans nLectureregistreentre un code d'erreur indiquant que la connexion a été perdue.
J'ai tenté une autre approche qui consiste à se connecter et se déconnecter à chaque fois qu'on veut réactualiser la valeur d'une entrée (supression des barres de commentaires de lect1()), et là ça fonctionne.
C'est très contraignant de devoir établir une connexion différente pour chaque entrée lue.
Le problème se situe t-il au niveau du handle ?
Ne serait-il pas possible d'établir une connexion une fois pour toutes et de lire périodiquement les entrées désireés ensuite ?
Merci d'avance
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 PROCEDURE lect1()//appeleé toutes les 100ms //nConnect est un entier sur 8 octets //szhostadress est une chaîne sur 100 //nPort est un entier //bUsetcporudp est un booléen //nRequesttimeout est un entier sur 2 octets //szhostadress="192.168.1.4" //nPort=502 //bUsetcporudp=True //nRequesttimeout=1000000 //nConnect=API("MBT.DLL","MBTConnect",&szhostadress,nPort,bUsetcporudp,nRequesttimeout,&nHsocket) nLectureregistrentree est un entier nTabletype est un entier sur 1 octet nAdressedebut est un entier sur 2 octets nNbits est un entier sur 2 octets nPreadbuffer est un entier système DI1 est un booléen nTabletype=1 nAdressedebut=0 nNbits=1 nLectureregistrentree=API("MBT.DLL","MBTReadCoils",nHsocket,nTabletype,nAdressedebut,nNbits,&nPreadbuffer,Null,0) SI nLectureregistrentree=0 ALORS DI1= nPreadbuffer SAI_Saisie1=nPreadbuffer SINON Erreur("erreur lors de la lecture") FIN //API("MBT.DLL","MBTDisconnect",nHsocket)
Partager