2016-10-12 2 views
0

У меня есть сценарий python, который подключается к источнику питания через сеанс Telnet. Поток сценария выглядит следующим образом:Как собирать непрерывные данные с Python Telnet

# Connect to Device 
tn = telnetlib.Telnet(HOST,PORT) 

# Turn On 
tn.write("OUT 1\r") 

# Get Current Voltage 
current_voltage = tn.write("MV?\r") 

# Turn Off 
tn.write("OUT 0\r") 

То, что я хотел бы сделать, это быть в состоянии получить текущее напряжение каждые т миллисекунд (мс) и быть в состоянии отобразить его на моем Tkinter GUI, пока устройство приказано отключиться. В идеале я бы хотел отобразить его на диаграмме, чтобы у меня было напряжение и время, но теперь я могу жить только с динамическим текстовым дисплеем. Переменная current_voltage сохранит строку, представляющую текущее значение напряжения. Как я могу это сделать? Благодарю.

ответ

2

Каждой миллисекунде, вероятно, больше, чем tkinter. Это немного зависит от того, насколько дорого стоит напряжение. Если это займет больше миллисекунды, вам понадобятся потоки или многопроцессорность.

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

Общая техника заключается в том, чтобы написать функцию, которая выполняет некоторую работу, а затем вызывает after, чтобы она снова вызывалась в будущем.

Например:

root = tk.Tk() 
... 
def get_voltage(): 
    <your code to get the voltage goes here> 

    # get the voltage again in one millisecond 
    root.after(1, get_voltage) 
... 
get_voltage() 
root.mainloop() 

другой вариант заключается в использовании потоков, где у вас есть поток, который не делает ничего, кроме получения информации о напряжении и поставить его в очереди. Затем, используя тот же метод, что и выше, вы можете вытащить последнее напряжение (-ы) из очереди для отображения.

+0

Привет, Брайан, я искал больше решения, где я бы написал метод для извлечения данных каждый тс не с помощью метода Tk() «после». Я предпочел бы, чтобы это был автономный метод, который извлекает данные. Например, существует способ непрерывного вызова метода напряжения тока тока в петле w. – DeeTee

+0

@DeeTee: да, если вы используете потоки. единственный способ вызвать функцию в цикле из потока GUI - использовать 'after'. –

+0

Как вы думаете, вы можете привести мне пример или псевдокод, чтобы помочь мне начать работу? – DeeTee

Смежные вопросы