2016-10-12 3 views
0

텔넷 세션을 통해 전원 공급 장치에 연결하는 파이썬 스크립트가 있습니다. 내가하고 싶은 무엇파이썬 텔넷으로 연속 데이터를 수집하는 방법

# 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") 

는 전류 전압 모든 t 밀리 초 (밀리 초)을 얻을 수 및 장치까지 내 Tkinter의 GUI에 표시 할 수 있습니다 : 다음과 같이 스크립트의 흐름은 꺼 지도록 명령 받았다. 이상적으로 나는 전압 대 시간과 같은 차트에 표시하고 싶지만 지금은 동적 텍스트 디스플레이로만 살 수 있습니다. current_voltage 변수는 현재 전압 값을 나타내는 문자열을 저장합니다. 내가 이것을 성취 할 수있는 최선의 방법은 무엇입니까? 감사.

답변

2

매분 밀리 초가 tkinter가 처리 할 수있는 것보다 많습니다. 그것은 전압을 가져 오는 것이 얼마나 비쌉니까 조금 달려 있습니다. 밀리 초보다 오래 걸리는 경우 스레드 또는 다중 처리가 필요합니다.

가장 간단한 해결책은 after을 사용하여 매 밀리 초 단위로 데이터를 검색하도록 예약하는 것입니다.하지만 다시 확인할 수는 있습니다. 문제는 이벤트 루프가 이벤트를 처리하는 데 시간이 필요하며 전압을 가져 오지 않는 작은 시간 창을 제공하면 GUI가 느려질 수 있습니다.

일반적으로 어떤 작업을 수행하는 함수를 작성한 다음 나중에 다시 호출하기 위해 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

안녕하세요. Bryan, 저는 Tk() 메소드를 사용하여 매번 tms마다 데이터를 가져 오는 메소드를 작성하는 솔루션을 더 찾고있었습니다. 오히려 데이터를 가져 오는 독립 실행 형 메서드가 좋겠어요. 예를 들어, w 루프에서 get 전류 전압 메소드를 계속 호출하는 방법이 있습니다. – DeeTee

+0

@DeeTee : 예, 스레드를 사용하는 경우 예. GUI 스레드 내에서 루프의 함수를 호출하는 유일한 방법은'after'를 사용하는 것입니다. –

+0

내가 시작하는 데 도움이되는 예제 또는 의사 코드를 줄 수 있다고 생각하십니까? – DeeTee

관련 문제