主题
模拟量与浮点例程
本机 AI/AO 读写、工程量换算、浮点运算与回差控制。 重要:LPPLC 的
RD3A/WR3A不是三菱的模块协议,而是直接读写本机自带的模拟量通道。 浮点数占 2 个连续 D 寄存器(IEEE-754 单精度)。
返回 例程总览。
例程 1:读取本机模拟量输入(RD3A)
场景:读取本机第 1 路 AI(如温度传感器)的原始值。
LD M8000
RD3A K0 K1 D0 ; 偏移 0 起读 1 路 AI → D0要点
- 格式
RD3A 偏移 个数 D:偏移范围 0~100,超范围报 6581/6582。 - 扩展模块的 AI/AO 接在本机通道号之后顺延,见扩展模块。
- 读到的通常是原始 AD 值(如 0~4000),需换算成工程量(例程 2/3)。
验证:改变输入信号 → D0 随之变化;超出范围时查看错误寄存器。
注意事项
- 按三菱手册把 RD3A 理解成"读 FX0N-3A 模块",接线与地址都会错 —— 本机的 RD3A / WR3A 语义与三菱不同。
- 偏移超范围 → 错误 6581/6582,程序可能停止执行。
例程 2:工程量换算(整数定标,推荐)
场景:AD 原始值 0~4000 对应 0~100.0℃,换算为"实际值 ×10"的整数(0~1000),便于显示与比较。
LD M8000
RD3A K0 K1 D0 ; 原始值
DIV D0 K4 D10 ; D10 = D0 / 4 → 0~1000(即 0~100.0℃)要点
- 用"实际值 ×10"的整数表示一位小数,避免浮点,运算快且无精度陷阱。
DIV的余数占用 D+1,别把 D11 另作他用。- 需要非整数系数时,先乘后除,注意 16 位溢出(超 32767 用
DMUL/DDIV)。
验证:D0=4000 → D10=1000(100.0℃);D0=2000 → D10=500(50.0℃)。
注意事项
- 除数为 0 会触发运算错误,K 值别写成 0;除数来自 D 寄存器时先用
CMP判 0。 - 余数落在 D+1,后续程序误用 D11 会读到余数而不是工程量。
- 需要"先乘后除"时中间结果超过 32767 会溢出,改用
DMUL/DDIV,或调整运算顺序为"先除后乘"。
例程 3:工程量换算(浮点)
场景:标定系数为非整数(如 0~4000 → 0~150.0℃),用浮点保证精度。
LD M8000
RD3A K0 K1 D0 ; 原始值
FLT D0 D10 ; D10-D11 = D0 转浮点
DEMOV K375 D20 ; 系数 0.0375(需预先存入 D20-D21)
DEMUL D10 D20 D30 ; D30-D31 = 原始值 × 0.0375 → 0~150.0要点
- 浮点数占 2 个连续 D,地址不要重叠(D10-D11、D20-D21、D30-D31 各自独立)。
- 常量浮点(如 0.0375)不能直接写 K 值,须先用
DEMOV或在上位机把浮点常量写入 D 寄存器。 - 转回整数用
INT S D(浮点取整)。
验证:D0=4000 → D30-D31 ≈ 150.0;用监控窗口以浮点格式查看 D30。
注意事项
- 把浮点值当成单寄存器用(
MOV D30 D40只搬了一半数据),必须用DEMOV。 - 地址重叠(如结果写到 D11)会破坏源操作数。
例程 4:浮点上下限报警(DEZCP)
场景:温度超出安全区间时报警,用浮点区间比较。
LD M8000
DEZCP K200 K800 D30 M0 ; D30-D31(浮点) 与 20.0 / 80.0 比较
; 区间下限/上限同样需为浮点常量所在寄存器
LD M0 ; < 下限
OUT Y10
LD M2 ; > 上限
OUT Y11若上下限是整数工程量,直接用
ZCP(区间比较,见 比较与传送),更简单。
要点
DEZCP S1 S2 S D结果占 3 个位:S<S1→D,S1≤S≤S2→D+1,S>S2→D+2。- 浮点比较前确保两端都是浮点(整数先
FLT)。
验证:把 D30 设为低于下限/高于上限的值 → Y10 / Y11 分别动作。
注意事项
- 一边是整数、一边是浮点,比较结果无意义。
例程 5:模拟量输出(WR3A)
场景:把计算出的控制量(如阀门开度 0~100%)写到本机 AO。
LD M8000
MOV D100 D200 ; D100 = 开度 0~4000(工程量)
LD M8000
WR3A K0 K1 D200 ; 偏移 0 起写 1 路 AO,源 = D200要点
- 格式
WR3A 偏移 个数 S:写本机 AO 缓冲区,偏移 0~100。 - AO 通常需要工程量 → 原始码值的反换算(与例程 2 相反)。
- 手动/自动切换时,用
MOV选择来源:LD X0 ; 自动 MOV D100 D200 ; 自动:来自 PID/计算 LDI X0 ; 手动 MOV D110 D200 ; 手动:来自上位机给定
验证:改变 D200 → 用万用表量 AO 输出随之变化。
注意事项
- 两条
MOV都导通时会互相覆盖,必须用X0/LDI X0互斥。
例程 6:回差(滞环)控制
场景:温度超过 80.0℃ 启动冷却,低于 75.0℃ 才停止 —— 避免在阈值附近频繁启停。
LD M8000
CMP D10 K800 M0 ; D10(工程量×10) > 800(80.0℃) → M0
CMP D10 K750 M3 ; D10 < 750(75.0℃) → M5
LD M0
SET Y0 ; 超上限 → 启动冷却
LD M5
RST Y0 ; 低于回差下限 → 停止冷却要点
- 用
SET/RST而不是OUT,状态才会在条件消失后保持。 - 回差宽度按工艺选(本例 5℃);太小仍会频繁动作,太大会超调。
- 若用浮点工程量,把
CMP换成DECMP。
验证:D10 升到 801 → Y0 ON;降到 790 → Y0 仍 ON;降到 749 → Y0 OFF。
注意事项
- 用单阈值
CMP+OUT,在临界点会每个扫描周期抖动,接触器"哒哒"响。 - 忘记
SET/RST而用OUT,温度回落后输出会立刻断开,失去回差意义。
相关文档
- 浮点数运算 (FNC 112-143)(FLT/INT/DECMP/DEZCP/DEMOV/DEADD~DEDIV)
- 数据处理与时钟(RD3A / WR3A 的 LPPLC 语义)
- 扩展模块(AI/AO 通道顺延)
- 应用指令例程