『7x24小时有问必答』

▎西门子博途 LGF 库详解 · 06:数学函数(中)——RandomRange、SearchMinMax、StoreMinMax

本篇是数学函数组的第二部分,共 7 个块。承接上一篇的基础随机数,这里扩展到指定范围的随机数生成,以及数组最值搜索和历史最值追踪。

一、7 个块一览

数学函数组(4.5,中部)

| 块名 | 类型 | 版本 | 一句话功能 |
|------|------|------|-----------|
| LGF_Random_UDInt | FC | V3.0.1 | 生成 UDInt 范围随机数 |
| LGF_RandomRange_DInt | FC | V3.0.1 | 在 [min, max] 区间生成 DInt 随机数 |
| LGF_RandomRange_Real | FC | V3.0.1 | 在 [min, max] 区间生成 Real 随机数 |
| LGF_SearchMinMax_DInt | FC | V3.0.2 | 搜索 DInt 数组中的最小/最大值及索引 |
| LGF_SearchMinMax_LReal | FC | V3.0.2 | 搜索 LReal 数组中的最小/最大值及索引 |
| LGF_SearchMinMax_UDInt | FC | V3.0.1 | 搜索 UDInt 数组中的最小/最大值及索引 |
| LGF_StoreMinMax | FB | V3.0.1 | 持续追踪历史最大/最小值 |

二、引脚详解

#### LGF_Random_UDInt
引脚类型方向说明
Ret_ValUDIntOUTUDInt 范围内的随机数
errorBoolOUT错误标志
statusWordOUT状态码
subfunctionStatusWordOUT子函数状态码
#### LGF_RandomRange_DInt
引脚类型方向说明
minValueDIntIN随机数范围下限(含)
maxValueDIntIN随机数范围上限(含)
Ret_ValDIntOUT[minValue, maxValue] 内的随机整数
errorBoolOUT错误标志
statusWordOUT状态码
subfunctionStatusWordOUT子函数状态码
#### LGF_RandomRange_Real
引脚类型方向说明
minValueRealIN随机数范围下限(含)
maxValueRealIN随机数范围上限(含)
Ret_ValRealOUT[minValue, maxValue] 内的随机实数
errorBoolOUT错误标志
statusWordOUT状态码
subfunctionStatusWordOUT子函数状态码
#### LGF_SearchMinMax_DInt / _LReal / _UDInt
三个变体接口完全一致,仅数组元素类型不同:
引脚类型方向说明
valuesArray
  • of X
  • INOUT要搜索的数组(可变长度,原地操作)
    Ret_ValVoidOUT无返回值(结果通过 OUT 参数返回)
    minValue同数组元素OUT数组中的最小值
    minValueIndexDIntOUT最小值在数组中的索引(从 startIndex 算起,0-based)
    maxValue同数组元素OUT数组中的最大值
    maxValueIndexDIntOUT最大值在数组中的索引(0-based)
    #### LGF_StoreMinMax
    引脚类型方向默认值说明
    valueLRealIN0.0要与历史最值比较的值
    resetBoolINFALSETRUE 时清空历史记录重新开始
    minValueLRealOUT自首次调用或上次 reset 以来的最小值
    maxValueLRealOUT自首次调用或上次 reset 以来的最大值

    三、实战案例

    #### 案例 1:模拟温度传感器读数
    在仿真环境中生成 20.0~30.0 之间的随机温度值:

    RandomRange_Real 传感器仿真

    simulatedTemp := LGF_RandomRange_Real(minValue := 20.0, maxValue := 30.0);
    #### 案例 2:产线 OEE 数据周报
    本周 7 天每天记录了设备利用率,要找最好和最差的一天:

    SearchMinMax 找最佳/最差

    用 SearchMinMax_UDInt 搜索 7 元素数组:
    LGF_SearchMinMax_UDInt(values := weeklyOEE,
    minValue => worstDay,
    minValueIndex => worstIndex,
    maxValue => bestDay,
    maxValueIndex => bestIndex);

    minValueIndex 注意事项

    minValueIndex 和 maxValueIndex 的输出是相对于搜索起始索引的偏移(0-based),不是数组的绝对索引。如果数组声明为 Array[1..100],startIndex 设为 1,那么 minValueIndex=3 对应的实际数组索引是 1+3=4。不要直接把 minValueIndex 当数组下标用。
    #### 案例 3:压机最大压力追踪
    设备验收时需要确认压机在工作过程中从未超过 250MPa:

    StoreMinMax 历史追踪

    LGF_StoreMinMax(value := currentPressure, reset := testStarted,
    maxValue => maxPressure, minValue => minPressure);
    IF maxPressure <= 250.0 THEN acceptancePassed := TRUE; END_IF;
    测试开始时 give reset 一个上升沿,StoreMinMax 清零历史。之后每个周期传入 currentPressure,FB 自动判断是否刷新 maxValue。测试结束时直接读 maxPressure——全程不需要自己写比较逻辑。

    四、总结与下载

    本篇的 LoadStoreMinMax 是工厂验收测试中的利器——追踪整个测试过程中的压力/温度/速度峰值,不需要写一行历史比较代码。SearchMinMax 的索引输出在数据分析场景中也远比自己写循环高效。

    下载信息

    | 项目 | 内容 |
    |------|------|
    | SIOS-ID | 109479728 |
    | 下载地址 | 中文站:www.ad.siemens.com.cn/download/documentdetail_12471.html |
    | 当前版本 | V5.1.1(数据以此版为准;全球站另有 V5.2.1) |
    | 费用 | 完全免费 |
    下篇预告:LGF 库详解 · 07——数学函数(下)。Integration 数值积分、IsValueInToleranceByTime 时间容差检测、以及数学函数组的收尾总结。
    欢迎点赞、在看、转发。还没关注的,点右上角——系列还有 19 篇在路上。

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    上一主题上一主题         下一主题下一主题
    QQ手机版小黑屋粤ICP备17165530号

    关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

    法律保护:PLC技术网,plcjs.com,plcjs.net等字样
    Copyright 2010-2030. All rights reserved. 


    微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码