python-doipclient 源文档翻译
doipclient 是一个纯 Python 3 的诊断通过互联网(DoIP)客户端库,可用于通过汽车以太网与现代电子控制单元(ECUs)通信。它从短期同步客户端的角度实现了 ISO-13400(2019 年版)中的大部分功能。主要用途是作为 udsoncan库的传输层实现。Python 3.6 或更高版本。
·
python-doipclient 源文档翻译
doipclient 是一个纯 Python 3 的诊断通过互联网(DoIP)客户端库,可用于通过汽车以太网与现代电子控制单元(ECUs)通信。它从短期同步客户端的角度实现了 ISO-13400(2019 年版)中的大部分功能。主要用途是作为 udsoncan 库的传输层实现。
文档
文档可在以下链接查看
需求
Python 3.6 或更高版本
安装
使用 pip 进行安装:
pip install doipclient
示例
这是使用 python_doip 而非 IsoTPSocketConnection 更新后的 udsoncan 示例:
import SomeLib.SomeCar.SomeModel as MyCar
import udsoncan
from doipclient import DoIPClient
from doipclient.connectors import DoIPClientUDSConnector
from udsoncan.client import Client
from udsoncan.exceptions import *
from udsoncan.services import *
udsoncan.setup_logging()
ecu_ip = '127.0.0.1'
ecu_logical_address = 0x00E0
doip_client = DoIPClient(ecu_ip, ecu_logical_address)
conn = DoIPClientUDSConnector(doip_client)
with Client(conn, request_timeout=2, config=MyCar.config) as client:
try:
client.change_session(DiagnosticSessionControl.Session.extendedDiagnosticSession) # 3
client.unlock_security_access(MyCar.debug_level) # 假设的安全级别。假设来自虚构库的整数,例如值为 5
client.write_data_by_identifier(udsoncan.DataIdentifier.VIN, 'ABC123456789') # VIN 的标准 ID 为 0xF190。编码配置在客户端中
print('Vehicle Identification Number successfully changed.')
client.ecu_reset(ECUReset.ResetType.hardReset) # 硬重置 = 0x01
except NegativeResponseException as e:
print(f'Server refused our request for service {e.response.service.get_name()} with code "{e.response.code_name}" (0x{e.response.code:02x})')
except (InvalidResponseException, UnexpectedResponseException) as e:
print(f'Server sent an invalid payload : {e.response.original_payload}')
# 因为我们重置了 UDS 服务器,所以我们还需要重新连接/激活 DoIP 套接字
# 另外,我们可以在 DoIPClient 上使用 auto_reconnect_tcp 标志,以便让 UDS 客户端清理
# 注意:ECU 不会立即重启,所以可能需要在继续之前调用 sleep()
doip_client.reconnect()
client.tester_present()
# 当完成时关闭 DoIP 套接字。另外,我们可以使用 conn 上的 close_connection 标志,使 UDS 客户端进行清理
doip_client.close()
python-uds 支持
git clone https://github.com/jacobschaer/python-uds
from uds import Uds
ecu = Uds(transportProtocol="DoIP", ecu_ip="192.168.1.1", ecu_logical_address=1)
try:
response = ecu.send([0x3E, 0x00])
print(response) # 此处应打印 [0x7E, 0x00]
except:
print("Send did not complete")
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)