酷德网

HSC6150发布~
查看: 1285|回复: 1

CoDeSys的今生,未来

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-5-13 09:47:41 | 显示全部楼层 |阅读模式

    20150113175233998.png
      自从上一期“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\。
      
    20150113175443107.png
      
    20150113175454779.png
      上图,就是装置target的过程,也就是每个OEM厂家装置自己硬件的过程。
      CoDeSys底层运转原理
      
    20150113175524482.png
      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编程,运用了功用块,也算是日自己的妥协吧。
      
    20150113175553107.png
      这里有几个概念:
      优先级,数值越小优先级越高,依据任务的实时性,设定优先级
      任务类型
      循环:周期性执行任务
      自由运转:只需启动程序就处置任务,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:
      ptOINTER TO INT;
      var_int1:INT;
      var_int2:INT;
      pt := ADR(var_int1);
      var_int2:=pt^;
      3.FC,FB的概念
      
    20150113175640310.png
      
    20150113175656592.png
      
    20150113175716951.png
      
    20150113175725889.png
      
    20150113175741779.png
      上述是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目的为用户程序提供一个可保管的数据区。
      
    20150113175808123.png
      假如对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
      
    20150113175825967.png
      用户自己完成的lib库,包含两种:Internal lib,External lib,有什么区别呢?
      内部是完整应用CoDeSys完成的自定义lib库。外部库则需求应用相关的编译链去编译,更多被底层开发者所采用,能够直接应用OS底层的API中止编程,性能效率更高。
      
    20150113175910076.png
      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”
      能想到的也就这些,暂时写到这里吧,文中更多强调的是概念,细致编程完成和技巧触及很少,个人实战也不是很多,认识也有肤浅,大家看后有什么好的想法,也请告知,谢谢!
    打赏鼓励一下!
    +10
    回复

    使用道具 举报

    该用户从未签到

    发表于 2015-9-10 10:24:56 | 显示全部楼层
    所以说不花钱定制runtime的话,就没办法自己搞一个嵌入式平台运行codesys吗,只能在pc上自己编程然后simulation?
    我对codesys不太了解,原来以为可以自己用嵌入式平台搭建一个软PLC运行的呢
    打赏鼓励一下!
    +10
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号 )|网站地图

    GMT+8, 2020-10-23 07:22 , Processed in 0.175297 second(s), 69 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表