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

[复制链接]
查看82883 | 回复0 | 2024-11-26 07:44:16 | 显示全部楼层 |阅读模式
工业现场很多数据集合与时间有关。比如某压力传感器在一段时间内的数值会形成一个压力值集合。这种集合,是以观测值发生的时间作为标记的,称为“时间序列”。如果某算子运算是从时间序列中取出前一时间单位的值(并存储当前值),则称此算子为延迟算子(backshift operator)。工业现场用于计算压力传感器或流量计的波动值(判断是否有泄漏或流速静止),都可以基于延迟算子运算。今天这篇文章,我们用SCL语言来写一个延迟算子的函数块。



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



其中:

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

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

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

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

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

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

编写代码如下图所示:



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



说明:

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

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

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

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以点击下面的链接或者左下角的【阅读原文】查看:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则