STEP 7 为 S7-1200 提供以下标准编程语言:
- LAD(梯形图逻辑)是一种图形编程语言。它使用基于电路图的表示法。
- FBD(功能块图)是基于布尔代数中使用的图形逻辑符号的编程语言。
- SCL(结构化控制语言)是一种基于文本的高级编程语言。 创建代码块时,应选择该块要使用的编程语言。 用户程序可以使用由任意或所有编程语言创建的代码块。
梯形图 (LAD)
电路图的元件(如常闭触点、常开触点和线圈)相互连接构成程序段。
要创建复杂运算逻辑,可插入分支以创建并行电路的逻辑。 并行分支向下打开或直接连接到电源线。 用户可向上终止分支。
LAD 向多种功能(如数学、定时器、计数器和移动)提供“功能框”指令。STEP 7 不限制 LAD 程序段中的指令(行和列)数。
说明
每个 LAD 程序段都必须使用线圈或功能框指令来终止。
创建 LAD 程序段时请注意以下规则:
- 不能创建可能导致反向能流的分支。
- 不能创建可能导致短路的分支。
功能块图 (FBD)
与 LAD 一样,FBD 也是一种图形编程语言。 逻辑表示法以布尔代数中使用的图形逻辑符号为基础。
要创建复杂运算的逻辑,在功能框之间插入 并行分支。算术功能和其它复杂功能可直接结合逻辑框表示。STEP 7 不限制 FBD 程序段中的指令(行和列)数。
SCL
结构化控制语言 (SCL, Structured Control Language) 是用于 SIMATIC S7 CPU 的基于 PASCAL 的高级编程语言。 SCL 支持 STEP 7 的块结构 。 可以使用以下三种编程语言之一将程序块包括到项目中:SCL、LAD 和 FBD。
SCL 指令使用标准编程运算符,例如,用 (:=) 表示赋值,算术功能(+ 表示相加,- 表示相减,* 表示相乘,/ 表示相除)。 SCL 也使用标准的 PASCAL 程序控制操作,如 IF-THEN-ELSE、CASE、REPEAT-UNTIL、GOTO 和 RETURN。 SCL
编程语言中的语法元素还可以使用所有的 PASCAL 参考。 许多 SCL 的其它指令(如定时器和计数器)与 LAD 和 FBD 指令匹配。 有关特定指令的更多信息,请参见基本指令 和扩展指令章节中的特定指令。
SCL 程序编辑器
可以在创建该块时指定任何块类型(OB、FB 或 FC)以便使用 SCL 编程语言。 STEP 7
提供包含以下元素的 SCL 程序编辑器:
- 用于定义代码块参数的接口部分
- 用于程序代码的代码部分
- 包含CPU支持的 SCL 指令的指令树 可以直接在代码部分输入指令的 SCL 代码。
编辑器包含用于通用代码结构和注释的按钮。 要了解更复杂的指令,只需从指令树拖动
SCL 指令并将其放入程序中。 也可以使用任意文本编辑器创建 SCL程序,然后将相应文件导入 STEP 7 中。
在 SCL 代码块接口部分,可以声明下列类型的参数:
●Input、Output、InOut 和 Ret_Val: 这些参数定义代码块的输入变量、输出变量和返回值。 执行代码块期间局部使用此处输入的变量名称。 通常不会使用变量表中的全局变量名称。
●Static(仅适用于 FB,上述示例适用于 FC): 代码块使用静态变量在背景数据块中存储静态中间结果。 块会一直保留静态数据,直到多个周期后被覆盖。 块的名称(此块将其作为多重背景调用)也存储在静态局部数据中。
●Temp:这些参数是执行代码块期间使用的临时变量。
●Constant:这些是为代码块指定的常数值。
如果从其它代码块调用 SCL 代码块,该 SCL 代码块的参数会显示为输入或输出。
本示例中,“Start”和“On”变量(来自项目变量表)相当于 SCL程序声明表中的“StartStopSwitch”和“RunYesNo”。
SCL 表达式和运算
构造 SCL 表达式
SCL 表达式是用于计算值的公式。 表达式由操作数和运算符(如 *、/、+ 或 -)组成。 操作数可以是变量、常量或表达式。
表达式的计算按一定的顺序进行,具体由以下因素决定:
- 每个运算符均具有预定义的优先级,首先执行优先级高的运算。
- 按从左至右的顺序处理优先级相同的运算符。
- 可使用圆括号指定要一起计算的一系列运算符。 表达式的结果可用于将值分配给程序使用的变量、用作由控制语句使用的条件、用作其它SCL 指令的参数或者用于调用代码块。
表格 7- 2 SCL 中的运算符
类型 | 操作 | 操作员 | 优先级 |
圆括号 | (表达式) | ( , ) | 1 |
数学 | 乘方 | ** | 2 |
符号(一元加号) | + | 3 | |
符号(一元减号) | - | 3 | |
倍增 | * | 4 | |
除法 | / | 4 | |
取模 | MOD | 4 | |
加法 | + | 5 | |
减法 | - | 5 | |
比较 | 小于 | < | 6 |
小于或等于 | <= | 6 | |
大于 | > | 6 | |
大于或等于 | >= | 6 | |
等于 | = | 7 | |
不等于 | <> | 7 | |
位逻辑 | 取反(一元) | NOT | 3 |
AND 逻辑运算 | AND 或 & | 8 |
类型 | 操作 | 操作员 | 优先级 |
异或逻辑运算 | XOR | 9 | |
OR 逻辑运算 | OR | 10 | |
赋值 | 赋值 | := | 11 |
作为一种高级编程语言,SCL 使用标准语句实现基本任务:
- 赋值语句::=
- 算术功能:+、-、*和 /
- 全局变量的寻址:"<变量名称>"(变量名称或数据块名称括在双引号内)
- 局部变量的寻址:#<变量名称>(在变量名称前加“#”符号) 以下示例显示了用法不同的各种表达式。
"C" := #A+#B; 将两个局部变量之和赋值给一个变量
"Data_block_1".Tag := #A; 为数据块变量赋值
IF #A > #B THEN "C" := #A; IF-THEN语句的条件
"C" := SQRT (SQR (#A) + SQR (#B)); SQRT指令的参数
算术运算符可以处理各种数值数据类型。 结果的数据类型取决于高有效操作数的数据类型。 例如,使用 INT 操作数和 REAL 操作数的乘法运算会产生 REAL 结果值。
控制语句
控制语句是 SCL 表达式的一种专用类型,可用于执行以下任务:
- 程序分支
- 重复SCL编程代码的某些部分
- 跳转到SCL程序的其它部分
- 按条件执行
SCL 控制语句包括 IF-THEN、CASE-OF、FOR-TO-DO、WHILE-DO、REPEAT-UNTIL、CONTINUE、GOTO 和 RETURN。
一条语句通常占一行代码。 可以在一行中输入多条语句,或者可将一条语句断开成多行代码以使代码易于阅读。 分隔符(如制表符、换行符和多余空格)在语法检查期间会被忽略。 END 语句可终止控制语句。
以下示例显示的是 FOR-TO-DO 控制语句。 (两种形式的代码在语法上均有效。)
FOR x := 0 TO max DO sum := sum + value(x); END_FOR;
FOR x := 0 TO max DO
sum := sum + value(x); END_FOR;
还可以为控制语句提供标签。 用语句前的逗点将标签隔开:
Label: <语句>;
有关完整的 SCL 编程语言参考,请参见 STEP 7 在线帮助。
条件
条件是一个比较表达式或逻辑表达式,其结果为 BOOL 类型(值为 TRUE 或 FALSE)。 以下示例显示了各种类型的条件。
#Temperature > 50
#Counter <= 100
#CHAR1 < 'S'
关系表达式
(#Alpha <> 12) AND NOT #Beta 比较和逻辑表达式
5 + #Alpha 算术表达式
条件可以使用算术表达式:
- 如果结果是非零的任何值,则表达式的条件为TRUE。
- 如果结果为零,则表达式的条件为FALSE。
从 SCL 程序中调用其它代码块
要调用用户程序中的其它代码块,只需使用参数输入 FB 或 FC 的名称(或绝对地址)。 对于 FB,还必须提供 FB 待调用的背景数据块。
<DB 名称> (参数列表) 作为单个背景调用
<#背景名称> (参数列表) 作为多重背景调用
"MyDB"(MyInput:=10, MyInOut:="Tag1");
<FC 名称> (参数列表) 标准调用
<操作数>:=<FC 名称> (参数列表) 在表达式中调用
"MyFC"(MyInput:=10, MyInOut:="Tag1");
还可将块从导航树中拖动到 SCL 程序编辑器中,然后完成参数分配。
将块注释添加到 SCL 代码
可通过在 (* 和 *) 之间加入注释文本,将块注释添加到 SCL 代码中。 可在 (* 和 *) 之间添加任意数目的注释行。 SCL 程序块可能包括多个块注释。 为方便编程,SCL 编辑器包括一个块注释按钮和通用控制语句:
使用 PEEK 和 POKE 指令进行索引寻址
SCL 提供 PEEK 和 POKE 指令,可用来从数据块、I/O 或存储器中读取内容或是向其中写入内容。 而您提供操作中具体字节偏移量或位偏移量的参数。
与数据块一起使用 PEEK 和 POKE 指令时,必须使用标准(未优化的)数据块。 同时需要注意 PEEK 和 POKE 指令仅用于传输数据。 它们无法识别地址中的数据类型。
- LAD、FBD和 SCL 的 EN 和 ENO
确定指令的“能流”(EN 和 ENO)
特定指令(如数学和移动指令)为 EN 和 ENO 提供参数。 这些参数与 LAD 或 FBD 中的能流有关并确定在该扫描期间是否执行指令。 SCL 还允许用户为代码块设置 ENO 参数。
- EN(使能输入)是布尔输入。要执行功能框指令,能流(EN = 1) 必须出现在此输入端。 如果 LAD 框的 EN 输入直接连接到左侧电源线,将始终执行该指令。
- ENO(使能输出)是布尔输出。如果该功能框在EN 输入端有能流且正确执行了其功能,则 ENO 输出会将能流 (ENO = 1) 传递到下一个元素。 如果执行功能框指令时检测到错误,则在产生该错误的功能框指令处终止该能流 (ENO
= 0)。
表格 7- 3 EN 和 ENO 的操作数
程序编辑器 | 输入/输出 | 操作数 | 数据类型 |
LAD | EN, ENO | 能流 | Bool |
FBD | EN | I、I:P、Q、M、DB、Temp、能流 | Bool |
ENO | 能流 | Bool | |
SCL | EN1 | TRUE, FALSE | Bool |
ENO2 | TRUE, FALSE | Bool |
1 EN 仅适用于 FB。
2 可以选择将 ENO 与 SCL 代码块一起使用。 代码块完成时,用户必须组态 SCL
编译器来设置 ENO。
通过组态 SCL 来设置 ENO
要组态 SCL 编译器以设置 ENO,请按以下步骤操作: 1. 从“选项”(Options) 菜单中选择“设置”(Settings) 命令。
- 展开“PLC 编程”(PLC programming)属性并选择“SCL(结构化控制语言)”(SCL(Structured Control Language))。
- 选择“自动设置ENO”(Set ENO automatically) 选项。

评论