我不确定这是否是问这个问题的正确地方,因为它与编程错误不完全相关。但是仍然与Python有关,所以要问。
我的情况
我正在使用ST(x-nucleo-lpm01a)的功率计。链接具有该板的用户手册(User manual)。该仪表可以通过串行方式进行控制,并具有用于控制屏蔽层不同方面的API。
串行通信参数:
我正在使用Pyserial与盾牌进行通信。
为了读取序列以及能够向屏蔽发送命令,我实现了两个脚本,它们都通过Rabbitmq服务器进行通信。它们分别称为CLI和Powershield。
CLI(命令行界面-CLI)通过某些绑定通过RabbitMQ将命令发送到Powershield。 Rabbit中的所有绑定都是type-topic。
问题
我现在有两个问题。
当前,我正在从终端上打印从串行接收的数据。但是我收到缓冲区数据的错误消息。来自防护罩的确切错误消息是
ERROR: Buffer data transfer error (data to buffer comm itf Tx meas data): Buffer full (4)
我正在阅读下面的函数中的序列号。主体只是Rabbitmq的JSON,带有“ cmd”作为“ start”。目前,我通过冲洗序列来解决此问题,然后睡眠100毫秒。 但是现在我有计时错误。
此外,数据以接近4Mb / sec的速度发送,因此缓冲区中有很多数据。因此,如果我将任何其他命令发送给屏蔽(通过串行),则似乎不起作用。我猜该脚本仍在忙于清空缓冲区,因此串行上没有其他读取操作有效(或者至少我看不到)
我的实施
def start_acq(self, body):
print('[x] Executing command: {}'.format(body["cmd"]))
write = '{}\r\n'.format(body["cmd"])
self.ser.write(write.encode())
# Read Serial
data = self.ser.readline()
while len(data) != 0:
print("[x] {} ".format((data).decode('utf-8')))
self.ser.flushOutput()
time.sleep(0.1)
data = self.ser.readline()
print("[x] Done")