как использовать таймер с последовательным портом - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь разработать графический интерфейс с wxpython, используя последовательный порт.Но мне нужно использовать параллелизм ресурсов последовательного порта для постоянного сохранения данных и построения графиков.Для этого я использовал wx.Timer, но не смог добиться успеха.Приведенный ниже пример кода:

import serial
ser = serial.Serial('COM9',9600)
def update(self, event):
        global ser
        timerId = event.GetId()         
        if timerId == TIMER_ID1:
            print("hello")
            for line in ser:
                print(line)
            print("world")         
        else:            
            x=[]
            x1=[]
            x2=[]
            y=[]
            y1=[]
            y2=[]
            i=0
            #fig = plt.figure()               
            def sV_sat(i):     
                for line in ser:
                    data=line.split(b",")                  
                    if data[0] == b"$GPGSV":
                        print("c")
                        sView_GP = data[3]
                        sNumber_GP = data[4]
                        i=i+1
                        x.append(i)
                        #x=[i]                         
                        y.append(float(sView_GP))
                        ax.set_title("GPS")
                        ax1.set_title("GPS-GLO")
                        ax1.set_ylim(0,20)

                        ax.bar(i,y,color='green')         #only GPS      #option 2
                        ax1.plot(x,y,'g')      #GPS ve ...

                    #time.sleep(0.1)                
            ani8 = animation.FuncAnimation(fig,sV_sat)
            plt.legend()
            #pyplot.show() 
            plt.show()
        print (time.ctime())

Приведенный выше код дает мне графику, но не может дать print(line) :( 9-я строка)

print("hello")
for line in ser:
    print(line)
print("world")

Просто напечатайте: helloи world с графикой

hello
world

Вторая последовательная строка (строка 21) дает мне графику.Это нормально.Почему первый (строка 8) пропускается?Любая помощь будет оценена.Большое спасибо.

1 Ответ

0 голосов
/ 27 декабря 2018

Просто чтение документации для pySerial предполагает, что вам нужно read последовательный порт.то есть

Открытие именованного порта в «19200,8, N, 1», время ожидания 1 с:

>>> import serial
>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
...     x = ser.read()          # read one byte
...     s = ser.read(10)        # read up to ten bytes (timeout)
...     line = ser.readline()   # read a '\n' terminated line

Открытие порта в «38400,8, E, 1”, Неблокирующее рукопожатие HW:

>>> import serial
>>> ser = serial.Serial('COM3', 38400, timeout=0,
...                     parity=serial.PARITY_EVEN, rtscts=1)
>>> s = ser.read(100)       # read up to one hundred bytes
...                         # or as much is in the buffer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...