『7x24小时有问必答』
求分享
求收藏
求点击
求在看

关于公众号

         壹轴自动化专注于电气自动化(西门子全系列、Codesys平台)、机械设计(基础知识及精密传动机械)、工业机器人开发(ROS2、Moveit2、ROS-Industrial)这三大方向进行高端工业自动化教育培训与全栈式技术分享,教学内容全网唯一,同时博主是一名资深的全栈开发工程师,博主简介可点击链接:关于一名自动化领域博主的简介查看。
      

  
  
  
  

wode
引言
●SCL 基础功能
SCL基础功能
1
SCL 编程语言
SCL,全称结构化控制语言(Structured Control Language),是一款基于PASCAL开发的高级PLC编程语言。该语言遵循DIN EN 61131‑3标准(对应国际标准IEC 1131‑3),这套标准用来统一规范可编程控制器的各类编程语言。SCL实现了标准内ST(结构化文本)语言的PLCopen初级规范。S7‑1200系列CPU自V2.2固件版本起,就已经支持SCL语言。

语言元素

SCL既具备PLC常规基础元素,比如输入输出、定时器、存储位等,同时也拥有高级编程语言的特性,主要包含:表达式、赋值运算、运算符、程序控制语句。 借助SCL的程序控制指令,可以轻松实现程序分支、循环、跳转等逻辑。

适用场景

SCL非常适合处理下面这类工程任务:
数据管理
工艺过程优化
配方管理
数学运算与统计计算

表达式

表达式会在程序运行时完成计算,并输出运算结果。它由操作数(常量、变量、函数调用)和操作符(*、/、+、‑等)构成,运算符可以把多个表达式相互拼接、嵌套使用。

运算执行顺序

表达式运算遵循固定规则:
运算符优先级:优先级数值越小,运算越先执行
相同优先级的运算符:按照从左往右依次计算
赋值运算:执行顺序为从右向左
括号拥有最高运算优先级

表达式分类

根据功能不同,表达式分为三类:算术表达式、关系表达式、逻辑表达式。

算术表达式

算术表达式可以是单个数值,也可以是两个数值/表达式通过算术运算符组合得到的结果。 算术运算符支持CPU支持的全部数据类型。当两个操作数参与运算时,结果的数据类型按下面规则判定:
两个均为有符号整数、位数不一致:结果取位数更长的整数类型,例:Int + DInt = DInt
两个均为无符号整数、位数不一致:结果取位数更长的整数类型,例:USInt + UDInt = UDInt
一个有符号整数、一个无符号整数:结果选用可以容纳该无符号数、位数更大的有符号类型,例:SInt + USInt = Int
一个整数、一个浮点数:运算结果为浮点数类型,例:Int + Real = Real
两个浮点数、位数不一致:结果取位数更长的浮点数类型,例:Real + LReal = LReal
针对Time、日期时间类数据类型的运算结果类型,可参考表1。

示例

下面给出算术表达式的代码示例:
"MyTag1":= "MyTag2" * "MyTag3";

关系表达式

关系表达式用来对两个操作数的数值或者数据类型做对比,运算输出布尔类型结果。对比成立返回TRUE,不成立则返回FALSE。
关系运算符支持CPU支持的全部数据类型,运算结果固定为Bool类型。
编写关系表达式需要遵守如下规则:
下面这些数据类型组的变量可以互相比较:整数/浮点数、位与位序列、字符串。
以下类型变量,仅允许同类型之间做比较:TIME、日期和时间、UDT、Array、Struct、Variant。
字符串对比说明:String按照Windows字符集编码进行字符比对;WString按照UTF‑16编码比对。对比时会同时校验字符串长度以及每一位字符的编码数值。 数组做对比时,要求数组维度、元素数据类型、元素数量必须完全一致。 UDT、Array、Struct、Variant这类类型的比较功能,仅S7‑1200 V4.2及以上固件版本支持。
关系表达式可使用的数据类型详见表2。

示例

下面是关系表达式的代码示例:
IF a > b THEN c:= a;

IF A > 20 AND B < 20 THEN C:= TRUE;

IF A<>(B AND C) THEN C:= FALSE;

逻辑表达式

逻辑表达式由两个操作数搭配逻辑运算符(AND、OR、XOR),或是对操作数执行取反(NOT)运算构成。
逻辑运算符支持CPU所支持的各类数据类型:
若两个操作数均为Bool类型,运算结果同样为Bool类型。
只要其中至少一个操作数属于位序列类型,运算结果就为位序列类型,结果类型取位数更大的操作数类型。例如Byte与Word做逻辑运算,最终结果为Word类型。
注意:当一个操作数是Bool类型、另一个是位序列类型时,必须把Bool类型强制转换为位序列类型之后,才能参与运算。
逻辑表达式支持的数据类型详见下表。

示例

下面是逻辑表达式的代码示例:
IF "MyTag1" AND NOT "MyTag2" THEN c := a;

MyTag := A OR B;

赋值运算

赋值运算的作用,是把表达式运算得到的结果给到变量。赋值语句左边必须是变量,右边为待运算的表达式。 函数也可以当作表达式使用,赋值时会调用该函数,将函数返回值赋给左侧变量。
赋值结果的数据类型由左侧变量决定,右侧表达式的数据类型需要和左侧变量类型匹配。赋值运算的执行顺序为从右向左。
赋值运算分为三种写法:
单赋值运算
把单个变量或者表达式的值赋值给一个变量。 示例:
a := b;

多赋值运算
在一条语句内完成多次赋值。 示例:
a := b := c;

实际执行逻辑:
b := c;

a := b;

组合赋值运算
赋值语句中可以直接使用  +、-、*、/  运算符。 示例:
a += b;

等价于:
a := a + b;

支持连续的组合赋值,例如:
a += b += c *= d;

实际执行顺序:
c := c * d;

b := b + c;

a := a + b;

示例

下表展示了单赋值运算的各类用法:
下表举例说明了多赋值运算的操作:
下表举例说明了组合赋值运算的操作:

寻址与调用

寻址
SCL寻址分为符号寻址与地址寻址。
符号寻址DB块变量:"DB块名称"(."变量名称")PLC变量:变量名称局部变量:变量名称地址寻址DB块变量:%DB块号(.变量地址),TIA PORTAL软件会判断该地址有没有对应符号名称,如果有则立即转换为符号名称,没有则保留绝对地址PLC变量:%变量地址,TIA PORTAL软件会判断该地址有没有对应符号名称,如果有则立即转换为符号名称,没有则新建符号名称Temp变量:SCL不支持非优化FC/FB的Temp变量的地址寻址
举例:
调用
程序调用分为以下几类:
FC调用FB调用FB多重背景调用
调用可以从指令列表或者项目树程序块中拖拽入程序编辑区域,也可以直接输入。
FC调用
FC调用的格式是
"FC块名称"(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)返回值:=“FC块名称”(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)
FC调用需要确保所有形参都有对应实参。如果没有参数的FC也需要有括号。
如图所示的例子;
图1 FC调用
FB调用
FB调用的格式是
"背景数据块名称"(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)
一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如果没有参数的FB也需要有括号。
如图2所示,显示了一些FB调用的例子。
图2 FB调用
如图3所示,当FB的参数全部显示,在背景数据块右键可以激活"仅显示分配的参数";当FB的参数只显示了分配的参数时,在背景数据块右键可以激活"显示所有参数"。
图3 显示分配/所有参数
FB多重背景调用
FB多重背景调用的格式是
多重背景(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)多重背景[索引](输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)
一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如果只有Static的FB也需要有括号。
如图4所示,显示了一些FB多重背景调用的例子。
图4 FB多重背景调用
注意:
对于定时器和计数器的SCL调用,有特殊的格式,请参考链接:定时器、计数器。
2
新建SCL
有两种方式新建SCL:
第一种是在新建块,选择OB/FC/FB后,设置语言为SCL,如图5所示。
第二种是在LAD、FBD中直接插入SCL语言段,这需要TIA PORTAL V14及其以上的版本,如图6所示。
图5 新建SCL块
①在项目树中,找到PLC,然后展开程序块,点击"添加新块"
②在弹出对话框中,选择块类型,可以是OB/FB/FC,
③选择语言为SCL
图6 在LAD中插入SCL段

区域与注释

3
区域与注释
和LAD/FBD不同,LAD/FBD在程序编辑器是一段一段的,编辑器可以插入新的网络段,每一个网络段可以有各自的注释。而SCL是文本语言,不分网络段(LAD/FBD语言内增加SCL除外),需要用其他的方法来解决。
区间
从TIA PORTAL V14以后,增加区间功能,使用指令:
REGION 区间名称
程序文本
END_REGION
可以在指令中间增加需要编写的程序还不影响程序逻辑,并且支持嵌套。此外还可以像网络段一样收折叠来,如图7所示。
图7 区域
其中左边为区间总览,可以看出整体的结构
①使得程序或总览全部展开
②使得程序或总览全部折叠
③全部展开/折叠是针对总览与程序还是只针对总览,图中为针对总览与程序
④独立展开/折叠程序
注释
编辑器的空行,或者调用块的右侧均可以增加注释,如图8所示有两种方式注释:
第一种是: //注释内容
第二种是:(/*注释内容*/)
可以在工具栏中利用按钮整段注释或取消注释。此外从TIA PORTAL V16开始支持多语言注释,使用指令(*多语言注释内容*)。
图8 注释
①注释掉选中段落
②对注释掉的段落取消注释

ABOUT壹周的技术栈
     
公众号更新内容(自动化:西门子全系列,Codesys平台或其他Codesys相关厂商的产品,内容包括(PLC,变频器,伺服驱动器,总线协议,传感器,以及各类电气产品)。机械设计(传动机构及精密运动机械)、机器人:ROS2(通信框架)、ROS-Control(控制框架)、Moveit2(运动规划框架)、ROS-Industrial(工业版,适配机器人应用)机器人全栈开发相关技术))都看到这里啦,别忘记点点关注哟,最后我们还有系统化的自动化学习教程奉上,愿您在自动化领域一帆风顺!

系统化学习在线课程

课程列表
           2、西门子1200与最新版1200G2点击链接:S7‑1200倒计时退市!还不会G2?G2资料太少?新项目要踩大坑!
           3、西门子1500进阶版点击链接:  真正S7‑1500高阶天花板!冗余1500T运动控制OOP标准化一次性拉满

      告别枯燥厚重的手册自学!自动化全栈资深工程师,1 对 1 面对面手把手实战带教

直播地点与时间

每晚 8 点‑10 点我们会在B站(壹周自动化学堂)直播,分享自动化项目案例开发实战与行业最前沿的知识。让0基础小白也能成为像博主一样的全栈工程师!,感谢大家的支持,祝大家早日成为技术大咖。

关注我们
            我们主要围绕电气自动化(Codesys平台,西门子全系列)、机械设计(基础知识及精密机械)、工业机器人开发(ROS2、ROS-Control、Moveit2、ROS-Industrial)这三大方向进行工业自动化全栈式技术分享。        

完

点分享
点收藏
点点赞
点在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码