Python脚本,用于计算通过串行端口接收的2个连续数据包之间的时间

时间:2011-09-20 16:10:29

标签: python pyserial

我正在调试我的代码,我需要编写一个python脚本,它可以读取通过蓝牙通过串口发送的数据,并计算每个连续数据包之间经过的时间。我知道如何从串口读取数据但我在计算每个数据包之间的时间时遇到问题。

任何建议都会非常有用。

谢谢!

4 个答案:

答案 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          

这是一个非常简单的答案,所以如果你问一个更复杂的问题,那么就这么说吧。

答案 1 :(得分:1)

为什么不使用python time模块来计算时差?如果您需要更精确,您可以使用select系统调用实现自己的计时器。

但更好的解决方案是使用 Portmon

之类的内容

答案 2 :(得分:0)

我会使用time.time()并减去查找经过的秒数。

import time

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

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

答案 3 :(得分: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