西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令















1.1 沿指令概述

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

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

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令图1

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

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

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令图2

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



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

1.2 开发检测上升沿指令

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

  1. 新建FC

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


    西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

    图3


  2. 定义接口

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


    西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

    图4


  3. 编程

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

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

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

    RisingEdgeDetection输出持续一个周期。


程序代码如图5所示:

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

图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所示:

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令图6

1.4 功能测试

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

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

图7

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令图8

其中:

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

RisingEdgeDetection为输出上升沿;

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

FallingEdgeDetection为输出下降沿。


1.5 效果比对

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

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

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

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

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

    西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

    图9

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


西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

  1. 图10


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

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

    西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

    图11


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

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

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

  1. 图12


1.6总结

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

西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

文章来源:综合网络,本文系网络转载,版权归原作者所有。但因转载众多,无法确认真正原始作者,故仅标明转载来源。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容!本文内容为原作者观点,并不代表本公众号赞同其观点和对其真实性负责。


原文始发于微信公众号(工控云学堂):西门子1200/1500使用SCL语言开发上升沿(下降沿)指令

版权声明:admin 发表于 2024年10月16日 下午12:02。
转载请注明:西门子1200/1500使用SCL语言开发上升沿(下降沿)指令 | CTF导航

相关文章