在项目中有个做实验测试的CANOE面板程序,使用的Node节点做底层逻辑处理载体,需要连续运行时间较长,单次连续运行时间要5天以上,在程序长时间运行中频繁报如下的一个错误:
CANOE官方对这个错误的解释如下:
中文翻译是下面这个意思:
由于模拟时实时事件处理超限,测量停止。< t:代表运行了多长时间报了这个错误 >
CANoe可以处理的事件数量永久超过。因此事件处理已停止。
使用以下补救措施来解决过载情况:
- 降低总线上的传输速率
- 降低事件处理的复杂性(简化模型)
- 提高计算能力
通过这个说明,了解到大概是由于程序中处理的事件过多、过快,导致运行不过来,进而CANOE自动停止了,跟电脑性能也有一定关系。
之后通过对程序进行一系列的优化,最终解决了这个问题。实际测试中,不同环境都没有再出现这个问题。
下面是主要的优化点:
- 适当降低CAPL中调用定时器的频率时间,无用的定时器及时停止;
- 工程中,不同功能的节点进行拆分。例如车辆信息的节点和界面逻辑处理的节点,不要是同一个,可以按照模块划分为多个;
- CANOE存储的log按照时间或其他规则分包存储;
- 工程中如果有有调用文件打开关闭的函数,不要频繁打开关闭,可以按照时间规律的进行打开关闭,这个也是我发现的比较大的一个问题。我的程序中存储了txt格式的打印信息log,在存储时,每次有新的打印信息都会存储一次,现在修改成了每个小时存储一次;
以上是我对CANOE出现这个事件过载报错问题的一个解决思路,如果有其他同学也遇到这个问题,可以参考我这边的方式,也可以和我交流,完善这个问题的解决方法。