As-tu écris au moins une ligne de code a partir des indications qu'on t'a fourni ?
Si tu connais déjà les échanges à produire, il ne devrait plus y avoir de difficulté ; il faut juste valider que ça fonctionne.
As-tu écris au moins une ligne de code a partir des indications qu'on t'a fourni ?
Si tu connais déjà les échanges à produire, il ne devrait plus y avoir de difficulté ; il faut juste valider que ça fonctionne.
du code bien sur le voila :
Et maintenant il faut avoir des compétence en modbus et des notions sur le fonctionnement d'un automate pour pouvoir m'aider...
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 <html> <head> <title>Trame de Lecture </title> </head> <body> <h1> OUVRAGE 5 POMPES </h1> <p> requete lecture de mot dans l'automate :</p> <?php error_reporting(E_ALL); // Cette fonction dit à PHP d'afficher presque toutes les erreurs. //Temps maximum d'exécution de la page en sec set_time_limit(1); //Création de ma "passerelle de com" -> socket TCP/IP $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) // La fonction "socket_strerror()" permet d'afficher les différentes erreurs possibles liées à la socket echo "socket_create() a échoué : raison : " . socket_strerror ($socket) . "<br />"; else echo "OK.<br />"; //définition adresse IP automate pour s'y connecter, et du port de com $addresse = '192.168.1.82'; $port = 502; //Connexion de la socket socket_connect ( $socket , $addresse , $port ); echo "Essai de connexion à $adresse sur le port '$port'..."; $ResultConnex = socket_connect($socket, $adresse, $port); if ($ResultConnex < 0) echo "socket_connect() a échoué : raison : ($ResultConnex) " . socket_strerror($ResultConnex) . "<br />"; else echo "OK.<br />"; //definition du type des variables du tableau $trame[0] = chr(0); $trame[1] = chr(0); $trame[2] = chr(0); $trame[3] = chr(0); $trame[4] = chr(0); $trame[5] = chr(6); // longueur donnée ModBus; nombre d'octets qui suivent $trame[6] = chr(255); // numéro de l'esclave $trame[7] = chr(3); // code fonction : 3 = demande de lecture $trame[8] = chr(0); // numéro/adresse du premier mot à lire (PF) $trame[9] = chr(100); // numéro/adresse du premier mot à lire (Pf) $trame[10] = chr(0); // nombre de mots à lire (PF) $trame[11] = chr(3); // nombre de mots à lire (Pf) //création de mon tableau de trame de lecture $lecture = array($trame[0], $trame[1], $trame[2], $trame[3], $trame[4], $trame[5], $trame[6], $trame[7], $trame[8], $trame[9], $trame[10], $trame[11]); $RepLecture = ''; // Envoie de la trame de la lecture // La fonction "socket_write()" permet d'écrire le message qu'on veut envoyer dans la socket echo "Envoi de la requête ..."; socket_write($socket, $lecture, strlen($lecture)); echo "OK"."<br />"; /*// on met en écoute la socket en attendant le traitement de la trame par l'automate $ecoute = socket_listen($socket); if(($ecoute = socket_listen($socket)) === true) echo "L'écoute de la socket OK"."<br /><br />";*/ // on lit la réponse que notre automate a généré echo "Lecture de la réponse "."<br /><br />"; // "2048" est la longueur maximum de la réponse. while ($RepLecture = socket_read($socket, 2048)) echo $RepLecture; //Fermeture du serveur socket_close($socket); ?> </body> </html>.
C'est pourquoi j'avais créé un post...car ce n'est polus vraiment le sujet
Si ton code fonctionne, que tu arrives bien a avoir des envoies/réponses depuis et vers ton automate, as-tu encore un problème PHP ?
Oui j'ai encore des problèmes car lorsque j'exécute mon programme via wamp, la page reste bloqué en chargement, donc je sais pas vraiment ce qu'il se passe...
Ensuite via un autre PC j'analyse les echanges sur le réseau (avec wireshark), et il y a bien des envoies de mon PC et un retour de l'automate; mais au lieu d'avoir juste un échange il y en a plusieurs...moi je n'en veux qu'un seul.
Donc je ne sais pas si mon programme est bien conçu; et j'en suis quasi persuadé.
Enfin, étant donnée que je ne travail plus du tout avec dreamweaver, mais désormais avec notepadd++ et wampserver 2 ; comment fait on pour que le code que je vous ai donné s'exécute seulement lorsque je clique sur un bouton (besoin du code pour créer le bouton etc...).
Tu peux faire un bouton de formulaire qui renvoit vers la meme page.comment fait on pour que le code que je vous ai donné s'exécute seulement lorsque je clique sur un bouton
Ton code est alors conditionné par l'existance de ton bouton dans $_POST
Mais sinon le code n'est de toute facon executé que lorsque tu appelles ta page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (isset($_POST['ton_bouton'])) {
Par contre tu as mis une limite de temps de 1s ; c'est surement un peu faible.
Ok merci...mais je viens de mettre d'insérer ton code, mais le problème c'est que le bouton n'est pas créé, et du coup quand j'exécute ma page rien ne se passe (logique).
Donc comment on crée ce fameux bouton?
C'est du HTML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <form action="" method="post"> <input type="submit" name="ton_bouton" /> </form>
j'ai tout comme tu m'as dit mais, malheureusement, ça ne marche pas...
(PS: je l'ai intégré au bon endroit; dans le head).
Peut tu l'intégrer dans le code que j'ai donné stp
Merci
Bonjour,
Cette discussion est un peu vieille mais avez-vous réussi à discuter avec le Twido en PHP ?
J'ai un Twido à la maison et j'aimerai bien pouvoir lire ses variables à distance.
Merci.
Partager