基于CODESYS的外部事件任务
任务类型
CODESYS支持多种PLC任务类型,常见的是周期任务,而外部事件类型是指PLC任务不是每隔一段时间执行一次任务,而是通过一个外部事件进行触发后才执行一次。
总体设计思想
基于CODESYS的外部事件开发包括两点:
- 编写设备描述文件描述具体外部事件;
- 在Io驱动或者等组件中可以实现外部事件。
设备描述文件
一般在PLC的设备描述文件中实现,在xml中增加一个名称为MyEvent的外部事件。
<ts:section name="taskconfiguration">
<ts:setting name="supportexternal" type="boolean" access="visible">
<ts:value>1</ts:value>
</ts:setting>
<ts:setting name="externalevents" type="cdata" access="hidden">
<ts:value><![CDATA[
<externalevents>
<externalevent>
<name>MyEvent</name>
</externalevent>
</externalevents>
]]></ts:value>
</ts:setting>
</ts:section>
在Codesys编程软件中更新一下PLC,这样就可在任务设置页面中,可以选择任务类型为外部的,并且外部事件下拉列表为MyEvent。
IoDrv或其他组件程序中实现
一个IEC任务对于OS来说也就是一个线程或者说一个OS任务,外部事件驱动的任务无非是任务之间的一种任务同步的方式。
从Linux操作系统的话来说,一个外部事件类型的PLC任务相当一个正在等待事件的线程,一般处于阻塞状态,当另外一个线程查询到有外设中断时,就通过事件来通知PLC任务执行,这样就实现了基于Codesys的外部事件任务类型。
运行时代码层级实现如下:
- 向Codesys运行时注册一个事件,事件名称为
MyTask; - 在Codesys运行时进程中创建一个线程/任务,用于在获取中断后发送
MyTask事件; - 实现这个线程/任务,不断获取中断信号;
- 在Io驱动或者等组件代码中完成以下内容:
- INIT3:创建事件
- INIT_TASK:创建任务并让任务执行
- EXIT_TASK:删除任务
- EXIT3:删除事件
具体实现效果如图所示:

posted on 2023-07-06 18:48 MichaelChen-99 阅读(1302) 评论(0) 收藏 举报
浙公网安备 33010602011771号