恭喜,你发布的帖子
发布于 2022-11-17 13:54:10
14楼
Trace应用和场景分析一例
上图的物理场景:我在HMI上的一号温控器操作页面上,反复快速点击切换一个Bool量的控制按钮,让它在1和0之间来回切换,让温控器改变工作模式。
在第3行中,那些和水平虚线等高的任务,也就是下标iJob为11号的任务,就是这个写任务。它被多次执行。
在第2行(IndexPrivileged 优先申请站点的调度序号)中,可以很明显看到:优先申请出现的数量明显高于,第3行中被执行的优先任务数量。那些用红色箭头标出的优先申请并未被执行,且每个优先申请都被释放了。
这是为什么呢?
优先执行某个任务的申请,经常是在其它任务正在执行的过程中出现的。对于485通信,正在执行的任务是不应被打断的,这样做有害无益行不通。所以优先权要等到当前任务结束后再切换过去。
写任务是偶发的。因其任务数据发生变化而被触发。
当我在HMI上肆意快速点击鼠标左键的时候,如果连续两次点击之间的间隔太短,也就是当另一个Modbus任务正在执行中,11号任务的数值从0变成1,又迅速从1变成0。而这时候当前的任务依然没有执行完毕,优先任务触发条件被自动复位了。
在任务被执行前,数值变回0等于撤销了这项临时任务的申请,所以优先权自动释放。等到当前任务执行完毕后,就像什么都没发生过一样。
类似这种事在生活中经常发生:领导把你叫过去,布置个任务。还没等你走出办公室,又把你叫回去,告诉你这个任务取消了。
请填写推广理由:
分享
只看
楼主