将两个不同的周期报文发送到总线
variables {
// 定时器定义
msTimer timerID1, timerID2; // 两个独立定时器
int sendingActive = 0; // 总发送控制标志
// 报文定义(修改为实际ID和数据)
message 0x100 msg1 = { dlc = 8, data = {0x11, 0x22} }; // ID1的报文
message 0x200 msg2 = { dlc = 4, data = {0xAA} }; // ID2的报文
// 周期配置(单位:毫秒)
const int CYCLE_ID1 = 100; // ID1发送周期
const int CYCLE_ID2 = 200; // ID2发送周期
// 控制变量(需在CANoe中创建环境变量)
envVar evControlSwitch; // 总控制开关(0=停止,非0=启动)
}
on envVar evControlSwitch {
// 环境变量值变化时触发
if (@this != 0) {
if (!sendingActive) {
// 首次激活时启动两个定时器
setTimer(timerID1, CYCLE_ID1); // 启动ID1定时器
setTimer(timerID2, CYCLE_ID2); // 启动ID2定时器
sendingActive = 1;
write("启动发送:ID 0x%X 周期%dms,ID 0x%X 周期%dms",
msg1.id, CYCLE_ID1, msg2.id, CYCLE_ID2);
}
} else {
// 停止所有发送
cancelTimer(timerID1); // 取消ID1定时器
cancelTimer(timerID2); // 取消ID2定时器
sendingActive = 0;
write("已停止所有报文发送");
}
}
on timer timerID1 {
output(msg1); // 发送ID1报文
// 保持周期发送(如果仍处于激活状态)
if (sendingActive) {
setTimer(timerID1, CYCLE_ID1);
}
}
on timer timerID2 {
output(msg2); // 发送ID2报文
// 保持周期发送(如果仍处于激活状态)
if (sendingActive) {
setTimer(timerID2, CYCLE_ID2);
}
}