酷德网

Kx-m3酷自造发布!
查看: 126|回复: 0

Codesys浅析

[复制链接]
  • TA的每日心情
    奋斗
    2017-12-16 07:07
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2018-8-17 08:56:49 | 显示全部楼层 |阅读模式
    CoDeSys是可编程逻辑控制PLC的完整开发环境(Controlled Developement System的缩写),在PLC程序员编程时,CoDeSys为强大的IEC语言提供了一个简单的方法,系统的编辑器和调试器的功能是建立在高级编程语言的基础上。
    CoDeSys框架两部分组成:
    1、CoDeSys IDE。
       即CoDeSys集成开发环境,符合IEC61131编程规范,安装于PC机上,运行于Windows或者Linux下。由最终应用用户所使用的开发工具。
    adb9b9882dc3a4c56dac9ed897c1341e.jpg
    2、CoDeSys Runtime。
    CoDeSys底层运行原理
    fa45b19316104969b4f224bc46b3cc04.jpg    Codesys runtime是建立在OS上的,常见的OS有wince,windows,linux,vxworks。构建在OS的优势就在于系统的扩展性更强,PC的更多功能都可以在PLC上实现。
    control task被操作系统每隔一段时间(典型是1ms)调用一次。
    IEC task被内建的看门狗监控,监视PLC的实际工作周期是否超出预定时间,如果超出则IEC task任务停止,向系统报告错误。
    CoDeSys的编程工具
    IL 、ST、 FBD 、LD、 CFC、 SFC六种语言。但Codesys主推的还是ST语言,也就是TIA中SCL。下面介绍一下codesys中与别的PLC编程工具不同的地方:1.高级语言中的struct。
    Struct在西门子SCL语言中被称为UDT(user defined type),AB RSLogix 5000中也被称为UDT
    TYPE TRAFFIC :
    (RED, YELLOW:=1, GREEN:=10);
    END_TYPETYPE STRUCT1 :
    STRUCT
    P1:INT;
    P2:INT;
    P3:INT;
    END_STRUCT
    END_TYPE2.指针,编程中的顶级利器,在codesys中也可以使用
    Example in ST:
    pt:OINTER TO INT;
    var_int1:INT;
    var_int2:INT;
    pt := ADR(var_int1);
    var_int2:=pt^;3.FC,FB的概念
    f9b212e33dd6cc1c07a20983328dfdeb.jpg
    1b71d4986cf112bb408aa083da6041b0.jpg
    上述是CoDeSys说明书的例程
    FC在程序中直接调用即可,FB则需要先定义实例(instance),Instance: FUB。这里的Instance就是C中的对象实例。对比西门子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目的为用户程序提供一个可保存的数据区。
    a84461ce4e056d955e20e6b2f0995164.jpg
    如果对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
    4cf16755b92b466fe18751b60090ee0a.jpg
    用户自己实现的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语句,可以实现手动自动,可以实现多工位。               
    回复

    使用道具 举报

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

    本版积分规则

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

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

    GMT+8, 2018-11-13 10:27 , Processed in 0.275473 second(s), 22 queries , MemCache On.

    酷德网

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

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