博图 FB 封装模拟量换算|两种实现方式(NORM_SCALE / 一次函数 y=kx+b)可直接复制
大家好,本篇延续模拟量科普内容,手把手把模拟量量程换算封装成独立 FB 功能块,一次封装、反复调用,多个压力 / 温度 / 液位传感器不用重复写代码,极大精简程序。
提供两套等效写法,一套调用博图标准指令,一套纯数学公式手写,新手都能看懂,完整代码直接自取。
适用场景
- 标准线性模拟量传感器,PLC 原始 IW 数值转实际物理工程量,支持额外零点补偿偏移量。
- 西门子 S7-1200/1500 通用。
方法 1:标准库指令 NORM_X + SCALE_X 缩放(官方推荐)
原理:先把原始整数归一化到 0.0~1.0,再映射到自定义物理量程。 //1、原始IW数值归一化 0.0~1.0 分辨率比例 := NORM_X( MIN := #IN_分辨率MIN, VALUE := #IN_IW, MAX := #IN_分辨率MAX); //2、归一化数值映射到实际物理量程 #测量值 := SCALE_X( MIN := #IN_量程MIN, VALUE := #分辨率比例, MAX := #IN_量程MAX); //3、叠加零点补偿值,输出最终工程量 #OUT_输出值 := #测量值 + #IN_补偿值;方法 2:手写一次函数 y=kx+b 纯数学换算(无依赖指令)
工控模拟量换算本质就是线性插值,不用调用系统指令,手动推导系数,逻辑透明,方便新手理解换算底层逻辑。 //y:最终物理量;x:PLC 采集的 IW 原始数值 //计算斜率k #k:=(#IN_量程MAX - #IN_量程MIN) / (#IN_分辨率MAX - #IN_分辨率MIN); // 计算截距b #b := #IN_量程MIN - #k * #IN_分辨率MIN; // 线性换算原始数值 #测量值 := #k * #IN_IW + #b; // 叠加补偿偏移 #OUT_输出值 := #测量值 + #IN_补偿值;关键说明 & 使用贴士
两套代码运算结果完全一致,任选其一即可;
- 标准 4-20mA /0-10V信号固定;
- 西门子模拟量模块:IN_分辨率MIN=0、IN_分辨率MAX=27648;
- 补偿值用于现场传感器零点漂移修正,无偏移时赋值 0 即可;
- 封装成 FB 块后,多个模拟量通道多次调用,程序结构整洁,便于后期维护、项目交接。
实操举例
压力传感器量程 0~1.0MPa,4mA 对应 0,20mA 对应 27648,零点补偿 + 0.02MPa。
PLC 读取 IW 数值 = 13824,代入后最终输出 0.52MPa。
- 小tips:AO 模拟量反向输出量程换算,这套 FB 只需要调换量程 MIN、MAX 数值就能复用。
后续会继续分享 FB 多重实例化、模拟量软件滤波配套写法,需要的朋友可以收藏关注 ᕙ(`▿´)ᕗ
(◕ᴗ◕✿) 深耕工控,日日精进