2024年1月18日发(作者:)

需求说明:

CANoe诊断,报文存储于excel。直接选择/打开excel,从excel读取报文,send报文,再监测receive的报文,并将receive的报文写回excel中。

解析需求点:

使用CANoe诊断环境

选择并读写excel

解决策略/方法:

在CANoe使用.NET测试方法,解决如何选择并读写excel

操作说明:

1. 打开CANoe,new configuration,选择CAN_500kBaud_

2. ConfigurationOptions…,弹出CANoe Options对话框:

 Programming.NET Debugging, 设置.NET Debugger为Visual Studio 20xx(电脑已安装版本)

 External Programs Tools,设置.NET file editor为

‘Exec32ScriptsEdit_NET_Source_with_VS_’

3. Insert .NET Test Module

4. 新建一个cs文件,右键.net test module configuration,点击file选择新建的cs文件。

5. 点击Edit,弹出VS操作cs文件,将下列一个发送消息的简单程序copy 到cs文件(ID/DLC/Message信息自己定义)

using System;

using ;

using e;

using ing;

using stics;

using ing;

using ;

using ;

publicclasstester : TestModule

{

publicoverridevoid Main()

{ // test sequence definiton:

SimpleTest();

}

// Test cases need to be marked with an attribute:

[TestCase("Simple Test")]

publicvoid SimpleTest()

{

ep("Start:");

byte[] data = newbyte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };

CANFrame msg = new CANFrame(0x500, 4); // ID=0x500, DLC=4

Data(data);

();

epPass("Engine is running.");

}

}

6.

在CANoe的.NET test module上compile,编译成功,运行将发送一条message

发送报文后,如何接收报文,CANoe都是以事件方式处理,定义一个报文事件类(继承cHandlers),在main函数中调用即可

任何报文触发:

[OnCANFrame]

public void onMessage(CANFrame frame)

{ … }

固定ID触发:

[OnCANFrame(1, 500)]

public void Frame500Received(CANFrame frame)

{…}

 具体报文事件类代码:

public class MsgHandler : DynamicHandlers

{

[OnCANFrame(1, 500)]

public void Frame500Received(CANFrame frame)

{

ine("接收报文事件触发:" +

(" ",));

}

}

 并在main函数中调用报文事件类即可,在main函数中第一行添加如下代码:

MsgHandler rec = new MsgHandler();

再次在CANoe编译执行,打开write窗口可以看到发送、接收的一些信息

7. 接收报文事件已经处理,但如何获取报文信息写入excel,这里使用一个CANoe环境变量来做中间桥梁:

 CANoe菜单栏configurationSystem Variable,添加namespace为test,name为temp,data type为String

 在Frame500Received函数最后一行添加代码:

= (" ",);

 在main函数最后一行添加代码:

ine("接收报文:" + );

8.

接收报文已可传递,如何读写excel,.Net有很多方法,不赘述,写成一个classlibrary进行调用。同时CANoe需要设置添加这个dll文件:右键testmodule的configuration,在Components添加dll文件即可。

CANoe还可以与CAPL互相调用,也可以调用sln,具体方法有待继续研究……