2024年1月18日发(作者:)
需求说明:
CANoe诊断,报文存储于excel。直接选择/打开excel,从excel读取报文,send报文,再监测receive的报文,并将receive的报文写回excel中。
解析需求点:
使用CANoe诊断环境
选择并读写excel
解决策略/方法:
在CANoe使用.NET测试方法,解决如何选择并读写excel
操作说明:
1. 打开CANoe,new configuration,选择CAN_500kBaud_
2. ConfigurationOptions…,弹出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菜单栏configurationSystem Variable,添加namespace为test,name为temp,data type为String
在Frame500Received函数最后一行添加代码:
= (" ",);
在main函数最后一行添加代码:
ine("接收报文:" + );
8.
接收报文已可传递,如何读写excel,.Net有很多方法,不赘述,写成一个classlibrary进行调用。同时CANoe需要设置添加这个dll文件:右键testmodule的configuration,在Components添加dll文件即可。
CANoe还可以与CAPL互相调用,也可以调用sln,具体方法有待继续研究……


发布评论