Zdravím,

poslední dva dny se trápím s komunikací přes sériovou linku a knihovnou 
pyserial a nemůžu se hnout z místa.

Abych byl konkrétní — mám desku s mikrokontrolérem ATMega8U2, který se skrze 
USB hlásí jako sériová linka (na Mac OS je to /dev/tty.usbmodem441) a chci do 
tohoto zařízení zapisovat i číst. Po připojení desky s ní mohu normálně 
komunikovat, např.:

  import serial

  s = serial.Serial('/dev/tty.usbmodem441', 57600, timeout=1)
    
  s.write('R')
  print s.read(size=6)

  s.write('S')
  print s.read(size=50)

Problém je ten, že občas ze zařízení přečtu přesně to, co očekávám, občas ne, 
občas přečtu jen půlku. Zkoušel jsem různě nastavit 'timeout', ale bez úspěchu. 
Zkoušel jsem i něco takového:

  s.write('R')
  print s.read(size=s.inWaiting())

a

  s.write('R)
  while s.inWaiting():
    print.s.read()

ale zdá se, že funkce s.inWaiting() nevrací správné hodnoty, nebo se chová 
jinak než si myslím. Také jsem zkoušel mezi zápis a čtení vložit  sleep():

  s.write('R')
  time.sleep(1)
  print s.read(size=6)

Chci se tedy zeptat — jaký je korektní způsob zápisu a čtení ze sériové linky, 
když předem nevím, kolik znaků mám přečíst? Je nějaký způsob, jak to zjistit? A 
co se stane, když do zařízení pouze zapíšu, ale již nepřečtu? Ztratí se přijatá 
data, nebo zůstanou někde v bufferu?

Díky,
V.S.
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem