用面向对象的思想开发CODESYS运行时之一
runtime的IO驱动基本框架
从工控开发生态圈的热度看,CODESYS是当前开发控制器的首选,提供了PLC上位机编平台和软PLC内核,也就是runtime。用户在runtime的基础上进行二次开发,增加外设或者扩展模块就能实现自定义的PLC产品。
一般来说,遵循一套成熟的框架结构进行开发,从前期来看可以避免很多无谓的试错,减少开发时间,从而降低开发成本,于是乎分析CODESYS提供的最基本的开发框架就很有必要,可以说磨刀不误砍柴工。
IoDrv框架描述
CODESYS的runtime作为一个进程运行在处理器中,通过基于驱动来实现与处理器外围外设的数据交互,还可以通过内部总线通信与其他功能模块进行数据交互。开发这一类外设或模块的框架就是CODESYS的IoDrv框架。
+-----------------+ +-----------+
| CPU(OS) | | module |
| ------------ | Bus |-----------|
| | runtime | <--------> | |
| | | DATA | |
| |---------- | +-----------+
| | Driver |
| |---------- |
| | peripheral |
+-----------------+
IO驱动框架的运行机理
CODESYS开发包中IoDrv的的运行机理是:
- 初始化:包括通信接口初始化
- 配置信息:从设备描述文件的背板结构开始,初始化背板、连接的模块及其通道
- 输入输出:轮询背板上所有的模块,交互数据信息,数据信息包括配置信息和实际数据
- 诊断:轮询背板上所有的模块,交互状态信息
- 退出:背板结构及其模块内存空间清理,通信接口关闭等操作
因此,IoDrv驱动框架中提供了包括Hook、UpdateConfig、ReadInputs、WriteOutputs、StartBusCycle等主要的接口。
接口 | 功能 |
---|---|
Hook | IoDrv数据结构本身的初始化和清空 |
UpdateConfig | 获取上位机编程软件对外设或模块的配置参数 |
ReadInputs | 在PLC任务开始时调用,将输入变量从缓冲区读到PLC任务中输入区 |
WriteOutputs | 在PLC任务结束时调用,将输出变量从PLC任务输出区写到缓冲区 |
StartBusCycle | 周期性执行,实现一些对外围设备的通信和诊断 |
ModuleDiagnosis | 被StartBusCycle调用,用于模块诊断检测 |
开发基本思路
一般来说,初始化和退出一般放在Hook中;下载配置放在UpdateConfig中;输入输出分别在ReadInputs和WriteOutputs中;诊断放在ModuleDiag中。
针对数据通信是一发一收的形式的设备,本人比较倾向于将与模块进行数据交互的接口调用放入StartBusCycle中,可以实现数据从上位机到模块之间的互传,有时会专门创建一个任务来交互数据。
结论
通过分析CODESYS的runtime运行机理,在相应的接口实现中正确调用实际硬件的驱动程序,就可以实现runtime基于内部总线的通信功能,这是CODESYS运行时开发的基本思想,接下来将基于不同内部总线,实现runtime与外围扩展门口,包括IO和通信模块的,实现一个完整的PLC。
posted on 2023-07-27 19:21 MichaelChen-99 阅读(430) 评论(0) 编辑 收藏 举报