Skip to content

模拟量与浮点例程 ​

本机 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,温度回落后输出会立刻断开,失去回差意义。

相关文档 ​

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研