西门子PLC编程:如何学习SCL语言的基本语法规则
SCL:Structured Control Language,结构化控制语言。
SCL是一种类似于计算机高级语言的编程方式,只是这种语言编写的程序,可以在PLC中运行。如果学过C语言或者VB语言,就会很容易上手SCL。当然没有基础依然可以从零开始学习。
在PLC中有了SCL这种编程语言,就可以方便地把计算机高级语言,编写的算法移植到PLC中。
西门子以下系列的PLC都支持SCL语言编程:
S7-300S7-400S7-1200S7-1500WinACSCL能实现复杂的运算功能,特别是有大量数据要处理的时候。相对于梯形图SCL在运算、函数、过程优化方面有天然的优势。
在博途软件中已经集成SCL语言包,可以直接使用SCL进行进行编程。在传统的STEP7 中需要单独的安装 S7-SCL 软件包。
因为SCL是一种高级编程语言,所以就包含表达式 、运算符 、程序控制语句 等语言元素。
1、表达式
SCL中有三种表达式:
算术表达式关系表达式逻辑表达式一个完整的表达式是由操作数 和与之搭配的操作符 组成。通过表达式的特定顺序进行运算,并返回一个值。
操作数 :常数、变量、函数调用(在PLC编程中可以理解为地址)。
操作符 :+、- 、*、/ (加减乘除),and、or、not(与或非)等。
操作符有时也叫运算符 ,SCL支持的运算符有算术运算符、比较运算符、逻辑运算符、赋值运算符。
算术运算符 :主要是我们常用的加(+)、减(-)、乘(*)、除(/),以及数学上常用的取正、取负、求余数、整除、求余(%)。
比较运算符 :用于数值的比较,主要有大于、小于、等于、不等于。
逻辑运算符 :用于布尔型值的运算,常用的逻辑运算符除了与、或、非之外,还有异或。
赋值运算符 :通过赋值运算,可以将一个表达式的值赋给一个变量。赋值运算符左侧为变量,右侧为表达式的值。 赋值运算的计算按照从右到左的顺序。
1.1、算术表达式
算术运算符:+、-、*、/、DIV、MOD、**。
算术表达式 通常由常量、变量、函数、圆括号、运算符等组成。算术表达式也叫数学表达式,是三种表达式中最简单的,几乎可以等同于数学运算。
西门子PLC的算术表达式,支持各种数据类型。一个算术表达式的两个操作数,如果分别属于不同的数据类型,依然可以运算。运算结果的数据类型,如下图所示:
虽然不同的数据类型可以算术运算,还是建议大家先进行数据格式转换,然后进行运算。防止出现运算后,不知道数据格式,导致数据错误。
1.2、关系表达式
关系运算符:<、<=、>、>=、==、<>。
关系表达式是利用关系运算符,将两个操作数或数据类型进行比较,然后得到一个布尔值(BOOL)型的逻辑结果。如果比较结果为真,则结果为1(TRUE),否则为0 (FALSE)。
所以关系表达式的值只能是逻辑值真或假(1或者0)。
关系表达式有时候也称作比较表达式 。
西门子PLC的关系表达式,支持各种数据类型,结果的数据类型只能是布尔型。
以下数据类型,只能比较相同类型的变量:
TIME日期和时间UDT1.3、逻辑表达式
逻辑运算符:AND(&)、OR、NOT、XOR。
西门子PLC的逻辑表达式,支持各种数据类型。但是在运算中会出现两种情况。
一是 ,两个操作数都是布尔(BOOL)数据类型,则逻辑运算的结果也为布尔数据类型。
另一种情况 ,如果两个操作数中至少有一个是位序列,则结果也为位序列。结果由最高操作数的数据类型决定。例如,当两个操作数分别是字节(Byte) 类型和字(Word)类型时,结果为字(Word)类型。
逻辑表达式中一个操作数为布尔(BOOL)类型而另一个为位序列时,必须先将 布尔(BOOL)类型的操作数显式转换为位序列类型。
位序列:一组由0和1组成的序列。
1905 「万泉河」PLC编程,上升沿的那点儿事
【万泉河】PLC编程,上升沿的那点儿事
在PLC编程中,上升沿逻辑经常需要用到。它的功能在于,在一个信号由0变1的瞬间,产生一个状态位,用于触发系统功能。
上升沿的功能原本非常简单,也有一些文章介绍过使用方法。 但仍然有不少人对此比较困惑。 尤其在标准化编程架构下。
标准化编程中, 不可以使用全局变量的M和T,这些我都写过多次文章了。而上升沿和下降沿, 因为比较简单, 就一直没有专门提及。
这回专门介绍一下。
在S7-300/400中,上升沿是个函数:
切换到STL, 指令为:
所以,本质上她就是一个FP的指令,只不过需要消耗一个全局变量。
在PORTAL中,上升沿下降沿的指令变的更复杂了。4对,8个:
调用时这样:
而其实我并不确切明白这4种到底有什么具体的区别。或者说,不明白西门子为啥要给搞到这么复杂。
不管了, 还按老的方式用P_TRIG即可。
S7-200 SMART 中使用就比较简单,一个简单的符号:
而且还到STL语言,它的指令其实叫做EU:
恰恰是这个EU,或者说P指令,害了很多人。
这个P指令,用起来确实简单,不需要加全局变量来区分,拿来就能用。但没有输入辅助变量的地方,就出了大问题,因为这个指令其实是不能重复被调用的。 所以,一个子程序块,如果使用了上升沿指令, 那么这个子程序在同一个CPU程序中,就不可以被重复调用。
所以,如果这个子程序实现的是设备库函数的功能的话,就不可以使用P指令。 一处都不可以。
所以,在SMART 200的标准化编程里面,如果按照我过去同样的语言格式,就应该表达为:好的PLC程序的判断标准,不使用P指令。
过去那些听闻M和T用不得都受不了的人,再听到这个说法,恐怕是要疯掉了。
那么,不让用P指令,如何实现上升沿控制呢?
二十几年来,PLC领域进展翻天覆地。但有的地方其实却是退步了。
我们回到S5来寻找答案。
那个时候,是没有现成指令给你用的,要做上升沿,需要自己编程实现:
STL语句里面:
使用一个辅助变量,简单保存一下输入信号的值,就可以实现了。 只需要这个保存语句,在使用的下方即可。
那么,在SMART200中,库函数中需要上升沿指令的时候,只需要回到S5时代的方法,就可以了。 辅助变量不使用全局变量的问题,老早就讨论过了。
其实,我上面的程序也是在SMART中做的。手头并没有STEP5的软件了。
以同样的道理,在SCL以及其它高级语言中,可以同理参考实现上升沿功能。
通常,使用一个OLD辅助变量
OUT := SIGN AND NOT SIGN_OLD;
SIGN_OLD:=SIGN;
因为下降沿的本质就是信号取反的上升沿,所以本文没有特别关注下降沿,也建议大家不要使用下降沿编程。 那样回过去读程序的时候逻辑会混乱,比较烧脑。
相关问答
plc中not是什么意思?
在PLC(可编程逻辑控制器)中,NOT是一种逻辑运算符,用于取反输入信号的状态。当输入信号为真(高电平)时,NOT运算符将其转换为假(低电平);当输入信号为假...您好...
欧姆龙PLC怎么输入ANDNOTTIM啊。就是定时器的常闭啊。但是指令是啥哦。梯形图怎么输入啊?
如果是编程器输入,就写入ANDNOTTIM100,然后按确定就可以了。如果是电脑写入,功能栏上有一个|/|这个的标记,点它加入到梯形图里,再写上T100就可以了。如...
PLC里面ANDNOT指令和ANI指令的区别是什么?
ANDNOT指令和ANI指令应该是不同品牌PLC采用的不同的指令助记符。意思是一样的,没有区别,都是串联一个常闭触点的指令。ANDNOT指令和ANI指令应该是不同品牌PL...
plc常闭开关怎么解?
PLC(可编程逻辑控制器)中的常闭开关通常指的是一个逻辑状态,表示开关在默认状态下为闭合(闭合=1,断开=0)。要解除(更改)PLC中的常闭开关状态,您需要更改...PL...
plc怎样处理开关量信号?
PLC(可编程逻辑控制器)可以通过数字输入模块来处理开关量信号。数字输入模块通常有多个输入通道,每个通道可以连接一个开关量传感器或开关量信号源。当开关量...
美的冷水机组电脑显示PLCNOTRESPONDING(02:FE)是什么故障-...
中关村在线vivoX90Pro+举报笔记本电脑0人讨论96次围观关注问题写回答讨论回答暂时还没有回答开始写第一个回答相关问题2019联想拯救者y7000I79...
西门子PLC中,取反指令NOT
[最佳回答]由于vo.o是常闭的,所以当能流到达NOT的时候,取反指令触发,常开M0.0就变成常闭M0.0当你不按M0.0,输出Q0.0也会得电,你按下则相反。如果你把V0.0换成...
西门子PLC指令,在stl中,AI0.0A0.1NOT的结果是不是等于,ANI0.0ANI0.1谢谢大神?
不等于。具体RLO结果如下:AI0.0AI0.1NOT:I0.0:0101I0.1:1001...不等于。具体RLO结果如下:AI0.0AI0.1NOT:...
在PLC中使用数学问题有哪些?
在PLC(可编程逻辑控制器)中使用数学问题主要涉及以下几个方面:算术运算:PLC可用于执行基本的算术运算,如加法、减法、乘法和除法。这些运算可用于各种应用,...
“plcnoresponse”是什么意思?
意思:PLCnoreponse,即:PLC没响应。造成的原因:1.人机界面与PLC的连接电缆中断或损坏;2.人机界面或PLC一侧的通讯端口损坏;3.人机界面与PLC的通讯端口...