![313b3ace-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AQjHyAAACMFhInXw591.png)
此文章转载自“博客园”作者:疯狂的机器人
![3147e3dc-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AVBG3AAACMFhInXw101.png)
![3152581c-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AZtarAAAAp5VwO-k779.png)
![3160b844-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2ASdyTAAAAp5VwO-k025.png)
环境搭建
ENVIRONMENT SETUP
![316c3e08-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AV9OcAAAAp5VwO-k461.png)
![31765852-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AaJXvAAAAp5VwO-k330.png)
01
![317dace2-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU6AUJeuAAHGGD1nkhw373.png)
硬件环境:
①上位机:PEAK PCAN
PCAN-USB驱动:【虹科】带您了解PCAN如何获取驱动以及如何接线
②下位机:ECM(发动机控制模块)
02
Python环境:下载地址:https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exepip3 install robotframework==3.2.2pip3 install robotframework-ride==1.7.4.2pip3 install xlrd==1.2.0pip3 install udsoncan==1.14pip3 install python-can==3.3.4pip3 install can-isotp==1.7![3152581c-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AZtarAAAAp5VwO-k779.png)
![3160b844-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2ASdyTAAAAp5VwO-k025.png)
项目介绍
PROJECT INTRODUTION
![316c3e08-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AV9OcAAAAp5VwO-k461.png)
![31765852-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU2AaJXvAAAAp5VwO-k330.png)
01
![31daec7c-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU6Aeak3AAEQxKgWpPc897.png)
10−−3E:L2层robot测试用例
Public.robot:L1层关键字方法
UDS_TestReport.zip:自动化测试报告
udstest.py:python封装自定义uds测试方法
UDSTestcase.xlsx:UDS诊断测试用例
02
udstest.py# _*_ coding:utf-8 _*_
from can.interfaces.pcan.pcan import PcanBus
from udsoncan.connections import PythonIsoTpConnection
import xlrd, os, udsoncan, isotp, sys, binascii
class udstest(object):
def __init__(self):
udsoncan.setup_logging() # udslog
def get_xlsx(self, sheet):
"获取指定Excel数据"
excel = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'UDSTestcase.xlsx') # 获取用例文件路径
file = xlrd.open_workbook(excel)
list = []
sheet = file.sheet_by_name(sheet) # 获得指定sheet数据
row_value1 = sheet.row_values(0) # 获取第1行的标题
nrows = sheet.nrows # 获取当前sheet行数
ncols = sheet.ncols # 获取当前sheet列数
for i in range(1, nrows): # 从第2行遍历当前sheet
row = sheet.row_values(i) # 获取行数据
dict = {} # 创建空字典
for j in range(0, ncols): # 遍历sheet列,组成字典
if row_value1[j] == 'NO.':
dict[row_value1[j]] = int(row[j])
else:
dict[row_value1[j]] = row[j] # 从第一列开始,将每一列的数据与第1行的数据组成一个键值对,形成字典
list.append(dict) # 将字典添加list中
return list
def set_can(self, txid, rxid):
"""can总线相关配置"""
if isinstance(txid, str) or isinstance(rxid, str):
txid = eval(txid)
rxid = eval(rxid)
isotp_params = {
'stmin': 5, # 流控帧间隔时间,0-127ms 或 100-900ns 值从 0xF1-0xF9
'blocksize': 0, # 流控帧单包大小,0表示不限制
'tx_padding': 0, # 当 notNone表示用于填充发送的消息的字节。
'rx_flowcontrol_timeout': 1000, # 在停止接收和触发之前等待流控制帧的毫秒数
'rx_consecutive_frame_timeout': 1000, # 在停止接收和触发 a 之前等待连续帧的毫秒数
}
try:
self.canbus = PcanBus(channel='PCAN_USBBUS1', bitrate=500000) # CAN总线初始化
self.tp_addr = isotp.Address(isotp.AddressingMode.Normal_29bits, txid=txid, rxid=rxid) # 网络层寻址方法
tp_stack = isotp.CanStack(bus=self.canbus, address=self.tp_addr, params=isotp_params) # 网络/传输层(IsoTP 协议)
self.conn = PythonIsoTpConnection(tp_stack) # 应用层和传输层之间建立连接
except:
print(sys.exc_info()[1])
else:
print('CAN配置成功')
def uds_request_respond(self, request_command):
"""发送uds请求和接收uds响应"""
if not isinstance(request_command, str): # 判断request_command数据类型
request_command = str(int(request_command))
requestPdu = binascii.a2b_hex(request_command.replace(' ', '')) # 处理request_command
if not self.conn.is_open():
self.conn.open() # 打开连接
try:
self.conn.specific_send(requestPdu) # 发送uds请求
except:
print("发送请求失败")
else:
print('UDS发送请求:%s' % request_command)
try:
respPdu = self.conn.specific_wait_frame(timeout=3) # 接收uds响应
except:
print('响应数据失败')
else:
res = respPdu.hex().upper()
respond = ''
for i in range(len(res)):
if i % 2 == 0:
respond += res[i]
else:
respond += res[i] + ' '
print('UDS响应结果:%s' % respond)
self.conn.close() # 关闭连接
self.canbus.shutdown() # 关闭总线
return respond.strip()
03
UDSTestcase.xlsx![31ee3df4-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU6AEUxFAABaL6a7Sqk675.png)
04
UDS_TestReport![31fcc2d4-8058-11ec-9e9d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9C/86/wKgaomTnzU6AY49JAAJWWvtCzR4860.png)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
测试
+关注
关注
8文章
4661浏览量
125445
发布评论请先 登录
相关推荐
TSMaster 的 CAN UDS 诊断操作指南(下)
UDSonCAN/CANFD的功能以及详细的使用操作。本文关键词:UDS,BootLoader,自动诊断流程,诊断系统变量目录Catalog4.TSMaster
![TSMaster 的 <b class='flag-5'>CAN</b> <b class='flag-5'>UDS</b> <b class='flag-5'>诊断</b>操作指南(下)](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
TSMaster 的 CAN UDS 诊断操作指南(上)
TSMaster可以少代码甚至零代码就可以完成诊断流程开发,诊断开发人员只需要熟悉诊断流程,就能打通研发、产线、售后整条链路环节。TSMaster的UDS
![TSMaster 的 <b class='flag-5'>CAN</b> <b class='flag-5'>UDS</b> <b class='flag-5'>诊断</b>操作指南(上)](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
汽车故障诊断UDS网络层原理讲解
汽车故障诊断 UDS(Unified Diagnostic Service)是利用ECU监测控制系统各组成部分的工作情况,发现故障后自动启动故障记录和处理逻辑。
发表于 01-24 12:37
•1322次阅读
![汽车故障<b class='flag-5'>诊断</b><b class='flag-5'>UDS</b>网络层原理讲解](https://file1.elecfans.com/web2/M00/BE/14/wKgZomWwlISAHk-SAAAhuL8j-9Q228.jpg)
![](https://file1.elecfans.com/web2/M00/BD/22/wKgaomWgnHWACTwPAAyEVUojK84753.png)
![](https://file1.elecfans.com/web2/M00/BA/04/wKgZomWOzZyAK-sLAACKf76akz4911.png)
![](https://file1.elecfans.com/web2/M00/B8/2E/wKgZomWCanKAEu2zAAQGbIbVS3w235.png)
UDS在CAN和以太网上的实现方案
JTAG是针对MCU或者SOC这种芯片的调试接口协议,而UDS更像是针对整个ECU的调试接口。UDS简单来说是一种Client/Server的通信服务,即Tester(诊断仪)向ECU发送诊断
发表于 11-28 09:56
•1755次阅读
![<b class='flag-5'>UDS</b>在<b class='flag-5'>CAN</b>和以太网上的<b class='flag-5'>实现</b>方案](https://file1.elecfans.com/web2/M00/B1/82/wKgaomVlSZqANyr_AABZ2w4xSNg508.png)
![](https://file1.elecfans.com/web2/M00/A2/66/wKgaomTv-3eAHC-_AAG-9uFov7Y168.jpg)
![](https://file1.elecfans.com/web2/M00/A0/5F/wKgZomTtQMuAGm5kAAGxVIldqKo834.jpg)
![](https://file1.elecfans.com/web2/M00/A0/42/wKgZomTsGIqAN-6DAAGrZ7YTLFU974.jpg)
![](https://file1.elecfans.com/web2/M00/A1/1A/wKgaomToQ-WAd3s0AAHU4gKg03U592.jpg)
![](https://file1.elecfans.com/web2/M00/94/55/wKgaomTkjGWAdBXrAAHXgnnBufk201.jpg)
评论