doipclient +udsoncan实现以太网诊断,doip刷写升级
doipclient简介
doipclient 是一个纯 Python 3 的诊断通过互联网(DoIP)客户端库,可用于通过汽车以太网与现代电子控制单元(ECUs)通信。它从短期同步客户端的角度实现了 ISO-13400(2019 年版)中的大部分功能。主要用途是作为 udsoncan https://github.com/pylessard/python-udsoncan_ 库的传输层实现。
- 文档
- 需求
Python 3.6 或更高版本
- 安装
使用 pip 进行安装:
pip install doipclient
Python-udsoncan简介:
Python-udsoncan该项目是使用Python 3编写的统一诊断服务(UDS)协议的实现,该协议由ISO 14229标准定义。代码遵循MIT许可,并托管在GitHub上(pylessard/python-udsoncan)
- 文档
- 系统需求
Python 3.7 及以上版本
- 安装
通过 pip 进行安装:
pip install udsoncan
代码示例:
我们先导包
from doipclient import DoIPClient
from doipclient.connectors import DoIPClientUDSConnector
from udsoncan.client import Client
from udsoncan import configs
import logging
创建一个doip,uds诊断类
class DOIPClient:
def __init__(self, logger=None):
self.logger = logger if logger else logging.getLogger("DOIPClient")
self.doip_client = None
self.uds_client = None
self._configs = dict(configs.default_client_config)
创建连接的方法
def connect(self, reconnect_tcp=False):
self.doip_client = DoIPClient(ecu_ip_address="ecu_ip",
ecu_logical_address=0x1201,
client_ip_address="诊断电脑ip",
client_logical_address=0X0E80,
auto_reconnect_tcp=reconnect_tcp)
_connect = DoIPClientUDSConnector(self.doip_client)
_connect.open()
try:
self.uds_client = Client(_connect, request_timeout=3, config=self._configs)
self.uds_client.suppress_positive_response.enabled = True
self.logger.debug("DoIP connection has established.")
return self.uds_client
except Exception as e:
self.logger.warning('DoIP connection has NOT established.')
实现诊断能力:
def close(self):
self.doip_client.close()
def disconnect(self):
"""
Disconnect from the UDS server.
"""
try:
if self.doip_client is not None:
self.doip_client.close()
except Exception as e:
self.logger.error(f"使用关闭连接的时候出现异常{e}")
def session_control(self, session):
"""
Change the UDS session.
"""
response = self.uds_client.change_session(session)
return response
def send_request(self, request):
"""
Send a UDS request to the server and wait for a response.
"""
response = self.uds_client.send_request(request)
return response
def send_request_no_response(self, request):
"""
Send a UDS request to the server without waiting for a response.
"""
response = self.uds_client.send_request_no_response(request)
return response
def ecu_reset(self, reset_type=1):
"""
Reset the ECU.
"""
response = self.uds_client.ecu_reset(reset_type)
return response
后续的诊断和刷写根据需求定义方法