北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章545 浏览8690958

西门子SCL编程实例——延迟算子运算

工业现场很多数据集合与时间有关。比如某压力传感器在一段时间内的数值会形成一个压力值集合。这种集合,是以观测值发生的时间作为标记的,称为“时间序列”。如果某算子运算是从时间序列中取出前一时间单位的值(并存储当前值),则称此算子为延迟算子(backshift operator)。工业现场用于计算压力传感器或流量计的波动值(判断是否有泄漏或流速静止),都可以基于延迟算子运算。今天这篇文章,我们用SCL语言来写一个延迟算子的函数块。

cover.png

在博途环境下新建项目,创建函数块,命名为“backshift_operator”。双击打开该函数块,在变量声明区声明如下变量:

参数表.png

其中:

  • B:是一个单位时间,即某时间周期的倍数。比如,假设该函数被调用的时间周期为0.1秒(100ms),B取值15,则表示要获取15x0.1秒=1.5秒之前的值;

  • status:函数块运行的状态,具体描述见下面的代码;

  • value:要存储的值(比如压力传感器的数值)。该参数为IN/OUT(写/读)类型,要读取的值(算子运算的结果)也来自这里;

  • buffer:存储区,用来存储值,必须是数组;

  • stat_p_read:读指针(静态变量);

  • stat_p_write:写指针(静态变量);

编写代码如下图所示:

代码.png

使用随机函数进行测试,如下图所示:

示例.png

说明:

  • 为了便于观察,我将调用函数的时间周期设置成1秒。形参B的值为15,则意味着返回15秒之前的数值。实际应用中应根据情况修改(比如0.1秒);

  • 随机数函数请参考:西门子SCL编程实例——产生随机数的算法

好了,关于延迟算子运算就先介绍到这里。

下面是西门子SCL编程的文章归档链接:

》》西门子SCL编程入门到精通文章归档《《

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论