Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2014 16:32:55

romario82
Зарегистрирован: 2013-04-10
Сообщения: 56
Репутация: +  2  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Всем здравствуйте!
Написал я небольшую программку для работы с 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()

Как с помощью signal можно организовать периодическое считывание с порта и отображать изменение в lab1 = Label(root, text = t, font=“Arial 22”,)?

Офлайн

#2 Апрель 28, 2014 17:20:13

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

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()
взято из вики.
Полезная ссылка!
PS. не тот пример вначале приложил

Отредактировано noob_saibot (Апрель 28, 2014 17:27:27)

Офлайн

#3 Апрель 29, 2014 08:58:37

romario82
Зарегистрирован: 2013-04-10
Сообщения: 56
Репутация: +  2  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Отвечает! Через каждые 10 секунд с устройства приходят данные о измерянной температуре. Программа считывает только первое значение и порт закрывается. Соответственно данные больше не считываются, только перезапуск программы. Мне нужно организовать постоянное считывание данных с порта, в этом и прошу помочь.

Офлайн

#4 Апрель 29, 2014 22:20:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

romario82
Как с помощью signal можно организовать периодическое считывание с порта и отображать изменение в lab1

вообще, надо менять значение StringVar, подключённой к метке
то есть там не t должно быть, а StringVar (как с Entry сделано)

ты это просто без порта сделай, с простыми строками и таймером

romario82
Программа считывает только первое значение и порт закрывается. Соответственно данные больше не считываются, только перезапуск программы.
а это проверь в консоли, надо в цикле вызывать .readline() и выводить

когда по отдельности всё сделаешь, тогда и соединять можно



Отредактировано py.user.next (Апрель 29, 2014 22:21:31)

Офлайн

#5 Май 14, 2014 15:47:10

romario82
Зарегистрирован: 2013-04-10
Сообщения: 56
Репутация: +  2  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Перепробывал всё вышеперечисленное, всёравно порт после первого считывания данных закрывается …

Офлайн

#6 Май 14, 2014 20:34:03

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Никогда не использовал питоновский serial. Бросается в глаза создание объекта контроля на каждую операцию и отсутствие его явной финализации. Может быть стоит копать туда.

Офлайн

#7 Май 14, 2014 23:42:10

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Где-то на форуме была тема про чтение данных с COM порта. Поищите. Точно помню, что была. Сделал в памяти себе заметку, что есть решение. Думал пригодиться.

Офлайн

#8 Май 15, 2014 00:18:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

romario82
если периодичность 10 секунд, то не зазорно каждый раз открывать и закрывать порт.
Но вообще я не увидел причин по которым порт сам должен закрываться. М.б. у вас на стороне устройство какие то проблемы? попробуйте открывать и закрывать порт и отпишитесь о результате.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Май 15, 2014 10:51:04

romario82
Зарегистрирован: 2013-04-10
Сообщения: 56
Репутация: +  2  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Так видимо пакет 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)

Офлайн

#10 Май 15, 2014 12:51:13

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Периодическое считывание данных с COM порта с помощью signal?

Если GUI Tkinter, то там немножко специфично с периодическими вызовами. Если использовать time.sllep() то интерфейс подвисает. Избежать этого можно выполняя рекурсивно метод .after(). Если по этой схеме будут вопросы - пишите.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version