微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于K线/CAN总线的KWP2000协议分析及协议栈的开发测试

基于K线/CAN总线的KWP2000协议分析及协议栈的开发测试

时间:03-19 来源:互联网 点击:

4 两种协议的简单比较

从前面基于K线和基于CAN总线的KWP2000协议可以看出,两种协议在物理层、数据链路层及网络层(15765)上存在以下主要差别,这也是K线被CAN总线取而代之的主要原因所在:

K线通讯速率较低,最大波特率仅为10400bps;CAN总线通讯速率较高,最大波特率可达1Mbps。

K线采用单端信号传输,抗干扰能力较弱,可靠性较差;CAN总线采用差分信号传输,抗干扰能力强,信号传输的可靠性高。

K线诊断在启动应用层诊断服务之前必须对ECU进行初始化建立连接,并且初始化过程比较复杂;而基于CAN总线的诊断设备不需要对ECU进行初始化即可进行诊断服务。

K线诊断应用程序开发者必须亲自管理数据传输过程中的字节间定时,并处理底层通讯错误;CAN数据帧以整帧报文的形式进行发送,应用程序开发者不必管理字节间定时,并且CAN总线物理层和数据链路层具备完善的错误检测和错误恢复机制,应用程序不必监视和处理底层通讯错误。

K线网络结构单一,网络管理功能很弱;而利用CAN总线可构建复杂的网络结构,可跨越网段进行远程诊断。

K线网络采用破坏性的仲裁机制,当诊断设备采用功能寻址与多个ECU进行通讯时,为避免总线冲突,ECU开发者必须采取措施保证多个ECU顺序访问总线;而CAN网络采用非破坏性的仲裁机制,并且仲裁过程由数据链路层完成,当诊断设备采用功能寻址与多个ECU进行通讯时,ECU开发者不必考虑总线访问冲突问题。

K线服务报文最大字节长度仅为255,无法满足更长报文的传输要求,并且在长报文的传输过程中用户必须自己采取措施进行连接管理,可靠性和兼容性较差;而CAN总线诊断服务报文最大字节长度可达4096(12位),对于长报文的传输,网络层协议还具备标准化和规范化的同步控制、顺序控制、流控制和错误恢复等功能,具备很高的可靠性、兼容性。

5 KWP2000协议栈的开发及测试

从前面的协议分析可以看出,无论是基于K线还是CAN总线的KWP2000协议,都是逻辑非常复杂的系统,并且具有严格的定时和错误处理规范。如果采用纯手工的方式来进行KWP2000协议栈的开发,不仅要耗费大量的时间和人力,其通用性、完备性、可靠性和可维护性都很难保证。而MATLAB/Simulink/StateFlow不仅具备方便快捷的上层实时仿真环境,还集成了高效的嵌入式代码自动生成工具,为协议栈的开发和维护提供了强大的支持平台。此外,由德国Vector公司的CANoe软件和相关硬件板卡组成的应用开发平台,可用于汽车网络(CAN,Lin等)的上层协议开发和系统测试,该平台同时支持基于K线和CAN总线的KWP2000诊断协议,可作为ECU和诊断设备的测试标准。

图6是协议源码开发过程示意图。首先在MATLAB/Simulink/StateFlow中遵照协议标准进行KWP2000协议栈开发,在仿真调试环境下实现通讯逻辑、定时控制和错误处理,待系统完善后利用StateFlow嵌入式代码生成工具自动生成协议栈C代码,并与目标系统的底层驱动进行集成,然后植入目标系统形成应用程序,最后再利用CANoe作为标准进行系统集成测试。



图6 KWP2000协议栈开发及测试流程

在MATLAB/Simulink/StateFlow中进行协议栈仿真开发是协议栈开发过程中的关键环节,在这一过程中必须严格遵照协议标准来实现通讯逻辑,往往需要经过多次“设计-仿真-修改”循环才能使系统最终趋于完善。MATLAB的图形界面提供了方便快捷的仿真输入/输出接口,可大幅度加快开发进度。

协议栈开发完成后可利用CANoe作为标准进行系统集成测试,CANoe的KWP2000协议测试环境如图7所示。



图7 CANoe的KWP2000测试环境示意图

CANoe中的KWP2000实际指的是基于CAN总线的KWP2000,即15765协议。由于CANoe默认的硬件板卡是CAN卡,因此在建立仿真程序时,只需将ECU的网络模块设置为kwp2000.dll即可进行CAN总线的KWP2000服务测试。kwp2000.dll中包含15765应用层协议中规定的服务请求、服务指示、服务响应和服务确认接口函数,用户调用这些函数即可完成Tester端和ECU端的KWP2000诊断服务。此外,该模块中的功能函数还可对ECU的源地址、目标地址、寻址模式等参数进行动态设置。需要注意的是,kwp2000.dll目前只提供了部分KWP2000服务的接口函数,如果用户需要进行其它的KWP2000服务测试,必须根据KWP2000应用层协议构造服务报文数据,然后调用该模块中的KWP_DataReq()和KWP_GetRxData()函数进行报文的发送和接收。

进行基于K线的KWP2000服务测试时,需要将KLineCPL.dll模块加入CANoe仿真环境,并使用一个代理节点来实现CAN网络和K线之间的报文转发。此时CANoe使用计算机的串口,并通过一个串口/K线转换器与实际的ECU相连,如图8所示。



图8 CANoe中基于K线的KWP2000测试连接示意图

6 结束语

KWP2000是一套非常完善的车载故障诊断协议标准,协议的分层结构使得KWP2000诊断服务并不依赖于某种特定的网络介质,其应用层可以移植到任何一种物理层和数据链路层协议之上。基于CAN总线的KWP2000顺应了目前车载网络发展的大趋势,将逐步取代K线诊断协议,成为下一代车载诊断协议的主流之一。
MATLAB/Simulink/Stateflow为协议栈开发提供了方便直观的图形用户接口和功能强大的仿真调试环境及代码生成工具,为嵌入式开发开辟了一条高效快捷之路。Vector公司的CANoe和相关硬件板卡是一个功能强大的应用开发平台,可针对基于K线和CAN总线的KWP2000进行ECU和诊断设备的上层协议开发、测试及仿真。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top