返回顶部
首页 > 资讯 > 后端开发 > Python >使用python执行uds诊断
  • 629
分享到

使用python执行uds诊断

python汽车 2023-09-04 13:09:28 629人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

        主要是通过python-can模块与pcan等支持的硬件通讯,uds协议层使用udsoncan模块和can-isotp模块实现uds诊断。 1、模块安装及相关文档         Python-can模块         p

        主要是通过python-can模块与pcan等支持的硬件通讯,uds协议层使用udsoncan模块和can-isotp模块实现uds诊断。

1、模块安装及相关文档

        Python-can模块

        pip install python-can

        相关文档链接:Installation - python-can 4.1.0 documentation

        

        udsoncan模块

        pip install udsoncan

        相关文档链接:Python implementation of UDS standard (ISO-14229) — udsoncan 0 documentation

        can-isotp模块

        pip install can-isotp

        相关文档链接:Python support for IsoTP Transport protocol (ISO-15765) — isotp 0 documentation

2、相关示例

        下面示例展示了如何将PythonIsoTpConnection与Vector接口一起使用。

from can.interfaces.vector import VectorBusfrom udsoncan.connections import PythonIsoTpConnectionfrom udsoncan.client import Clientimport isotp# Refer to isotp documentation for full details about parametersisotp_params = {   'stmin' : 32,                          # Will request the sender to wait 32ms between consecutive frame. 0-127ms or 100-900ns with values from 0xF1-0xF9   'blocksize' : 8,                       # Request the sender to send 8 consecutives frames before sending a new flow control message   'wftmax' : 0,                          # Number of wait frame allowed before triggering an error   'tx_data_length' : 8,                  # Link layer (CAN layer) works with 8 byte payload (CAN 2.0)   'tx_data_min_length' : None,           # Minimum length of CAN messages. When different from None, messages are padded to meet this length. Works with CAN 2.0 and CAN FD.   'tx_padding' : 0,                      # Will pad all transmitted CAN messages with byte 0x00.   'rx_flowcontrol_timeout' : 1000,       # Triggers a timeout if a flow control is awaited for more than 1000 milliseconds   'rx_consecutive_frame_timeout' : 1000, # Triggers a timeout if a consecutive frame is awaited for more than 1000 milliseconds   'squash_stmin_requirement' : False,    # When sending, respect the stmin requirement of the receiver. If set to True, Go as fast as possible.   'max_frame_size' : 4095                # Limit the size of receive frame.}bus = VectorBus(channel=0, bitrate=500000)              # Link Layer (CAN protocol)tp_addr = isotp.Address(isotp.AddressingMode.NORMal_11bits, txid=0x123, rxid=0x456) # Network layer addressing schemestack = isotp.CanStack(bus=bus, address=tp_addr, params=isotp_params)               # Network/Transport layer (IsoTP protocol)stack.set_sleep_timing(0, 0)# Speed First (do not sleep)conn = PythonIsoTpConnection(stack)                     # interface between Application and Transport layerwith Client(conn, request_timeout=1) as client:         # Application layer (UDS protocol)   client.change_session(1)   # ...

        其他uds服务相关使用示例:

import udsoncanfrom udsoncan.connections import IsoTPSocketConnectionfrom udsoncan.client import Clientfrom udsoncan.exceptions import *from udsoncan.services import *udsoncan.setup_logging()conn = IsoTPSocketConnection('can0', rxid=0x123, txid=0x456)with Client(conn,  request_timeout=2, config=MyCar.config) as client:   try:      client.change_session(DiagnosticSessionControl.Session.extendedDiagnosticSession)  # integer with value of 3      client.unlock_security_access(MyCar.debug_level)   # Fictive security level. Integer coming from fictive lib, let's say its value is 5      client.write_data_by_identifier(udsoncan.DataIdentifier.VIN, 'ABC123456789')       # Standard ID for VIN is 0xF190. Codec is set in the client configuration      print('Vehicle Identification Number successfully changed.')      client.ecu_reset(ECUReset.ResetType.hardReset)  # HardReset = 0x01   except NegativeResponseException as e:      print('Server refused our request for service %s with code "%s" (0x%02x)' % (e.response.service.get_name(), e.response.code_name, e.response.code))   except InvalidResponseException, UnexpectedResponseException as e:      print('Server sent an invalid payload : %s' % e.response.original_payload)

安全算法示例,需要实现myalgo函数,并且uds的configs中的security_algo配置为myalgo,同时配置security_algo_params。

def myalgo(level, seed, params):"""Builds the security key to unlock a security level. Returns the seed xor'ed with pre-shared key."""   output_key = bytearray(seed)   xorkey = bytearray(params['xorkey'])   for i in range(len(seed)):      output_key[i] = seed[i] ^ xorkey[i%len(xorkey)]   return bytes(output_key)client.config['security_algo'] = myalgoclient.config['security_algo_params'] = dict(xorkey=b'\x12\x34\x56\x78')

使用DID配置配置客户端,并使用ReadDataByIdentifier请求服务器

import udsoncanfrom udsoncan.connections import IsoTPSocketConnectionfrom udsoncan.client import Clientimport udsoncan.configsimport structclass MyCustomCodecThatShiftBy4(udsoncan.DidCodec):   def encode(self, val):      val = (val << 4) & 0xFFFFFFFF # Do some stuff      return struct.pack('> 4                        # Do some stuff (reversed)   def __len__(self):      return 4    # encoded payload is 4 byte long.config = dict(udsoncan.configs.default_client_config)config['data_identifiers'] = {   0x1234 : MyCustomCodecThatShiftBy4,    # Uses own custom defined codec. Giving the class is ok   0x1235 : MyCustomCodecThatShiftBy4(),  # Same as 0x1234, giving an instance is good also   0xF190 : udsoncan.AsciiCodec(15)       # Codec that read ASCII string. We must tell the length of the string   }# IsoTPSocketconnection only works with SocketCAN under linux. Use another connection if needed.conn = IsoTPSocketConnection('vcan0', rxid=0x123, txid=0x456)with Client(conn,  request_timeout=2, config=config) as client:   response = client.read_data_by_identifier([0xF190])   print(response.service_data.values[0xF190]) # This is a dict of DID:Value   # Or, if a single DID is expected, a shortcut to read the value of the first DID   vin = client.read_data_by_identifier_first(0xF190)   print(vin)  # 'ABCDE0123456789' (15 chars)

来源地址:https://blog.csdn.net/qq_45303968/article/details/126251064

--结束END--

本文标题: 使用python执行uds诊断

本文链接: https://lsjlt.com/news/393565.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用python执行uds诊断
            主要是通过python-can模块与pcan等支持的硬件通讯,uds协议层使用udsoncan模块和can-isotp模块实现uds诊断。 1、模块安装及相关文档         python-can模块         p...
    99+
    2023-09-04
    python 汽车
  • 使用SQL_TRACE进行数据库诊断
    http://www.eygle.com/case/Use.sql_trace.to.Diagnose.database.htm 包dbms_system定义如下: SQL> d...
    99+
    2024-04-02
  • 使用ErrorStack进行错误跟踪及诊断!
    在使用oracle数据库的过程中,可能会遇到各种各样的错误或异常,很多异常提示并不具体,我们有必要了解一下oracle的ErrorStack跟踪方式。ErrorStack是oracle提供的一种对于错...
    99+
    2024-04-02
  • 如何使用ErrorStack进行错误跟踪及诊断
    这篇文章主要为大家展示了“如何使用ErrorStack进行错误跟踪及诊断”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用ErrorStack进行错误跟踪及...
    99+
    2024-04-02
  • win11内存诊断如何使用
    这篇文章主要介绍“win11内存诊断如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win11内存诊断如何使用”文章能帮助大家解决问题。win11内存诊断使用的方法:第一步,点击底部“开始菜单...
    99+
    2023-06-30
  • Oracle执行计划突变诊断之统计信息收集问题
    Oracle执行计划突变诊断之统计信息收集问题1.  情形描述DB version:11.2.0.4WITH SQL1 AS  (SELECT&nb...
    99+
    2024-04-02
  • Oracle诊断工具RDA使用记录
    RDA是Remote Diagnostic Agent 的简称,是Oracle用来收集、分析数据库的工具,运行该工具不会改变系统的任何参数,RDA收集的相关数据非常全面,可以用于oracle巡检及日常监控分...
    99+
    2024-04-02
  • mysql中怎么利用performance_schema进行故障诊断
    小编给大家分享一下mysql中怎么利用performance_schema进行故障诊断,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!instrunments:生产者,用于采集mysql中各...
    99+
    2024-04-02
  • 阿里云ECS诊断工具使用指南
    阿里云ECS诊断工具是一款针对阿里云ECS云服务器进行诊断的工具,它可以提供服务器性能、资源使用情况、故障信息等详细的诊断报告,帮助用户快速定位和解决问题。 阿里云ECS诊断工具使用指南阿里云ECS诊断工具是一款针对阿里云ECS云服务器进行...
    99+
    2023-11-01
    阿里 使用指南 工具
  • win8系统内存诊断功能使用图解
      使用Windows内存诊断工具:   按照上面的提示,我们选择推荐项默认的第一个,保存好现在需要保存的文档和工作后我们点击:立即重新启动并检查问题(推荐)   所有的操作都是自动的,此后计算机会重启,...
    99+
    2022-06-04
    内存 功能 系统
  • 【JVM 监控工具】性能诊断--JProfiler的使用
    文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具三、图形化综合诊断工具JVisualvmJProfilerJConsole 四、分布式应用性能诊断五、IDEA中设置JProf...
    99+
    2023-09-03
    jvm java 开发语言
  • win10怎么使用网络故障诊断功能
    本文小编为大家详细介绍“win10怎么使用网络故障诊断功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10怎么使用网络故障诊断功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。诊断功能方法:首先在Win...
    99+
    2023-06-28
  • 使用timeit测试python语句执行
    使用timeit库可以测试小段代码片段的执行时间,简单示例如下: 代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import random import timeit f...
    99+
    2023-01-31
    语句 测试 timeit
  • 如何利用errorstack事件进行错误跟踪和诊断
    这篇文章主要为大家展示了“如何利用errorstack事件进行错误跟踪和诊断”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何利用errorstack事件进行错...
    99+
    2024-04-02
  • Linux系统如何使用Dstat综合性能诊断
    这篇文章主要为大家展示了“Linux系统如何使用Dstat综合性能诊断”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何使用Dstat综合性能诊断”这篇文章吧。Linux系统管理员...
    99+
    2023-06-28
  • .NET垃圾回收GC诊断工具dotnet-gcmon使用
    今天介绍一个新的诊断工具 dotnet-gcmon, 也是全局 .NET CLI 工具, 它可以监控到 .NET 程序的 GC, 能获取到的信息也很详细, 另外 maoni 大佬也...
    99+
    2024-04-02
  • SQL Server中怎么使用ISNULL执行空值判断查询
    SQL Server中怎么使用ISNULL执行空值判断查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有如下查询:复制代码 ...
    99+
    2024-04-02
  • linux如何使用strace命令定位和诊断故障
    本篇内容介绍了“linux如何使用strace命令定位和诊断故障”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过Strace定位故障原因这...
    99+
    2023-06-12
  • 诊断数据库故障:使用日志揭开谜团
    步骤 1:收集日志文件 大多数数据库都会生成日志文件,其中记录了数据库活动、错误和警告。这些文件通常存储在数据库服务器的特定目录中。常见的文件路径包括: MySQL:/var/log/mysql.log PostgreSQL:/var/...
    99+
    2024-04-02
  • python执行使用shell命令方法分享
    1. os.system(shell_command) 直接在终端输出执行结果,返回执行状态0,1 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果com...
    99+
    2022-06-04
    命令 方法 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作