上位机中的CAN-TP网络层参数整定

CAN-TP层在UDS诊断层和CANDriver层之间,主要处理CAN数据超过8Byte时的分包和解包工作。网络层的定时参数如N_As、N_Ar、N_Bs、N_Br、N_Cs和N_Cr定义了数据传输的不同阶段的时间间隔。例如,N_As是从发送请求到发送完成的最大时间,N_Bs是等待流控帧的超时时间,而N_Cs则影响连续帧的发送间隔。这些参数在确保CAN总线通信效率和可靠性方面起到关键作用。

CAN-TP 层位于 UDS诊断层和CAN Driver层中间,主要作用是:当CAN数据长度超过8Byte(CAN-FD为64Byte)时,对CAN数据进行分包和解包。

9411a58bc09f74231e52ef1744f57930.png

网络层定时参数定义了N_As、N_Ar、N_Bs、N_Br、N_Cs、N_Cr六个参数,各个参数的含义下两张图可以完整的体现,以下会对各个参数进行详细说明。

704f274bfc4b2a32bbc1fb99bad856ae.png

format,png

首先需要明确几个概念

  • N_USData : 网络层数据
  • L_Data : 数据链路层数据
  • .req : 帧发送开始请求
  • .con : 帧发送完成确认
  • .ind : 帧接收完成指示

※ Send 侧的 .con 和Receiver侧的 .ind是一个时间点。

注意:上位机在tp层通信时作为Sender即发送方,故以下参数后缀为s的对Sender有效,后缀为r的应在下位机即BootLoader中进行设置。

下面对每个参数进行详细解释:

1. N_As/N_Ar

dafe27db0bb20f747209575858a2e1db.png

1.1. N_As

Sender.req->Sender.con ,Sender 任意帧类型 从请求发送到发送完成 的时间间隔,任意帧类型包括:单帧、首帧、连续帧、流控帧,Sender发送的报文帧

### 生成 CANFD TP测试用例的方法 #### 背景说明 CANFD(Controller Area Network with Flexible Data-Rate)是一种增强型通信协议,支持更高的比特率和更大的数据长度。TP(Transport Protocol)层用于分段传输超过单帧容量的数据包。为了验证TP层的功能性和稳性,通常需要设计一系列测试用例。 以下是基于 Python 和 CAPL 的两种方法来生成 CANFD TP层的测试用例--- #### 方法一:Python 自动生成 `config.cin` 文件 根据引用内容[^1],可以通过编写 Python 脚本来动态生成配置文件 `config.cin` 来适配不同项目的测试需求。以下是一个简单的示例脚本: ```python def generate_config_cin(project_name, functional_address, physical_response): config_content = f"""\ <DIAG-CONFIG> <FUNCTIONAL-ADDRESS>{functional_address}</FUNCTIONAL-ADDRESS> <PHYSICAL-RESPONSE>{physical_response}</PHYSICAL-RESPONSE> <NRC-MAPPING> <CONDITION ID="MultipleECUResponse" CODE="0x22"/> </NRC-MAPPING> </DIAG-CONFIG>""" file_name = f"{project_name}_config.cin" with open(file_name, 'w') as cin_file: cin_file.write(config_content) # 示例调用 generate_config_cin("TestProject", "0x7DF", "0x7E8") ``` 此脚本会生成一个名为 `TestProject_config.cin` 的文件,其中包含了功能地址和物理响应的相关配置。这些参数可以根据具体项目调--- #### 方法二:CAPL 编写测试用例 CAPL 是一种广泛应用于汽车电子领域的编程语言,特别适合于 CANoe 中的测试用例开发。以下是一个基于 CANFD TP 层的简单测试用例示例: ```capl // 义全局变量 message EngineData; // 初始化消息 on start { setTimer("SendMessage", 1000); } // 发送消息逻辑 on timer SendMessage { EngineData.id = 0xD05987; EngineData.dlc = 8; EngineData.byte(0) = 0x02; // 数据字段示例 EngineData.byte(1) = 0x3E; // Tester Present 请求 output(EngineData); // 设置超时检测 setTimer("CheckTimeout", 500); } // 超时处理 on timer CheckTimeout { write("DTC_MsgTimeoutTest failed due to timeout."); } ``` 该代码实现了以下功能: 1. 使用时器触发消息发送。 2. 配置消息ID、DLC以及数据字段。 3. 实现超时检测机制以验证响应是否正常。 --- #### 结合硬件层要求优化测试环境 根据引用内容[^3],在实际测试环境中还需要考虑以下因素: - **地址过滤精度**:确保工具能够识别并过滤 ≥29 位标识符的消息。 - **响应时间偏差**:在高负载情况下(如 95% 总线负载),验证响应延迟是否小于 1ms。 - **信号完性**:通过眼图分析确认信号质量满足标准。 因此,在生成测试用例的同时,需配合专业的测量设备(如示波器或总线分析仪)评估以上指标。 --- #### 工具推荐 除了手动编码外,还可以借助一些自动化工具简化流程: 1. **Vector CANoe/CDT**:提供图形化界面创建复杂测试场景,并支持导出为 `.cin` 或 `.dll` 格式的配置文件。 2. **CANalyzer**:可用于实时监控和调试 CANFD 网络中的 TP 层交互过程。 3. **PyVISA**:结合 NI-VISA 库实现与硬件接口的无缝连接,适用于自义测试平台搭建。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

您猜我猜不猜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值