目标:
现在,我有一个通过射频链路模块的串行传输是稳定的,并且很少有损坏的条目。由于射频链路模块,串行传输的最大波特率为4800。
问题:
在发射机pi打印值和接收器pi打印值之间似乎有2-4秒的差异。我不知道这种延迟是从何而来,为何如此之大。请注意,接收pi上的信号与发射机pi发送的数据完全相同,但2-4秒后。即使当我绕过发射机/接收机模块,用跳线连接Tx和Rx引脚时,也能看到同样的延迟。
是什么导致接收Pi上的数据在很长时间后被解码?我已经粘贴了下面的代码。
import serial
import struct
ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800
iCount = 0
bProgramLoop = True
while (bProgramLoop == True):
iOne = iCount
if (iOne == 100):
iOne = 0
iTwo += 1
iCount = 0
if (iTwo == 100):
iTwo = 0
iThree += 1
if (iThree == 100):
iThree = 0
iFour += 1
if (iFour == 100):
iFour = 0
iFive += 1
if (iFive == 100):
iFive = 0
lData = [iOne,iTwo,iThree,iFour,iFive] # i have done it like this so that I can track in real time where the transmitter is and receiver is with respect to real time changes on the transmitter side
sData = struct.pack('5B',*lData)
ser.write(sData)
print sData
iCount += 1
import serial
import struct
ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800
bProgramLoop = True
while (bProgramLoop == True):
sSerialRead = ser.read(5)
tData = struct.unpack('5B',sSerialRead)
print tData
Tx打印字符串sData和Rx打印触摸tData之间的时间差在2-4秒之间。struct.unpack函数慢吗?
我需要这个时差是绝对最小的。有什么想法吗?
发布于 2016-05-22 14:12:08
首先,我不确定ser.write()
是否是异步调用。如果使用的是pySerial库,那么文档会说这是一个阻塞调用。
也许试着:
...
ser.write(sData)
ser.flush() # Force the 'send'
print sData
...
此外,您的ldata
可能更容易填充如下所示:
lData = [iCount % 100, iCount % 10000, ...etc]
此外,设置写超时可能会有帮助(但我不这么认为)。
发布于 2016-05-25 20:38:09
(代表“任择议定书”张贴)。
正如Doddie所建议的那样,在ser.flush之后使用ser.write命令。这会在Rx端产生几乎即时的响应。总体主回路样本率已经下降了一点,但至少对我来说,这并不是一个交易的破坏者。
https://stackoverflow.com/questions/37349685
复制相似问题