Форум сайта python.su
вместо
while ser.inWaiting()>0: out+=ser.readline()
out+=ser.read(ser.inWaiting())
ser.inWaiting()
Отредактировано Aris_P@ (Окт. 14, 2013 10:23:08)
Офлайн
в таком цикле
inline=1 while 1: inline = input("") if inline == 'exit': ser.close() exit() else: ser.write(inline.encode('ascii')+'\r'.encode('ascii')) out = ''.encode('ascii') time.sleep(0.4) out += ser.read(ser.inWaiting()) if out != '': print (">>".encode('ascii') + out)
inline = input("")
Офлайн
тогда стоит взять и запилить простенький gui, хотя б на Tkinter например
Офлайн
#-*- coding: UTF-8 -*- import Tkinter as tk from serial import Serial class MyApp(): def __init__(self, *arg,**kw): self.root = tk.Tk() self.root.title('test') self.fr = tk.Frame(height=500, width=200, borderwidth=5, bd=5) self.but_send_comm = tk.Button(self.fr, text = u'Послать команду', command=self.SendCommand) self.ent_command = tk.Entry(self.fr) ### self.fr.place(x=0, y=0) self.ent_command.place(x=0, y=0) self.but_send_comm.place(x=0,y=30) ### self.ser = Serial(port= 'COM3',baudrate=2400, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=True, writeTimeout=None, dsrdtr=False, interCharTimeout=None) self.ser.close() self.ser.open() ### def SendCommand(self): buf = self.ent_command.get()#считываем значение из поля ввода #тут наверно стоит как-то обработать прочитанную строку self.ser.write(buf) ### def tick_100ms(self): self.root.after(100, self.tick_100ms) buf = self.ser.read(self.ser.inWaiting())#считываем данные из буфера порта ### def mainloop(self): self.tick_100ms() self.root.mainloop() ### def main(): app = MyApp() app.mainloop() ### if __name__ == '__main__': main()
Офлайн
большое спасибо! попробую.
кстати говоря автотест, который я писал для проверки модема работает отлично, потому что там не требуется асинхронного режима.
Офлайн
вот теперь все работает. финальный код:
import tkinter as tk from serial import Serial import time class MyApp(): def __init__(self, *arg,**kw): self.root = tk.Tk() self.root.title('test') self.fr = tk.Frame(height=500, width=200, borderwidth=5, bd=5) self.but_send_comm = tk.Button(self.fr, text = u'Послать команду', command=self.SendCommand) self.ent_command = tk.Entry(self.fr) ### self.fr.place(x=0, y=0) self.ent_command.place(x=0, y=0) self.but_send_comm.place(x=0,y=30) ### self.ser = Serial(port= 'COM3',baudrate=2400, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=True, writeTimeout=None, dsrdtr=False, interCharTimeout=None) self.ser.close() self.ser.open() ### def SendCommand(self): buf = self.ent_command.get()#считываем значение из поля ввода self.ser.write(buf.encode('ascii')+'\r'.encode('ascii')) ### def tick_100ms(self): time.sleep(0.4) self.root.after(100, self.tick_100ms) buf1 = self.ser.read(self.ser.inWaiting())#считываем данные из буфера порта print(buf1) ### def mainloop(self): self.tick_100ms() self.root.mainloop() ### def main(): app = MyApp() app.mainloop() ### if __name__ == '__main__': main()
Офлайн
а зачем sleep?
может просто стоит реже тики сделать, например каждые 400 мс
def tick_Nms(self): self.root.after(400, self.tick_Nms)
Офлайн
да это тоже вариант, даже лучше.
Офлайн