2010-07-06 16 views
2

Dans Hyperterminal, je peux me connecter à un port série appelé «X64-CL_iPro_1_Serial_0» où je peux envoyer/recevoir du texte ASCII à une caméra. Cependant, lorsque je tente de se connecter au même port avec pyserial, il lance une exception:Utilisation de pySerial pour se connecter à un port non-COM

SerialException: could not open port X64-CL_iPro_1_Serial_0: [Error 2] The system cannot find the file specified.

Je ne comprends pas pourquoi Hyperterminal peut détecter le port et communiquer avec lui, mais Python ne peut pas. J'ai téléchargé this script à partir du site Web pySerial qui affiche une liste de ports série, et les seuls ports avec lesquels il est venu était COM1 et COM2, dont je ne peux me connecter.

Mon code est très simple, et ressemble à ceci:

import serial 
port = "X64-CL_iPro_1_Serial_0" 
ser = serial.Serial(port) 

que je fais quelque chose de mal? Y a-t-il un moyen de contourner ce problème? Merci d'avance.

Editer: Il convient également de noter que ce port n'apparaît pas dans le gestionnaire de périphériques, ni COM1 ou COM2.

+0

Quel système d'exploitation est-ce? (Ajouté: oh, probablement Windows, puisque vous avez COM1 et COM2, à droite ...) – detly

Répondre

1

Le problème réside dans le code d'énumération que vous avez lié. Il est faux à deux égards:

  1. Il utilise un GUID_CLASS_COMPORT fixe pour énumérer. Il devrait plutôt demander le GUID à travers SetupDiClassGuidsFromName, en passant "Ports" comme description de la classe pour laquelle il demande des noms.
  2. Le code insiste pour demander le nom convivial du port. Mais si le seul but est d'ouvrir le périphérique (au lieu de l'afficher à un utilisateur), il doit accéder directement à l'élément DevicePath, qui est un nom de port bizarre mais parfaitement valide à transmettre à pySerial. Le nom amical pourrait même être totalement absent.
0

côté

Je ne comprends pas la question concerne non-port série utilisation par pyserial, ou un port série qui n'est pas un port COMX dans l'énumération.

Cela peut être un peu OT ou un code trop dur pour votre usage, mais voilà premier, en utilisant un autre fichier dans un objet pyserial:

foo = serial.Serial() 
peer = serial.Serial() 
foo.fd, peer.fd = posix.openpty() 
try: foo._isOpen = peer._isOpen = True # depending on pyserial version 
except: pass 
foo._reconfigurePort() 
peer.setTimeout(timeout=0.1) 
peer._reconfigurePort() 

En ce qui concerne deuxième, rappelez-vous que les ports au-delà COM9 utilisez la notation de fenêtres étranges \\.\COM10, peut-être que c'est ce que HyperTerminal fait pour vous. pyserial ne le fait pas, alors peut-être vous avez besoin d'ouvrir quelque chose comme ce port:

s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0") # also remember to escape backslash