ST语言-3.运算符+功能块+常用指令

1.表达式

表达式由操作符(运算符)操作数组成。
在这里插入图片描述
在这里插入图片描述

2.赋值运算符‘:=’

(*示例:把b+1的值赋给a*)
a:=b+1;

3.算术运算符

+-*/
加法减法乘法除法

重点分析一下除法
(1)int:=int/int; (商为int)
在这里插入图片描述
(2)real:=real/real; (商为real)
在这里插入图片描述
(3)real:=int/int; (商为int)
在这里插入图片描述
(4)int:=real/real; (报错,int类型无法转换为real类型)
表达式左边的数据类型应该等同于(或大于) 右边的数据类型。
在这里插入图片描述
(5)real:=除数和被除数中有一个为real,另一个为int,商为real
在这里插入图片描述
在这里插入图片描述
结论:除数和被除数至少有一个为real,则商为real类型;
除数和被除数全为整形,则商为整型;
总结:
在这里插入图片描述

4.比较运算符

在这里插入图片描述

5.逻辑运算符

在这里插入图片描述

6.功能块

1.沿触发功能块

边沿检测指令用来检测BOOL 信号的上升沿(信号由0---->1)和下降沿(信号由1---->0)的变化。在每个扫描周期中把信号状态和它在前一个扫描周期的状态进行比较,若不同则表明有一个跳变沿。因此,前一个周期里的信号状态必须被存储,以便能和新的信号状态相比较。
在这里插入图片描述
边沿检测指令R_TRIG上升沿指令以及F_TRIG下降沿指令
rise:上升 fall:下降 triggers:触发物
在这里插入图片描述
(1)上升沿触发功能块-R_TRIG
功能:用于检测上升沿。 语法:当CLK 从“0”变为“1”时,该上升沿检测器开始启动,Q 输出先由“1”然后变为“0”,持续一个PLC 运算周期;如果CLK 持续保持为“1”或者“0”,Q 输出一直保持为“0”。
在这里插入图片描述

*使用示例*)
(*1.在变量区声明一个变量,类型是R_TRIG*)
vR_Trig : R_TRIG;*2.在程序区实例化这个功能块变量,填入相关参数*vR_Trig(CLK:= vb_StartButton, Q=> );*CLK:要检测的信号地址;Q:输出信号的地址*)
(*=>输出连接操作符, Q=>A   把Q的值给A,一般是在调用的块中有输出时使用*

(2)下降沿触发功能块-F_TRIG
功能:用于检测下降沿。 语法:当CLK 从“1”变为“0”时,该下降沿检测器开始启动,Q 输出先由“1”然后输出变为“0”,持续一个PLC 运算周期;如果CLK 持续保持为“1”或者“0”,Q 输出一直保持为“0”。

2.定时器功能块

定时器采用IEC61131-3 标准的定时器,分为脉冲定时器TP、通电延时定时器TON、断电延时定时器TOF 和实时时钟RTC。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通电延时定时器TON: 在定时器的输入端IN 从“0”变为“1”时,定时器则启动,当到达定时时间PT 且输入端的信号IN 始终维持在“1”时,其输出端Q 的输出信号为“1”,如果在定时器的定时时间到达之前,输入端IN 信号由“1”变为“0”时,则定时器复位,下一个IN 信号的上升沿定时器重启。输出端ET 提供定时时间,延时从T#0s 开始,到设置的PT 时间结束。PT 到达时,ET 将会保持定时时间直到IN 变为“0”为止。如果在达到PT 定时时间之前,输入IN 变为“0”,输出ET立即变为T#0s。为了重启定时器,可以设置PT=T#0s,也可以将IN=FALSE。

*使用示例*)
(*1.在变量区声明一个变量,类型是TON*)
vt_Time1 : TON;*2.在程序区实例化这个功能块变量,填入相关参数*vt_Time1(IN:=(NOT vb_StartButton), PT:= T#2S, Q=>, ET=> );*IN 实际就是定时器启动信号; PT 是定时器定时时间; Q 定时器输出信号;ET沿信号输出当前计时时间*

7.置位与复位

1.置位 S=

A S= B; 只要B在程序的一个扫描周期内为true的话,A变量就会被置位为true;

2.复位 R=

A R= B; 当B在程序的一个扫描周期为true的时候,复位A,也就是把A设置成false。
置位与复位和使用IF语句效果一样,但能减少程序的代码量,达到简化程序的效果。

8.常用指令

1.LIMIT上下限

功能:限制值输出。判断输入数据是否在最小值和最大值之间,若输入数据在两者之间,则直接把输入数据作为输出数据进行输出。若输入数据大于最大值,则把最大值作为输出值。若输入数据小于最小值,则把最小值作为输出值。

*语法格式*)
OUT := LIMIT(Min, IN, Max);*示例*)
VAR
    iVar:INT:=90;
    iOutVar: INT;
END_VAR

iOutVar:=limit(30,iVar,80);*解释:最小值输入值为30,最大值输入值为80,实际输入值为90,大于最大值,故最终输出结果为最大值80*

2.SEL 二选一

功能:通过选择开关,在两个输入数据中选择一个作为输出,选择开关为FALSE 时,输出为第一个输入数据,选择开关为TRUE 时,输出为第二个数据。

*语法格式*)
OUT := SEL(G, IN0, IN1);
(*解释:参数G:必须是布尔变量。如果G是FALSE,则返回IN0,如果G是TRUE,则返回IN1*)*示例*)
VAR
    iVar1:INT:=3;
    iVar2:INT:=4;
    iOutVar: INT;
    bInput: BOOL;
END_VAR

iOutVar:=SEL(bInput,iVar1,iVar2);*解释:当输入值bInput 为FALSE,输出为3,反之,当其为TRUE时,输出为4*

3.MUX 多选一

功能:多路器操作。通过控制数在多个输入数据中选择一个作为输出。

*语法格式*)
OUT := MUX(K, IN0,...,INn)(*解释:IN0,...,INn以及返回值OUT可以是任何变量类型。但是K必须为 BYTE, WORD, DWORD, LWORD,SINT, USINT, INT, UINT, DINT, LINT, ULINT 或者UDINT*)*MUX 从变量组中选择第K个数据输出*)
(*示例*)
VAR
    iVar:INT:=1;
    iOutVar: INT;
END_VAR

iOutVar:=MUX(iVar,30,40,50,60,70,80);*解释:,使用多选一指令,根据输入控制数iVar 选择最终要输出的数据*)
(*解释:,输出结果为40,因为数据排序是从第0个元素开始累积。如果数据超出范围,按最后一个数据为输出*

4.MAX 最大值 MIN 最小值

MAX功能:最大值函数。在多个输入数据中选择最大值作为输出。
MIN功能:最小值函数。在多个输入数据中选择最小值作为输出。

*语法格式*)
OUT := MAX(IN0,,INn);
OUT := MIN(IN0,,INn)(*解释:IN0,...,INn可以是任何变量类型*)*示例*)
VAR
    iVar1:INT:=30;
    iVar2:INT:=60;
    iOutVar1: INT;
    iOutVar2: INT;
END_VAR

iOutVar1:=MAX(iVar1,iVar2);*解释:输出结果为60,iOutVar1 的输入值为iVar1 和iVar2 中的较大者*)
iOutVar2:=MIN(iVar1,iVar2);*解释:输出结果为30,iOutVar2 的输入值为iVar1 和iVar2 中的较小者*

5.ABS取绝对值

功能:计算一个数的绝对值。

*语法格式*)
OUT := ABS (IN);
(*解释:支持如下的变量类型,BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL 和常数*)

5.1程序

在这里插入图片描述

5.2结果

在这里插入图片描述

6.MOD 取余数

*示例*)
VAR
    rVar1:INT:=16;
    rResult:INT;
END_VAR

rResult:= rVar1 MOD 3;*解释:结果rResult其实就是16除以3得到的余数*

错误:MOD不能用于REAL等类型,只能用于INT
在这里插入图片描述  
正确示例:
在这里插入图片描述

7.SQRT 平方根

功能:非负实数的平方根

*语法格式*)
OUT := SQRT(IN); 
(*解释:输入变量IN 可以是 BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL 和常数,但输出必须是REAL 或LREAL 类型*)

7.1程序

在这里插入图片描述

7.2结果

在这里插入图片描述

图片来源参照

http://www.yanjuntech.cn/Mybook/ST_Grammar/_book/di-si-zhang-ff1a-st-zhong-de-yun-suan-fu/452ding-shi-qi-gong-neng-kuai.html

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值