Scripts VBS

Écrit par Jean-Pierre le .

Scripts VBS

C'est quoi VBS ?

VBS ou VBScipt signifie Visual Basic Scripting Edition. Ce langage, créé par Microsoft, est un sous-ensemble de Visual Basic (VB pour les intimes).

VBS permet de créer des petits programmes (scripts) qui sont éxécutables, comme des programmes comportant l'extension ".exe".

Certains logiciels de pilotage astronomique (MaximDL, Prism, SGP, ...) permettent de lancer des scripts VBS.

 

Pourquoi écrire des scripts VBS?

 Un script VBS permet de lancer une ou plusieurs des actions qu'un logiciel du marché n'intègre pas directement.

Certes, les logiciels astro font déjà beaucoup de choses, notamment à l'aide de divers ASCOM, mais tous les besoins personnels ne peuvent être intégrés dans chacun de ces logiciels.

C'est pour cette raison qu'il est possible de lancer (automatiser) une action, ou un enchainement d'actions complémentaires via des scripts VBS.

Pour l'automatisation de mon abri télescope, j'exploite un IPX800 V3 à l'aide de scripts VBS. Mais d'autres cartes relais peuvent être également pilotées par des scripts VBS.

La difficulté principale est de trouver les commandes qui permettent d'effectur une action sur un équipement. Et là, les notices des fabricants ne sont pas toujours très explicites !

Tout équipement dont on connait les commandes de pilotage peut être piloté par un script VBS.

Il est ainsi possible de lancer des actions au niveau :

  • De l'ordinateur : créer un dossier, mettre à l'arrêt l'ordinateur, ... Exemple : à la fin d'une séquence d'acquisition et après mise en position park de la monture, il est possible d'arrêter l'ordinateur.
  • De la monture de télescope : mettre le télescope dans une position particulière, par exemple pour réaliser les flats.
  • D'une carte relais : j'utilise une carte relais type IPX800. Il est possible de commuter n'importe quel relais ou de tester l'état d'une entrée. Exemple : allumer ou éteindre le panneau flat, mettre en service ou arrêter l'alimentation des accessoires (caméra, focuseur, ...).
  • Du lancement d'un programme (un éxécutable) avec transmission de paramètres.

 

Structure des scripts VBS

Comme dit plus haut un script VBS contient un certain nombre de lignes de commandes écrites en Visual basic.

Pour créer un script VBS, il faut un éditeur de texte (bloc-notes ou autre) afin de saisir les lignes de commande.

Il faut sauvegarder le texte au format text, c'est à dire avec l'extention ".txt".

Comme le script VBS est rédigé à l'aide d'un simple éditeur de texte, il n'y a pas de vérification de la syntaxe. Attention à la saisie des différentes commandes et paramètres.

Pour rendre éxécutable ce script VBS, il faut remplacer l'extension ".txt" par ".vbs". A ce moment, un message demande de confirmer le changement d'extension. Il faut confirmer ce changement.

A ce stade, le script VBS est exécutable. Cela signifie que si on fait un double-clic sur l'icône du script, les actions qui y sont contenues sont directement exécutées.

En cas d'erreur de syntaxe ou de commande sur une ligne du script, un message d'erreur apparait en donnant le numéro de la ligne ou se situe le problème.

Pour éditer le script qui porte dorénavant l'extension ".vbs", faire un clic droit de la souris sur l'icône du script et sélectionner l'option "Ouvrir avec", sélectionner l'éditeur de texte de votre choix.

Lors de l'enregistrement, l'extension ".vbs" est conservée.

  

Quelques exemples de scripts VBS?

 Concernant les exemples ci-dessous, il suffit de copier le texte et de le coller dans un document texte vièrge.

Arrêter l'ordinateur 

Code Commentaires
Dim oShell
Set oShell = CreateObject("WScript.Shell")
oShell.run ("shutdown -s -f -t 5") 

Paramètres de la fonction shutdown :

-s est la commande qui permet d'arrêter l'ordinateur.

-f force la fermeture des applications encore en service. Si ce terme n'est pas utilisé et si des programmes sont encore en services, l'ordinateur restera en service.

t5 est une temporisation avant la séquence de mise à l'arrêt. La valeur est exprimée en secondes.

oShell.run permet de lancer la commande

  

 Actionner la monture du télescope

Personnellement, j'utilise une monture GM2000HPS de chez 10Micron. Pour envoyer des commandes à la monture, un astronome amateur suédois (Per Frejvall) à créer un programme qui se nomme "Mountsend".

La vocation de cette application est de traduire des commandes simples au format que comprend le logiciel interne de la monture. De plus, il est possible de transmettre des paramètres à la monture. 

Code Commentaires
Dim oShell
Set oShell = CreateObject("WScript.Shell")
oShell.run ("C:\mountsend\mountsend.exe 192.168.1.56 move 180 30")

Le script permet de lancer l'application mountsend.exe qui se trouve dans le répertoire "C:\mountsend\"

Au lancement de l'application mountsend, les paramètres de l'action à réaliser sont précisés :

n° d'IP de la monture

Commande "move" permettant de positionner la monture en AZ

180 30 sont les valeurs  d'azimut et de hauteur.

  

Actionner un relais de l'IPX800 V3

L'IPX800 me permet d'alimenter les équipements connexes de l'abri (panneau flat, caméra CCD, focuseur, ventilateur télescope, résistances de dégivrage, ...).

Il me permet également de précéder au démarrage de la monture GM2000.

Cette monture est équipée d'une alimentation électrique 24V et il ne suffit pas de mettre en service l'alimentation pour que la monture se mette en service.

L'électronique de commande est conçue sur la base d'un micro-ordinateur. Le fonctionnement est comparable à un ordinateur. il faut appuyer sur un bouton poussoir situé sur le boitier de commande pour la mettre en route.

Fort heureusement, lorsqu'on est pas physiquement à coté de la monture, il est possible de la mettre en marche à distance.

Le boitier de gestion de la monture est équipée d'un connecteur jack.

Il suffit de mettre en contact brièvement les 2 fils du jack (on simule l'appui sur le bouton poussoir) et la monture démarre.

Comme je disais un peu plus haut, le plus délicat est de disposer des lignes de commande de l'appareil à piloter (l'IPX800 dans ce cas) afin d'envoyer les bonnes commandes.

Dans le cas de l'IPX800, il y a plusieurs documents, qui ne sont pas très clairs et dont les informations ne sont pas très cohérentes.

Ce qu'il faut retenir pour activer un relais, c'est la commande preset.htm?ledx=1 ou 0

En clair :

  • "IPX800_V3" doit être remplacé par l'adresse IP de l'IPX.
  • "ledx" permet de définir le numéro du realis (entre 1 et 8 pour un IPX seul). Il est possible de rajouter des modules à 8 relais (X880), ce qui fait que le numéro de relais est compris entre 1 et 32.
  • "= 1 ou 0" est l'état attendu du relais. 1 pour activer le relais et 0 pour le désactiver.

Dans le cas d'un relais pour lequel une valeur de temporisation a été saisie. La commande "ledx" est remplacée par "RLYx". RLY doit être impérativement écrit en majuscules.

Code Commentaires

aURL = "http://192.168.1.52/preset.htm?led5=1"
Set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Call aXMLHTTP.Open("GET", aURL, False)
Call aXMLHTTP.send
Set aXMLHTTP = Nothing

Pour un relais équipé d'une temporisation, le script est :

aURL = "http://192.168.1.52/preset.htm?RLY5=1"
Set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Call aXMLHTTP.Open("GET", aURL, False)
Call aXMLHTTP.send
Set aXMLHTTP = Nothing

Ce script permet d'activer le relais n°5 (led5=1).

 

 

 

Le relais 4 est activé. Il sera désactivé en fonction de la temporisation saisie directement dans l'IPX.

 

Enclencher plusieurs actions

Dans l'exemple qui suit, plusieurs actions sont lancées en série.

Dans ce script, on active le relais 5 équipé d'une temporisation (ex : commande par impulsion de la fermeture du toit de l'abri), puis on coupe le relais 4 (ex : coupure alimentation APN). Pour terminer, on arrête l'ordinateur.

 

Code Commentaires

Dim aXMLHTTP, aURL, WshShella
aURL = "http://192.168.1.13/preset.htm?RLY5=1"
Set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Call aXMLHTTP.Open("GET", aURL, False)
Call aXMLHTTP.send
Set aXMLHTTP = Nothing
wscript.sleep 1000
aURL = "http://192.168.1.13/preset.htm?led4=0"
Set aXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Call aXMLHTTP.Open("GET", aURL, False)
Call aXMLHTTP.send
Set aXMLHTTP = Nothing
wscript.sleep 10000
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("shutdown -s -t 0")

La ligne "wscript.sleep 1000" permet d'effectuer une temporisation.

La valeur est exprimée en millisecondes.

"wscript.sleep 1000" génère une temporisation de 1 seconde.