[西门子] TwinCAT3多TASK时IO刷新分配

[复制链接]
查看7875 | 回复0 | 2024-1-18 15:58:17 | 显示全部楼层 |阅读模式
在TwinCAT3的项目实践中,经常会需要给一个项目分配多个Task,指定不同的优先级和循环时间,例如通常默认Plc Task是10ms。而项目中的报警程序、配方读写程序、HMI刷新可能会指定一个比较慢的Task,例如100ms。除了代码部分可以根据需求指定不同的刷新周期,此外还有所涉及到的IO模块,根据应用需求,可能也需要采用不同的刷新周期,才能达到预期的控制效果。实际中,代码部分工程师会熟练的进行多task调用,而IO部分相对容易被忽视,甚至由此会导致一些问题。

        如下图所示,项目中有PlcTask 4ms和SlowTask 100ms,假如不做特殊IO刷新分配,项目中定义在不同地方的IO,例如在GVL中或某些POU中,可能会被分配到一个TASK或多个TASK中,从而IO的刷新周期不一致。IO的Ethercat刷新周期,是由所属的Task决定的。这样就容易导致一些问题。



可能带来的后果

没有指定IO的刷新周期,导致IO没有按照预期的周期来刷新。假如IO被一个比较慢的Task调用,轻则导致IO刷新不及时,导致设备的响应变慢,CT时间变长。严重时可能导致IO设备的通讯报警。

    例如有的客户,EL4004和EL6002的IO变量被误分配到了ALARM Task(100ms)导致Ethercat网络sync manager watchdog超时的问题,两个模块通讯一直不正常,在OP和safe Op中频繁切换。



如何指定IO的刷新周期

    要解决上面的问题,就需要我们留意IO的刷新分配。假如自动分配的刷新周期不合理,TwinCAT3支持通过修改attribute属性方式来分配IO的刷新Task。

{attribute'TcContextName':='SlowTask'}

{attribute'TcContextName':='PlcTask'}

定义在某个IO变量上,就指定某个IO的分配。

假如定义在GVL或POU的最上面,就是对GVL和POU中所有的IO都生效。

分配方式1:


:

分配方式2:



两种分配方式会产生不同的效果。通过第二种分配方式,把IO都通过PlcTask来刷新。就避免了100ms Task刷新IO通讯,导致的Ethercat通讯异常。

其他应用

       假如程序中存在需要快速采样和快速输出的,除了定义一个FastTask(例如500微秒),还需要把涉及到的IO变量分配到FastTask中来快速刷新,才能达到预期的效果。



关注本公众号和个人微信CloudKuang,了解更多应用案例。倍福产品使用问题或工控应用解决方案欢迎交流探讨。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则