[西门子] TwinCAT 3 任务的优先级和CPU内核分配

[复制链接]
查看75215 | 回复0 | 2024-2-16 08:58:59 | 显示全部楼层 |阅读模式
TwinCAT是分时多任务的实时系统,但在TC2时代所有任务都在一个CPU核上运行,通常使用自动的优先级排序就可以了。在TC3时代,因为支持多核CPU,Task可以分配到不同的Core。实际上TC3项目创建时默认所有任务都指定到Core 0,为了充分发挥CPU的多核运算能力,必须手动把一些Task指定到其它CPU核。不同于TC2的单CPU项目,在TC3中运行在不同CPU核上的两个Task,无法严格控制其先后顺序,会导致数据一致性方面的隐患以及IO刷新次序的不确定性,引起一些不可预期的后果。
针对TwinCAT任务管理,本公众号曾经发过两篇文章,详细讨论几个典型任务的工作内容和特点,以及推荐设置规则:IO idle task 和PlcAux TaskPLC与NC任务的CPU分配

考虑到有些用户时间紧任务重,不想花时间了解Task背后的工作机制,我总结了几种典型任务的设置原则,见下表:

Task类别

任务功能

周期

*优先级

**推荐CPU核

NC 任务

处理NC轴的运算和伺服数据刷新

>=1ms

e.g 2ms

高于非NC  非XFC任务

第2个供TC使用的CPU核,隔离核优先

Motion相关任务

轴控程序所在的PLC任务(如果能分离出来)


e.g 10ms

不限定

与NC  Task相同的CPU核,隔离核优先

PLC Task NC

Axis_Ref所在的任务***(如果轴控程序无法分离)

e.g

2ms

不限定

与NC  Task相同的CPU核,隔离核优先

PLC Task XFC

XFC模块对应IO变量所在的PLC任务

e.g

1ms

高于非NC  非XFC任务

隔离核优先

Motion无关的任务

其它逻辑

e.g

10ms

不限定

与NC  Task不同的核

IO

Idle

Task

处理主站与从站的异步通讯

1-4ms

在NC 和XFC任务之后



与NC  Task不同的核,推荐第1个供TC使用的CPU核

Plc

Aux

Task

响应ADS请求,比如HMI、Scope  View



最低

与NC  Task不同的核,首选与IO  Idle Task相同,也可移至其它
*不要使用自动优先级设置**对于4核及以上的CPU,可以给Windows保留一个核,其它的全部设置为隔离核,仅供TwinCAT使用。
***如果轴控程序无法分离,就单独新建一个Task,用于刷新Axis_Ref,具体方法详见:PLC与NC任务的CPU分配

下面是一些基本操作,TC3熟练用户可以忽略:
Reat-Time设置界面1) 任务设置和CPU核指定 Settings



2) 优先级设置Priority





附1:Shared / IsolatedCores 共享/隔离核设置


默认所有任务都是Core 0,对于多核CPU,需要先Read From Target,再Set On Target,控制器重启生效。4核以上的CPU,可以3个核设置为Isolated,所有TwinCAT任务都分配在Isolated核,而让Windows独占一个核。
2核CPU,则分配1个Isolated核。NC、XFC等实时性要求高的任务放到隔离核。
附2:Router Memory路由内存

默认的Router Memory是32M,这是倍福最小的控制器都允许的设置。对于CX20xx或者C603x等大型系统,往往需要更多的ADS通讯量,所以有必要设置更大的Router Memory,比如1024M。
附3:Stack Size 堆栈空间

默认的Stack Size是64K,这是倍福最小的控制器都允许的设置。对于CX20xx或者C603x等大型系统,往往需要更大的堆栈空间,所以有必要设置更大的Stack Size,比如1024K。

本帖子中包含更多资源

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

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

本版积分规则