La librairie Yoctopuce sous forme d'Assembly .NET

La librairie Yoctopuce sous forme d'Assembly .NET

La façon la plus courante d'utiliser des modules Yoctopuce dans une application consiste à intégrer notre librairie dans le code source de l'application, de sorte à pouvoir interagir avec les modules à travers une interface orientée objets simple et efficace. Mais pour les cas où une intégration en code source n'est pas possible, nous avons aujourd'hui une nouvelle solution à vous proposer: une librairie dynamique sous forme d'Assembly .NET.


Un Assembly .NET permet de partager un ensemble de classes précompilées pour offrir un service, en annonçant des points d'entrées qui peuvent être utilisés par des applications tierces. Dans notre cas, c'est toute la librairie Yoctopuce qui est disponible dans l'Assembly .NET, de sorte à pouvoir être utilisée dans n'importe quel environnement qui supporte le chargement dynamique d'Assembly .NET.

Pour ne rien vous cacher, notre premier objectif pour cet Assembly était de permettre l'utilisation des modules Yoctopuce dans LabVIEW, qui permet justement le chargement d'Assembly .NET. C'est grâce à cela que nous pouvons vous offrir depuis peu une librairie Yoctopuce complète pour LabVIEW.

Mais LabVIEW n'est pas le seul environnement tiers qui peut profiter de cette technologie. Vous pourrez aussi l'utiliser par exemple avec MATLAB, WINDEV ou même le PowerShell de Microsoft. C'est pourquoi nous avons décidé de documenter cette "librairie" pour elle-même, afin de faciliter sa réutilisation. Vous pouvez désormais la télécharger sur notre page de librairies, de même que sa documentation, dans le même format HTML interactif que les autres librairies.

Contenu de l'Assembly .NET


La librairie Yoctopuce sous forme d'Assembly .NET ne contient pas uniquement la librairie Yoctopuce standard pour C#, car cela n'aurait pas permis une utilisation optimale dans tous les environnements. En effet, on ne peut pas attendre forcément des applications hôtes d'offrir un système de threads ou de callbacks, pourtant très utiles pour la gestion du plug-and-play et des capteurs à taux de rafraîchissements élevé. De même, on ne peut pas attendre des applications externes un comportement transparent dans le cas où un appel de fonction dans l'Assembly cause un délai en raison de communication réseau.

Nous y avons donc ajouté une surcouche, appelée librairie .NET Proxy. Cette surcouche offre une interface très similaire à la librairie standard mais un peu simplifiée, car elle gère en interne tous les mécanismes de callbacks. A la place, cette librairie offre des objets miroirs, appelés Proxys, qui publient par le biais de Propriétés les principaux attributs des fonctions Yoctopuce tels que la mesure courante, les paramètres de configuration, l'état, etc.

Architecture de l'Assembly .NET
Architecture de l'Assembly .NET


Les propriétés des objets Proxys sont automatiquement mises à jour en tâche de fond par le mécanisme de callbacks, sans que l'application hôte n'ait à s'en soucier. Celle-ci peut donc à tout moment et sans aucun risque de latence afficher la valeur de toutes les propriétés des objets Proxys Yoctopuce.

Exemple d'utilisation avec MATLAB


Voici comment charger notre Assembly .NET Proxy dans MATLAB et lire la valeur du premier capteur branché par USB trouvé sur la machine :

NET.addAssembly("C:/Yoctopuce/DotNetProxyLibrary.dll");
import YoctoProxyAPI.*

errmsg = YAPIProxy.RegisterHub("usb");
sensor = YSensorProxy.FindSensor("");
measure = sprintf('%.3f %s', sensor.CurrentValue, sensor.Unit);


Exemple d'utilisation en PowerShell


Les commandes en PowerShell sont un peu plus étranges, mais on reconnaît le même schéma :

Add-Type -Path "C:/Yoctopuce/DotNetProxyLibrary.dll"

$errmsg = [YoctoProxyAPI.YAPIProxy]::RegisterHub("usb")
$sensor = [YoctoProxyAPI.YSensorProxy]::FindSensor("")
$measure = "{0:n3} {1}" -f $sensor.CurrentValue, $sensor.Unit


Particularités de la librairie .NET Proxy

Par rapport aux librairies Yoctopuce classiques, on notera en particulier les différences suivantes.

Pas de méthode FirstModule/nextModule


Pour obtenir un objet se référant au premier module trouvé, on appelle un YModuleProxy.FindModule(""). Si aucun module n'est connecté, cette méthode retournera un objet avec la propriété module.IsOnline à False. Dès le branchement d'un module, la propriété passera à True et l'identifiant matériel du module sera mis à jour.

Pour énumérer les modules, on peut appeler la méthode module.GetSimilarFunctions() qui retourne un tableau de chaînes de caractères contenant les identifiants de tous les module trouvés.

Pas de fonction de callback


Les fonctions de callback sont implémentées en interne et mettent à jour les propriétés des objets. Vous pouvez donc simplement faire du polling sur les propriétés, sans pénalité significative de performance.

Prenez garde au fait que si vous utilisez l'une des méthodes qui désactive les callbacks, le rafraichissement automatique des propriétés des objets en sera altéré.

Une nouvelle méthode YAPIProxy.GetLog() permet de récupérer les logs de diagnostiques de bas niveau sans recourir à l'utilisation de callbacks.

Types énumérés


Pour maximiser la compatibilité avec les applications hôte, la librairie .NET Proxy n'utilise pas de véritables types énumérés .NET, mais des simples entiers. Pour chaque type énuméré, la librairie publie des constantes entières nommées correspondant aux valeurs possibles. Contrairement aux librairies Yoctopuce classiques, les valeurs utiles commencent toujours à 1, la valeur 0 étant réservée pour signifier une valeur invalide, par exemple lorsque le module est débranché.

Valeurs numériques invalides


Pour toutes les grandeurs numériques, plutôt qu'une constante arbitraire, la valeur invalide retournée en cas d'erreur est NaN. Il faut donc utiliser la fonction isNaN() pour détecter cette valeur.

Utilisation de l'Assembly .NET sans la librairie Proxy

Si pour une raison ou une autre vous ne désirez pas utiliser la librairie Proxy, et que votre environnement le permet, vous pouvez utiliser l'API C# standard puisqu'elle se trouve dans l'Assembly, sous le namespace YoctoLib. Attention toutefois à ne pas mélanger les deux utilisations: soit vous passez par la librairie Proxy, soit vous utilisez directement la version YoctoLib, mais pas les deux !

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.