Bonjour,
J'ai un problème assez spécifique, et je ne sais pas bien ou chercher de l'aide.
Voici mon problème. J'ai une expérience scientifique (spectromètre + détecteur) qui utilise un logiciel commercial sous Windows 7 (LightField de Princeton Instrument). Ce logiciel est bien, et je souhaite le garder. Cependant, j'ai développé des outils sous python pour interfacer d'autres manips (mais beaucoup plus simple), et je voudrais interfacer le tout.
Il est possible d'automatiser LightField avec LabView, Matlab, C#, Visual Basic, mais malheureusement pas python. Je suis physicien, et pas informaticien de formation, et je ne connais pas du tout C# et Visual Basic. Labview, je ne touche pas à ca… :-). Je connais un peu Matlab, que j'ai avantageusement remplacé par python depuis longtemps. En regardant l'exemple fournis pour automatiser LightField avec Matlab (ainsi que la vidéo Youtube… il y a peu de documentation), on vois que derrière il y a .NET pour appeler les dll permettant de piloter LightField. (D'ailleurs, on trouve sur GitHub l'exemple fournis par Princeton pour LightField : https://github.com/jdieringer/LightField-in-MATLAB )
En utilisant le paquet pythonnet, il me semble que j'arrive à charger correctement les dll. (En tout cas, j'ai accès a des fonctions qui ressemble a des choses permettant de piloter un spectromètre et un détecteur).
Par contre, je suis mauvais en Matlab, et je n'arrive pas a traduire en Python ce qui marche en Matlab. Ainsi, je n'arrive pas a instancier un objet LightField qui me permettrait de faire ce que je souhaite, apparemment je ne passe pas les bons arguments au constructeur. Je pense que tout est marqué dans l'exemple Matlab, mais je ne sais pas comment le traduire en python.
Une idée ou je pourrais demander de l'aide pour une question non-linux, mais Python / Matlab / .NET ?
Merci beaucoup…
Darckense
# Quelques pistes méthodologiques
Posté par François GUÉRIN (Mastodon) . Évalué à 3. Dernière modification le 02 novembre 2016 à 18:00.
Salut,
Je ne connais pas du tout les trucs que tu manipules, alors je te donne quelques conseils méthodologiques:
Bon courage !
[^] # Re: Quelques pistes méthodologiques
Posté par Darckense (site web personnel) . Évalué à 3.
Bonjour,
Tu veux dire le module inspect ? Je ne trouve pas de module introspection.
Merci pour les conseils, je vais essayer de procéder comme ça, en attendant de trouver comment ça marche ou de tomber sur un guru Matlab/.NET (Je connaissais pas .NET, cela n'a pas l'air franchement simple..)
Cordialement,
--
Darckense
[^] # Re: Quelques pistes méthodologiques
Posté par François GUÉRIN (Mastodon) . Évalué à 2.
Yep, c'est le module introspect. Il te permet de connaître le nom des méthodes appelées, leurs paramètres… et pareil pour les classes.
Courage ! Tu n'es plus très loin de la solution…
# Constructeur en python ?
Posté par Darckense (site web personnel) . Évalué à 2.
Bon, en fouillant, voici ou j'en suis :
Je dois faire une instance de la classe Automation de LighField
help(Automation) me retourne:
Je crois qu'en C#, le constructeur est .ctor, et il faut un booléen, et une liste.
Quand j'instancie en Python, j'obtiens :
Pourtant, la ligne pertinente dans le programme Matlab qui lui fonctionne est :
visible est un booléen initialement égal à True
Franchement, je ne comprends pas ce qui coince.
Quelqu'un a une idée ?
Merci !
--
Darckense
[^] # Re: Constructeur en python ?
Posté par François GUÉRIN (Mastodon) . Évalué à 3.
Lit bien la doc de pythonnet, la méthode pour appeler des trucs est sans doute dedans… De plus, le
System.Collections.Generic.List`1[System.String]
n'est peut-être pas mappable directement en list python, il faut peut être instancier la version C#.
Courage !
[^] # Re: Constructeur en python ?
Posté par Darckense (site web personnel) . Évalué à 2.
Oui, en fait, il semblerait que c'est ça.
J'essaye de faire les conseils que l'on m'a donné sur Stack Overflow (voir plus bas), on verra bien.
Merci
# Stack Overflow
Posté par Marotte ⛧ . Évalué à 5.
Si l’anglais ne te pose pas de problème tu peux tenter sur https://stackoverflow.com/
C’est un site de questions/réponses, pas un forum. Il faut donc une question précise. N’hésite pas à éclater en deux ou trois questions par exemple.
[^] # Re: Stack Overflow
Posté par Darckense (site web personnel) . Évalué à 2.
Merci pour les conseils concernant Stack Overflow.
J'ai posé ma question la bas (pour ceux que ça intéresse ), et je progresse vers une solution.
# Écrire au fabriquant?
Posté par JoeltheLion (site web personnel) . Évalué à 4.
Si l'éditeur de Lightfield propose déjà des bindings pour tous ces langages, il y a des chances qu'ajouter Python au mix l'intéresse. Je pense que ça peut valoir le coup de le contacter pour voir s'il te filerait pas un coup de main.
Sinon, je pense que tu n'es pas très loin, persévère ! Et lis bien la doc de pythonnet. Pour ce qui est des questions, je rejoins le commentaire qui recommande StackOverflow. C'est la meilleure plateforme pour avoir des réponses, mais attention, ils sont très stricts sur leurs règles.
[^] # Re: Écrire au fabriquant?
Posté par Darckense (site web personnel) . Évalué à 2.
En fait, j'avais déjà posé la question aux ingénieurs qui m’ont installés le matériel, mais je crois que Python, c'est de la science fiction… En France Ropper Instrument est le revendeur de Princeton, il s'agit de matériel scientifique (très cher) qui se vend en très peu d'exemplaire, le soft est fait maison aux US… Quand j'aurais quelque-chose qui fonctionne, je pourrais le leur donner, mais avant.. :-)
# Créer une liste en .NET depuis Python ?
Posté par Darckense (site web personnel) . Évalué à 2.
Bon, suite à ma question sur Stack Overflow, il semblerait que je doive convertir l'argument de liste Python en C#.
Il y a un exemple : http://stackoverflow.com/questions/40403221/how-to-use-python-and-net-c-to-automatise-princeton-instruments-lightfield
Mais je ne comprends pas l'exemple en C#, et l'exemple en python (ci-dessous) ne marche pas.
Je n'ai pas de C:\Debug\ListInConstr , et une recherche sur ListInConst ne donne rien.
Vous savez comment convertir une liste Python vide en .NET ?
Merci…
--
Darckense
[^] # Re: Créer une liste en .NET depuis Python ?
Posté par NicolasP . Évalué à 5.
Dans l'exemple donné sur SO, tu as 2 parties :
1. La première consiste à écrire du code pour convertir ta liste. Ce code est à écrire en C# et à compiler pour obtenir un fichier DLL (y compris sous linux)
1. La deuxième consiste à utiliser cette DLL en y faisant référence. L'auteur de la réponse a supposé qu'elle était présente dans C:\Debug\ListInConstr
Si j'ai bien compris, tu n'as appliqué que la 2ème partie, c'est pour ça que ça ne marche pas. Par contre, j'avoue ne pas comprendre non plus à quoi sert la 1ère partie.
Si la liste que tu veux passer est vide, c'est peut-être plus simple de créer directement une List .NET vide que de convertir une liste python.
Je ne connais rien à PythonNet mais d'après le readme ça pourrait donner quelque chose comme :
[^] # Re: Créer une liste en .NET depuis Python ?
Posté par Darckense (site web personnel) . Évalué à 1.
Je te plussois infiniment. CA MARCHE ! :-) (Et désolé de ne pas avoir répondu avant, je n'avais pas accès à la manip le WE).
Merci beaucoup. C'était bêtement une erreur de type Python/.NET. Je vais lire le readme de pythonnet en détail pour savoir comment convertir le tout proprement pour les autres commandes, mais à partir de la, je devrais me débrouiller.
Si je suis en forme et que ça fonctionne, je posterais le code Python si cela intéresse quelqu'un d'autre.
Encore une fois, merci à tous pour votre aide et vos conseils.
--
Darckense
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.