初识博图scl语言

随着PLC自动化的发展,许多控制要求用梯形图(lad)已经不好满足或者比较乏力,特别是在数据管理、数学运算、重复的多个运算和流程等方面;但是结构化语言(scl)可以很好的处理这些问题。


一、scl语言简介

1.介绍 

首先scl语言和lad(梯形图)语言都是可编程控制器中的一种编程语言,用来编写程序。

另外SCL(Structured Control Language 结构化控制语言) 具有以下特点:

适用于 S7-300 (推荐CPU314以上), S7-400,S7-1200,S7-1500, C7 and WinAC

SCL 为 PLC 做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器,符号表),而且具有高级语言的特性, 例如:表达式,赋值运算,运算符,循环, 选择,分支,数组 ,高级函数等。
 SCL 其非常适合于如下任务:
复杂运算功能

复杂数学函数

数据管理

过程优化

2.相关问题

关于scl语言的相关问题可以参考西门子官网手册:

文档链接:https://support.industry.siemens.com/cs/attachments/109481384/2008928131135970.pdf 

 3.scl语言的编写环境

scl的编写环境可以在单独的一个块里面,也可以在一小段程序里面,并且可以和其它的语言混合编写,简称混编。例如:程序段2是lad编写,程序段3是scl编写。

 这里我们添加新块fc,选择scl语言就可以了,下面是在fc块中的编写环境。(这里可以看出和C语言有些相似)和平常写程序时一样,上面是常用的指令,右侧是基本指令,中间是写程序的地方。

二、表达式和运算符

1.算术表达式

 1.介绍

1、算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。

2、算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有2个操作数,那么可根据以下条件来确定结果的数据类型:

如果这 2个操作数均为有符号的整数,但长度不同,那么结果将采用长度较长的那个整数数据类型例如:INT + DINT = DINT

如果1个操作数为有符号整数,另一个操作数为无符号整数,那么结果将采用另一个长度较大的有符号数据类型(包括无符号)例如:SINT+SUINT=INT

如果这 2 个操作数均为无符号整数,但长度不同,那么结果将采用长度较长的那个整数数据类型,例如:USINT + UDINT = UDINT
3、如果,一个操作数为整数,另一个为浮点数,那么结果将采用浮点数的数据类型,例如,INT +REAL= REAL

4、如果两个操作数均为浮点数,但长度不同,结果将采用长度较长的那个浮点数的数据类型,例如:REAL+LREAL=LREAL

2.算术表达式使用

算术表达式有:加法, 减法, 乘法,除法,模运算和幂运算。

创建一个数据块,使用一个结构体变量(struct)变量类型为int,C是最后的结果; 

然后C:=A+B,就是将A+B的和放到C里面,其中:=是赋值的意思。

最后打开仿真,输入数值,就可以计算出结果;这里是以加法举例,后面的乘除取模和幂运算大致相同。

3.例题 

使用scl语言计算这个公式:(A*(B+C))的2次方/4;

 这样套进去就可以了。

 2.关系表达式

 1.介绍

关系表达式就是由 =  、<>、>、<、>=、<=  组成的表达式。如果条件成立为:TRUE,不成立为:FALSE;比较后的结果必须是放在Boll量类型的变量中。

数据类型中的所有变量都可以进行比较:整数/浮点数、二进制数、字符串。
对于以下数据类型/数据组,只能比较相同类型的变量像:TIME、LTIME日期和时间、ARRAY。

比较浮点数
1、比较浮点数时,待比较的操作数必须具有相同的数据类型,而无需考虑具体的“IEC 检查”(IEC Check) 设置。2、对于无效运算的运算结果(如,-1的平方根),这些无效浮点数(NaN)的特定位模式不可比较。即,如果一个操作数的值为 NaN,则比较表达式“==:等于”和“<>:不等于”的结果将为 FALSE。 

比较字符串
比较字符串时,系统将对各字符的代码进“a”大于“A”)。并按照从行比较(如,左到右的顺序进行比较。第一个不同的字符将确定比较的结果。 

比较定时器、日期和时间
系统无法比较无效定时器、日期和时间的位模式1、如DT#2015-13-33-25:62:99.999 999 999)如果某个操作数的值无效,则指令“手:等于即,的结果将为FALSE<>:不等干
2、并非所有时间类型都可以直接相互比较,如需要将其显式转换为其它时简类型S5TIME。此时然后再进行比较(如,TIME),
3、如果要比较不同数据类型的日期和时间,则需将较小的日期或时间数据类型显式转换为较大的日期或时间数据类型。。例如,比较日期和时间数据类型DATE和DTL时,将基于DTL进行比较
如果显式转换失败,则比较结果为 FALSE 

比较 WORD 数据类型的变量与S5TIME 数据类型的变量
将WORD 数类型的变量与 S5TIME 数据类型的变量进行比较时,这两种变量都将转换为 TIME 数据类型。WORD变量将解释为一个 S5TIME 值。如果这两个变量中的某个变量无法转换,则不进行比较且输出结果 FALSE。如果转换成功,则系统将基于所选的比较指令进行比较操作。 

比较结构
1、结构比较功能仅适用于固件版本为 V4.2及以上版本的S7-1200系列CPU,以及固件版本为V2.0及以上版本的S7-1500系列CPU2、如果两个变量的结构数据类型相同,则可以比较这两个结构化操作数的值。比较结构化变量时,待比较操作数的数据类型必须相同,而无需考虑具体的“IEC 检查(IEC Check) 设置。但一个操作数为VARIANT,而另一个为 ANY时除外。创建程序时,如果数据类型未知,则可使用 VARIANT 数据类型。这样,就可比较任意数据类型的结构化变量操作数。此外,还可以比较VARIANT或ANY 数据类型的变量。 

ARRAY 数据类型
1、元素的数据类型必须相同。
2、两个 ARRAY 的维数必须相同。3、所有维数的元素数量必须相同,而具体的ARRAY 限值无需相同 

2.使用 

相等为TRUE,不相等为FALSE。 

 3.逻辑表达式 

1、逻辑表达式由两个操作数和逻辑运算符(取反:NOT,与:AND/&,或:OR,异或:XOR)组成。
2、逻辑运算符可以处理当前 CPU 所支持的各种数据类型。如果两个操作数都是 BOOL数据类型则逻辑表达式的结果也为BOOL数据类型。如果两个操作数是位字符串,则结果也为位字符串。
3、逻辑表达式中一个操作数为 BOOL 类型而另一个为位字符串时,必须先将BOOL类型的操作数显式转换为位学符串类型

1.取反 (NOT)

 取反指令可以将1变为0,将0变为1;是按2进制位取反。

2.与(AND/&) 

与指令(按位与):全1为1,有0为0. 

  

 3.或(OR)

或指令(按位或):有1为1,全0为0。 

 

4.异或(XOR) 

异或指令:相同为0,相异为1。 

  

 4.运算符的优先级

运算符及其运算顺序
-通过运算符可以将表达式连接在一起或相互嵌套。
表达式的运算顺序取决于运算符的优先级和括号。基本原则如下所示
1、算术运算符优先于关系运算符,关系运算符优先于逻辑运算符。
2、同等优先级运算符的运算顺序则按照从左到右的顺序进行。
3、赋值运算的计算按照从右到左的顺序进行括号中的运算的优先级最高 

 

 

 5.赋值运算

1、通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。2、函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。
3、赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。 

 

 

 

 


 总结

以上就是今天的内容,这里主要写了一些scl语言的简介,应用,表达式和运算符。下一篇就是scl语言指令的使用以及一些小的案例。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐