基于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   MichaelChen-99  阅读(962)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示