『7x24小时有问必答』

▎西门子博途 LGF 库详解 · 04:比较操作——浮点数相等、掩码匹配、Variant 比较

做过 PLC 编程的都知道一个痛:两个 LReal 明明都是 3.14,一比较居然不相等。IEEE 754 浮点数的精度问题,让 "等于" 变成了玄学。
LGF 的比较操作组就是来解决这个问题的。5 个块覆盖了掩码比较、浮点精度比较、字符串比较和 Variant 类型比较——全是原生博途指令的短板。文末有 CompareLRealByPrecision 的一个参数设置技巧,别漏了。

一、5 个块一览

比较操作组(4.4 Comparator operations)

| 块名 | 类型 | 版本 | 一句话功能 |
|------|------|------|-----------|
| LGF_BinaryMaskCompare | FC | V1.0.0 | 用掩码过滤后再比较两个 DWord |
| LGF_CompareLReal | FC | V3.0.2 | 以 1.0E-12 精度比较两个 LReal 是否近似相等 |
| LGF_CompareLRealByPrecision | FC | V3.0.2 | 自定义精度阈值比较两个 LReal |
| LGF_CompareString | FC | V1.0.0 | 比较两个字符串是否相同 |
| LGF_CompareVariant | FC | V3.0.1 | 比较两个 Variant 类型变量是否相等 |

二、引脚详解

#### LGF_BinaryMaskCompare
引脚类型方向说明
sourceDWordIN待比较的原值
compareDWordIN对比值
maskDWordIN掩码:bit=1 的位参与比较,bit=0 的位忽略
Ret_ValBoolOUTTRUE=掩码后的位完全匹配
#### LGF_CompareLReal / LGF_CompareLRealByPrecision
引脚类型方向说明
valueALRealIN第一个实数值
valueBLRealIN第二个实数值
precisionLRealIN精度阈值(仅 CompareLRealByPrecision 有此引脚)
Ret_ValBoolOUTTRUE=在精度范围内相等

pRecision 参数设置技巧

CompareLReal 内置精度 1.0E-12,适合大多数场景。但如果你比较的是经过多次运算的值——累积误差可能超过 1.0E-12,建议用 CompareLRealByPrecision 并设置 precision := 1.0E-6(百万分之一)。如果用于模拟量比较(0-27648),precision := 0.5 通常就够用了。
#### LGF_CompareString
引脚类型方向说明
string1StringIN第一个字符串
string2StringIN第二个字符串
Ret_ValBoolOUTTRUE=完全相同
#### LGF_CompareVariant
引脚类型方向说明
var1VariantIN第一个变量(任意类型)
var2VariantIN第二个变量(任意类型)
Ret_ValBoolOUTTRUE=类型和值完全相同

三、实战案例

#### 案例 1:浮点数相等判断

LReal 精度比较

不直接写 IF valueA = valueB THEN(不可靠),改为:
isEqual := LGF_CompareLRealByPrecision(valueA := a, valueB := b, precision := 1.0E-6);
IF isEqual THEN ...
#### 案例 2:仅比较状态的特定 bit
你有一个 32 位状态字,只关心 bit 0-3(设备状态码),其余位是时间戳等动态信息。用 BinaryMaskCompare:

掩码比较

仅比较 bit 0-3 是否是 0101(5=运行中):
match := LGF_BinaryMaskCompare(source := statusWord,
compare := 16#00000005,
mask := 16#0000000F);
mask 的 bit 0-3 = 1(参与比较),其余 = 0(忽略)。

四、总结与下载

下载信息

| 项目 | 内容 |
|------|------|
| SIOS-ID | 109479728 |
| 下载地址 | 中文站:www.ad.siemens.com.cn/download/documentdetail_12471.html |
| 当前版本 | V5.1.1(数据以此版为准) |
| 全球站 | support.industry.siemens.com/cs/document/109479728(另有 V5.2.1) |
| 费用 | 完全免费 |
下篇预告:05——数学函数(上)。距离计算、阶乘、N 次方根、范围判断、容差检测——9 个块覆盖 PLC 里最常用的数学需求。
欢迎点赞、在看、转发

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

本版积分规则

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

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

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


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