2011-09-20 2 views
2

나는 블루투스를 통해 직렬 포트를 통해 전송되는 데이터를 읽을 수있는 파이썬 스크립트를 작성하고 경과 시간을 계산해야하는 코드를 디버깅하고 있습니다. 각 연속 패킷. 시리얼 포트에서 데이터를 읽는 방법을 알고 있지만 각 패킷 사이의 시간을 계산하는 데 문제가 있습니다.시리얼 포트를 통해받은 2 연속 패킷 사이의 시간을 계산하는 파이썬 스크립트

어떤 제안이 도움이 될 것입니다.

감사합니다.

+1

코드를 제공 할 수 있습니까? – Velociraptors

답변

0

같은 것을 사용하고 경과 시간 (초)을 찾아 빼기하는 것입니다.

import time 

# receive one packet 
t0 = time.time() 
# then receive the other packet 
t1 = time.time() 

print 'Time between packets (seconds):', t1 - t0 
+1

나는 당신의 접근법을 시도했다 ... 나는 더 복잡한 것이 필요하지 않은 어떤 방법을하고 있었다. ... thanks :) – serendipity

+0

당신은 환영합니다! 내 대답이 도움이 되었기 때문에 기쁩니다. :) 코드를 사용하여 위로 감은 경우 내 대답 옆에있는 녹색 체크 표시를 클릭하여 "아직 열림"상태이고 더 많은 답변이 필요한 질문에 더 이상 질문이 나타나지 않게하고 계속 스택 오버플로를 즐기시기 바랍니다 ! –

1

트릭을 할 수 있습니다. IntTimer() 객체를 만들고 패킷을받을 때마다 .stamp()를 호출하면됩니다. 시작일 뿐이므로 원하는 작업을 수행하면 이전 스탬프 등을 정리하기 위해이를 변경해야 할 수도 있습니다. 그렇지 않으면 self.timestamps가 성장하고 커질 것입니다. self.timestamps를 사용하여 패킷 간의 평균 시간 등을 계산할 수 있습니다.

import time 

class IntTimer: 
    def __init__(self): 
     self.timestamps = [] 

    def stamp(self): 
     if self.timestamps: 
      last = self.timestamps[-1] 
     else: 
      last = False 

     now = time.time() 

     self.timestamps.append(now) 

     if last: 
      #return the time since the last packet 
      return now - last 
     else: 
      return -1   

이것은 매우 간단한 대답입니다. 그렇다면 더 복잡한 질문을하는 것이 좋습니다.

+0

솔루션을 제공해 주셔서 감사합니다 ... 저는 귀하의 솔루션과 비슷한 것을 찾고 있었으며 문제에 대해 많은 명확성과 통찰력을 갖게되었습니다. 다시 감사드립니다! – serendipity

1

왜 파이썬 time 모듈을 사용하여 시간 차이를 계산하지 않습니까? 더 높은 정밀도가 필요한 경우 select 시스템 호출을 사용하여 자신의 타이머를 구현할 수 있습니다.

은 그러나 더 나은 솔루션은 내가 time.time()을 사용 Portmon

+0

'timedelta'를 사용하면 가장 신뢰할 수 있고 강력한 방법이 될 것이며, Portmon을 사용하여 보증 할 수는 없습니다. – brc

0

이것이 내가 작성한 것이며 작동했습니다. 답장을 보내 주셔서 감사합니다.

#!/bin/python 

import serial 
import time 


time_stamp_prev = 0 

ser = serial.Serial( \ 
    port="/dev/tty.bluetoothmodule", \ 
    baudrate=115200, \ 
    parity=serial.PARITY_NONE, \ 
    stopbits=serial.STOPBITS_ONE, \ 
    bytesize=serial.EIGHTBITS) 

while True: 
    if ser.inWaiting() > 0: 


    print ser.readline(); 
      time_stamp_curr = time.time() 
      time_between_packets = time_stamp_curr - time_stamp_prev 
      time_stamp_prev = time_stamp_curr 
관련 문제