Client ASCOM avec VS

Michel Llibre - Novembre 2024

Table des matières

1 Préliminaires

2 Ecriture d'une application cliente ASCOM

2.1 Sortie infos AM5

3 Utilitaires de la classe ASCOM.Utilities.Util

3.1 Jours juliens et dates

3.2 Degrés décimaux To String

3.3 Heures Décimales To String

3.4 String To Degrés décimaux ou Heures décimales

3.5 WAIT

 

1 Préliminaires

Sites de téléchargement pour les outils utilisés :

 

La plateforme Ascom est installé dans :

C:\Program Files (x86)\ASCOM\Platform 6

Les outils de développement sont ici :

C:\Program Files (x86)\ASCOM\Platform 6 Developer Components

et la documentation est ici :

C:\Program Files (x86)\ASCOM\Platform 6 Developer Components\Developer Documentation

 

2 Ecriture d'une application cliente c# ASCOM

Pour pouvoir inclure les bibliothèques ASCOM dans le projet, on doit faire un projet C# pour Windows de type ".Net Framework", et non pas ".Net Core" qui ne permet pas d'inclure les Assemblys ASCOM.

On peut donc créer un projet "Windows Console" ou "Windows Forms" et ensuite dans l'Explorateur de Solution de VS, il faut aller dans les Properties du Projet, rubrique Références, faire un clic droit "Ajouter une référence..." et dans la fenêtre qui s'ouvre choisir Assemblys puis Extensions et sélectionner les extensions souhaitées ce qui permettra à l'auto-compléteur de proposer les éléments disponibles. Les 3 principales références à ajouter sont :

Si dans Visual Studio on a installé l'extension "Plateforme ASCOM" par le biais du menu  Extensions/Gérer les extensions/..., cette extension offre des patrons prédéfinis pour créer des applications C# Console ou WinForms avec les références aux bibliothèques ASCOM déja intégrées. Le menu créer un nouveau projet prose alors les 3 patrons suivants :

Le problème est que ces patrons sont prédéfinis pour tester un driver de périphérique, ce qui fait qu'il faut en choisir un : Camera, Focuser, Telescope... puis fournir son nom du genre ASCOM.nom.perif   perif = Camera ou Focuser ou Telescope... et nom est le nom du périphérique. Si on ne connait pas le nom, on peut mettre n'importe quoi ou bien si on veut vraiment accéder à un périphérique existant : lancer l'application ASCOM Diagnostics, choisir l'onglet Choose Device puis Choose and Connect Device, sélectionner le type de périf (Telescope, Camera, Focuser...) puis appuyer sur le bouton Choose qui ouvre l'utilitaire Chooser d'ASCOM dans lequel il y a la liste des éléments accessibles. On en choisit un ce qui va provoquer l'affichage du nom recherché (du type  ASCOM.lenom.perif) dans la fenêtre de l'appli Diagnostif sous le nom du périphérique, en face du bouton Connect. C'est ce nom qu'on fournira.

Pour essayer tester la mini-application suivante :

#define UseChooser //Pour utiliser l'ASCOM Chooser au lieu du nom rentré à la configuration

using System;

namespace ASCOM { class Program { static void Main(string[] args) {

// Appel du Chooser ASCOM

#if UseChooser

    string idname = ASCOM.DriverAccess.Telescope.Choose("");

    if (string.IsNullOrEmpty(idname)) return;

// Création de l'instance de pépriphérique

    ASCOM.DriverAccess.Telescope perif = new ASCOM.DriverAccess.Telescope(id);

#else

    ASCOM.DriverAccess.Telescope device = new ASCOM.DriverAccess.Telescope("ASCOM.ASCOM.toto.Telescop.Telescope");

#endif

    device.Connected = true; //Connexion au périphérique

    Console.WriteLine($"Name: {perif .Name}");

    Console.WriteLine($"Description: {perif .Description}");

    Console.WriteLine($"DriverInfo: {perif .DriverInfo}");

    device.Connected = false; //Déconnexion du périphérique

    Console.WriteLine("Press Enter to finish"); Console.ReadLine();

}}}

2.1 Sortie infos AM5

Une application un peu plus fournie, donne les infos suivantes sur la monture Zwo AM5 :

 

 

Connected to         = ASCOM.ASIMount.Telescope

DRIVER

    DriverInfo       = ASCOM.ASIMount.Telescope, Version=6.5.8.0, Culture=neutral, PublicKeyToken=5a596dde3293c610

    DriverVersion    = 6.5.8.0

    InterfaceVersion = 3

    Description      = ASI Mount

    Name             = AM5

TYPE

    SupportedActions :

    AlignmentMode   = algGermanPolar

SiteLatitude        = 43.5130555555556

SiteLongitude       = 1.5575

CAPACITES

    CanFindHome              = True

    CanPark                  = False

    CanPulseGuide            = True

    CanSetDeclinationRate    = False

    CanSetGuideRates         = True

    CanSetPark               = False

    CanSetPierSide           = False

    CanSetRightAscensionRate = False

    CanSetTracking           = True

    CanSlew                  = True

    CanSlewAltAz             = False

    CanSlewAltAzAsync        = False

    CanSlewAsync             = True

    CanSync                  = True

    CanSyncAltAz             = False

    CanUnpark                = False

    CanMoveAxis(premier)     = True

    CanMoveAxis(second)      = True

    CanMoveAxis(ter)         = False

 AxisRates

    Il y a 1 rates en AD axe 0)

      Max=6°/s,  Min=0°/s

    Il y a 1 rates en DEC (axe 1)

      Max=6°/s,  Min=0°/s

    Il y a 0 rates sur axe tertiaire (2)

 TrackingRates

  DriveRate = driveSidereal

  DriveRate = driveLunar

  DriveRate = driveSolar

PARAMETRES DEPLACEMENTS

    Current LST = 06:34:48

    Current RA  = 12:11:32

    Current DEC = 90° 00' 00"

    CanSetTracking = True

     T.Tracking vaut : on.

  On met T.Tracking sur off...

     T.Tracking vaut : off.

  Attente 5 secondes...

  On met T.Tracking sur on...

     T.Tracking vaut : on.

PARAMETRES SITE

    Latitude  = 43° 30' 47"

    Longitude = 01° 33' 27"

 

 

 

 

 

 

 

 

3 Utilitaires de la classe ASCOM.Utilities.Util

3.1 Jours juliens et dates

DateTime date = DateJulianToLocal(double ju) // ju -> date en temps local

 

DateTime date = DateJulianToUTC(double ju) // ju -> date en temps UTC

 

double ju = DateLocalToJulian(DateTime localDate) // date locale -> ju

 

DateTime dateTU = DateLocalToUTC(DateTime LocalDate) // date locale -> dateTU

 

double ju = DateUTCToJulian(DateTime dateTU) //  dateTU -> ju

 

public DateTime date = DateUTCToLocal(DateTime dateTU) // dateTU -> date locale

3.2 Degrés décimaux To String

string DegreesToDM(double degdec)

string DegreesToDM( double  degdec, string DegDelim)

string DegreesToDM( double  degdec, string DegDelim, string MinDelim)

string DegreesToDM( double  degdec, string DegDelim, string MinDelim, int MinDecimalDigits)

--

string DegreesToDMS(double  degdec)

...

string DegreesToDMS(double Degrees, string DegDelim, string MinDelim, string SecDelim, int SecDecimalDigits)

 

 IDEM avec DegeesToHM et HMS

3.3 Heures Décimales To String

string HoursToHM(double Hours)

string HoursToHM(double Hours, string HrsDelim)

string HoursToHM(double Hours, string HrsDelim, string MinDelim)

string HoursToHM(double Hours, string HrsDelim, string MinDelim, int MinDecimalDigits)

string HoursToHMS(double Hours)

...

string HoursToHMS(double Hours, string HrsDelim, string MinDelim, string SecDelim, int SecDecimalDigits)

3.4 String To Degrés décimaux ou Heures décimales

double degdec = DMSToDegrees(string DMS)

double hourdec = HMSToDegrees(string HMS)

double hourdec = HMSToHours(string HMS)

3.5 WAIT

void WaitForMilliseconds(int Milliseconds)