Sujet :
Est-il possible de commander l'EPOS4, l'IDX ou l'EPOS2 par Python ?
Principes de base :
maxon ne fournit pas de documentation, de bibliothèques spécifiques, d'exemples de code ou de support pour commander les contrôleurs EPOS avec Python. Cependant, il est tout à fait possible d'utiliser la « Epos Command library » en Python pour commander un EPOS4, EPOS2 ou IDX.
Sur la base des commentaires de nombreux utilisateurs de Python et d'EPOS4, nous recommandons d'utiliser « ctypes » pour la programmation d'applications Python basées sur la « Bibliothèque de commandes EPOS ».
Solution : "La bibliothèque »ctypes
La seule chose nécessaire pour commander l'EPOS4, l'IDX ou l'EPOS2 avec Python est la bibliothèque « ctypes » et la « EPOS Command Library » de maxon.
1.) ctypes
ctypes est une bibliothèque de fonctions qui fournit des types de données compatibles avec le langage C et permet d'appeler des fonctions dans des DLL (comme la « EPOS Command library » de maxon). Elle est installée par défaut dans la plupart des environnements de programmation Python pour Windows et Linux.
Une documentation détaillée sur l'utilisation de la bibliothèque « ctypes » peut être trouvée sur Internet, par exemple ...
- https://docs.python.org/3/library/ctypes.html
- https://pgi-jcns.fz-juelich.de/portal/pages/using-c-from-python.html
Les deux exemples de programmes ci-joints (pour RaspberryPi 3) montrent bien comment utiliser ctypes. Les points clés sont les suivants :
- Importer ctypes :
- from ctypes import *
- Copiez la « bibliothèque de commandes EPOS » dans votre environnement Python et configurez les informations de chemin correctement, par exemple
- path='/home/alg_sys/python/libEposCmd.so.6.6.1.0'
- Charger la bibliothèque
- cdll.LoadLibrary(path)
- epos=CDLL(path)
- Définissez une variable NodeID et configurez-la en fonction de l'ID de votre nœud EPOS4, par exemple
- NodeID = 1
- Attention : Conversion des types de données -> Pierre d'achoppement !
- Les types de variables des valeurs de passage, des valeurs de retour et des pointeurs de retour des fonctions « EPOS Command Library » basées sur le « C » doivent être correctement convertis en types de données Python et ctypes correspondants, c'est-à-dire que les déclarations de données ctypes correspondantes doivent être utilisées, par exemple ...
- pNbOfBytesRead=c_uint()
- pData=c_uint()
- pPositionIs=c_long()
- pErrorCode=c_uint()
- La documentation « ctypes » traitant des types de données se trouve ici :
- Utilisez les ctypes « byref » pour les pointeurs de retour des appels de fonction de la « bibliothèque de commande EPOS », par exemple
- keyhandle=epos.VCS_OpenDevice('EPOS4', 'MAXON SERIAL V2', 'USB', 'USB0', byref(pErrorCode) )
- ret=epos.VCS_GetPositionIs(keyhandle, NodeID, byref(pPositionIs), byref(pErrorCode))
- ret=epos.VCS_MoveToPosition(keyhandle, NodeID, 20000, 0, 0, byref(pErrorCode))
- La documentation « ctypes » traitant de « byref » se trouve ici :
2.) "Bibliothèque de commandes EPOS
La « bibliothèque de commandes EPOS » est installée automatiquement par le paquetage « EPOS Setup » sur votre disque local. La bibliothèque ainsi que sa documentation « EPOS Command Library.pdf » se trouvent par défaut dans les répertoires suivants :
- C:\NProgram Files (x86)\NMaxon motor ag\NEPOS IDX\NEPOS4\NProgrammation\NLinux Library
- C:\NProgram Files (x86)\NMaxon motor ag\NEPOS IDX\NEPOS4\04 Programming\NWindows DLL
Autres notes importantes :
Problèmes de compatibilité entre Python 2 et Python 3
Veuillez noter que Python 2.x et Python 3.x ne sont plus entièrement compatibles. Certaines commandes ont été ajoutées à Python 3.x. D'autres commandes peuvent manquer ou ne pas être totalement identiques. Il existe des conseils et des documents sur ces problèmes d'incompatibilité Python sur Internet, par exemple
-> Portage du code Python 2 vers Python 3 - Documentation Python 3.9.2
Exemple :
- Les paramètres pour ouvrir l'interface EPOS4 ressemblent à ceci avec Python 2.x:
- keyhandle=epos.VCS_OpenDevice('EPOS4', 'MAXON SERIAL V2', 'USB', 'USB0', byref(pErrorCode) )
- En Python 3.x, la même chose doit ressembler à ceci :
- keyhandle=epos.VCS_OpenDevice(b'EPOS4', b'MAXON SERIAL V2', b'USB', b'USB0', byref(pErrorCode) )
Veuillez noter le numéro de version de Python présent dans le nom de fichier du code d'exemple ci-joint.
Configuration du chemin de la bibliothèque :
Veillez à ce que le chemin du répertoire contenant la DLL soit configuré correctement, par exemple (dans le cas de Linux et d'un Raspberry Pi) :
path='/home/pi/src/python/libEposCmd.so.6.7.1.0'
Veuillez vous assurer que vous utilisez la dernière version de la « Bibliothèque de commande EPOS » qui est présente dans votre installation « EPOS Studio » ou sur les sites web EPOS4 de maxon.
Windows + ctypes + EPOS Command Library
- DLL version 32 bit / 64 bit :
- Veuillez vous assurer que vous utilisez la DLL EposCmd64.dll dans le cas d'un système Windows 64 bits. Dans le cas contraire, vous serez confronté à une erreur Win32 par Python.
- Documentation et exemple de projet :
- Vous trouverez ci-dessous le lien vers une information, une documentation et un exemple de code très professionnels d'un utilisateur maxon et ingénieur logiciel qui a utilisé avec succès Python et la « EPOS Command Library » sur un système Windows :
- -> Interfacing and Controlling Maxon Motors Using Python | by M Khorasani | May, 2021 | Medium
- -> https://github.com/mkhorasani/maxon_python_windows_64
- Merci beaucoup à Mohammad Khorasani.
Remarque :
- Veuillez noter que maxon ne peut pas fournir de support ou de formation pour Python, ctypes, ou toute adaptation spécifique à l'application de l'exemple de programme.
- Le code de l'exemple de programme peut être partagé, modifié et utilisé gratuitement sans aucune restriction.
- maxon décline toute responsabilité et garantie basée sur l'utilisation de l'exemple de code.
- Nous sommes heureux de recevoir vos commentaires si ces informations vous ont été utiles et si vous avez réussi à commander l'EPOS4 à l'aide de Python ?
- Si vous avez des questions, veuillez soumettre un ticket par le centre de support technique mondial de maxon.
Commentaires
0 commentaire
Cet article n'accepte pas de commentaires.