博途SCL编程基本要素和语法!

(一)要点与应用(1)SCL 编程语言SCL(Structured Control Language,结构化控制语言)是一种基于 PASCAL 的高级编程语言。这种语言基于标准 DIN EN 61131-3(国际标准为 IEC 1131-3)。根据该标准,可对用于可编程逻辑控制器的编程语言进行标准化。SCL 编程语言实现了该标准中定义的 ST 语言 (结构化文本) 的 PLCopen 初级水平。S7-1200从V2.2版本开始支持SCL语言。(2)语言元素SCL 除了包含 PLC 的典型元素(例如,输入、输出、定时器或存储器位)外,还包含高级编程语言。表达式赋值运算运算符(3)程序控制语句SCL 提供了简便的指令进行程序控制。例如,创建程序分支、循环或跳转。(4)应用因此,SCL 尤其适用于下列应用领域:数据管理过程优化配方管理数学计算 / 统计任务(二)表达式表达式将在程序运行期间进行运算,然后返回一个值。一个表达式由操作数(如常数、变量或函数调用)和与之搭配的操作符(如 *、/、+ 或 -)组成。通过运算符可以将表达式连接在一起或相互嵌套。(1)运算顺序:表达式将按照下面因素定义的特定顺序进行运算相关运算符的优先级,优先级数越小越优先同等优先级运算符的运算顺序按照从左到右的顺序赋值运算的计算按照从右到左的顺序进行括号优先级最高(2)表达式类型:不同的运算符,分别可使用以下不同类型的表达式算术表达式关系表达式逻辑表达式(三)算术表达式(1)算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有 2 个操作数,那么可根据以下条件来确定结果的数据类型:如果这 2 个操作数均为有符号的整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,Int + DInt = DInt)。如果这 2 个操作数均为无符号整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,USInt + UDInt = UDInt)。如果一个操作数为有符号整数,另一个为无符号整数,那么结果将采用另一个长度较大的有符号数据类型(其包含此无符号整数)(例如,SInt + USInt = Int)如果一个操作数为整数,另一个为浮点数,那么结果将采用浮点数的数据类型(例如,Int + Real = Real)。如果 2 个操作数均为浮点数,但长度不同,结果将采用长度较长的那个浮点数的数据类型(例如,Real + LReal = LReal)。对于操作数为"Time"和"日期和时间"数据类型组,运算结果的数据类型请参见表1。(2)算术表达式的数据类型:下表列出了在算术表达式中可使用的数据类型

(3)示例以下为一些算术表达式的示例:"MyTag1":= "MyTag2" * "MyTag3";(四)关系表达式(1)关系表达式将两个操作数的值或数据类型进行比较,然后得到一个布尔值。如果比较结果为真,则结果为 TRUE,否则为 FALSE。关系运算符可以处理当前 CPU 所支持的各种数据类型。结果的数据类型始终为 Bool。编写关系表达式时,请注意以下规则:以下数据类型组中的所有变量都可以进行比较:整数/浮点数位、位序列字符串对于以下数据类型,只能比较相同类型的变量:TIME日期和时间UDTArrayStructVariantString 比较是对于 Windows 字符集编码的字符进行比较;而 WSting比较则是对 UTF-16 编码的字符进行比较。在比较过程中,将比较变量的长度及各字符对应的数值。Array 比较需要数组维度、数组元素数据类型与数量完全相同UDT、Array、Struct、Variant等进行的比较只能使用S7-1200 V4.2及其以上的版本。(2)关系表达式的数据类型:下表列出了在关系表达式中可使用的数据类型/数据类型组:

(3)示例以下举例说明了一个关系表达式:IF a > b THEN c:= a;IF A > 20 AND B < 20 THEN C:= TRUE;IF A<>(B AND C) THEN C:= FALSE;(五)逻辑表达式(1)逻辑表达式由两个操作数和逻辑运算符(AND、OR 或 XOR)或取反操作数 (NOT) 组成。逻辑运算符可以处理当前 CPU 所支持的各种数据类型。如果两个操作数都是 Bool 数据类型,则逻辑表达式的结果也为 Bool数据类型。如果两个操作数中至少有一个是位序列,则结果也为位序列而且结果是由最高操作数的类型决定。例如,当逻辑表达式的两个操作数分别是 Byte 类型和 Word 类型时,结果为 Word类型。逻辑表达式中一个操作数为 Bool类型而另一个为位序列时,必须先将 Bool类型的操作数显式转换为位序列类型。(2)逻辑表达式的数据类型:下表列出了逻辑表达式中可使用的数据类型

(3)示例以下为一个逻辑表达式的示例:IF "MyTag1" AND NOT "MyTag2" THEN c := a;MyTag := A OR B;(六)赋值运算(1)通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。赋值运算的计算按照从右到左的顺序进行。可通过以下方式编程赋值运算:单赋值运算:执行单赋值运算时,仅将一个表达式或变量分配给单个变量:示例: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;(2)示例:下表举例说明了单赋值运算的操作:"MyTag1" := "MyTag2";(* 变量赋值 *)"MyTag1" := "MyTag2" * "MyTag3";(* 表达式赋值 *)"MyTag" := "MyFC"();(* 调用一个函数,并将函数值赋给 "MyTag" 变量 *)#MyStruct.MyStructElement := "MyTag";(* 将一个变量赋值给一个结构元素 *)#MyArray[2] := "MyTag";(* 将一个变量赋值给一个 ARRAY 元素 *)"MyTag" := #MyArray[1,4];(* 将一个 ARRAY 元素赋值给一个变量 *)#MyString[2] := #MyOtherString[5];(* 将一个 STRING 元素赋给另一个 STRING 元素 *)下表举例说明了多赋值运算的操作:"MyTag1" := "MyTag2" := "MyTag3";(* 变量赋值 *)"MyTag1" := "MyTag2" := "MyTag3" * "MyTag4";(* 表达式赋值 *)"MyTag1" := "MyTag2" := "MyTag3 := "MyFC"();(* 调用一个函数,并将函数值赋值给变量 "MyTag1"、"MyTag1" 和 "MyTag1" *)#MyStruct.MyStructElement1 := #MyStruct.MyStructElement2 := "MyTag";(* 将一个变量赋值给两个结构元素 *)#MyArray[2] := #MyArray[32] := "MyTag";(* 将一个变量赋值给两个数组元素 *)"MyTag1" := "MyTag2" := #MyArray[1,4];(* 将一个数组元素赋值给两个变量 *)#MyString[2] := #MyString[3]:= #MyOtherString[5];(* 将一个 STRING 元素赋值给两个 STRING 元素 *)下表举例说明了组合赋值运算的操作:"MyTag1" += "MyTag2";(* "MyTag1" 和 "MyTag2" 相加,并将相加的结果赋值给 "MyTag1"。*)"MyTag1" -= "MyTag2" += "MyTag3";(* "MyTag2" 和 "MyTag3" 相加。将相加的结果赋值给操作数"MyTag2",再从 "MyTag1" 中减去"MyTag2",计算结果将赋值给 "MyTag1"。*)#MyArray[2] += #MyArray[32] += "MyTag";(* 数组元素 "MyArray[32]" 加上 "MyTag"。计算结果将赋值给 "MyArray[32]"。之后这个数组元素 "MyArray[32]" 与数组中另一个元素"MyArray[2]"相加,然后将结果分配给数组元素 "MyArray[2]"。在该运算中,相应的数据类型必需兼容。*)#MyStruct.MyStructElement1 /= #MyStruct.MyStructElement2 *= "MyTag";(* 结构化元素 "MyStructElement2" 乘以 "MyTag"。计算结果将赋值给 "MyStructElement2"。之后,将结构化元素 "MyStructElement1" 除以 "MyStructElement2",并将计算结果赋值给 "MyStructElement1"。在该运算中,相应的数据类型必需兼容。*)(七)寻址(1)SCL寻址分为符号寻址与地址寻址:符号寻址DB块变量:"DB块名称"(."变量名称")PLC变量:变量名称局部变量:#变量名称地址寻址DB块变量:%DB块号(.变量地址),TIA PORTAL软件会判断该地址有没有对应符号名称,如果有则立即转换为符号名称,没有则保留绝对地址PLC变量:%变量地址,TIA PORTAL软件会判断该地址有没有对应符号名称,如果有则立即转换为符号名称,没有则新建符号名称Temp变量:SCL不支持非优化FC/FB的Temp变量的地址寻址(2)举例:

(八)调用(1)程序调用分为以下几类:FC调用FB调用FB多重背景调用调用可以从指令列表或者项目树程序块中拖拽入程序编辑区域,也可以直接输入。(2)FC调用:格式如下"FC块名称"(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)返回值:=“FC块名称”(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)FC调用需要确保所有形参都有对应实参。如果没有参数的FC也需要有括号。如下图所示的例子:

(3)FB调用:格式如下"背景数据块名称"(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如果没有参数的FB也需要有括号。如下图所示例子:

如下图所示,当FB的参数全部显示,在背景数据块右键可以激活"仅显示分配的参数";当FB的参数只显示了分配的参数时,在背景数据块右键可以激活"显示所有参数"。

(4)FB多重背景调用:格式如下#多重背景(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)#多重背景[索引](输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如果只有Static的FB也需要有括号。如下图所示例子:

(5)对于定时器和计数器的SCL调用,有特殊的格式。(九)新建SCL(1)新建块,选择OB/FC/FB后,设置语言为SCL,如下图所示:

(2)在LAD、FBD中直接插入SCL语言段,这需要TIA PORTAL V14及其以上的版本,如下图所示:

①在项目树中,找到PLC,然后展开程序块,点击"添加新块"②在弹出对话框中,选择块类型,可以是OB/FB/FC,③选择语言为SCL(十)区域与注释(1)从TIA PORTAL V14以后,增加区间功能,使用指令:REGION 区间名称程序文本END_REGION可以在指令中间增加需要编写的程序还不影响程序逻辑,并且支持嵌套。此外还可以像网络段一样收折叠来,如下图所示:

其中左边为区间总览,可以看出整体的结构①使得程序或总览全部展开②使得程序或总览全部折叠③全部展开/折叠是针对总览与程序还是只针对总览,图中为针对总览与程序④独立展开/折叠程序(2)编辑器的空行,或者调用块的右侧均可以增加注释,如下图所示有两种方式注释:

第一种是://注释内容第二种是:(/*注释内容*/)可以在工具栏中利用按钮整段注释或取消注释。此外从TIA PORTAL V16开始支持多语言注释。①注释掉选中段落②对注释掉的段落取消注释大家都在看

【视频】德国工程师是如何制作PLC柜的?

【视频】德国威图电气柜是如何生产出的?

【视频】德国工程师的办公环境是怎样的?

【视频】PROFINET为何比PROFIBUS更牛?

(0)

相关推荐

  • day05_运算符入门

    2020-11-19 21:31:42  阅读:6  来源: 互联网 运算符概述 运算符是指对操作数的运算方式.组成表达式的 Java 操作符有很多种(什么是操作数和操作符,例如 1+2,其中 1 和 ...

  • 前端教程:JavaScript运算符

    简单的答案可以使用表达式4+5等于9.在这里,4和5被称为操作数:+被称为运算符.JavaScript语言支持下列类型的运算符. 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 有条件的(或 ...

  • 了解Verilog HDL语法规则吗,看完这篇就知道了

    本节介绍Verilog HDL语法规则,包括文字规则.数据对象及运算符的使用等. Verilog HDL文字规则 1.关键词与标识符 关键词是Verilog HDL中预先定义的单词,它们在程序中有特别 ...

  • Python赋值运算符(入门必读)

    赋值运算符用来把右侧的值传递给左侧的变量(或者常量):可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除.函数调用.逻辑运算等. Python中最基本的赋值运算符是等 ...

  • SCL语言基本语法规则:表达式

    SCL:Structured Control Language,结构化控制语言. SCL是一种类似于计算机高级语言的编程方式,只是这种语言编写的程序,可以在PLC中运行.如果学过C语言或者VB语言,就 ...

  • 小白学java,第一节课就是这么干

    龙珠悟空,一个写故事的程序员 <小白学java>第四章:java第一堂课 序言:这一堂课很干,想水一篇文章,故事缩略到极短,直接上java入门整理好的前两张章干货! PS: 1.  不要说 ...

  • 博途SCL编程实例:滚动数据记录

    博途SCL编程实例:滚动数据记录

  • 搞懂这10条,博途SCL编程轻松入门!

    自动化与工程技术 致力于提供自动化.电气和工程技术.工程资讯及其它工程相关的软件与资料.114篇原创内容公众号(一)要点与应用(1)SCL 编程语言SCL(Structured Control Lan ...

  • 博途SCL编程-批处理模拟量,爽歪歪!

    PLC发烧友 402篇原创内容 公众号 博途的间接寻址和S7-300/400大不一样.博途中的间接寻址主要用peek/poke指令,peek/poke指令不能用于优化的数据块.优化数据块可以用数组类寻 ...

  • TIA博途SCL编程,一建启停

    TIA博途SCL编程,一建启停

  • 博途SCL编程-批处理模拟量

    博途的间接寻址和S7-300/400大不一样.博途中的间接寻址主要用peek/poke指令,peek/poke指令不能用于优化的数据块.优化数据块可以用数组类寻址.这次的控制任务是模拟类的批量处理,s ...

  • 博途SCL趣味编程:随机数法计算圆周率(2)

    博途SCL趣味编程:随机数法计算圆周率(2)

  • 西门子博途SCL编制锁机催款程序

    关于启程 启程自动化培训成立于2012年,培训项目主打西门子PLC编程系统集成.工业机器人编程.EPLAN电气设计.视觉等培训与技术服务的机构.推荐高薪就业,越努力越幸运 1.首先硬件组态这里随便选择 ...

  • 博途SCL实现自定义ModbusRtu Over TCP功能块

    积木式上位机怎么设计? 高质量的PLC程序应该从何入手? 如何在西门子博途中实现工艺配方? 秒懂S7-1500PLC读写SQL微软数据库 分享一组污水处理3D画面,谈谈上位机设计原则! [导读]博途提 ...

  • 西门子博途SCL语言CASE选择语句案例讲解

    西门子博途SCL语言CASE选择语句案例讲解