Python, et Pymensura, un module Python pour utiliser simplement le système Mensura
Python est un langage très utilisé pour l'enseignement de la programmation, en particulier dans les classes préparatoires scientifiques. Python est un langage interprété, existant pour Windows comme pour Linux (et d’autres systèmes d’exploitation).
téléchargeable en : http://www.python.org/, mais divers environnements de développement sont disponibles sur internet :
- Pyscripter et différentes variantes, pour Windows (EduPython, PortablePython, PythonPortable)
- Spyder
- Pyzo pour Windows et Linux
(Généralités sur Python) (principe du module Pymensura) (un exemple de programme avec Pymensura)
Généralités sur Python et les bibliothèques dynamiques
Si on suppose que la bibliothèque dynamique est dans le répertoire de travail, on peut l'appeler assez facilement :
Pour une fonction nommée mf, il faut indiquer les types de paramètres d'entrée par mf.argtypes =(c_int, c_double), et les types de résultats par mf.restype=c_double.
Types possibles :
- c_int pour les entiers,
- c_double pour les doubles,
- c_char_p pour les chaînes de caractères (pointeur, à zéro terminal). Pour les chaînes Unicode, mettre c_wchar_p.
Pour indiquer l'absence de paramètre, mettre c_none.
from os import * # pour faire la liste des fichiers
print(listdir(""))
from ctypes import *
nombib=raw_input("Quel est le nom du pilote (bibdyn)")
mabib=cdll.LoadLibrary(nombib)
fsb=mabib.csb ; fsb.restype=c_int ; fsb.argtypes=(c_int,c_int)
fnsb=mabib.cnsb ; fnsb.restype=c_char_p
fead=mabib.cead ; fead.restype=c_double
fnead=mabib.cnead ; fnead.restype=c_char_p
fsad=mabib.csad ; fsad.restype=c_double ; fsad.argtypes=(c_int,c_double)
fnsad=mabib.cnsad ; fnsad.restype=c_char_p
feb=mabib.ceb ; feb.restype=c_int
fneb=mabib.cneb ; fneb.restype=c_char_p
fdetail=mabib.cdetail ; fdetail.restype=c_char_p # ou c_wchar_p pour Unicode
ftitre=mabib.ctitre ; ftitre.restype=c_char_p
print("Maintenant, vous pouvez utiliser les fonctions ")
print("fdetail, ftitre, fead, fnead, fsad, fnsad, feb, fneb, fsb, fnsb")
print ("qui sont dans ")
print (fdetail())
principe du module Pymensura
Python peut utiliser les bibliothèques dynamiques, mais avec des instructions qui ne sont pas toujours évidentes à comprendre. Pour simplifier l'emploi des pilotes Mensurasoft, un module spécifique nommé pymensura a été développé.
Il faut mettre le fichier pymensura.py dans votre répertoire de travail, ou bien dans le répertoire site-packages où sont d'autres modules Python.
* le fichier pymensura.py
* mode d'emploi en français (pdf), instructions for use in english (pdf), uz-indikoj en esperanto (pdf)
* un fichier zip pour essayer, avec à la fois un fichier .dll "système", pymensura.py, et un script de test essai_pymensura.py
Le module Pymensura (pymensura.py) est à placer dans un répertoire accessible à Python. On peut le mettre :
- soit dans le répertoire de travail, là où sont le programme principal et les pilotes.
- soit dans le répertoire /Lib/site-packages, par exemple c:\Python33\Lib\site-packages sous Windows, ou dans /usr/lib/pythonx.y ou usr/local/lib/pythonx.y sous Linux.
Le module Pymensura ne contient que la classe mensura, qui correspond à un appareil de mesure. Lorsqu'on veut utiliser un pilote correspondant à un appareil, on crée une instance (un objet) de cette classe par l'instruction :
mamachine=mensura("bibdyn_syst_pb_ANSI.dll")
Ensuite, on peut directement utiliser les méthodes et propriétés de cet objet.
codage : indique le codage des caractères (par défaut "windows-1252", mais on peut le fixer à « utf-8 », ou à d'autres valeurs.
correct : indique si le pilote a été correctement chargé ; pour cela, il faut d'une part que le fichier demandé existe, qu'il soit bien un fichier de type bibliothèque dynamique, et enfin qu'il contienne la fonction cdetail (la vérification des autres fonctions n'est pas faite à ce stade).
Les méthodes suivantes sont disponibles. Si l'initialisation n'a pas été bien faite, les fonctions renvoyant une chaîne de caractères renvoient une chaîne vide, sauf detail() et titre() qui renvoient un petit message d'erreur, et les fonctions numériques renvoient une valeur -999.
titre() : titre assez court du pilote, avec le nom de l'appareil
detail() : chaîne de caractères plus longue que le titre, avec souvent le nom de l'auteur et la date de réalisation du pilote.
ead(n) est la n-ième entrée analogique (à partir de zéro), et nead(n) le nom de cette entrée analogique
sad(n, valeur) fixe à valeur la n-ième sortie analogique (à partir de zéro), et nsad(n) est le nom de cette sortie analogique
eb(n) est la n-ième entrée binaire (à partir de zéro), et neb(n) est le nom de cette entrée binaire.
sb(n,valeur) fixe la n-ième sortie analogique (à partir de zéro), et nsb(n) est le nom de cette sortie binaire.
stop() arrête l'utilisation de l'appareil, ce qui le rend disponible pour un autre programme.
Un exemple de programme pour utiliser ce module pymensura
On suppose que le nom du pilote est « bibdyn_syst_pb_ANSI.dll ».
Ce programme charge le pilote en question, puis affiche le titre, le détail, l'entrée analogique 0, le nom de cette entrée analogique 0, l'entrée binaire 0, le nom de cette entrée binaire 0, fixe la sortie analogique 0 à la valeur 1, affiche le nom de cette sortie analogique 0, fixe la sortie binaire 0 à la valeur 1 (= « vrai »), affiche le nom de la sortie binaire 0 et finalement arrête l'utilisation de l'appareil (stop()).
from pymensura import *
mamachine=mensura("bibdyn_syst_pb_ANSI.dll")
print(mamachine.titre())
print(mamachine.detail())
print(mamachine.ead(0))
print(mamachine.nead(0))
print(mamachine.eb(0))
print(mamachine.neb(0))
print(mamachine.sad(0,1))
print(mamachine.nsad(0))
print(mamachine.sb(0,1))
print(mamachine.nsb(0))
mamachine.stop()
Dernière modification le 17/01/2019