2009-11-10 5 views
0

Buongiorno, J'essaie d'envoyer une chaîne simple à un port série pour commander un instrument pour les mesures de bruit.
Les cordes sont très faciles:
"M 1" = instrument sur
"M 2" = off instrument
"M 3" = commencer la mesure
"M 4" = arrêter la mesure
envoyer une chaîne à la série

J'ai trouvé ce programme:

import serial 

ser = serial.Serial(0) #Seleziona la porta seriale COM4 
ser.baudrate = 9600 #Imposta il baudrate a 9600bps 

ser.open() #apre la porta com 
ser.close() 
#verifica se la porta e' aperta 
if ser.isOpen(): 
    com_num = ser.portstr 
    print ("Porta " + com_num + " aperta") 
    #invia il comando alla seriale 
    buffer = "M 3" 
    ser.write(buffer)  
    #Loop d'attesa caratteri 
    num = 0 
    while num == 0: 
     num = ser.inWaiting() 
    #scarica il buffer della seriale 
    buffer = ser.read(num) 
    print ("Dati ricevuti dalla seriale:") 
    print buffer 
    ser.close()    #chiude la porta 
else: 
    print ("Porta seriale gia' in uso o inesistente") 
s = raw_input("digita INVIA per uscire") 

LINUX
UTILISATION le programme est ok et j'ai seulement quelques problèmes avec le type de chaîne. En fait, j'ai dû insérer un retour chariot mais je ne peux pas le faire.
J'ai dit que le programme est correct parce que l'instrument passe de éteint à allumé quand j'ai fait ma première connexion, et en vidéo j'ai lu "Porta/dev/ttyS = aperta" qui signifie "ouvert". Mais cette appens pour tout type de chaîne que j'envoie. En fait c'est comme une "iniatilisation" du port, pas vraiment une communication.
Ensuite, je ne parviens pas à envoyer la chaîne de la bonne manière, peut-être pour le problème du retour chariot.

SOUS WINDOWS
Je ne peux pas ouvrir le port, j'ai une erreur de refuser l'accès au port, c'est l'erreur:
Traceback (most recent call last):
File "C:/d.py", line 9, in
ser.open() #apre la porta com
File "C:\Programmi\Python26\lib\site-packages\serial\serialwin32.py", line 53, in open raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError())) serial.serialutil.SerialException: could not open port COM1: [Error 5] Accesso negato.

Pouvez-vous me aider à: 1. Gérer
pour exécuter le programme sous windows
2. Gérer pour donner exactement la chaîne avec le retour de chariot ???

Merci beaucoup.
Stefano

Répondre

1

Pour ajouter le retour chariot append \r à votre chaîne, ou peut-être, il peut avoir besoin d'un retour chariot/saut de ligne \r\n, que certains systèmes utilisent pour marquer la fin de la ligne. Bien sûr, il peut seulement avoir besoin d'un saut de ligne. Dans ce cas, vous utiliseriez simplement \n.

buffer = "M 3\r" 

ou

buffer = "M 3\r\n" 

ou

buffer = "M 3\n" 

Vous pourriez trouver la documentation pySerial d'aide pour résoudre vos problèmes Windows.

1

Malheureusement, cela ne fonctionne pas.
Dans le passé j'ai déjà essayé d'utiliser \ r \ n avec la commande echo dans linux via bash ... mais rien.
Maintenant j'essaye avec python mais plus rien.Il peut être intéressant que l'instrument, quand je donne la chaîne de cette manière:

buffer = "M 3\r"
ou
buffer = "M 3\r\n"

me donne cette réponse: @

C'est tout ...
Je ne sais pas.
Une autre chose: quand je l'ai essayé avec la langue de l'instrument bash commence la mesure avec la commande:
echo "M 3 " > /dev/ttyS0
qui est un Blanck après 3.
Il est évident que l'autre commande ne fonctionnent pas avec cette étrange Blanck ...

Merci beaucoup!

Questions connexes