PySerial:错误-读取串行时缓冲区已满

时间:2018-12-27 10:17:35

标签: python-3.x rabbitmq pyserial python-pika

我不确定这是否是问这个问题的正确地方,因为它与编程错误不完全相关。但是仍然与Python有关,所以要问。

我的情况

我正在使用ST(x-nucleo-lpm01a)的功率计。链接具有该板的用户手册(User manual)。该仪表可以通过串行方式进行控制,并具有用于控制屏蔽层不同方面的API。

串行通信参数:

  • 波特率:3686400波特
  • 数据:8位
  • 停止:1位
  • 奇偶校验:无
  • 流量控制:无

我正在使用Pyserial与盾牌进行通信。

为了读取序列以及能够向屏蔽发送命令,我实现了两个脚本,它们都通过Rabbitmq服务器进行通信。它们分别称为CLI和Powershield。

CLI(命令行界面-CLI)通过某些绑定通过RabbitMQ将命令发送到Powershield。 Rabbit中的所有绑定都是type-topic。

问题

我现在有两个问题。

  • 问题#1

当前,我正在从终端上打印从串行接收的数据。但是我收到缓冲区数据的错误消息。来自防护罩的确切错误消息是

ERROR: Buffer data transfer error (data to buffer comm itf Tx meas data): Buffer full (4)

我正在阅读下面的函数中的序列号。主体只是Rabbitmq的JSON,带有“ cmd”作为“ start”。目前,我通过冲洗序列来解决此问题,然后睡眠100毫秒。 但是现在我有计时错误。

  • 问题#2

此外,数据以接近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")

0 个答案:

没有答案