西门子S7-1200PLC编程语言

2019年1月13日23:51:55 发表评论 986 阅读

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 编辑器包括一个块注释按钮和通用控制语句:

寻址
与 LAD 和 FBD 一样,SCL 允许用户在用户程序中使用变量地址(符号寻址)或绝对地址。 SCL 还允许使用变量作为数组索引。
绝对寻址
%I0.0 在绝对地址之前加上“%”符号。 没有“%”,STEP 7
将在编译时生成未定义的变量错误。
符号寻址
"PLC_Tag_1" PLC 变量表中的变量
"Data_block_1".Tag_1 数据块中的变量
"Data_block_1".MyArray[#i] 数据块数组中的数组元素

使用 PEEK  POKE 指令进行索引寻址

SCL 提供 PEEK 和 POKE 指令,可用来从数据块、I/O 或存储器中读取内容或是向其中写入内容。 而您提供操作中具体字节偏移量或位偏移量的参数。

与数据块一起使用 PEEK 和 POKE 指令时,必须使用标准(未优化的)数据块。 同时需要注意 PEEK 和 POKE 指令仅用于传输数据。 它们无法识别地址中的数据类型。

  • LADFBD 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) 命令。

  1. 展开“PLC 编程”(PLC programming)属性并选择“SCL(结构化控制语言)”(SCL(Structured Control Language))。
  2. 选择“自动设置ENO”(Set ENO automatically) 选项。
weinxin
plc入门知识问答
每一个PLC工程师都应该关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: