1

我目前正在使用 Popen 通过命令行向实用程序(尤其canutilscansend函数)发送指令。

整个函数看起来像这样。

def _CANSend(self, register, value, readWrite = 'write'):
    """send a CAN frame"""
    queue=self.CANbus.queue
    cobID = hex(0x600 + self.nodeID)     #assign nodeID
    indexByteLow,indexByteHigh,indexByteHigher,indexByteHighest = _bytes(register['index'], register['objectDataType'])
    subIndex = hex(register['subindex'])
    valueByteLow,valueByteHigh,valueByteHigher,valueByteHighest = _bytes(value, register['objectDataType'])
    io = hex(COMMAND_SPECIFIER[readWrite])
    frame = ["cansend", self.formattedCANBus, "-i", cobID, io, indexByteLow, indexByteHigh, subIndex, valueByteLow, valueByteHigh, valueByteHigher, valueByteHighest, "0x00"]
    Popen(frame,stdout=PIPE)
    a=queue.get()
    queue.task_done()
    return a

我在尝试Popen快速连续发送帧(帧实际上执行发送帧的命令)时遇到了一些问题,但发现 Popen 行需要大约 35 毫秒的时间来执行......每个另一条线不到2我们。

那么......什么可能是调用cansend函数的更好方法(再次,它是canutils实用程序的一部分......_CANSend是上面调用的python函数)更快?

4

1 回答 1

4

我怀疑大部分时间是由于每次运行 cansend 时分叉的开销。为了摆脱它,您需要一种不必为每次发送创建新进程的方法。

根据这篇博客文章, python 3.3 支持SocketCAN。它应该让您的程序直接创建和使用 CAN 套接字。这可能是你想要去的方向。

于 2013-05-05T02:34:13.803 回答