canoe软件_CANoe学习3—创建仿真工程(二)

在上一篇分享里面,简单提到了创建仿真工程需要以下几个步骤:

  • 选择工程模板
  • 添加数据库文件
  • 定义系统变量
  • 创建仿真面板
  • 创建网络节点
  • 添加CAPL代码
  • 工程调试

上一篇文章中介绍完了选择工程模板、添加数据库文件和定义系统变量三个步骤,今天接着分享一下创建仿真面板过程。因为也是一边学习一边总结,所以难免会有疏漏之处,如果有问题或者不同见解,欢迎大家一起来讨论呀~

创建仿真面板

打开Tools选项卡下面的Panel Designer,可以开始制作面板,

465a7ce1f252ef30f1a6eb2548ab4002.png

其主界面为:

86695801e7b5c8fc425287c423eb4e4c.png

在File中点击New,可创建新的面板。Panel Designer主要包含三个功能区:

  • File用于对文件的新建、保存、另存、导入等功能的设置;
  • Home用于提供面板设计的常用操作,包括对于控件的复制、剪切和粘贴,以及位置和尺寸等;
  • Panel提供修改面板的属性,包括背景颜色/图片、面板尺寸等。

我们创建一个面板,一般会先设置面板的名字、颜色、高和宽等。

f21dfcdaeb9bf4f1e19da9c0beaed664.png

设置好面板属性之后,我们可以在里面添加控件了,所谓的控件其实就是面板里面不同的显示或者部件元素,CANoe包含了多种多样的控件类型,以支持不同的使用情景:

51913c22aa60522dfc59aa8d2509c989.png

其实这么多,可以大致分为两种类型的控件,一类是Windows界面常见控件,比如Button、Check Box、Combo Box、Radio Button、Static Text等;另外一种就是CANoe特有的控件,比如Analog Gauge、Hex/Text Editor、Input/Output Box、Meter、Switch/Indicator 等,能够使得创建的面板支持仿真、测量等相关功能。我们用的比较多的就是

  • Switch/Indicator(开关/指示灯控件)
  • LED Control(显示控件,显示熄灭和点亮两种状态)
  • Input/Output Box(一般用于需要文字提示的输入或者输出需求)
  • Analog Gauge(模拟汽车仪表表盘)
  • Meter(用于为定制的表盘配备指针,使得仪表具有更加逼真的效果)
  • Combo Box(主要用于一些需要下拉菜单的输入需求)

我们不仅要根据不同的使用需求选择控件外,还要根据不同的控件配置不同的属性,在Panel Designer窗口的右侧有Properties选项,可以查看控件属性,包括Appearance, General, layout, Settings, Symbol。当然,每个控件的属性都不太一样,但以上提到的基本上属于每个控件都有的属性。我们在设置的时候,比较关注的是,background,背景颜色;Display Only,只作显示不响应鼠标点击,如果想要控件响应鼠标点击,需要将该项设置为false;Is Visible at runtime,运行时是否可见,一般设置为true(笔者有一次误操作设置的为false,导致一个控件怎么也显示不出来,反复查看CAPL代码,怎么也没查出来错,最后一个个确认面板属性,才发现是这里出了错);Mouse Activation type,鼠标激活类型,一般是需要左键增加右键减小时,设置为leftright,如果是只响应鼠标左键的点击状态,则设置为left;Symbol中设置控件数值关联的信号或者变量,这个属性至关重要,这里设置好了,后面我们为创建的面板写的CAPL程序才能发挥作用。

这里设置好了,我们想要面板真正的达到控制信号或者报文收发的目的,我们需要为创建的面板编写CAPL代码,可以这么理解,CAPL是面板的灵魂,没有它,面板就犹如一木偶,也就只能看看了。CAPL是专门用于CANoe开发环境的设计语言,属于一种类C语言,市面上关于它的介绍比较少,下次我会再简单分享下我对CAPL的学习总结。

下面我以创建一个用于控制点火和引擎速度的面板,给大家演示一下面板的窗帘过程。先来说一下,面板的创建一般包含:

  • 面板属性设置
  • 控件选择与布局
  • CAPL编写
  • 调试

我们可以设置控制面板点火钥匙开关的属性如下:

8da2ec97dee23fe53476e1a9176442da.png

选择一个Track Bar作为档位控件,其属性如下:

a88c2328cc0ba9b32da419a86281df4f.png

再选择一个Track Bar作为速度控件,其属性如下:

98c61354acaa9ea173d7751446518edf.png

设置好以后,我们可以为其写一段CAPL,以实现面板的控制作用。其实每个控件最后都是要作用到信号上面的,所以我们需要将控件和信号关联起来,对于控制面板,我们一般让控件直接关联的是系统变量,再将系统变量在CAPL中与信号关键起来。所以整个CAPL的编写思路是,点火钥匙控件控制点火信号的发送,档位控件控制发出档位信号,速度控件控制发出速度信号。放点火钥匙为run时,档位调节为drive,速度可调节。

完成该面板,需要在两个节点上添加CAPL代码;因为不同的节点负责不同消息的发送。在本例中节点BCM负责发送点火状态相关的报文,节点GateWay负责发送挡位以及车速相关的报文,代码分别如下:

BCM节点的代码:

/*@!Encoding:936*/

includes

{

}

variables

{

message Ignition_Info Msg_0x155;

msTimer msTPower;

}

on preStart

{

ILControlInit();

ILControlStop();

}

on sysvar sysvar::Power::KeyState

{

Msg_0x155.KeyState = @this;

setTimer(msTPower,100);

}

on timer msTPower

{

output(Msg_0x155);

setTimer(msTPower,100);

}

GateWay节点代码:

includes

{

}

variables

{

message VehicleData Msg_A8;

message Ignition_Info Msg_155;

message Gear_Info Msg_2CB;

msTimer msTspeed;

msTimer msTGear;

}

on preStart

{

ILControlInit();

ILControlStop();

}

on sysvar sysvar::Engine::Gear

{

Msg_2CB.Gear = @this;

setTimer(msTGear,100);

}

on sysvar sysvar::Engine::VehicleSpeed

{

if((@sysvar::Engine::Gear == 2 )&& (@sysvar::Power::KeyState == 2))

{

Msg_A8.VehicleSpeed = @this;

}

else

{

Msg_A8.VehicleSpeed = 0;

}

setTimer(msTspeed,100);

}

on timer msTspeed

{

output(Msg_A8);

setTimer(msTspeed,100);

}

on timer msTGear

{

output(Msg_2CB);

setTimer(msTGear,100);

}

最后我们运行CANoe,对面板进行操作,查看trace中的报文数据是否变更。也就是进行最后的工程调试。做好的面板如下:

f15f29bd705b1d81c9e0461045aa8eda.png

运行效果:

1bdb61a67869141298c9b70d6e35e0b3.png

可惜电脑没办法安装录屏软件,不然可以给大家看下这个动画。这次演示的例子比较简单,没有做显示面板,所以最终的控制效果需要通过Trace来体现。不过显示面板和控制面板的制作过程都是一样的。今天的分享就到这里了,如果大家有什么制作面板的更好的主意,欢迎一起交流呀~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值