TIA protal与SCL从入门到精通(1)

您所在的位置:网站首页 PLC编程语言stCO TIA protal与SCL从入门到精通(1)

TIA protal与SCL从入门到精通(1)

2024-07-09 21:23| 来源: 网络整理| 查看: 265

SCL语言是由Pascal而生的结构化程序语言,与梯形图相(LAD)比,SCL语言的灵活程度更高,易于编写控制算法。 本教程虽然使用的是S7-1500系列的PLC,但实际上是面向S7-1200的用户,在1500系列的PLC中,笔者更希望使用STL来对应他优越的计算处理能力。

本教程基于的平台如下 软件:TIA 15.1 CPU 1516

(1)直接创建纯SCL的程序块儿; 在这里插入图片描述 (2)在LAD/FBD中在插入SCL程序段。

在这里插入图片描述

在程序段中直接右击插入即可,但是插入的程序段并不能完全使用SCL语法,GOTO等跳转指令就不能使用。在SCL中一般不能使用绝对地址进行变量地址的访问,变量表中的变量一般使用变量名称进行访问。 创建的SCL块儿可以在观测栏中显示变量的地址,如下,为示例程序: 在这里插入图片描述 在SCL中,:= 表示赋值。 二、常量,变量及相关指令 (1)常量及变量的声明 在博图中,可以在代码区进行变量的声明,也可以在程序块内部进行变量声明。具体如下图: 变量声明区有如下区别: 无论是FC还是FB块,都是函数块

类型具体功能Input函数块的形参,外部传入函数的变量Output组件返回 函数的返回值Inout从外部读入量然后经过程序再输出到外部Static仅在FB块中使用,例如计时器等函数块可以使用此类型函数进行定义Temp临时变量,局部变量,仅在当前周期中存在

其中,Constant为常量,应用较为简单不再叙述 Input,Output以及Inout都是作为函数参数使用,尽管Static在程序块中会为其划分存储空间,但是其仍旧是作为局部变量的存在使用。 此外,SCL还允许用户自行定义自己的类,这点会在后面的文章进行阐述。同时TIA15.1还允许用户定义变量声明形式。 菜单:选项/设置 如下图

在这里插入图片描述 如果切换为文本视图,在其中就可以进行变量的自定义。

在这里插入图片描述

笔者觉得这是博图一个极为重要的改进。 (2)基本运算符以及基本程序控制指令 通过如下的基本运算符就可以看出西门子的PLC已经不单单是一个传统的可编程控制器。笔者曾用1200做了一个简单网关,可见现在的PLC功能有多强大。后期会把教程一并导入。 基本控制函数主要为三类: 条件语句 循环语句 选择语句 然后上述三类中又包含了四个常用指令: Goto、Exit、Return、Continue 在介绍上述指令之前,先介绍代码区间 REGION END_REGION 是一对配对的区间函数,可以对代码进行整理,也可以对其划分的一个区间的代码进行剪切,粘贴,复制,删除插入等操作 具体样例如下图: 在这里插入图片描述

条件语句IF语句 使用“条件执行”指令,可以根据条件控制程序流的分支。该条件是结果为布尔值(TRUE 或 FALSE)的表达式。可以将逻辑表达式或比较表达式作为条件。 执行该指令时,将对指定的表达式进行运算。如果表达式的值为 TRUE,则表示满足该条件;如果其值为 FALSE,则表示不满足该条件。 根据分支的类型,可以对以下形式的指令进行编程: IF 分支: IF THEN END_IF;

如果满足该条件,则将执行 THEN 后编写的指令。如果不满足该条件,则程序将从 END_IF 后的下一条指令开始继续执行。

IF 和 ELSE 分支:

IF THEN ELSE END_IF;

如果满足该条件,则将执行 THEN 后编写的指令。如果不满足该条件,则将执行 ELSE 后编写的指令。程序将从 END_IF 后的下一条指令开始继续执行。 IF、ELSIF 和 ELSE 分支:

IF THEN ELSIF THEN ELSE END_IF;

如果满足第一个条件(),则将执行 THEN 后的指令()。执行这些指令后,程序将从 END_IF 后继续执行。 如果不满足第一个条件,则将检查第二个条件()。如果满足第二个条件(),则将执行 THEN 后的指令()。执行这些指令后,程序将从 END_IF 后继续执行。 如果不满足任何条件,则先执行 ELSE 后的指令(),再执行 END_IF 后的程序部分。 在 IF 指令内可以嵌套任意多个 ELSIF 和 THEN 组合。可以选择对 ELSE 分支进行编程。 IF 指令的语法如下所示:

IF "Tag_1" = 1 THEN "Tag_Value" := 10; ELSIF "Tag_2" = 1 THEN "Tag_Value" := 20; ELSIF "Tag_3" = 1 THEN "Tag_Value" := 30; ELSE "Tag_Value" := 0; END_IF; WHILE:满足条件时执行

使用“满足条件时执行”指令可以重复执行程序循环,直至不满足执行条件为止。该条件是结果为布尔值(TRUE 或 FALSE)的表达式。可以将逻辑表达式或比较表达式作为条件。 具体示例如下

WHILE "Tag_Value1" "Tag_Value2" DO "Tag_Result" := "Tag_Input"; END_WHILE; //只要“Tag_Value1”和“Tag_Value2”操作数的值不匹配,“Tag_Input”操作数的值就会分配给“Tag_Result”操作数。

REPEAT:不满足条件时执行 使用“不满足条件时执行”指令可以重复执行程序循环,直至不满足执行条件为止。该条件是结果为布尔值(TRUE 或 FALSE)的表达式。可以将逻辑表达式或比较表达式作为条件。

示例如下:

REPEAT "Tag_Result":= "Tag_Value"; UNTIL "Tag_Error"

END_REPEAT;//“Tag_Error”操作数值的信号状态为“0”,就会将“Tag_Value”操作数的值分配给“Tag_Result”操作数。 选择语句 CASE:创建多路分支 使用“创建多路分支”指令,可以根据数字表达式的值执行多个指令序列中的一个。 具体示例如下:

CASE “Tag_Value” OF 0 : “Tag_1” := 1; 1,3,5 : “Tag_2” := 1; 6…10 : “Tag_3” := 1; 16,17,20…25 : “Tag_4” := 1; ELSE “Tag_5” := 1; END_CASE;

循环语句(FOR语句)

**注意:** 程序运行时无法更改运行次数。 出于性能原因,应在块接口的“Temp”部分中声明运行变量。在循环中,该运行变量无法更改。 因此,以下示例程序将生成一个语法错误且无法编译: FOR #i := 1 TO 10 DO #i := #i + 1; END_FOR; FOR 语句的限制 编写不会导致死循环的“安全”FOR 语句时, 可以使用BY设置步长,以防造成死循环。 其他程序指令 CONTINUE:复查循环条件

使用“复查循环条件”指令,可以结束 FOR、WHILE 或 REPEAT 循环的当前程序运行。执行该指令后,将再次计算继续执行程序循环的条件。该指令将影响其所在的程序循环。

FOR i := 1 TO 15 BY 2 DO IF (i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3