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中,:= 表示赋值。(PASCAL语言的赋值语句就是:=)

二、常量,变量及相关指令

  (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 <condition> THEN <instructions>
END_IF;

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

IF 和 ELSE 分支:

IF <condition> THEN <instructions1>
ELSE <Instructions0>
END_IF;

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

IF、ELSIF 和 ELSE 分支:

IF <condition1> THEN <instructions1>
ELSIF <condition2> THEN <instruction2>
ELSE <Instructions0>
END_IF;

如果满足第一个条件(<条件 1>),则将执行 THEN 后的指令(<指令 1>)。执行这些指令后,程序将从 END_IF 后继续执行。
        如果不满足第一个条件,则将检查第二个条件(<条件 2>)。如果满足第二个条件(<条件 2>),则将执行 THEN 后的指令(<指令 2>)。执行这些指令后,程序将从 END_IF 后继续执行。
        如果不满足任何条件,则先执行 ELSE 后的指令(<指令 0>),再执行 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 < 5) THEN
CONTINUE;
END_IF;
"DB10".Test[i] := 1;
END_FOR;

如果满足条件 i < 5,则不执行后续值分配 (“DB10”.Test[i] := 1)。运行变量 (i) 以增量“2”递增,然后检查其当前值是否在设定的取值范围内。如果执行变量在取值范围内,则将再次计算 IF 的条件。
        如果不满足条件 i < 5,则将执行后续值分配 (“DB10”.Test[i] := 1) 并开始一个新循环。在这种情况下,执行变量也会以增量“2”进行递增并接受检查。

        EXIT:立即退出循环

使用“立即退出循环”指令,可以随时取消 FOR、WHILE 或 REPEAT 循环的执行,而无需考虑是否满足条件。在循环结束(END_FOR、END_WHILE 或 END_REPEAT)后继续执行程序。该指令将影响其所在的程序循环。

FOR i := 15 TO 1 BY -2 DO
IF (i < 5)
THEN EXIT;
END_IF;
"DB10".Test[i] := 1;
END_FOR;

        GOTO:跳转

使用“跳转”指令,可以从标注为跳转标签的指定点开始继续执行程序。跳转标签和“跳转”指令必须在同一个块中。在一个块中,跳转标签的名称只能指定一次。每个跳转标签可以是多个跳转指令的目标。
        不允许从“外部”跳转到程序循环内,但允许从循环内跳转到“外部”。

CASE "Tag_Value" OF
1 : GOTO MyLABEL1;
2 : GOTO MyLABEL2;
3 : GOTO MyLABEL3;
ELSE GOTO MyLABEL4;
END_CASE;
MyLABEL1: "Tag_1" := 1;
MyLABEL2: "Tag_2" := 1;
MyLABEL3: "Tag_3" := 1;
MyLABEL4: "Tag_4" := 1;

根据“Tag_Value”操作数的值,程序将从对应的跳转标签标识点开始继续执行。例如,如果“Tag_Value”操作数的值为 2,则程序将从跳转标签“MyLABEL2”开始继续执行。在这种情况下,将跳过“MyLABEL1”跳转标签所标识的程序行。

        RETURN:退出块

使用“退出块”指令,可以终止当前处理块中的程序执行,并在调用块中继续执行。如果该指令出现在块结尾处,则可以跳过。

IF "Tag_Error" <>0 THEN RETURN;
END_IF;

版权声明:本文为CSDN博主「安宏宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anhongning123/article/details/105696632

https://blog.csdn.net/anhongning123/article/details/105696632

TIA protal与SCL从入门到精通(1)——SCL编程入门相关推荐

  1. linux shell编程从入门到精通pdf_SHELL脚本编程入门

    一. SHELL入门 1.1 变量 1.1.1 变量名规范 变量是由任何字母.数字.下划线组成的字符串,且不能以数字开头. 区分字母大小写 变量.等号.值中间不能出现任何空格 实例 注:$var1+$ ...

  2. python视频教程从入门到精通全集-python从入门到精通视频(全60集)免费高速下载...

    Python是一种面向对象.解释型计算机程序设计语言,由 Guido van Rossum 于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU Gene ...

  3. python从入门到精通怎么样-Python 从入门到精通:一个月就够了

    毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划, ...

  4. python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)

    原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...

  5. python入门到精通需要学多久-入门到精通python要多久

    对于大多数python学习者来说,入门是相对简单的,但是要做到精通python,并非那么容易!python有很多可以学习的方向,选择一感兴趣的1去学习就好,不必所有方向都掌握! 一:明确自己的学习目标 ...

  6. python从入门到精通视频-python从入门到精通视频(大全60集)

    教程名称:python从入门到精通视频(全60集) 0'1 Python编程语言历史及特性.mp4 02 Python编程语言初接触.mp4 03 Python程序文件结构.mp4 04 准备Pyth ...

  7. python从入门到精通怎么样-Python从入门到精通:一个月就够了

    导读:毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习 ...

  8. 零基础python从入门到精通 pdf-100G Python从入门到精通全套资料!

    Python 究竟有多火?目前在编程语言排行榜中,Python当之无愧的成为了第一!Python已经逐渐成为所有IT技术的首选语言.几乎所有IT领域都将Python作为首选编程语言. Python崇尚 ...

  9. java web从入门到精通视频_JavaWeb从入门到精通(视频实战版)

    JavaWeb从入门到精通(视频实战版) 作者:常倬林 出版日期:2010年12月 文件大小:28.02M 支持设备: ¥30.00仅供试读 适用客户端: 言商书局 iPad/iPhone客户端:下载 ...

  10. php从入门到精通+视频,PHP从入门到精通2015版(初级)

    PHP从入门到精通2015版 教程列表: 01-1php介绍,php脚本模式传智播客趣IT 01-2web服务运行模式及相关技术(软件)传智播客趣IT 01-3php网页运行原理传智播客趣IT 01- ...

最新文章

  1. Windows 10:开机显示C:\WINDOWS\system32\config\systemprofile\Desktop不可用 的解决方法
  2. 端口复用和半关闭补充
  3. ubuntu copy命令
  4. 换脸系列——整脸替换
  5. 在ASP.NET中自动给URL地址加上超链接(好东东)
  6. 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
  7. 离线安装silver light 2
  8. [BZOJ]2959: 长跑
  9. System.Timers.Timer(定时器)
  10. 传统梯度下降法面临的挑战
  11. mac 生成公私钥key
  12. 养花追美女的java游戏,小米有品上架懒人鱼缸:上面养花 下面养鱼
  13. VBE6EXT.OLB不能被加载问题解决方法
  14. 使用Java 2D绘制黑白太极图案
  15. 如何桥接两个无线路由器来扩展WIFI覆盖范围?
  16. NBA只有这四个人真正影响了世界-艾弗森
  17. 谷歌发布史上“最强大脑”——可以控制和操作机器人的AI模型
  18. 责任链模式(以及变种管道模式)的应用案例
  19. 域名的过户转移是否影响DNS解析?
  20. 台达,AS228T,plc程序模板和触摸屏程序模板

热门文章

  1. python生成wifi字典_用Python自带的itertools生成穷举字典
  2. leancloud 怎么绑定域名_云引擎支持绑定加速域名 | LeanCloud 八月变化
  3. 铺铜规则在哪设定_干货丨PCB layout结合生产设计必须遵循这六大规则!
  4. wcf 双向 java_我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
  5. 44000+ 人一夜之间失业
  6. 10年经验17张图带你进入gitflow企业项目代码版本管理的最佳实践
  7. iOS:栈、堆、字符串常量区、全局区
  8. 【2019】Power BI 9月产品功能更新解读
  9. MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
  10. qsor快排序以及cmp函数