我目前正在使用Popen向一个实用程序发送指令(canutils...特别是cansend功能)。
整个函数如下所示。
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行的执行时间大约为35ms……每隔一条线都不到两个我们。
所以..。有什么更好的方法可以更快地调用cansend函数(也是canutils实用程序的一部分……_CANSend是上面调用的python函数)?
发布于 2013-05-05 10:34:14
我怀疑大部分时间是由于每次运行cansend时forking的开销造成的。为了摆脱它,您需要一种不必为每次发送创建新进程的方法。
根据this blog post的说法,Python3.3支持SocketCAN。它应该让你的程序直接创建和使用CAN套接字。这可能是你想要的方向。
https://stackoverflow.com/questions/16380528
复制相似问题