1.S7-SCL的基本术语
(1)字符集
S7-SCL使用ASCII字符子集:字母A~Z(大小写)、数字0~9以及空格和换行符等。此外,还包含特殊含义的字符,见表7-2。
表7-2 S7-SCL的特殊含义字符
(2)保留字(Reserved Words)
保留字是用于特殊目的关键字,不区分大小写。保留字在编写程序中要用到,不能作为变量使用。保留字见表7-3。
表7-3 S7-SCL的保留字
(3)标识符(Identifiers)
标识符分配给S7-SCL语言对象的名称,即是给变量或块等分配的名称。标识符可以最多24个字母或者数字组成,其第一个必须是字母或者下划线,不区分大小,但标识符不可为关键字或者标准标识符。
如X1、_001以及Value1都是合法的标识符,而001R(第一个字符是数字)、Array(Array是关键字)及XValue(字符间不能有空格)是非法的标识符。由于不区分标识符,Y1和y1是同一个标识符。
S7-SCL中定义了标准的标识符,分为四大类:块标识符、地址标识符、定时器标识符和计数器标识符。以下详细说明。
1)块标识符(Block Identifier)。块标识符用于块的绝对寻址,与STEP7中的一致,块标识符见表7-4。
表7-4 S7-SCL的块标识符
2)地址标识符(Address Identifier)。在程序的任何位置,都要用地址标识符对CPU的存储器进行寻址。地址标识符,如I0.0、Q0.0及M0.1等与STEP7中定义的存储器一致,请参考前面的章节。
定时器标识符(Timer Identifier)和计数器标识符(Counter Identifier)均与STEP7中基本一致。其表示方法如T1和C1等。
(4)数字(Numbers)
在S7-SCL中,有多种表达数字的方法,其表达规则如下:
1)数字可以有正负、小数点或者指数表达。
2)数字间不能有空格、逗号和空格。
3)为了便于阅读可以用下划线分隔符,如16#11FF_AAFF与16#11FFAAFF相等。
4)数字前面可以有正号“+”和负号“-”;没有正负号,默认为正数。
5)数字不可超出范围,如整数范围是-32768~+32767。
数字中有整数和实数。
整数分为INT(范围是-32768~+32767)和DINT(范围是-2147483648~+214748364),合法的整数表达举例:-18、+188。
实数也称为浮点数,即是带小数点的数,合法的实数表达如2.3、-1.88和1.1e+3(就是1.1×103)。
(5)字符串(Character Strings)
字符串就是按照一定顺序排列的字符和数字,字符串用单引号标注,如‘QQ&360’。
(6)注释(Comment Section)
注释用于解释程序,帮助读者理解程序,不影响程序的执行,下载程序时,注释不会下载到CPU中去。对程序详细的注释是良好的习惯。
注释从“∗(”开始,到“∗)”结束,注释的例子如下:
注释还可以用“//”引导,注释长度限制到254个字符,但注释前面必须要有“//”。注释的例子如下:
(7)变量(Variables)
在S7-SCL中,每个变量在使用前必须声明其变量的类型,根据不同区域将变量分为三类:局域变量、全局变量和允许预定义的变量。
局域变量在逻辑块中(FC、FB及OB)中定义,只能在块内有效访问,见表7-5。
表7-5 S7-SCL的局域变量
全局变量是指可以在程序中任意位置进行访问的数据或数据域。
2.S7-SCL的变量和参数声明
(1)变量和块参数的声明
变量和块在使用前,必须要进行单独声明,也就是指定块标识符或者变量以及变量的类型。
变量的声明举例如下:
(2)初始化(Initialization)
静态变量和FB的输入及输出参数可以在声明时进行初始化,输入/输出参数为基本数据类型时也可以进行初始化,对于简单的变量用赋值符(:=)即可赋初值。
初始化的应用举例如下:
1)例子1:
2)例子2:
(3)声明变量范围(Declaring Views of Variable Ranges)
要访问具有不同数据类型的变量,可以使用“AT”关键字定义变量中变量的范围和视图。视图只在块内可见,不包括接口。视图的使用和其他变量一样。
举例如下:
3.S7-SCL常数的声明
在S7-SCL中使用常量有:位常量、数值常量(整数和实数)、字符常量和时间常量(日期、时间周期)等。
(1)声明常量的符号(Declaring Symbolic Namesfor Constants)
常量无须声明,但可以在声明区给常量赋符号名,使用“CONST”语句声明常量的符号名。
在简单的表达式中,只有7种运算符,即为:∗∗、+、-、∗、/、DIV和MOD。
举例如下:
(2)常量的数据类型定义(Data Types for Constants)
常量的数据类型的定义与算术运算或者逻辑运算的数据类型有关。举例说明如下:
常数的数据类型种类和使用示例见表7-6。
表7-6 常量的数据类型定义
4.运算符
一个表达式代表一个值,它可以由单个地址(单个变量)或者几个地址(几个变量)利用运算符结合在一起组成。
运算符有优先级,遵循一般算数运算的规律。S7-SCL中的运算符见表7-7。
表7-7 S7-SCL的运算符
5.表达式
表达式是为了计算一个终值所用的公式,它由地址(变量)和运算符组成。表达式的规则如下:
1)两个运算符之间的地址(变量)与优先级高的预算结合。
2)按照运算符优先级进行运算。
3)具有相同的运算级别,从左到右运算。
4)表示前的减号表示该标识符乘以-1。
5)算数运算不能两个或者两个以上连用。
6)圆括号用于越过优先级。
7)算数运算不能用于连接字符或者逻辑运算。
8)左圆括号与右圆括号的个数应相等。
举例如下:
(1)简单表达式(Simple Expressions)
在S7-SCL中,简单表达式就是简单的加减乘除的算式。举例如下:
SIMP_EXPRESSION=A∗B+D/C-3∗VALUE1;
(2)算术运算表达式(Arithmetic Expressions)
算术表达式是由算术运算符构成的,允许处理数值数据类型。S7-SCL的算术运算符及其地址和结果的数据类型见表7-8。
表7-8 S7-SCL的算术运算符及其地址和结果的数据类型(www.xing528.com)
(续)
注意:以上表格中,ANY_INT指INT和DINT,而ANY_NUM指INT、DINT和Real的数据类型。
(3)比较运算表达式(Comparison Expressions)
比较运算表达式就是比较两个地址中的数值,结果为布尔数据类型。如果布尔运算的结果为真,则结果为TRUE;如果布尔运算的结果为假,则结果为FALSE。比较表达式的规则如下:
1)可以进行比较的数据类型有:INT、DINT、REAL、BOOL、BYTE、WORD、DWORD、CHAR和STING。
2)对于DT、TIME、DATE、TOD等时间数据类型,只能进行同数据类型的比较。
3)不允许S5TIME型的比较,如要进行时间比较,必须使用IEC的时间。
4)比较表达式可以与布尔规则相结合,形成语句。例如:Value_A>20ANDValue_B<20)。
(4)逻辑运算表达式(Logical Expressions)
逻辑运算符AND、&、XOR和OR与逻辑地址(布尔型)或数据类型为BYTE、WORD和DWORD型的变量结合而构成的逻辑表达式。S7-SCL的逻辑运算符及其地址和结果的数据类型见表7-9。
表7-9 S7-SCL的逻辑运算符及其地址和结果的数据类型
6.赋值
通过赋值,一个变量接受另一个变量或者表达式的值。在赋值运算符“:=”左边的是变量,该变量接受右边的地址或者表达式的值。
(1)基本数据类型的赋值(Value Assignments with Variables of an Elementary Data Type)
每个变量、每个地址或者表达式都可以赋值给一个变量或者地址。赋值举例如下:
(2)结构和UDT的赋值(Value Assignments with Variables of the Type STRUCT and UDT)
结构和UDT是复杂的数据类型,但很常用。可以对其赋值同样的数据类型变量、同样数据类型的表达式以及同样的结构或者结构内的元素。应用举例如下:
(3)数组的赋值(Value Assignments with Variables of the Type ARRAY)
数组的赋值类似于结构的赋值,数组元素的赋值和完整数组赋值。数组元素赋值就是对单个数组元素进行赋值,这比较常用。当数组元素的数据类型、数组下标以及数组上标都相同时,一个数组可以赋值给另一个数组,这就是完整数组赋值。应用举例如下:
7.控制语句
S7-SCL提供的控制语句可分为三类:选择语句、循环语句和跳转语句。
(1)选择语句(Selective Statements)
选择语句有IF和CASE,其使用方法和C语言等高级计算机语言的用法类似,其功能说明见表7-10。
表7-10 S7-SCL的选择语句功能说明
1)IF语句。IF语句是条件,当条件满足时,按照顺序执行;不满足时,跳出,其应用举例如下:
2)CASE语句。当需要从问题的多个可能操作中选择其中一个执行时,可以选择嵌套IF语句来控制选择执行,但是选择过多会增加程序的复杂性,降低程序的执行效率。这种情况下,使用CASE语句就比较合适。其应用举例如下:
(2)循环语句(Loops)
S7-SCL提供的循环语句有三种:FOR语句、WHILE语句和REPEAT语句。其功能说明见表7-11。
表7-11 S7-SCL的循环语句功能说明
1)FOR语句。FOR语句的控制变量必须为INT或者DINT类型的局部变量。FOR循环语句定义了:指定的初值和终值,这两个值的类型必须与控制变量的类型一致。其应用举例如下:
2)WHILE语句。WHILE语句通过执行条件来控制语句的循环执行。执行条件是根据逻辑表达式的规则形成的。其应用举例如下:
3)REPEAT语句。在终止条件的满足之前,使用REPEAT语句反复执行REPEAT语句与UNTIL之间的语句。终止的条件是根据逻辑表达式的规则形成的。REPEAT语句的条件判断在循环体执行之后进行,即终止条件得到满足,循环体仍然至少执行一次。其应用举例如下:
(3)程序跳转语句(Program Jump)
在S7-SCL中的跳转语句有四种:CONTINUE语句、EXIT语句、GOTO语句和RE-TURN语句。其功能说明见表7-12。
表7-12 S7-SCL的程序跳转语句功能说明
1)CONTINUE语句的应用举例。用一个例子说明CONTINUE语句的应用。
2)EXIT语句的应用举例。用一个例子说明EXIT语句的应用。
3)GOTO语句的应用举例。用一个例子说明GOTO语句的应用。
8.S7-SCL块
用户可以在SCL中编写块,如OB、FC、FB和UDT等,也可以调用系统的库内提供各种块,如SFB、SFC等。
(1)S7-SCL块的组成
S7-SCL块一般由以下部分组成:
1)块由关键字、块序号或者块符号名开始标识,如组织块的标识为“ORGANIZATION_BLOCKOB20”。对于FC,也要定义类型,用以确定返回值的数据类型。
2)由关键字“TITLE=”引导可选块标题。
3)可选块注释可以一行或者多行,每行以“//”开始。
4)可选块的属性
5)可选块的系统属性。
6)块的声明区。
7)逻辑块中的语句区或数据块中的赋值区。
8)以关键字结束块。
以下详细说明。
(2)块的开始与结束
根据块的类型不同,块的开始和结束标识符有所不同。不同类型块的开始与结束见表7-13。
表7-13 不同类型块的开始与结束
注:表格中的“xxx”是块的序号。
(3)块的属性
块的属性包括块的类型、版本、块保护和作者等。块的属性见表7-14。
表7-14 表的属性
(4)块的注释
可选块注释可以一行或者多行,每行以“//”开始。
(5)块的系统属性
块的系统属性对整个块都有效,其输入规则是在块的开始语句之后立即定义系统属性。块的系统属性的设置由大括号开始,接着最多24个字符的标识符,后接“=:”,然后可以打印字符,用单括号括起来,在本行结束用分号,下一行继续输入,在最后一行加上另外一个大括号。应用举例:
(6)声明区
声明区是逻辑变量、参数、常数以及标号的声明。变量、参数和常数的声明有规定的规范,其规范和区域见表7-15。
表7-15 变量、参数和常数的声明的规范和区域
注意:表格中“X”表示有效,“-”表示无效。
声明的关键字可以用键盘输入,也可用模板插入,常数的模板插入的方法是:单击菜单中的“Insert”→“BlockTem-plate”→“Constant”,在源文件编辑器的工作区就会弹出关键字,如图7-3所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。