CoDeSys的今生,未来
自从上一期“CANopen个人之所见”发表之后,得到大家很多反响,谢谢大家,经过多日的酝酿,第二篇CoDeSys的文章出炉了,原计划写写“CoDeSys和CANopen”,执笔时想想,CoDeSys和CANopen也没有什么必然联络,CoDeSys能够运用CANopen,sercos,EtherCat。于是只写了CoDeSys相关的部分。欢送拍砖。
: )
工作以及网上看到不少人说,CoDeSys和西门子step7,在德国都属于规范课程,牛逼的小朋友都能够用其编程,不知真假,置信无风不起浪,多少有些依据,看看国内清一色的日系编程,我们能否需求换换脑子,换换思索方式了?CoDeSys类的编程能否抵达这个目的?
请权且抱着自创的想法看看下文,能否能取得你需求的信息。
写作的动身点是给销售人员看的,似乎有兴致的更多是技术人员,销售了解了这些概念,或许真的能成为“忽悠大神仙”,多卖产品,多赚银子,个人的一点浅见。废话少说,开启你的学习方式吧。
CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S(SMART,SOFTWARE,SOLUTIONS)公司出的一款与制造商无关的IEC 61131-1编程软件。CoDeSys 支持完好版本的IEC61131规范的编程环境,支持规范的六种编程言语。是一个规范的软件平台,被很多硬件厂家支持,可编程超越150家OEM消费的自动装置。CoDeSys提供了许多组合产品的扩展,诸如各种不同范畴的总线配置程序、完整的目测化和运动控制系统。
CoDeSys是一种功用强大的PLC软件编程工具,它支持IEC61131-3规范IL 、ST、 FBD 、LD、 CFC、 SFC六种PLC编程言语,用户能够在同一项目当选择不同的言语编辑子程序,功用模块等。
CoDeSys是可编程逻辑控制PLC的完好开发环境(Controlled Developement System的缩写),在PLC程序员编程时,CoDeSys为强大的IEC言语提供了一个简单的办法,系统的编辑器和调试器的功用是树立在高级编程言语的基础上(如Visual C)。
往常国内PLC用户运用的版本多为CoDeSys V2.3, 最新的版本是CoDeSys V3(目前最新版本为V3.5)。V3 在软件架构上有了很大的改善,朝安全软件的方向展开,目前正在申请TUV关于EN 61508的SIL认证。
HOLLSYS(和利时G3 PLC),Kinco(深圳步科F1 PLC),ABB AC500系列,IFM,EPEC,Rexroth,Wago,Parker,Beckhoff,Festo,施耐德等PLC厂家都是运用CoDeSys平台开发自己的编程软件的。当然了,还有很多其他公司。
另外,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上就是:Project\uOptions\uDirectories\uTarget\uConfiguration files: **\*\uPlcConf\。
3、Lib文件夹下的诸*.lib文件,提供底层的CoDeSys Runtime的驱动接口。对应CoDeSys IDE的Library Manager。其装置途径由InstallTarget组件程序的Installation选项指定。反映在CoDeSys IDE上就是:Project\uOptions\uDirectories\uTarget\uLibraries: **\*\uLibs\。
上图,就是装置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, YELLOW:=1, GREEN:=10);
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阐明书的例程,不知道看出有什么不同?
FC在程序中直接调用即可,FB则需求先定义实例(instance),Instance: FUB。这里的Instance就是C中的对象实例。怎样了解这个实例呢?上个最傻的高级言语的例子吧。
class Student
{
int age;
int sex;
int grade;
void DoWork(void);
};
Student tony, jany;
tony.age = 10;
tony.sex = male;
tony.grade = 3;
tony.DoWork();
jany.age = 9;
jany.sex = female;
jany.grade = 3;
jany.DoWork();
这里的DoWork就相似FB,能够看到FB带有自己独立的数据块,比如例中的age,sex,grade。
对比西门子S300/S400的FC、FB
1.FC不具备自己的存储区,FB有自己的存储区-背景DB。
2.FC和FB都有自己的TEMP变量,存储在系统的本地stack上。当FC和FB调用终了,TEMP变量会释放。
3.FB有静态变量,FC没有。静态变量在背景DB中,FB调用终了,静态变量依然有效。
西门子300中,DB分为背景DB和共享DB,背景DB和FB相关联。
景DB和共享DB没有实质区别,它们的数据都能够被任何一个DB,FC或者FB读写。它们的区别在于运用目的:背景DB为FB提供数据,其数据格式和FB变量声明分歧;共享DB目的为用户程序提供一个可保管的数据区。
假如对C比较熟习,能够这样了解:FC和FB像C中的函数,只不过FB能够生成静态变量,在下次函数调用时数据能够保管,而FC的变量只在调用期内有效,下次调用又重新改换。
每次调用FC的I/O区域必需求自己每次手动输入,而FB就不要,省去不少省事,假如在上位机控制直接输入DB控制地址就可!
看到这里,大家再思索一下,德系PLC的编程思想固然完成方式不同,但强调的概念都一样,一定要了解这些概念,才干熟练应用。
4.PLC_PRG
PLC_PRG是一个预定义的POU(program of unit),每个工程必需包含这个特定的程序,这个POU在每个cycle中调用一次。其实质就是一个freewheeling程序。
假如运用了多任务,能够不包含PLC_PRG,依照任务配置表执行特定程序。
5.lib库的运用
Lib的运用表现了codesys高级言语的特性,支持math.lib,string.lib,canopen.lib,能够运用自定义的lib
用户自己完成的lib库,包含两种:Internal lib,External lib,有什么区别呢?
内部是完整应用CoDeSys完成的自定义lib库。外部库则需求应用相关的编译链去编译,更多被底层开发者所采用,能够直接应用OS底层的API中止编程,性能效率更高。
6.好用的case语句
CASE INT1 OF
1, 5:
BOOL1 := TRUE;
BOOL3 := FALSE;
2:
BOOL2 := FALSE;
BOOL3 := TRUE;
10..20:
BOOL1 := TRUE;
BOOL3:= TRUE;
ELSE
BOOL1 := NOT BOOL1;
BOOL2 := BOOL1 OR BOOL2;
END_CASE;
case语句是我比较喜欢的功用,能够完成手动自动,能够完成多工位。
K5 PLC没有日系的STL,也没有西门子的SCR指令,能够经过其他方式完成类case办法,大家也能够思索下。
更多CoDeSys的运用细节可参考CoDeSys阐明书“CoDeSys_V23_E.pdf”
能想到的也就这些,暂时写到这里吧,文中更多强调的是概念,细致编程完成和技巧触及很少,个人实战也不是很多,认识也有肤浅,大家看后有什么好的想法,也请告知,谢谢! 所以说不花钱定制runtime的话,就没办法自己搞一个嵌入式平台运行codesys吗,只能在pc上自己编程然后simulation?
我对codesys不太了解,原来以为可以自己用嵌入式平台搭建一个软PLC运行的呢
页:
[1]