TwinCAT Task详解:如何优化倍福PLC任务调度?

在 Beckhoff 的 TwinCAT 系统中,Task(任务) 是用于调度和执行 PLC 代码的核心调度单元,相当于一个周期性运行的线程。每个 Task 运行时会循环执行已关联的 PLC 程序,并由 TwinCAT 的实时操作系统进行管理和调度。

Task 的作用

  • 控制 PLC 程序的执行周期:Task 定义了 PLC 代码的执行频率(周期时间,如 1ms、10ms)。

  • 管理 CPU 资源:TwinCAT 允许创建多个 Task,并为每个 Task 分配不同的优先级,以确保关键任务能够得到及时执行。

  • 实现多任务并行控制:可以创建多个 Task 运行不同的 PLC 代码,实现控制逻辑的分层或并行执行。

Task 的关键参数

在 TwinCAT XAE(工程环境)中,Task 的核心参数包括:

  • 周期时间(Cycle Time):

    • 任务的执行间隔,通常在 100µs~100ms 之间。

    • 例如,周期为 1ms 的 Task,每隔 1ms 调用一次 PLC 代码。

  • 优先级(Priority):

    • 任务的调度优先级,数值越小,优先级越高(0 为最高)。

    • 高优先级任务会抢占低优先级任务的 CPU 资源。

  • Watchdog 监控:

    • 任务执行时间如果超过设定的最大时间,会触发 Watchdog 报警,防止死循环等问题。

Task 调度机制

TwinCAT 采用 实时操作系统(RTOS),通过 Task 进行 PLC 代码调度:

  • 定时触发(基于周期时间):

    • 每个 Task 由 TwinCAT 的 实时内核(RT Kernel) 触发,按设定周期调用 PLC 代码。

抢占式调度(基于优先级):

  • TwinCAT 采用 优先级抢占 机制,高优先级任务可以打断低优先级任务。

同步与异步任务:

  • 任务通常是 同步执行 的(一个周期内必须执行完)。
  • 也可以创建 异步任务 处理非实时逻辑,比如数据存储、通讯等。

任务分配方式

TwinCAT 允许不同的 PLC 程序 绑定到不同的 Task,通常有几种典型分配方式:

  • 单 Task 运行所有 PLC 代码(简单系统)
  • 多个 Task 运行不同模块(常见于复杂项目):
    • 高优先级任务:实时控制(如电机控制、位置控制)
    • 低优先级任务:通讯、日志存储、HMI 交互等

下面新建项目,将两个程序块进行自累加,并且将他们配置到2个Task中,随后观察现象。

注意:程序以很快的Task循环周期进行运行,将会提高CPU占用率。如果最小的Task周期大于100ms,则EtherCAT看门狗会报错。

首先新建一个PLC项目,可以看到系统自动为我们新建了一个PlcTask的任务,在这个Task里执行的是MAIN程序块。随后我们手动添加一个程序块,命名为“MAIN2”在添加一个名为“PlcTask2”的任务,然后降MAIN2拖拽至PlcTask2中,这样就将两套程序块配置到不同的Task之中了。接下来编写两个自累加程序,分别放在MAIN和MAIN2中。

随后点击左侧树形结构中的Tasks,可以看到PlcTask和PlcTask2中的Cycle ticks均为10ms循环周期进行运行的。

实验1:10ms VS 10ms

接下来下载程序运行程序,点击停止可以看到程序是以相同的循环速度进行运行的,两个程序的值是一样的。并且CPU占用率接近为0%(程序较小)。

实验2:1ms VS 10ms

现在将PlcTask加快速度,将Cycle ticks修改为1ms的循环周期。

随后下载程序运行程序,点击停止,可以看到MAIN的程序明显比MAIN程序跑的要快,并且MAIN程序的值是MAIN2程序值得10倍,这样也正对应我们设置循环时间。并且CPU占用率接近为0%(程序较小)

实验3:0.1ms VS 10ms

找到Real Time,在Settings选项栏中找到“Base Time”,将基础时间片由1毫秒修改为50微秒。随后在PlcTask中的Cycle ticks中设置2个时间片,即0.1ms。

随后下载程序运行程序,点击停止,可以看到MAIN程序的值是MAIN2程序值得100倍,这样也正对应我们设置循环时间。并且CPU占用率接近为7%(程序较小)

可以看到0.1ms的循环周期大大提高了CPU的占用率,所以合理分配Task有效利用CPU的资源是很重要的。在TwinCAT中,可以将不同的Task分配到不同的核之中。

在RealTime中点击Read from target,非单核控制器可以读出实际的核数量,将PlcTask分配到CPU0,将PlcTask2分配到CPU1中。可以看到PlcTask运行在CPU0中,PlcTask2运行在CPU1中,这样就充分利用了控制器的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NO1019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值