Codesys任务优先级聊一聊:任务优先级知多少: 1731674385963.jpg_Codesys任务优先级聊一聊:任务优先级知多少 - 酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
搜索附件  
酷德网 附件中心 CODESYS资源下载区 CODESYS教程文档 Codesys任务优先级聊一聊:任务优先级知多少: 1731674385963.jpg

Codesys任务优先级聊一聊:任务优先级知多少: 1731674385963.jpg

 

Codesys任务优先级聊一聊:任务优先级知多少:

  
优先级
  
描述
0
highest  realtime priority above IRQs (SCHED FIFO 56)
1
realtime  priority above IRQs (SCHED FIFO 55)
2
realtime  priority above IRQs (SCHED FIFO 54)
3
realtime  priority above IRQs (SCHED FIFO 53)
4
realtime  priority above IRQs (SCHED FIFO 52)
5
lowest  realtime priority above IRQs (SCHED FIFO 51)
6
realtime  priority equal to IRQs (SCHED FIFO 50)
7
highest  realtime priority below IRQs (SCHED FIFO 49)
8
realtime  priority below IRQs (SCHED FIFO 48)
9
realtime  priority below IRQs (SCHED FIFO 47)
10
realtime  priority below IRQs (SCHED FIFO 46)
11
realtime  priority below IRQs (SCHED FIFO 45)
12
realtime  priority below IRQs (SCHED FIFO 44)
13
realtime  priority below IRQs (SCHED FIFO 43)
14
realtime  priority below IRQs (SCHED FIFO 42)
15
lowest  realtime priority below IRQs (SCHED FIFO 41)
16
low  linux default priority (SCHED OTHER 20) + nice(-15)
17
low  linux default priority (SCHED OTHER 20) + nice(-14)
18
low  linux default priority (SCHED OTHER 20) + nice(-13)
19
low  linux default priority (SCHED OTHER 20) + nice(-12)
20
low  linux default priority (SCHED OTHER 20) + nice(-11)
21
low  linux default priority (SCHED OTHER 20) + nice(-10)
22
low  linux default priority (SCHED OTHER 20) + nice(-9)
23
low  linux default priority (SCHED OTHER 20) + nice(-8)
24
low  linux default priority (SCHED OTHER 20) + nice(-7)
25
low  linux default priority (SCHED OTHER 20) + nice(-6)
26
low  linux default priority (SCHED OTHER 20) + nice(-5
27
low  linux default priority (SCHED OTHER 20) + nice(-4)
28
low  linux default priority (SCHED OTHER 20) + nice(-3)
29
low  linux default priority (SCHED OTHER 20) + nice(-2)
30
low  linux default priority (SCHED OTHER 20) + nice(-1)
31
low  linux default priority (SCHED OTHER 20) + nice(0)
Linux系统的任务优先级描述:
0-99 :实时进程。
100-139: 非实时进程。在应用层的叫法是nice,取值-20到19。在实时进程里,数字越高,优先级就越高。
Codesys里的任务优先级是0到31。其实是对应到linux里的任务优先级。
所以,可以从linux的任务优先级角度剖析一下。


  
Linux的任务优先级
  
Codesys的任务优先级
任务类型
范围取值
0到99
0~6,7~15
实时任务
取56~41
100到139(-20~19)
16到31
非实时任务
取-15~0

好了,想必到这里,就开始有同学蒙圈了。
一会是0到99,一会是100以上。一会又是-20到19.
一会是数字越高,优先级越高。一会是数字越低,优先级越高。
到底哪个是哪个。
这是什么现象呢。
这就是武功学杂的了现象。
就是了解的概念术语多了,但是又还没有了解透,那些杂乱的知识点,就像冷冷的冰雨在脸上胡乱的拍。
我们现在要像张无忌学习太极一样,先把之前会的武功忘掉。
开始倒计时。
3
2
1
忘掉。
我们现在聊的是什么。聊的是codesys的任务优先级。
那我们先直奔主题。优先级有0到31。数字越低,优先级就越高。
然后这些优先级,一共分了三档。



  
第一档
  
0到6
大于等于IRQ
实时
第二档
7到15
小于IRQ
实时
第三档
16到31
普通任务
非实时

好了,既然分了三档优先级。那我们就逐个聊一下。
IRQ是什么呢。IRQ就是中断的意思。
这个中断又是啥意思呢。这个就是针对CPU,操作系统等的计算机术语。
可以理解为一种突然的信号,来打断你当前在做的事情。
比如,突然有人敲门。正在发呆的你,听到有人敲门,就去开门,接待客人了。
比如,你定了个闹钟提醒你抢张学友演唱会的票,闹钟到时间突然响了,然后你就去抢演唱会的票了。
所以IRQ呢,在系统里,是一种信号的触发,比如,外部的DI信号,突然电平变化了。包括各种串口,CAN,网口,USB等外设的通信,都离不开中断信号进行同步和数据处理。
那么,优先级的作用是干嘛的。
优先级的作用主要是在如果几个事情同时发生的时候,优先处理哪个。
比如闹钟响了,我正在抢张学友的演唱会的门票,这时候有人敲门。那我是先执行抢票的任务,处理完成了再去开门。
一 我们聊聊第一档优先级0到6:

那么第一档的优先级作用是什么呢。
先看第一档,描述是大于等于IRQ的。
特别是第一档里的0优先级,是最高档的,0到5呢是比中断的优先级还高。
比中断优先级还高是什么概念呢。
就是中断信号来了,都得等一等。比如你的PLC正在做串口通信呀,或者有别的任务还在执行。这时候这个0优先级来了,所有的任务都得等一等,让一让。
那要等到什么时候呢。只能等0优先级处理完成了。

那如果0优先级任务一直不完成,如果刚完成又马上触发呢。其它功能还干不干了,系统还正常不正常运行了。没错,其它功能还真不干了,系统还真不正常了。
我们回顾一下,上一集中,我们做了个测试,任务执行周期大于循环周期。如果任务优先级在0到6这个档位的时候,系统就嘎了。
说明什么。说明0到6的优先级,不能随便使用。那要怎么使用呢
就是给又快又重要的任务用的。
那Codesys这边是什么又快又重要,比中断还要快的。有,那就是EtherCAT。
所以任务优先级0,1,一般是给EtherCAT用的。(如果有两个EtherCAT)。
笔者了解到的,还有比如CANOPEN总线任务,也是对硬件通信要求比较高的,也有放到第一档任务优先级处理的。
还有Codesys的外部中断事件,对中断时延要求比较高,要求响应速度极快的,也可以放到第一档优先级里的。
除此以外,用户程序能不用到第一档就不要放到第一档。
另外,还有重要的一点,就是如果放到优先级0到6的任务,代码段,工作量,尽可能少。也就是尽量减少高优先级任务的工作时间。

举个例子。
科任老师是第三档优先级。主任是第二档优先级。校长是第一档优先级。
科任老师准备执行上课任务,40分钟。
这时候,主任进来说,同学们,我来简单讲几句哈。
然后主任刚讲第一句,校长进门了。
主任:校长您来了,校长您先讲。
校长:快考试了,我来简单讲几句。
校长讲完,20分钟过去了。然后校长走了。
主任:我接着刚才的继续讲几句。
然后主任讲完,10分钟过去了。
科任:好的,同学们,我们继续上课。
10分钟后。
科任:同学们,我们稍微拖下堂哈,把这个知识点讲完再放学。

二 我们聊聊第二档优先级7到15:

上一集的测试中,任务运行时间超过循环周期,优先级在7到15。现象是系统出现卡顿,数据更新慢,但是不至于系统挂掉。
怎么理解呢。
其实在线仿真监控,也是Codesys的一个任务。就是负责将PLC里的变量,通过以太网,传输给电脑。
但是因为PLC里,有一个任务,优先级是7到15,虽然不是中断任务,但是实时任务,优先级还挺高。然后任务完成之后,循环周期到了,又马上重新执行。
这样在线仿真更新变量的任务,迟迟得不到运行,就导致电脑这边,在线仿真变得卡顿了。
所以这一档次的任务,不会影响到中断级别的任务运行,也就是暂时不会系统嘎掉。但是如果这个级别的任务多了,时间长了,会导致很多基础任务得不到运行。就会让系统变得卡顿。
举例一个不太恰当的例子。
比如我们一边看电影一吃嗑瓜子。如果看电影的优先级和嗑瓜子都是第三档优先级,都是普通任务,相当于就是一边嗑瓜子一边看电影。同时执行。
但是,如果我们将嗑瓜子定义为优先级7到15.也就是我们要优先级保证嗑瓜子的质量和体感,要好好享受每一个瓜仔。嗑瓜子的时候,就不能干别的事。
所以每嗑一颗瓜子前,都要按一下暂停键。
虽然这样瓜仔有了极致的享受,但是一个半小时的电影,愣是三个小时才看完。
所以这个档次的优先级呢,不太好划分和使用。因为用不好呢。容易造成别的任务的卡顿。
笔者看了一些PLC的任务介绍,对这一档次的优先级,介绍一般比较少。
笔者认为呢,这个档次的优先级,还是有一定的用武之地的。
比如,可以设置次中断任务。就是仅次于中断优先级的任务。比如要求不高的外部中断事件。
或者希望能稳定定时周期执行的任务。
但是要记住的是,任务的执行时间,就是尽可能地短。不要让任务花费太多时间,导致别的任务卡顿或者系统的卡顿。
三 我们聊聊第三档优先级16到31

这类的任务就是非实时任务了。
其实也不需要特别去理解什么实时非实时。对用户来说,这个就是用户任务优先级了。
写的PLC程序任务,就放到16到31就是了。
没那么重要的任务了,就往后挪几个位置。重要一点的,就设置前一些的位置。
如果任务执行时间大于循环周期,得到的效果,就差不多是惯性滑行的效果了。
所以有执行任务时间比较久的,要合理的设置循环周期,或者使用惯性滑行。
多个任务也可以定义同一个优先级。
当然,笔者PLC程序没写过,具体也不知道一个工程里,会有多大的PLC程序量,会有多少的任务。
一般来说,如果任务量不多的话,优先级16和17差别不大的。因为都是非实时任务。用户层很难感知出来的。
想聊聊的是,像这些0到31的任务优先级呢,是摆在台面的任务和优先级的概念。用户可以去设置,编程不同的任务程序。
但Codesys是运行在一个大系统里面的。本身Codesys就有不少后台任务。同时linux系统也有不少的后台进程任务。这些诸多的进程和任务,都在竞争系统资源。
比如串口通信,扩展总线的IO,ADDA,高速IO模块,Modbus RTU和ModbusTCP的通信。
指示灯的工作,在线仿真,以太网的通信,比如HMI和Codesys的标签驱动通信访问变量。
所以我们排查一个PLC的通信问题或者PLC卡顿等问题,要从综合因素去考虑的。
好了,这一集我们就聊到这里了。
最后说一点,我们这一集聊的任务优先级,是常规Linux系统的Codesys PLC。比如当前举例的是有0到31的,并且划分了三档:大于等于中断,小于中断,用户任务。
如果是其它系列的Codesys,具体的任务优先级要根据实际出发,当然,可以进行参考和借鉴,都是差不多的。

Codesys任务优先级聊一聊:任务优先级知多少: 1731674385963.jpg

顶部qrcode底部
关注酷德网订阅号,获取更多资讯!

QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

GMT+8, 2024-11-23 13:47 , Processed in 0.089755 second(s), 21 queries .

酷德网

© 2001-2013 Hicodesys. 技术支持 by 酷德网

返回顶部