Форум сайта python.su
2
Всем здравствуйте!
Написал я небольшую программку для работы с COM портом.
import serial import os from tkinter import * class okno(): def __init__ (self): global dat dat = StringVar() lab1 = Label(root, text = t, font="Arial 22",) lab2 = Label(root, text = "Температура", font="Arial 18",) but = Button(root, text="SEND", width=8, height=5) ent = Entry(root,textvariable = dat, width=20, bd=3) lab1.grid(row=0, column=0) lab2.grid(row=1, column=0) but.grid(row=0, column=1) ent.grid(row=1, column=1) but.bind("<Button-1>", self.send) ent["textvariable"] = dat def send (self, event): dat1 = str(dat.get()) print (dat1) ser = serial.Serial('COM1', 9600) data = (bytes(dat1, encoding='ascii')) ser.write (data) def temp (): ser = serial.Serial('COM1', 9600) s=str(ser.readline()) s=s[2:5] return s t = okno.temp() root = Tk() root.title("Terminal") root.geometry('300x200') root.maxsize(300, 200) obj = okno()
Офлайн
20
1. Вам устройство вообще что либо отвечает?
2.
from Tkinter import * import time def tick(): label.after(200, tick) label['text'] = time.strftime('%H:%M:%S') root=Tk() label = Label(font='sans 20') label.pack() label.after_idle(tick) root.mainloop()
Отредактировано noob_saibot (Апрель 28, 2014 17:27:27)
Офлайн
2
Отвечает! Через каждые 10 секунд с устройства приходят данные о измерянной температуре. Программа считывает только первое значение и порт закрывается. Соответственно данные больше не считываются, только перезапуск программы. Мне нужно организовать постоянное считывание данных с порта, в этом и прошу помочь.
Офлайн
857
romario82
Как с помощью signal можно организовать периодическое считывание с порта и отображать изменение в lab1
romario82а это проверь в консоли, надо в цикле вызывать .readline() и выводить
Программа считывает только первое значение и порт закрывается. Соответственно данные больше не считываются, только перезапуск программы.
Отредактировано py.user.next (Апрель 29, 2014 22:21:31)
Офлайн
2
Перепробывал всё вышеперечисленное, всёравно порт после первого считывания данных закрывается …
Офлайн
88
Никогда не использовал питоновский serial. Бросается в глаза создание объекта контроля на каждую операцию и отсутствие его явной финализации. Может быть стоит копать туда.
Офлайн
58
Где-то на форуме была тема про чтение данных с COM порта. Поищите. Точно помню, что была. Сделал в памяти себе заметку, что есть решение. Думал пригодиться.
Офлайн
221
romario82
если периодичность 10 секунд, то не зазорно каждый раз открывать и закрывать порт.
Но вообще я не увидел причин по которым порт сам должен закрываться. М.б. у вас на стороне устройство какие то проблемы? попробуйте открывать и закрывать порт и отпишитесь о результате.
Офлайн
2
Так видимо пакет serial работает, предал данные - порт закрылся, получил данные - порт закрылся. У меня на компе Free Serial Port Monitor установллен. Поэтому я всё вижу, что у меня на порте происходит:
—————————————————————-
Порт открыт процессом “pythonw.exe” (PID: 3808)
2B 32 34 0A +24.
Порт закрыт
—————————————————————
Подобная тема была поднята в http://python.su/forum/topic/6864/, здесь POLL решил подобную проблему с помощью signal.
Сижу разбираюсь…
Или есть другой способ в PYTHON переодически или постоянно вызывать функцию?
Отредактировано romario82 (Май 15, 2014 10:58:13)
Офлайн
58
Если GUI Tkinter, то там немножко специфично с периодическими вызовами. Если использовать time.sllep() то интерфейс подвисает. Избежать этого можно выполняя рекурсивно метод .after(). Если по этой схеме будут вопросы - пишите.
Офлайн