Bonjour à tous
Je me permets de vous solliciter car j’ai un problème que je n’arrive pas à résoudre, et je ne sais même pas comment faire les recherches compte-tenu de l’étrangeté du phénomène.
Bref, j’utilise différentes cartes relais connectées en Ethernet dans le cadre d’une installation d’acquisition de photographies astronomiques. Les relais, qui servent à alimenter certains équipements sont soit activés manuellement (ex : je mets en service les équipements) à l’aide d’un programme que j’ai développé en VB.Net, soit par le biais de scripts VBS qui sont déclenchés par un programme d’acquisition de photographie astronomique (ex : les équipements sont progressivement mis hors tension en fin de session).
Pour les différentes cartes relais, la commutation de chaque relais s’effectue par l’envoi d’une commande spécifique html. Les différentes cartes que j'utilise, les programmes rédigés en VB.Net, ainsi que les scripts VBS fonctionnent sans problème.
C’est avec la dernière carte acquise que je rencontre un soucis. Cette carte (tout comme les autres) se pilote à l’aide de commande qui est constituée du n° d’IP de la carte, du n° de port d’entrée et d’une commande qui permet la commutation des relais (00 active le relais n°1, 01 le désactive, 02 active le relais n° 2 et ainsi de suite jusqu'aux 16 relais disponibles).
Une commande se traduit de la sorte : http://192.168.1.4/30000/02 et dans ce cas, le relais 2 s’active.
Cela se traduit par le programme suivant. En fait, dans un objectif d’optimisation du code, chaque bouton fait appel à une routine unique à laquelle j’envoie les ordres (relais à commuter, activation ou désactivation). Dans un but de simplification de l’exemple donné, j’ai tout regroupé sous l’appel du bouton.
J’en viens enfin au problème qui se pose. Après lancement du programme, je clique sur le bouton et le relais s’active bien. Après un 2ème clic, le relais se désactive. Mais à partir de ce moment, plus aucun clic sur le bouton ne produit d’effet. Plus rien ne se passe au niveau du relais ! Si je trace le déroulement du programme, toutes les lignes afférentes au bouton sont bien parcourues et conformément à leur enclenchement. Ce n’est donc pas un bête problème de flag qui aurait une valeur erronée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Rel2_Button_Click(sender As System.Object, e As System.EventArgs) Handles Rel2_Button.Click If V_Rel2 = 1 Then ' Le relais n'est pas activé (nota : les entrées sont inversées sur cette carte) aURL = "http://192.168.1.4/30000/02" ' Cde pour activer le relais V_Rel2 = 0 ' on met le flag du relais à 0 (relais activé) Else aURL = "http://192.168.1.4/30000/03" ' Cde pour désactiver le relais V_Rel2 = 1 ' on met le flag du relais à 1 (relais désactivé) End If aXMLHTTP = CreateObject("MSXML2.XMLHTTP") Call aXMLHTTP.Open("GET", aURL, False) Call aXMLHTTP.send() End Sub
Il y a également une commande qui permet de récupérer l'état des relais. Cette commande fonctionne également une fois et puis plus rien !
Je rappelle que les autres cartes que j’ai actuellement fonctionnent sur le même principe et sans problème.
Elément de diagnostic supplémentaire : comme dit plus haut, j’ai également des scripts VBS (qui sont une copie quasi conforme du bout de programme ci-dessus) qui permettent le déclenchement des relais par un logiciel tiers. Exemple qui permet d’activer le relais 2 :
Un autre script, identique à celui-ci, comporte la ligne qui permet de désactiver le relais (aURL = "http://192.168.1.4/30000/03*»).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim aXMLHTTP, aURL aURL = "http://192.168.1.4/30000/02*» Set aXMLHTTP = CreateObject("MSXML2.XMLHTTP") Call aXMLHTTP.Open("GET", aURL, False) Call aXMLHTTP.send Set aXMLHTTP = Nothing
En lançant chaque script à tour de rôle, les commutations du relais se font correctement, y compris si je le fais plusieurs fois de suite. J’en déduis qu’il n’y a pas de problème avec la carte en elle même, aucun blocage de son coté.
Voilà, j’espère que vous pourrez m’aider dans la quête de la solution. J’ai bien une solution qui me permet de contourner le problème, en utilisant exclusivement des scripts VBS, mais je vais y faire référence dans une autre discussion car j’ai également un petit soucis.
Mais vous l’avez compris, je privilégie le bon fonctionnement de mon programme plutôt que d’utiliser des moyens palliatifs.
Merci à vous
Partager