python DoIPClient详解
DoIPClient 是 doipclient 库中的一个核心类,用于实现诊断通过 IP(DoIP)协议与汽车电子控制单元(ECU)进行通信。以下是对 DoIPClient 类的详细解释:
构造函数(init 方法)参数:
ecu_ip_address (str): 目标ECU的IP地址。应为IPv4或IPv6地址的字符串形式。ecu_logical_address (int): 目标ECU的逻辑地址,是一个整数值,通常范围是0x0001到0x0DFF。tcp_port (int, optional): DoIP数据通信的TCP端口,默认值为13400。udp_port (int, optional): DoIP数据通信的UDP端口,默认值为13400。activation_type (ActivationType, optional): 初始连接时使用的激活类型,默认为 ActivationType.Default。protocol_version (int, optional): 要使用的DoIP协议版本,默认为2,代表ISO 13400 2012版。client_logical_address (int, optional): 客户端自身的逻辑地址,默认为3584。client_ip_address (str, optional): 客户端用于通信的IP地址,可以是IPv4或IPv6。use_secure (bool or ssl.SSLContext, optional): 是否使用TLS/SSL加密通信。如果为True,将使用默认的SSL上下文。auto_reconnect_tcp (bool, optional): 是否在TCP连接被对方关闭时尝试自动重连。
主要方法:
await_vehicle_announcement(udp_port=13400, timeout=None, ipv6=False, source_interface=None, sock=None): 等待ECU启动时发送的车辆公告消息。get_entity(ecu_ip_address='255.255.255.255', protocol_version=2, eid=None, vin=None): 请求ECU的车辆识别响应消息。request_entity_status(): 请求ECU的DoIP实体状态响应。request_activation(activation_type, vm_specific=None, disable_retry=False): 请求ECU激活指定类型的连接。request_alive_check(): 请求ECU发送存活检查响应。request_diagnostic_power_mode(): 请求ECU发送诊断电源模式响应。request_vehicle_identification(eid=None, vin=None): 发送车辆识别请求并等待响应。send_diagnostic(diagnostic_payload, timeout=2): 向ECU发送原始诊断负载(例如UDS请求)。send_doip(payload_type, payload_data, transport=TransportType.TRANSPORT_TCP, disable_retry=False): 向DoIP套接字发送带有正确DoIP头的负载。
使用示例:
以下是如何使用 DoIPClient 与ECU进行通信的基本示例:
from doipclient import DoIPClient# 假设已知ECU的IP地址和逻辑地址
ecu_ip = '192.168.1.2'
ecu_logical_address = 0x0001# 创建DoIP客户端实例
client = DoIPClient(ecu_ip, ecu_logical_address)# 请求ECU的实体状态
entity_status = client.request_entity_status()
print(entity_status)# 请求ECU激活
activation_response = client.request_activation(activation_type=0)
print(activation_response)# 发送UDS诊断请求
uds_payload = b'\x10\x03' # 示例UDS请求,如ECU重置请求
diagnostic_response = client.send_diagnostic(uds_payload)
print(diagnostic_response)