我试图运行代码在CAN上发送UDS扩展诊断请求。
from uds import Uds
PCM = Uds(resId=0x200, reqId=0x250, transportProtocol="CAN", interface="vector", channel="0", appName="CANoe")
response = PCM.send([0x10, 0x03])但我得到以下类型错误:
Traceback (most recent call last):
File "C:\__work__\Karol_projects\main.py", line 26, in <module>
PCM = Uds(resId=0x200, reqId=0x250, transportProtocol="CAN", interface="vector", channel="0", appName="CANoe")
File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\Uds\Uds.py", line 43, in __init__
self.tp = tpFactory(self.__transportProtocol, configPath=configPath, **kwargs)
File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\TpFactory.py", line 37, in __call__
return CanTp(configPath=configPath, **kwargs)
File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanTp.py", line 96, in __init__
self.__connection = canConnectionFactory(self.callback_onReceive,
File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanConnectionFactory.py", line 52, in __call__
CanConnectionFactory.connections[connectionKey] = CanConnection(callback, filter,
File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanConnection.py", line 21, in __init__
listener = can.Listener()
TypeError: Can't instantiate abstract class Listener with abstract method on_message_received我见过类似的帖子,但无论如何我都找不到合适的解决办法。我只导入python和python模块,并试图发送can消息。我对OOP没有太多的经验,尤其是在抽象类方面。
发布于 2022-08-22 11:56:06
python-uds是一个较旧的库,已经有3年半没有见过新版本了(版本1.0.2于2019年3月发布)。另一方面,python-can在这段时间里取得了很大的进步,并发布了一个重要的更新,版本4.0.0 2022年2月。该版本与python-uds根本不兼容,从而导致您看到的跟踪。
你有两个选择:
python-can;上一次发布python-uds时,python-can发布了3.1.1版本,但以后的3.x.x版本也可能有效。有关完整列表,请参见在PyPI上发布页面。您可以试着阅读变化量g,看看如果上一个3.x发行版3.3.4不起作用,是否有什么特别之处,但3.1.1确实会查看最新版本的工作效果。或者,只需将版本划分为3.3.4和3.1.1,直到找到最后一个兼容版本。https://stackoverflow.com/questions/73444356
复制相似问题