回复:公共IO竞争中的环境预判

已锁定

xinchen

  • 帖子

    230
  • 精华

    1
  • 被关注

    5

论坛等级:侠圣

注册时间:2015-11-05

白金 白金 如何晋级?

发布于 2024-08-15 08:59:17

11楼

展开查看
以下是引用宝冬在2024-08-14 19:58:03的发言 >10楼

多数人似乎对公共环境预估和设备FB实例代码提前return的意义不理解。可能因为不常用不直观,结合下图再讲一下。



在代码扫描中,温控器0位于温控器1之前。


本截图中,位于后面的温控器1产生了一个L2任务。


温控器0虽然最先扫描,但是它已经知道有其它设备产生了L2的任务,所以主动提前return,并把状态值调整到-2来表明这点。


如果按照通常的思路,温控器0是不会管其它设备的需求变化的。温控器0自身存在L1的modbus任务,它直接首先就会占用485执行任务。如果是这样,等到温控器1被扫描的时候,将不得不等待,那么这样的在面向对象设计下的优先调度机制就不完善了。


这个Trace就是展示了,在同一个扫描周期之内,位于前面的代码直接为后面代码让路的一个例子。


--------------------------------------------------------------------


需要提到:在面向对象的模块设计下, 优先权都是在每个FB实例内部产生的,而不是由外部上级单元统一分配的。这可能是大家不理解的一个主要原因。


我估计:多数人的优先权设计,都是由外部统一的Manager角色来分配的。这样的话无所谓任务先后,多个设备都是统一管理大家所有任务的先后。


如果是这样的话,那就不是真正的面向对象的隔离式设计。也做不到设备模块级的“实例自由拖拽,只管绑定管脚参数”的多FB实例的平行调用。


纯理论上说,在面向对象设计模式下,根据职责单一原则,调度是独立于执行模块的,即执行哪个是由调度模块分配的;

调度模式常见的有轮询、抢占、FIFO、Priority、LRU、多种组合等等,有兴趣的可以看看windows内核场景中内存、页面管理部分;

当修改调度模式时,不会牵扯执行部分;

另,一个调度模式可以创建多个实例,每个实例管理各自的执行部分;

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15117条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。