失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > CANoe中用CAPL脚本按特定格式发送报文

CANoe中用CAPL脚本按特定格式发送报文

时间:2023-04-28 10:42:08

相关推荐

CANoe中用CAPL脚本按特定格式发送报文

CANoe中用CAPL脚本按特定格式发送报文

需求实验设备实验环境

最近学习用CANoe软件测试CAN总线,纯新手,把最近的学习心得分享一下,欢迎大佬指正。

需求

1)仿真开始报文默认以100ms的周期不间断发送1)报文周期和发送次数可控2)报文发送可随时暂停,暂停时间可控

实验设备

好吧!首先你得有个实验环境,我用的CANoe软件版本是:CANoe 12.0 SP5,Vector的CAN盒子量力而行~~

实验环境

1)DBC定义。我这里随便写了一个报文,里面包含三条信号

2)仿真环境

说明一下,这里的环境仅仅是把仿真跑起来,大家不要纠结为什么那么多结点。

3)CAPL脚本

带Button版本(各人比较倾向):

/*@!Encoding:1252*/variables{int CycleTime = 100; //发送周期初始值int NumTime = 100; //发送次数int NumTime1 = 1; //发送次数计数器int PauTime = 0; //暂停时间,初始值0int CounterNum = 1; //暂停时间计数器,初始值1int Mode = 0; //模式msTimer time_ms;message VCU_HMI_01 msg;}on start{setTimer(time_ms, 100);}on timer time_ms{if(CounterNum > PauTime){VCU_Control(CycleTime, NumTime);}else{CounterNum++;setTimer(time_ms, 1);}}on sysvar VCU::Button_1 //控制报文发送格式{if(@this == 1){CycleTime = @VCU::TimeSel;NumTime = @VCU::NumSel;//write("The Current condition is ... %d", @this);write("The Current NumSel is ... %d", @VCU::NumSel);write("The Current TimeSel is ... %d", @VCU::TimeSel);Mode = 1;}}on sysvar VCU::Button_2 //控制发送暂停时间{if(@this == 1){PauTime = @VCU::PauseTime;write("The Current PauseTime is ... %d", @VCU::PauseTime);CounterNum = 1;}}on sysvar VCU::Button_3 //初始化{if(@this == 1){Mode = 0;CounterNum = 1;NumTime1 =1;@VCU::NumSel = 0;@VCU::TimeSel =100;@VCU::PauseTime = 0;write("The Current Condition is ... initialization");}}void VCU_Control(int CycleTimeTep, int NumTimeTep){if(Mode == 1){if(NumTimeTep == 0){output(msg);setTimer(time_ms, CycleTimeTep);}if(NumTimeTep != 0){if(NumTime1<=NumTimeTep){output(msg);write("The Send Num is ... %d", NumTime1);NumTime1++;setTimer(time_ms, CycleTimeTep);}if(NumTime1>NumTimeTep){Mode = 0;NumTime1 = 1;}}}if(Mode == 0){output(msg);setTimer(time_ms, 100);}}

效果:

如果觉得《CANoe中用CAPL脚本按特定格式发送报文》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。