我尝试按照与here中完全相同的方法为python-can(4.0.0)实现一个通知程序,但是我得到了以下错误:
Exception in thread can.notifier for bus "socketcan channel 'can0'":
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/dist-packages/can/notifier.py", line 121, in _rx_thread
self._on_message_received(msg)
File "/usr/local/lib/python3.7/dist-packages/can/notifier.py", line 143, in _on_message_received
res = cast(Union[None, Optional[Awaitable[Any]]], callback(msg))
TypeError: 'NoneType' object is not callables
我的代码:
import os
import can
os.system('sudo ip link set can0 up type can bitrate 500000')
bus = can.interface.Bus(channel = 'can0', bustype = 'socketcan')
def parseData(can):
SingleCanFrame = can.Message
notifier = can.Notifier(bus,[parseData(can)])
while(1):
continue
os.system('sudo ifconfig can0 down')
我真的不明白我做错了什么,通知程序上的python can文档也不是很有帮助。
2条答案
按热度按时间fkaflof61#
就像@TimRoberts说的,我传递函数的方式错误。
这是一个即使没有CAN硬件也能工作和测试的代码。
i2loujxw2#
由于互联网上关于此主题的信息不多,因此我在此发表了自己的意见,请按照我的脚本帮助社区。我正在使用带有CAN驱动程序的工业计算机采集CAN J1939数据,这些数据由VECTOR设备使用CANNalyzer SW生成。此代码对我来说非常有效,并且以良好的采样率(ms)收集数据。