0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用SCL语言开发上升沿或下降沿指令

laidenongfhs 来源:中泰PLC自动化教学 2023-07-20 14:20 次阅读

1.1沿指令概述

沿指令即在程序中用于检测信号的上升沿或下降沿的指令。

SIMATIC S7-1500和S7-1200 PLC中,选择编程语言为SCL时,可以看到TIA Portal软件自带两个指令分别用于检测信号的上升沿和下降沿,如图1所示:

32a6efee-26c3-11ee-962d-dac502259ad0.png

图1

在程序中调用R_TRIG或F_TRIG时,系统会自动生成1个背景DB块,用于存放检测信号的边沿存储位,当程序中有较多信号需要检测上升沿或下降沿时,就会产生多个背景DB块,这样一来,过多的背景DB块不仅仅不便于管理,且会过多占用CPU宝贵的存储区。

以SIMATIC S7-1200 PLC为例,存储区分为工作存储区,装载存储区,保持性存储区,其中工作存储区和保持性存储区不可扩展,不同的CPU具有不同大小的存储区,如图2所示:

32c0a524-26c3-11ee-962d-dac502259ad0.png

图2

假设选定S7-1211C进行编程,如果在程序中应用了很多R_TRIG或F_TRIG指令,则实际程序需要的工作存储区有可能超过50kB,此时需要更换工作存储区更大的PLC来加以解决,所以适当优化程序,占用较少的工作存储区,十分必要。

本文以S7-1200为例,皆在阐释如何使用SCL语言开发沿指令以减少工作存储区使用。

1.2开发检测上升沿指令

为了不产生背景DB块,我们在FC中使用SCL语言进行开发,并引入第三方变量作为检测信号的边沿存储位。

新建FC

新建FC并选择编程语言为SCL,FC块命名为:RisingEdgeDetection,如图3所示:

32d8c15e-26c3-11ee-962d-dac502259ad0.png

图3

定义接口

根据编程需要定义接口变量,并写明注释,修改Return变量的数据类型为Bool,用于输出上升沿信号,持续一个周期,如图4所示:

32eb1598-26c3-11ee-962d-dac502259ad0.png

图4

编程

根据上升沿检测原理进行编程,编程思想如下:

当 #signal由0变成1时,此时作为边沿存储位的 #thirdVariable仍保留 #singal信号上一周期的状态,#thirdVariable为False,此时满足IF语句,RisingEdgeDetection被赋值为True。

当 #signal由0变成1后的下一周期,#thirdVariable上个周期已被 #signal赋值为相同状态,即 #thirdVariable和 #signal都为True,则不再满足IF语言,RisingEdgeDetection被赋值为False。

RisingEdgeDetection输出持续一个周期。

程序代码如图5所示:

331152a8-26c3-11ee-962d-dac502259ad0.png

图5

1.3开发检测下降沿指令

与开发检测上升沿指令类似,新建FC并定义接口变量,这里不再一一赘述。在编程上两者有所不同,其编程思想如下:

当#signal由1变成0时,此时作为边沿存储位的#thirdVariable仍保留#singal信号上一周期的状态,#thirdVariable为True,此时满足IF语句,FallingEdgeDetection被赋值为True。

当#signal由1变成0后的下一周期,#thirdVariable上个周期已被#signal赋值为相同状态,即#thirdVariable和#signal都为False,则不再满足IF语言,FallingEdgeDetection被赋值为False。

FallingEdgeDetection输出持续一个周期。

程序代码如图6所示:

33276f5c-26c3-11ee-962d-dac502259ad0.png

图6

1.4功能测试

使用开发完成的功能块,检测Q0.0的上升沿和下降沿,编程代码如图7所示,Trace时序图如图8所示。

其中:

Data.thirdVariable1为检测上升沿指令所用到的第三方变量;

RisingEdgeDetection为输出上升沿;

Data.thirdVariable2为检测下降沿指令所用到的第三方变量;

FallingEdgeDetection为输出下降沿。

3359fa1c-26c3-11ee-962d-dac502259ad0.png

图7

336a051a-26c3-11ee-962d-dac502259ad0.png

图8

1.5效果比对

为了更好的说明该自行开发沿指令的优势,我们分别使用R_TRIG指令和RisingEdgeDetection指令编写相同的工艺功能程序,通过对比两者所占用工作存储区大小的差异,加以说明。

工艺功能要求:

利用S7-1214C,使用SCL编程语言编程,在FB1中实现1000个Bool信号的上升沿检测。

1.5.1使用R_TRIG实现相关工艺功能

使用R_TRIG指令实现过程,如图9所示。

R_TRIG在FB1中以多重背景形式调用,方便R_TRIG背景DB块的管理。

3383fb64-26c3-11ee-962d-dac502259ad0.png

图9

编译完成后,在程序信息中查看存储区使用情况,如图10所示,工作存储区已被占用10%。Test_IDB为FB1的背景DB块。

33a0a98a-26c3-11ee-962d-dac502259ad0.png

图10

1.5.2使用RisingEdgeDetection实现相关工艺功能

使用RisingEdgeDetection指令实现过程,如图11所示。

33d0a20c-26c3-11ee-962d-dac502259ad0.png

图11

编译完成后,在程序信息中查看存储区使用情况,如图12所示,工作存储区已被占用3%。

Test_IDB为FB1的背景DB块。Data用于存储第三方变量,变量类型为Array [0…999] of Bool。

33e6b25e-26c3-11ee-962d-dac502259ad0.png

图12

1.6总结

从上述分析中,我们可以得出自行开发的沿指令RisingEdgeDetection、FallingEdgeDetection比R_TRIG、F_TRIG指令占用更少的工作存储区空间,且适用于SIMATIC S7-1200及S7-1500 PLC。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    4975

    文章

    12257

    浏览量

    454944
  • 指令
    +关注

    关注

    1

    文章

    580

    浏览量

    35379
  • SIMATIC
    +关注

    关注

    1

    文章

    230

    浏览量

    15523
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    16884
  • S7-1500
    +关注

    关注

    3

    文章

    298

    浏览量

    5850

原文标题:1.1

文章出处:【微信号:中泰PLC自动化教学,微信公众号:中泰PLC自动化教学】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    方波上升沿下降沿问题

    有一个方波信号,如何得到它的上升沿时间和下降沿时间,最大值和最小值这几个量,lv中前两个有没有直接的控件能够得到结果,没有控件该怎么样才能得到方波的
    发表于 07-10 22:41

    Labview怎么使用上升沿下降沿

    `Labview中怎么使用和PLC一样用布尔信号的上升沿下降沿触发一个事件!`
    发表于 02-20 13:08

    按键上升沿下降沿的判断

    按键上升沿下降沿的判断:遇到判定感应器从OFF->ON->OFF怎样实现,要有上升沿
    发表于 04-11 12:28

    计算波形图中上升沿下降沿的个数及上升沿下降沿的时间。

    抛砖引玉,提供一个简易程序,这个程序如果数据最后是保持在下降沿,那么此程序没有问题。如果数据最后处于上升沿,则程序的下降
    发表于 11-23 09:36

    Labview捕捉Bool变量的上升沿下降沿

    很多人在程序中可能会用到需要捕捉某个信号的上升沿或者下降沿, 比如需要对一个脉冲信号进行计数或者需要计算信号高电平的时间等,一种比较简单的思路就是,先判断这个信号与上次信号比较,如不一
    发表于 09-04 11:49

    布尔量上升沿下降沿检测

    布尔量上升沿下降沿检测
    发表于 10-11 14:27

    请问多个SPI器件,有的上升沿采样,有的下降沿采样,怎么破?

    一个板子上有多个SPI元件,有一个元件通讯不对,研究了多半天,才发现这个是SCL下降沿时采样的,其他的都是上升沿时采样。如果用硬件SPI的话
    发表于 10-24 09:13

    M451的GPIO可以设置成脉冲上升沿下降沿中断吗?

    M451的GPIO可以设置成脉冲上升沿下降沿中断吗?如果识别是哪个中断源呢?有例程吗?
    发表于 01-08 09:10

    布尔按钮上升沿/下降沿触发事件?

    本帖最后由 907510265 于 2019-10-20 21:41 编辑 请问各位如何实现用一个按钮的上升沿下降沿分别去触发事件结构的不同事件??
    发表于 10-20 16:03

    数字电路上升沿下降沿是什么

    数字电路上升沿下降沿是什么
    发表于 03-11 06:29

    TTL门电路中上升沿下降沿是什么

    TTL门电路中上升沿下降沿是什么
    发表于 03-11 06:05

    上升沿触发与下降沿触发相关资料下载

    假设PA0为 低 电平开关按下后电平被拉 高,配置为上升沿 则按键按下为1,若 配置为下降沿 则 按键弹开为1上升
    发表于 11-29 06:37

    请问STM32f4是否有可能检测输入信号的上升沿下降沿

    问题是我需要有关下降沿上升沿的信息才能知道转子的角度。我需要角度来计算旋转速度,捕获之间的差异永远不会正好是 60 度。我还计划对霍尔传感
    发表于 01-16 08:31

    LPC54102如何确定该事件是“上升沿”事件还是“下降沿”事件?

    我在 LPC54102 上有一个引脚配置为标准计数器/定时器 (CT32Bx) 之一的捕获输入。此外,我配置了一些东西,以便在引脚的上升沿下降沿加载捕获寄存器并生成中断。当为捕获事件
    发表于 03-20 07:40

    KEA8 KBI下降沿上升沿问题求解

    我正在FRDM - KEAZ128 上开发新代码,我需要在下降沿上升沿拦截单个引脚上的中断,但从文档来看,似乎只能使用
    发表于 03-23 07:53