恭喜,你发布的帖子
发布于 2024-09-22 19:01:40
1楼
优先级的动态变化
一般来说,任务执行质量不好的时候,任务优先级要降低。好的时候,优先级可以恢复。这样避免:低级别的任务,因为始终被抢走IO资源,而被饿死。
上图中,0号设备的485波特率,被从19200调整到了9600。这个波特率其实是错误的,目的是模拟通信出错的场景。其它4个设备的波特率还是19200不变,所以通信都执行OK。
可以看到,原本正常的JobLevel为2和3的优先任务,在通信出错后,Level降级为1。因为始终无法通信成功,所以本来的单次偶发任务,就和最低级别的任务一起,变成了按照先来后到顺序的反复轮询任务。不再有抢断行为,否则它自己的和其它正常通信设备的低级任务,就会因得不到485使用权,而一直无法执行。
波特率恢复19200正常后,可以看到,它们又分别恢复到各自的Level 2和3级别的偶发优先执行。
同时也看到,设备0的L4任务依然在执行,并没有降级。该任务有特殊性,刻意选择不降级。
任务优先级是可以逐级降低和升高的,而不是一下子就降到最低级别或恢复到高级别,在操作系统内核的调度中往往如此。但在PLC中,这样做并没有益处。
优先级的实时动态调整,其实也是通用化优先架构的一个体现。
通过在优先框架中的通用规则化的任务级别调整,而不是因场景变化的个性需求而单做文章,可以达成同样效果。
请填写推广理由:
分享
只看
楼主