4. CANoe面板设计实现信号手动控制
Panel Designer 控件与信号绑定关系
本案例在 CANoe 的 Panel Designer 中创建一个控制面板,面板上放置一个滑块(Track Bar)和一个按钮组(Button Group),分别用于手动修改车速信号 VehicleSpeed 与挡位信号 GearPosition。面板控件本身不产生报文,它通过“控件 → 系统变量 → CAPL 发送逻辑 → CAN 报文”的链路把用户操作转化为总线信号。
关键约束:车速信号 VehicleSpeed 的因子为 0.1、偏移为 0、范围 0~250 km/h,因此滑块原始值 0~2500 对应 0~250.0 km/h;挡位信号 GearPosition 为枚举型,取值 0=P、1=R、2=N、3=D。面板控件必须绑定到系统变量,再由 CAPL 的 on sysvar 事件把系统变量写入报文信号。
创建面板与控件绑定
在 CANoe 工程中新建 Panel,打开 Panel Designer 工具箱,拖入 Track Bar 与 Button Group。选中 Track Bar,在属性面板中设置 Min=0、Max=2500、TickFrequency=250,并在 Symbol 栏绑定系统变量 sysvar::Speed。选中 Button Group,设置按钮数量为 4,按钮文本依次为 P、R、N、D,对应值 0、1、2、3,绑定系统变量 sysvar::Gear。
系统变量需提前在 Configuration → System Variables 中创建:Speed 为 int 类型,Gear 为 int 类型。若未创建,Panel Designer 的绑定下拉框中不会出现对应变量。
CAPL 事件处理与信号写入
面板控件只更新系统变量,真正把值写入报文并发送的是 CAPL 节点。在 CAPL Browser 中编写以下代码:
variables
{
message 0x100 msg;
}
on start
{
msg.dlc = 8;
msg.VehicleSpeed = 0;
msg.GearPosition = 0;
output(msg);
}
on sysvar sysvar::Speed
{
msg.VehicleSpeed = @sysvar::Speed * 0.1;
output(msg);
}
on sysvar sysvar::Gear
{
msg.GearPosition = @sysvar::Gear;
output(msg);
}
代码中 @sysvar::Speed 读取系统变量当前值,乘以因子 0.1 后写入信号 VehicleSpeed。挡位信号直接赋值,因为枚举值与系统变量值一一对应。每次系统变量变化都会触发 on sysvar 事件并立即发送报文。
验证与结果判读
启动 Measurement,在 Trace 窗口中观察 ID=0x100 的报文。拖动滑块到中间位置,Trace 中 VehicleSpeed 应显示约 125.0 km/h(原始值 1250 × 0.1)。点击按钮组中的 D,GearPosition 应变为 3。若信号值不变,检查系统变量绑定是否正确、CAPL 节点是否已加载、报文 ID 是否与 DBC 中定义一致。