Skip to content

二、比较与传送(FNC 10-19) ​

CMP — 比较(FNC 10) ​

CMP 的结果占三个连续位,同一时刻只有一个 ON

项目说明
格式CMP S1 S2 D
16/32位CMP / DCMP
D 占用3 个连续位元件
条件DD+1D+2
S1 > S2ONOFFOFF
S1 = S2OFFONOFF
S1 < S2OFFOFFON

梯形图:与下方指令表同一段程序

LD  X0
CMP K100 C23 M0     ; K100 与 C23 比较

X0=OFF 时不执行 CMP,M0~M2 保持之前状态。需 ≧、≦、≠ 时可串并联 M0~M2。

实用例程 ​

梯形图:CMP 比较结果经 MPS/MPP 分支置位 M10/M30,定时器到时后复位

LD M8002
MOV K0 D0
MOV K0 D1
LD M8000
CMP D8031 K960 M0
MPS
AND M0
SET M10
MPP
CMP D8032 K890 M20
AND M20
SET M30
LD M10
OUT T0 K300
MOV K1 D0
AND T0
MOV K0 D0
RST M10
LD M30
OUT T1 K300
MOV K1 D1
AND T1
MOV K0 D1
RST M30
END

把上面的地址、主题、引脚替换成你项目里的即可。

ZCP — 区间比较(FNC 11) ​

项目说明
格式ZCP S1 S2 S D
16/32位ZCP / DZCP

比较 S 是否在 [S1, S2] 区间内,结果输出到 D、D+1、D+2。S1 必须小于 S2,S1 ≥ S2 时报错误 6582(两值相等也不行)。

实用例程 ​

梯形图:与下方指令表同一段程序

LD M8000
MOV D8031 D0
MOV D8032 D2
END

把上面的地址、主题、引脚替换成你项目里的即可。

MOV — 传送(FNC 12) ​

项目说明
格式MOV S D
16/32位MOV / DMOV
MOV K100 D0          ; D0 = 100
MOV D0 D10           ; D10 = D0
DMOV K123456 D100    ; D100-D101 = 123456

MOV 一次搬一个;BMOV 一次搬一片,先读缓存再写所以重叠也安全

SMOV — 移位传送(FNC 13) ​

项目说明
格式SMOV S m1 m2 D n

以 4 位(digit)为单位移位传送。

SMOV  D0  K4  K1  D10  K2     ; D0 的第 4~3 位 → D10 的第 1~2 位,D10 其余位不动

按 BCD 位搬数据:S 的第 m1 位起、共 n 个 BCD 位,搬到 D 的第 m2 位起, D 上没被覆盖的位保持原值。位号从最高位往低数:1 = 千位、4 = 个位。

  • m1、m2、n 都只接受 1~4:越界分别报 6582(m1)、6583(m2)、6585(n)
  • 默认按 BCD 处理(内部会先转 BCD 再搬)。M8168 为 ON 时跳过 BCD 转换,直接按 16 位二进制搬位

CML — 取反传送(FNC 14) ​

项目说明
格式CML S D
16/32位CML / DCML
CML  D0  D10        ; D0 按位取反 → D10

和 MOV 一样是单点传送,只多了一步按位取反:D0 = H1234 时 D10 得到 HEDCB。 32 位版 DCML 的源和目标各占两个数据寄存器。

BMOV — 成批传送(FNC 15) ​

项目说明
格式BMOV S D n
BMOV D0 D100 K10    ; D0~D9 → D100~D109

BMOV 先读后写,M8024 为 ON 时方向反转,n>512 静默不动作

FMOV — 多点传送(FNC 16) ​

项目说明
格式FMOV S D n
16/32位FMOV / DFMOV
FMOV K0 D100 K20    ; D100~D119 全部清零

XCH — 交换(FNC 17) ​

项目说明
格式XCH D1 D2
16/32位XCH / DXCH

应使用脉冲执行 XCHP,否则每个扫描周期都交换一次。

LDP  X0
XCH  D0  D10        ; 只在 X0 上升沿那一周期交换

一次交换两个软元件的内容。注意它只要通条件成立,每个扫描周期都交换一次 —— 两个数会来回倒,所以实际几乎都用脉冲执行形式(XCHP,或像上面那样自己套 LDP)。

BCD — BCD 转换(FNC 18) ​

项目说明
格式BCD S D
16/32位BCD / DBCD

二进制 → BCD 码。常用于 BCD 数码管输出。

BCD  D0  D10        ; D0 = 1234(二进制)→ D10 = H1234(BCD)

二进制 → BCD 码。驱动 BCD 数码管、把数送进只认 BCD 的老设备时用。 16 位版最大表达 9999,超出的值请直接用 32 位版 DBCD(4 位以上 BCD 用它)。

BCD / BIN 的四个 4 位段对应:个位在 bit0~3、千位在 bit12~15

BIN — BIN 转换(FNC 19) ​

项目说明
格式BIN S D
16/32位BIN / DBIN

BCD 码 → 二进制。常用于读取 BCD 拨码开关。


BIN  D0  D10        ; D0 里是 BCD 的 1234 → D10 得到二进制 1234

BCD 码 → 二进制。接 BCD 拨码开关、BCD 设定器这类输入时用。16 位版表达范围是 4 位 BCD(0~9999), 位数更多请改用 32 位版 DBIN。源里出现不是 BCD 的 4 位(A~F)时结果没有意义, 别拿它去转普通二进制数 —— 那种情况直接用 MOV。

BIN 遇到非法 BCD 段不写 D;BCD 超限报了错仍写 D

触点比较指令 (LD/AND/OR 比较)(FNC 224-246) ​

触点比较指令把「比较运算」直接做成一个触点,比较结果为真时触点导通。相比 CMP/ZCP 需要占用位元件再串并联,触点比较指令更直观、更省元件。共 18 条,分为 LD(母线开始)、AND(串联)、OR(并联)三组,每组 6 种比较关系。

  • LD 类:直接与左母线连接,作为一行的起始触点。
  • AND 类:与前面的触点串联(逻辑与)。
  • OR 类:与前面的触点并联(逻辑或)。

所有触点比较指令均无 P(脉冲)修饰,但支持 D(32 位)修饰,例如 DLD>、DAND<=。

指令FNC组别导通条件
LD=FNC224母线起始S1 = S2
LD>FNC225母线起始S1 > S2
LD<FNC226母线起始S1 < S2
LD<>FNC228母线起始S1 ≠ S2
LD<=FNC229母线起始S1 ≤ S2
LD>=FNC230母线起始S1 ≥ S2
AND=FNC232串联S1 = S2
AND>FNC233串联S1 > S2
AND<FNC234串联S1 < S2
AND<>FNC236串联S1 ≠ S2
AND<=FNC237串联S1 ≤ S2
AND>=FNC238串联S1 ≥ S2
OR=FNC240并联S1 = S2
OR>FNC241并联S1 > S2
OR<FNC242并联S1 < S2
OR<>FNC244并联S1 ≠ S2
OR<=FNC245并联S1 ≤ S2
OR>=FNC246并联S1 ≥ S2

应用示例:当 D0 的值 ≥ 100 时驱动 Y0。

梯形图:与下方指令表同一段程序

LD>= D0 K100     ; D0 >= 100 时该触点导通
OUT  Y0          ; 驱动 Y0

串联示例:D0 ≥ 100 且 D2 < 50 时驱动 Y1。

梯形图:与下方指令表同一段程序

LD>=  D0 K100    ; 母线起始比较
AND<  D2 K50     ; 串联比较
OUT   Y1

并联示例:D0 = 0 或 D0 > 1000 时驱动 Y2。

梯形图:与下方指令表同一段程序

LD=  D0 K0       ; 母线起始比较
OR>  D0 K1000    ; 并联比较
OUT  Y2

32 位比较请使用 D 修饰,例如 DLD>= D0 K100000,此时 S1 占用 D0、D1 两个寄存器。


各指令详细说明 ​

DMOV — 32 位数据传送,占用 D 与 D+1 ​

项目说明
格式DMOV 源 S, 目标 D
操作数源 S, 目标 D
示例DMOV D0 D10
步数9
FNCFNC 12 (D)
DMOV D0 D10

DMOV(32 位版):一次搬一个双字,源和目标各占 2 个字

DCML — 32 位取反传送 ​

项目说明
格式DCML 源 S, 目标 D
操作数源 S, 目标 D
示例DCML D0 D10
步数9
FNCFNC 14 (D)
DCML D0 D10

DXCH — 32 位交换 ​

项目说明
格式DXCH S, D
操作数S, D
示例DXCH D0 D2
步数9
FNCFNC 17 (D)
DXCH D0 D2

DFMOV — 32 位多点传送(将 S 起的 n 个双字成批复制到 D 起) ​

项目说明
格式DFMOV S(源), D(目标), n(点数)
操作数S(源), D(目标), n(点数)
示例DFMOV D0 D10 K5
步数13
FNCFNC 16 (D)
DFMOV D0 D10 K5

DCMP — 32 位数据比较 ​

项目说明
格式DCMP S1, S2, 结果 D
操作数S1, S2, 结果 D
示例DCMP D0 D10 M0
步数13
FNCFNC 10 (D)
DCMP D0 D10 M0

DZCP — 32 位区间比较 ​

项目说明
格式DZCP 下限 S1, 上限 S2, 值 S3, 结果 D
操作数下限 S1, 上限 S2, 值 S3, 结果 D
示例DZCP D0 D2 D4 M0
步数17
FNCFNC 11 (D)
DZCP D0 D2 D4 M0

DBIN — 32 位 BCD → BIN ​

项目说明
格式DBIN 源 S, 目标 D
操作数源 S, 目标 D
示例DBIN D0 D10
步数9
FNCFNC 19 (D)
DBIN D0 D10

DBIN(32 位版):8 个 BCD 位段,源与目标各占 2 个字

DBCD — 32 位 BIN → BCD ​

项目说明
格式DBCD 源 S, 目标 D
操作数源 S, 目标 D
示例DBCD D0 D10
步数9
FNCFNC 18 (D)
DBCD D0 D10

DBCD(32 位版):二进制转 8 位 BCD,结果占 2 个字

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