test.can
定时器一共有两种分别是
Timer
和msTimer
分别可以设置秒级和毫秒级的定时器
- 需求1:定时器周期发送CAN报文
- 首先创建msTimer定时器对象 MsTime00(根据周期不同可以创建不同的对象,这里创建的是一个100ms周期的定时器)
- 定义SetSignalValue函数
export void SetSignalValue
,用于设置CAN信号值 - 定义定时器函数语法是
on timer xxx
xxx是上面创建的定时器对象on timer msTime100
- 启动定时器
on key 'a'
,可以看到以100ms为周期,向外发送CAN报文 - 停止听十七
on key 'b'
,可以看到周期发送停止了
// 定时器周期发送CAN报文函数
variables
{
msTimer msTime100;
}
on start
{
write("开始程序");
}
export void SetSignalValue (){
message * Msg;
Msg.id = 0x111;
Msg.dlc= 15;
Msg.DataLength = 64;
Msg.FDF = 1;
Msg.BRS = 1;
Msg.byte(0) = 1;
Msg.byte(1) = 2;
Msg.byte(2) = 3;
output(Msg);
}
on timer msTime100
{
SetSignalValue();
setTimer(msTime100,100);
}
on key 'a'
{
setTimer(msTime100,10); //启动定时器
}
on key 'b'
{
cancelTimer(msTime100); //关闭定时器
}
- 需求2:定时器周期发送CRC8的CAN报文
// 定时器周期发送CAN报文函数
variables
{
msTimer msTime100;
}
on start
{
write("开始程序");
}
export void crc16 (){
//crc校验算法处理
}
export void SetSignalValue (){
message * Msg;
Msg.id = 0x111;
Msg.dlc= 15;
Msg.DataLength = 64;
Msg.FDF = 1;
Msg.BRS = 1;
crc_up, crc_down = crc16();
Msg.byte(0) = crc_up;
Msg.byte(1) = crc_dowm;
Msg.byte(2) = 3;
output(Msg);
}
on timer msTime100
{
SetSignalValue();
setTimer(msTime100,100);
}
on key 'a'
{
setTimer(msTime100,10); //启动定时器
}
on key 'b'
{
cancelTimer(msTime100); //关闭定时器
}