基于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 阅读(962) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具