在松下 FP7 PLC 中使用浮点型数据进行运算,需基于其IEEE 754 标准 32 位单精度浮点数(存储于 R 区或 DT 区),通过专用的浮点运算指令实现加法、减法、乘法、除法等操作。核心是确保 “数据格式匹配”(运算前统一为浮点型)和 “指令正确调用”,以下是详细实现方案:
FP7 中浮点型数据的存储和使用需遵循两个核心规则:
存储区域:浮点型数据必须存储在浮点数专用寄存器(R 区,如 R0、R1) 或32 位数据寄存器(DT 区,如 DT10~DT11,需按 32 位连续占用),不能存入 16 位 W 区(会导致数据截断)。
数据格式统一:浮点运算指令仅支持 “浮点型 × 浮点型” 运算,若需用整数参与运算,必须先将整数转换为浮点型(参考前文 “整型转浮点型”,用INT_TO_REAL
或DINT_TO_REAL
指令)。
FP7 的指令库中提供了专门的浮点运算指令,均位于 “指令库→浮点运算” 分类下,指令格式统一为 “指令名(源操作数1, 源操作数2, 目标操作数)
”,即 “S1 OP S2 → D
”。
功能:S1 ÷ S2
,结果存入D
(需避免 S2 为 0,否则触发除零错误)。
指令格式:REAL_DIV(S1, S2, D)
除零防护示例:若 R1 可能为 0,需先判断 R1 是否为 0,再执行除法:
plaintext
LD M8000
REAL_CMP_EQ R1, K0.0, M0 // 比较R1是否等于0.0,结果存入M0(M0=1表示R1=0)
LD M8000
ANI M0 // 若R1≠0,执行除法
REAL_DIV R0, R1, R2
LD M0 // 若R1=0,触发报警
OUT Y0 // Y0接报警灯
除基础四则运算外,FP7 还支持浮点比较、三角函数、开方等进阶操作,满足复杂控制需求(如 PID 调节、流量计算)。
用于判断两个浮点数的大小关系,结果输出到内部继电器(M),常见指令:
REAL_CMP_EQ(S1, S2, M)
:S1 = S2 时,M=1;
REAL_CMP_GT(S1, S2, M)
:S1 > S2 时,M=1;
REAL_CMP_LT(S1, S2, M)
:S1 < S2 时,M=1。
示例:判断 R0(当前温度23.5℃
)是否低于设定值 R1(25.0℃
),若低于则启动加热:
plaintext
LD M8000
REAL_CMP_LT R0, R1, M1 // R0(23.5) < R1(25.0) → M1=1
LD M1
OUT Y1 // Y1接加热继电器
开方(REAL_SQRT):REAL_SQRT(S, D)
,计算 S 的平方根(S 需≥0);
绝对值(REAL_ABS):REAL_ABS(S, D)
,计算 S 的绝对值;
三角函数(REAL_SIN/COS/TAN):计算角度的正弦 / 余弦 / 正切(角度单位为弧度,需先将角度转换为弧度,如角度×π/180
)。
浮点数运算存在微小误差(如0.1+0.2≠0.3
,因二进制无法精确表示十进制小数),需通过以下方式规避:
比较时用 “范围判断” 替代 “绝对相等”:若需判断 R0 是否接近10.0
,可判断R0 > 9.99
且R0 < 10.01
,而非直接R0=10.0
;
运算后四舍五入:用REAL_ROUND(S, D)
指令将 S 四舍五入为整数(存储为浮点型),例:R0(123.6
)→ R2(124.0
)。
指令调用权限:确保 FPWIN Pro 软件中已加载 “浮点运算” 指令库(默认已包含,若缺失需在 “工具→指令库管理” 中添加);
地址占用规则:浮点型数据占 32 位,DT 区需连续使用 2 个寄存器(如 DT10~DT11),不可交叉占用(如 DT10 用于浮点数,DT11 不可单独用于整数);
错误监测:浮点运算错误(溢出、除零、格式错误)会触发系统标志ER
(M8067),可通过LD ER
监测错误,及时停机或报警;
运算效率:浮点运算比整数运算耗时更长,高频次运算(如 1ms 周期)需评估 PLC 负载,避免卡顿。
以 “水箱液位控制” 为例,说明浮点运算的应用:
数据转换:液位传感器的 4~20mA 信号(整数,存于 W0)→ 用INT_TO_REAL
转为浮点型 R0,再通过REAL_MUL
和REAL_SUB
换算为实际液位(如(R0-4.0)×(5.0/16.0)
,对应 0~5m 液位);
PID 运算:将实际液位(R1)与设定液位(R2)的差值(REAL_SUB R2, R1, R3
)输入 PID 指令,输出浮点型控制量(R4);
执行器控制:将 R4 通过REAL_TO_INT
转为整数(控制变频器频率),驱动水泵调节进水速度。
松下 FP7 PLC 的浮点运算核心是 “专用指令 + 正确存储 + 格式统一”:先确保参与运算的数据均为浮点型(整数需转换),再调用REAL_ADD
/REAL_MUL
等指令实现运算,最后通过比较或函数指令处理结果。实际应用中需注意误差规避和错误监测,确保运算精度与系统稳定。