通过环境变量控制:总线周期报文的发送

将两个不同的周期报文发送到总线

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);
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值