哎, 现在真是,有心学习,却没有时间啊..........本来昨天打算弄这个的,结果没有时间啊
感谢管理员没有删除前面的那篇文章。 因此为了兑现我的承诺,继续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