CoDeSys

CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S(SMART,SOFTWARE,SOLUTIONS)公司出的一款与制造商无关的IEC 61131-1编程软件。CoDeSys 支持完整版本的IEC61131标准的编程环境,支持标准的六种编程语言。是一个标准的软件平台,被很多硬件厂家支持,可编程超过150家OEM生产的自动装置。CoDeSys提供了许多组合产品的扩充,诸如各种不同领域的总线配置程序、完全的目测化和运动控制系统。

 

 

       现在国内PLC用户使用的版本多为CoDeSys V2.3,最新的版本是CoDeSys V3(目前最新版本为V3.5)。V3 在软件架构上有了很大的改善,朝安全软件的方向发展,目前正在申请TUV关于EN 61508的SIL认证。

 

 

       另外,CoDeSys也提供触摸屏功能(Visualization),但这不是他的强项,基本都是采用OPC 工控机的方案,ABB,倍福都有很好的方案,都是面向不差钱的客户。

 

3S竞争者

       CoDeSys的其他竞争对手还有KW、infoteam、ISAGRAF。听说infoteam(国内称一方梯队)也挺牛的,不太了解,想说说KW,同属于德国企业,主要是产品为multiprog。

KW的主要客户有菲尼克斯的AutomationWorx、富士电机的D300Win、研华的Multiprog,苞米勒的PLC和伺服系列,三菱应该也是它的大客户,但是编程方式却是按照日本人的习惯来的。

 

CoDeSys框架组成

两部分:

1、CoDeSys IDE。

   即CoDeSys集成开发环境,符合IEC61131编程规范,安装于PC机上,运行于Windows或者Linux下。由最终应用用户所使用的开发工具。

2、CoDeSys Runtime。

   即硬件平台系统。需要设备制造商与3S公司共同完成,3S公司需要评估硬件开发商所设计的硬件系统,并为其定制CoDeSys Runtime框架,客户需要为此向3S付费。然后硬件及系统开发商需要根据本系统的外围输入输入等配置,编写相应的驱动,并以库或者PLC Configure接口的形式提供给CoDeSys ID开发环境调用。实际上就是形成一套Target安装包。此外,CodeSys还会对每个使用其CoDeSys Runtime的设备贴标,设备供应商需要为每个3S标牌付费,作为其知识产权的一部分。

3、最终用户(应用开发商)可以下载通用的CoDeSys IDE。

   里面提供基本的IEC61131编程环境,但是对于一个具体的硬件PLC或者HMI,需要安装与该硬件相对应的Targets包。这个 Targets包的入口文件是*.tnf文件,有其来指定:

1、targets(*.tar)文件,对应 CoDeSys IDE的Target Setting项.

2、PlcConf文件夹下的*.cfg文件,对应CoDeSys IDE的PLC Configuration项。其安装路径由InstallTarget组件程序的Installation选项指定。反映在CoDeSys IDE上就是:ProjectOptionsDirectoriesTargetConfiguration files: “***PlcConf”。

3、Lib文件夹下的诸*.lib文件,提供底层的CoDeSys Runtime的驱动接口。对应CoDeSys IDE的Library Manager。其安装路径由InstallTarget组件程序的Installation选项指定。反映在CoDeSys IDE上就是:ProjectOptionsDirectoriesTargetLibraries: “”***Libs””。

 

上图,就是安装target的过程,也就是每个OEM厂家安装自己硬件的过程。

 

CoDeSys底层运行原理

 

   Codesys runtime是建立在OS上的,常见的OS有wince,windows,linux,vxworks。构建在OS的优势就在于系统的扩展性更强,PC的更多功能都可以在PLC上实现。

control task被操作系统每隔一段时间(典型是1ms)调用一次。

IEC task被内建的看门狗监控,监视PLC的实际工作周期是否超出预定时间,如果超出则IEC task任务停止,向系统 告错误。

 

   说到这里讲讲PLCOPEN的IEC 61131-3标准(这个IEC具体名字, 上现查的,方博士掌握的很好)。IEC 61131-3多任务操作系统,也没查到具体如何实现,自己之前做过嵌入式开发,了解OS以及RTOS,自认为和RTOS类似,热情高的朋友可以 上看看RTOS,重点是RTOS的优点是什么洲的产品都很注重概念,概念理解了,就可以让你自由发挥。这里就多插一句,日系PLC在做大型项目时,还是和低端PLC一样,编程习惯类似汇编,编程上想要实现框架的概念非常难,因此在欧洲比较难推广。现在日系也在改进,加入了ST编程,使用了功能块,也算是日本人的妥协吧。

 

这里有几个概念:

优先级,数值越小优先级越高,根据任务的实时性,设定优先级

任务类型

循环:周期性执行任务

自由运行:只要启动程序就处理任务,CPU空闲就运行该task。

Event触发型:触发位的上升沿调用程序。外部事件触发功能,未定制的厂家此选项不能使用

看门狗(早期单片机上的一个概念,纺织程序进入死循环,提出了定时喂狗的概念,其本质就是一个减法定时器)

说说MCU如何使用watchdog吧。

 

while(1)

{

//用户自己写的程序

Watchdog = 10ms; //watchdog timer后台按照tick做减法,如果timer为0,就触发一个硬件中断,告诉用户程序在单位时间内没执行完,检查错误。正常则每次喂狗,设置timer为10ms

}

 

 

CoDeSys的watchdog定时监视PLC的实际工作周期是否超出预定时间,避免PLC在执行程序的过程中进入死循环,或者PLC执行非预定程序造成系统瘫痪。当任务超时,任务复位,进入初始状态,继续执行。

 

对比一下AB control logix的任务实现

control logix项目分为任务(task),程序(program)和例程(routine)。

任务(task):每个control logix控制器最多32个任务,仅有一个continuous任务,其余为Periodic或者event任务。

任务命名包括任务功能,优先级和执行周期

任务的三种类型:

 

1. 连续型任务,指的是周而复始连续执行的任务,一个项目只允许定义1个,亦可以不定义,等同于codesys中的PLC_PRG(POU)。

2. 周期型任务,定时中断执行的逻辑程序,需定义周期时间,设定优先级别,最多可以定义31个

3. 事件触发型任务,事件触发引起的任务调度,事件触发可以是外部输入点引起(如同PLC5/SLC),也可以由consumed tag引起或者直接指令调用引起,还可以由运动控制状态引起,需要设定优先级别,最多定义31个。

Control logix中的producer/consumer的概念非常好,体现在其组 能力上。比如某一个模块是消息的生产者,产生消息存放在消息块中,其他需要此变量的功能块,定义一个消息consumer即可。有兴趣的朋友可以自己看看相关资料。

 

CoDeSys的编程工具

IL 、ST、 FBD 、LD、 CFC、 SFC六种语言,我个人比较钟爱ST,CFC。

CodesysV2.3还是强调过程编程,到了V3.5则强调面向对象,C 的影子更多了。

言归正传,应用者也不需要关心那么多技巧,能实现功能,并且代码具有可维护性就是一个合格的工程师。

 

1.高级语言中的struct,union。

Stuct在西门子SCL语言中被称为UDT(user defined type),AB RSLogix 5000中也被称为UDT

TYPE TRAFFIC :

(RED

END_TYPE

 

TYPE STRUCT1 :

STRUCT

P1:INT;

P2:INT;

P3:INT;

END_STRUCT

END_TYPE

 

2.指针,c,c 中的顶级利器,在codesys中也可以使用

Example in ST:

pt:POINTER TO INT;

var_int1:INT;

var_int2:INT;

pt := ADR(var_int1);

var_int2:=pt^;

 

3.FC,FB的概念

 

上述是CoDeSys说明书的例程,不知道看出有什么不同/p>

FC在程序中直接调用即可,FB则需要先定义实例(instance),Instance: FUB。这里的Instance就是C 中的对象实例。怎么理解这个实例呢个最傻的高级语言的例子吧。

 

class Student

{

int age;

int sex;

int grade;

 

void DoWork(void);

};

 

Student tony

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年6月27日
下一篇 2019年6月27日

相关推荐