zoukankan      html  css  js  c++  java
  • Object_Pascal_西门子SCL应用_系列2_SCL中的块_1

            哎, 现在真是,有心学习,却没有时间啊..........本来昨天打算弄这个的,结果没有时间啊

            感谢管理员没有删除前面的那篇文章。 因此为了兑现我的承诺,继续SCL的旅程.....

           在此声明一点: 本系列——即西门子SCL应用——文章,欢迎转载和指正,但是请务应用于任何商业目的。在博客园写

    文章,是为了分享和交流,不是为了商业目的。 所以请务将本系列的文章用于任何商业目的。

          不闲扯了,下面开始这一次的SCL旅程:

          上次课程说到了块的开始和结束的定义, 同时也说到了块开始的定义部分,今天继续将块的有关内容:

    4.4.1 块名
        如系列1的文章描述的,xx_name当做块名, 参照以下语法:
        
          块关键字                      数字
       DB FB FC OB UDT            n
           标识符
           符号

    数字可以是0到65535之间的值, 但是数据块标识符DB0 被保留,用户不能定义和使用
    若使用符号名,必须为在Step7中为块定义一个标识符或符号名
    Exp:
    函数块
       FUNCTION_BLOCK  FB10  //利用块关键字定义
       ...
       END_FUNCTION_BLOCK

       FUNCTION_BLOCK  Cotroll_Block  //利用标识符进行定义
       ...
       END_FUNCTION_BLOCK

       FUNCTION_BLOCK  "Control block"  //利用全局符号进行定义
       ...
       END_FUNCTION_BLOCK 

    这里需要说明一点: 利用块关键字和全局符号定义的块全局可见。

    4.4.2 块的属性
       块的属性即能有的块特性, 块的属性有:
          1)块的类型
          2)块的版本
          3)块的保护特性
          4)块的作者
          5)块名
          6)块的系列名称:通常用于快速查找
    如下所列:
    关键字                               作用                                       实例
    TITLE='可打印字符'             块的标题                                 TITLE='SORT'
                                           通常用来说明块功能


    VERSION:'数字.数字'          指定块的版本号                          VERSION:'3.01'  
                                          Tip: 数据块的版本属性不             //DB
                                          需要在引号中限定                        VERSION:3.01

    KNOW_HOW_PROTECT       块保护属性;带此选项的块如        KNOW_HOW_PROTECT
                                           编译成STL语句并将源代码删除
                                           后将不能被Step 7的LAD编辑器
                                           打开

    AUTHOR                          作者的名字,主要用来反映一            AUTHOR:Siemens
                                          些作者的相关信息

    NAME                              块名,用来指定开的名称                NAME:PID

    FAMILY                            块系列的名称,如马达,用于       FAMILY:volcanol
                                          将块分类保存。   

    使用块属性的规则:
    1、在块的定义开始后,用关键字直接定义块属性
    2、标识符最多8个字符

    Exp:
    FUNCTION_BLOCK   "Start_Motor"
    TITLE=电机启动控制功能块'   //这个标题会出现在Step 7的资源管理其的注释列
    VERSION='0.01'
    KNOW_HOW_PROTECT
    AUTHOR:volcnol
    NAME:StartM
    FAMILY:

    4.4.3 块的注释
       西门子SCL的的注释兼容Object Pascal的注释,同时利用TITLE定义的属性会在LAD
    编辑器中出现在块的注释中。
    用:
         // 表示注释       

    如上面:
       //这个标题会出现在Step 7的资源管理器的注释列
       TITLE='电机启动控制功能块'  

    4.4.4  声明部分
        既然SCL和Pascal语言类似,并且FC本来就是Function函数块, 那么函数的声明
    部分在SCL中也是一样存在的。
        块的声明部分用来声明本地(局部)变量、参数、常量和标号
    声明部分遵循以下几个规则:
        1)在逻辑块的声明部分定义的本地变量、参数、常量和标号的作用域仅在块内部有效。
        2)要定义全局有效的变量或存储区需要在数据块DB中定义
        3)UDT只是提供一个符合的数据类型,如果不用UDT定义用户变量则UDT不可用

    声明部分的结构:
        声明部分通过不同的关键字定义不同的子区,每个子区包含同类型的变量或数据的声明,子区
    顺序不定义,可自由排列。
    1) 常量声明区域
        关键字:
           CONST
              声明列表
           END_CONST
         常量区用来声明常量,相当于C语言中的const变量。
    Exp:
        CONST
           Number      := 10 ;
           TIMEOFDAY1  := TIME#1D_1H_10M_22S_2MS ;
           NAME        := 'SIEMENS' ;
           NUMBER2     := 2 * 5 + 10 * 4 ;
           NUMBER3     := 3 + NUMBER2 ;
        END_CONST
    编译器根据数据类型自动检测常量的数据类型。

    2)标号
       标号用来标识GOTO语句的目标,在逻辑块的声明部分用符号名声明
       关键字:
         LABEL
             LAB1,LAB2,LAB3;
         END_LABEL
    Exp:
         LABEL
           ERR;
         END_LABEL

         在代码部分
              if devsion=0 then
                 goto err;
              end if
    3)零时变量
        临时变量相当于C语言中的局部变量
        关键字:
          VAR_TEMP
          ....
          END_VAR
    Exp:
          VAR_TEMP
             Add:INT;
             Factor:Real;
          END_VAR

    4:静态变量
       静态变量是本地变量,其值贯穿所有块循环一直保留。用来存贮功能块的值,存贮在实例数据块中。

    这个地方定义的变量相当于C语言中的Static变量。在FC定义的静态变量不具有静态属性,这也是FB

    和FC间最大的区别。

     关键字:
         VAR
         ....
         END_VAR
     Tip:
         在函数FC中声明的声明的静态变量,在编译时会存储在VAR_TEMP区域。

    Exp:
        VAR
           Count:INT;
        END_VAR
    5、输入参数
       输入参数相当于C语言中的形式参数,也相当于Pascal中的形式参数
       关键字:
       VAR_INPUT
       ...
       END_VAR
    Exp:
       VAR_INPUT
           Estop:BOOL;
       END_VAR;
    Tip:
        在DB块的声明中和UDT的声明中,VAR和END_VAR结构被STRUCT和END_STRUCT代替

    5:输出参数
       输出参数就是FC、FB块用来输出的数据接口区
       关键字:
       VAR_OUTPUT
         ...
       END_VAR
    输出参数在目前的程序设计语言中算是非常独特的了, 它可以将FC和FB的计算结果
    输出到一个别的存储位置。
    6:输入/输出参数
       输入输出参数相当于指针结构, 可以接受实参,并且在经过FC和FB的处理后,其
    实参值会被改变。
       关键字:
       VAR_IN_OUT
       ....
       END_VAR

    4.4.5  语句部分
        语句部分是FB、FC、OB块的核心部分,通过语句部分实现函数、函数块和组织块的功能。
    数据块的语句部分包含初始化变量的语句。
      语句规则:
         1)在FC、FB和OB块中可以使用BEGIN标识语句的开始,也可以不使用。
         2)数据块初始化变量的语句必须用BEGIN标识其开始。
         3)语句的结束部分用块结束关键字标识结束
         4)每个语句必须用分号;标识结束
         5)语句部分使用的标识符必须声明过
         6)在语句部分可以使用已经定义的标号LABEL
    Exp:
       BEGIN     // 利用Begin表示语句开始
          INITIAL_VALUE:=0;
          FINAL_VALUE:=200;  //语句结束用:分号表示单个语句的结束
        SORTE:                    //使用标号
            RESUALT:=SETPOINT;
       END_FUNCTION_BLOCK    //快结束标识符、关键字

    1)语句的定义
       语句是用户程序的最小逻辑结构,描述一个执行指定操作的处理器(CPU)指令
    2)语句的类型
       赋值语句: 指定数值给一个变量
       控制语句: 控制语句的执行流程
       调用语句: 调用特定的函数和函数块(FC、FB块)
    Exp:
       // 赋值语句的例子
        iLength:= 0 ;

       // 子程序调用的例子
       FB1.DB1 (Temprature:= 10) ; //需要注意FB块的调用规则
                                  //FC可能有返回值, 返回值的调用同Pascal语言函
                                  //数的调用规则

       // 控制语句的例子
       WHILE iCounter < MAX  DO..
       ......
       END_WHILE;

           不知道园子里面的朋友对自动化和工业控制有什么认识,下面给两个链接,

           大家如果闲着没事的话可以看看

           第一个链接:

             5轴联动一次成型的数控机床:

             链接为:http://v.youku.com/v_show/id_XMjM2OTQzMjQw.html

             目前中国在数控机床方面的落后是在是太大了, 在沈阳有个研究中心、华中数控数控床在国内算是一流的了,

    但是和视频展现的来比的话,差距太大了。 如果做过数控的话,应该知道全自由度的数控难度有多大,一般国外

    进口的三轴联动的机器价格均在1000w以上,华中的数控的大型加工中心价格也在1000w左右。

              其他链接:

              卷取机视频:http://v.youku.com/v_show/id_XNDYzOTY3OTY=.html

              轧机视频     http://v.youku.com/v_show/id_XMjY2ODkzOTgw.html

                              http://v.youku.com/v_show/id_XMjE4OTg4MzM2.html

                              http://v.youku.com/v_show/id_XNzcwMzc1OTI=.html      

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/volcanol/p/2087543.html
Copyright © 2011-2022 走看看