当前位置:文档之家› 使用普通的USB-CAN设备读取和解析DTC 徐亮

使用普通的USB-CAN设备读取和解析DTC 徐亮

使用普通的USB-CAN设备读取和解析DTC 徐亮
发表时间:2018-05-22T16:28:13.320Z 来源:《基层建设》2018年第7期作者:徐亮
[导读] 摘要:利用VBA编程实现数组转换,快速生成C#语言所需使用的字符常数组、利用visual 2013开发环境, C#语言,调用USB-CAN 的二次开发函数库,实现USB-CAN设备与下位机(嵌入式产品)的通信,利用C#的List<>是泛型集合实现排序及查找。

上海交通大学上海 200030
摘要:利用VBA编程实现数组转换,快速生成C#语言所需使用的字符常数组、利用visual 2013开发环境, C#语言,调用USB-CAN的二次开发函数库,实现USB-CAN设备与下位机(嵌入式产品)的通信,利用C#的List<>是泛型集合实现排序及查找。

最终实现DTC的读取与解析。

关键词:VBA数组转换、DTC读取与解析、UDS诊断
随着汽车电子的发展,CAN总线技术几乎成了所有主机厂的标配,而CAN总线的开发,需要借助USB-CAN工具及软件的支持,这类工具以德国Vector公司开发的CANoe最为常用,并为大多数主机厂所采用,但是其高昂的价格决定了他并非能成为工程师人手必备的工具。

与此同时,市场上也不断涌现了大量的价格低廉的USB-CAN的工具,并且厂家提供给了丰富的二次开发函数库,但软件开发不足,大多都只能实现简单的通信功能,并不具备CANoe强大的数据分析及处理功能。

另外在项目开发阶段,由于排查问题的需求,工程师需要经常用到DTC(故障)的诊断以快速判断问题来源。

下面将分步骤介绍其实现方法(正文)
1 使用VBA将Excel格式的诊断调查表,转换为C语言格式的一维数组
诊断调查表的内容,一般会以excel表格格式编写。

如下图表1,由诊断调查表生成用于查询的字符型数组;可以应用excel的开发工具Visual Basic,编写一个宏,快速生成C#编程语言使用的一维字符型数组;方法如下:
数组转换示例: DtcData[i / 4] = DtcBuffer + Datatempory[i + 1].ToString("X2") + Datatempory[i + 2].ToString("X2");
故障码状态转换示例: if (Datatempory[i + 3] == 0x09) DtcState[i / 4] = "CurrentandOldDTC"; else if (Datatempory[i + 3] == 0x01) DtcState[i / 4] = "CurrentDTC"; else if (Datatempory[i + 3] == 0x08) DtcState[i / 4] = "OldDTC"; else DtcState[i / 4] = "Error";
4、解析与显示 readonly string[] DtcNum //定义常数数组,拷贝步骤1中生成的数组 {
故障码1, 故障码2, 故障码3, …
故障码n } readonly string[] DtcExplain = {
故障描述1,故障描述2,故障描述3, …
故障描述n } List<string> DTCList = DtcNum.ToList(); //使用list方法,排序 Try { //查找并显示对应故障码序号的故障码数组值及状态值 DtcIndex = (byte)DTCList.IndexOf(DtcData[i]); //获取故障码对应位置序号 listBox1.Items.Add(DtcExplain[DtcIndex] + "" + DtcState[i]); //将结果显示在列表框中 listBox1.SelectedIndex = listBox1.Items.Count - 1; } Catch //如果接收到未定义的故障代码,提示用户未查到对应的故障码 { listBox1.Items.Add("未查到" + DtcData[i] + "对应的DTC"); listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
5、界面设计
界面由两个button和一个Listbox控件组成,点击“读DTC”button时,触发发送报文的事件,“清屏”button,用于清理屏幕显示结果。

Listbox用于显示解析后的故障描述。

这个可由编程者自由灵活设计。

参考文献
[1]创芯科技. 接口函数库(二次开发库)使用说明书 V2.02. 2017。

相关主题