Skip to content

数据处理与时钟(FNC 140-189) ​

怎么看「实现状态」这一列

LPPLC 兼容 FX3U 指令集,但不是每一条都做了实现。本章的表格里凡标注 运行时无动作 的指令,设备只会跳过操作数、不做任何动作,也不报错 —— 写了不会红字报错,但也不会有任何效果,请不要用它。标注 未收录 的指令写进程序会被判为非法指令,报错 6506。

数据块运算(FNC 140-149) ​

FNC助记符DP操作数功能状态
140WSUM✔✔S D n字块累加和实现
141WTOB✘✔S D n字拆成字节实现
142BTOW✘✔S D n字节合成字实现
143UNI✘✔S D n4 位组合(n=1~4)实现
144DIS✘✔S D n4 位分离(n=0~4)实现
147SWAP✔✔S/D高低字节交换实现
149SORT2✔✘S m1 m2 D n数据表排序 2实现
WSUM  D0  D100  K10      ; D0~D9 求和 → D100(32位结果占 D100-D101)
WTOB  D0  D10   K4       ; 从 D0 起拆 4 个字节 → D10 起(字→字节)
DIS   D0  D10   K4       ; D0 的 4 个半字节 → D10~D13
UNI   D10 D0    K4       ; 反过来
SWAP  D0                 ; D0 高低字节互换
  • UNI / DIS 的 n 超出 4 报错 6706
  • SORT2 行数 1~32(超范围 6782)、列数 1~6(6783)、排序列号 1~列数(6785);用 M8165 选升序/降序,排序完成置 M8029

定位与伺服(FNC 150-159) ​

FNC助记符DP状态
151DVIT仅 D✘运行时无动作
152DTBL仅 D✘运行时无动作
155ABS✔✘运行时无动作
156ZRN✔✘实现(仅 ESP32 版)
157PLSV✔✘实现(仅 ESP32 版)
158DRVI✔✘实现(仅 ESP32 版)
159DRVA✔✘实现(仅 ESP32 版)

定位指令只有 ESP32 版有

ZRN / DSZR / PLSV / DRVI / DRVA 在 ESP32 版上是用 LEDC 硬件 PWM 实现的,最高约 100kHz,同时最多 8 路高速输出。Linux / 4G(RDA8910)版这些指令整段被注释掉,不可用。

DVIT(中断定位)、DTBL(表定位)、ABS(绝对位置当前值读取)这三条 FX3U 里配合伺服用的指令,在本机运行时不做任何动作。要做绝对定位请直接用 DRVA;DVIT / DTBL 本机型没有对应的定位通道,本站不给写法,需要请与厂家确认。

时钟运算(FNC 160-169) ​

FNC助记符DP操作数功能状态
160TCMP✘✔时 分 秒 S D时钟数据比较实现
161TZCP✘✔S1 S2 S D时钟区间比较实现
162TADD✘✔S1 S2 D时钟数据加实现
163TSUB✘✔S1 S2 D时钟数据减实现
164HTOS✔✔S D时分秒→秒实现
165STOH✔✔S D秒→时分秒实现
166TRD✘✔D读实时时钟(7 字)实现
167TWR✘✔S写实时时钟(6 字)实现
169HOUR✔✘S D1 D2小时计(运行累时)实现
TRD   D0                 ; 读时钟:D0=年 D1=月 D2=日 D3=时 D4=分 D5=秒 D6=星期
TCMP  K12 K30 K0 D0 M0   ; 当前时间与 12:30:00 比较 → M0/M1/M2
HOUR  K100 D200 M0       ; 累计运行 100 小时后 M0 置位

TZCP — 时钟区间比较:三个时间各占 3 个连续字(时/分/秒),结果占连续 3 个位。

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

LD  M8000
TRD D10                ; 先把当前时间读进 D10~D16(D13=时 D14=分 D15=秒)
MOV K8  D20            ; 下限 08:00:00
MOV K0  D21
MOV K0  D22
MOV K18 D30            ; 上限 18:00:00
MOV K0  D31
MOV K0  D32
END

LD  M8000
TZCP D20 D30 D13 M3    ; 拿 D13/D14/D15 这个时间和 D20~D22、D30~D32 两个端点比
                       ; 结果:M3=早于下限  M4=在区间内(含端点)  M5=晚于上限
  • HOUR 累计到 32767 小时后停在最大值,不再往上加(这点和三菱到设定值继续计不同)
  • LPPLC 的实时时钟由内部 RTC 芯片维持,掉电走后备电,走时精度以硬件为准

其他实用指令(FNC 170-189) ​

FNC助记符DP操作数功能状态
170GRY✔✔S D二进制→格雷码实现
171GBIN✔✔S D格雷码→二进制实现
176RD3A✘✔偏移 个数 D读模拟量缓冲区实现(语义改写)
177WR3A✘✔偏移 个数 S写模拟量缓冲区实现(语义改写)
180EXTR✔✔S SD1 SD2 SD3多功能指令(模式由 D8126 决定)实现
182COMRD✘✔—读软元件注释运行时无动作
184RND✘✔D随机数实现
186DUTY✘✔n1 n2 D定时脉冲实现
188CRC✘✔S D nCRC 校验实现
197DHCMOV仅 D✔—高速计数当前值传送运行时无动作

RD3A / WR3A 不是三菱的模拟量模块协议

FX3U 的 RD3A / WR3A 是读写 FX0N-3A 特殊模块。LPPLC 把它改成了直接读写本机内部的模拟量缓冲区 —— RD3A 偏移 个数 D 读 AI,WR3A 偏移 个数 S 写 AO,偏移范围 0~100,超范围报 6581/6582。要用本机 AI/AO,用这两条指令,别按三菱手册的接线理解。

  • RND 用 ESP32 硬件随机数(esp_random),值域 0~32767,不需要三菱那样先设种子
  • EXTR 是 LPPLC 自己扩展得最多的一条指令,用来配置串口参数、MODBUS 主站、云服务等,具体功能由 D8126 的值决定,同一条 EXTR 在不同 D8126 下做完全不同的事,见 6.3 特殊软元件详细说明。D8126 没设值就执行 EXTR 会报 6599。能直接照抄的整段程序见 B7. MODBUS 串口通讯例程
  • DUTY 的输出标志寄存器固定在 D8330~D8334,超出报 6783
  • CRC 长度上限 1024(超了静默不算),用 M8161 选 8 位 / 16 位模式
  • COMRD(读注释)和 DHCMOV(高速计数当前值传送)在本机运行时不做任何动作,不要用;要读高速计数器当前值,直接读对应的 C 寄存器(如 DMOV C235 D0)

各指令详细说明 ​

WSUM — 字块累加和(结果占 2 个字) ​

项目说明
格式WSUM S(块首址), D(结果首址), n(加几个字)
操作数S, D, n
示例WSUM D0 D100 K10
步数7
FNCFNC 140

把 D0~D9 这 10 个字相加。结果是 32 位的,占 D100(低字)和 D101(高字)两格 —— 只读 D100 会在和超过 32767 时得到错的数,这是这条最容易出错的地方。 n 填 0 时什么都不做,也不报错。

WSUM  D0  D100  K10     ; D0~D9 求和 → D100(低字) + D101(高字)

DWSUM — 双字块累加和(结果占 4 个字) ​

项目说明
格式DWSUM S(块首址), D(结果首址), n(加几个双字)
操作数S, D, n(三个操作数都按 32 位取,各占 2 个字)
示例DWSUM D0 D100 K10
步数13
FNCFNC 140 (D)

32 位版:加的是 n 个 32 位数(源区实际占 2n 个字,D0~D19),结果是一个 64 位和, 占 D100~D103 四格。用不到 64 位时别为了省事写 DWSUM,源区会多吃掉一倍的字。

UNI — 4 位合并成 1 个字 ​

项目说明
格式UNI S(来源首址), D(结果), n(合并几个,1~4)
操作数S, D, n
示例UNI D10 D0 K4
步数7
FNCFNC 143

取 S 起始的 n 个字,每个字的低 4 位,依次拼进 D 的第 1~4 个 4 位段。 是 DIS 的反向操作,配合 BCD/BIN 时用来把散在多个寄存器里的一个数拼回去。

UNI   D10 D0  K4        ; D10/D11/D12/D13 的低 4 位 → D0 的 4 个 4 位段
  • n 超出 4 → 置 M8067、D8067 = 6706,本次不合并
  • n 填 0 → 什么都不做,也不报错
  • 没有 32 位形态(不存在 DUNI)

DIS — 1 个字拆成 4 位 ​

项目说明
格式DIS S(要拆的数), D(存放首址), n(拆几个,0~4)
操作数S, D, n
示例DIS D0 D10 K4
步数7
FNCFNC 144

把 S 这个 16 位数的 4 个 4 位段分别写到 D、D+1、D+2、D+3(每格只放低 4 位)。 n 决定拆几段:K2 只写 D 和 D+1,K0 什么都不做。约束与 UNI 相同 (n>4 报 6706,没有 32 位形态)。

DIS   D0  D10  K4       ; D0 的 4 个 4 位 → D10~D13

SWAP — 高低字节互换(16 位) ​

项目说明
格式SWAP 操作数 D
操作数操作数 D
示例SWAP D0
步数3
FNCFNC 147
SWAP D0

DRVI — 相对定位(增量方式驱动)(32 位版 DDRVI 见本页末尾「面板里搜得到、但只能看说明不能拖入的指令」那张表) ​

项目说明
格式DRVI 脉冲数 S1, 频率 S2, 脉冲输出 Y, 方向输出
操作数脉冲数 S1, 频率 S2, 脉冲输出 Y, 方向输出
示例DRVI K10000 K5000 Y0 Y4
步数9
FNCFNC 158
DRVI K10000 K5000 Y0 Y4

DRVA — 绝对定位(绝对方式驱动)(32 位版 DDRVA 见本页末尾「面板里搜得到、但只能看说明不能拖入的指令」那张表) ​

项目说明
格式DRVA 目标位置 S1, 频率 S2, 脉冲输出 Y, 方向输出
操作数目标位置 S1, 频率 S2, 脉冲输出 Y, 方向输出
示例DRVA K20000 K5000 Y0 Y4
步数9
FNCFNC 159
DRVA K20000 K5000 Y0 Y4

ZRN — 回到原点位置(32 位版 DZRN 见本页末尾「面板里搜得到、但只能看说明不能拖入的指令」那张表) ​

项目说明
格式ZRN 回归速度 S1, 爬行速度 S2, 近点输入 S3, 脉冲输出 Y
操作数回归速度 S1, 爬行速度 S2, 近点输入 S3, 脉冲输出 Y
示例ZRN K5000 K500 X0 Y0
步数9
FNCFNC 156
ZRN K5000 K500 X0 Y0

PLSV — 输出频率可随时更改的脉冲(32 位版 DPLSV 见本页末尾「面板里搜得到、但只能看说明不能拖入的指令」那张表) ​

项目说明
格式PLSV 速度 S1, 脉冲输出 Y, 方向输出
操作数速度 S1, 脉冲输出 Y, 方向输出
示例PLSV K3000 Y0 Y4
步数7
FNCFNC 157
PLSV K3000 Y0 Y4

DSZR — 带 DOG 搜索的原点回归 ​

项目说明
格式DSZR 近点 DOG 输入 S1, 零点 Z 相输入 S2, 脉冲输出 Y, 方向输出
操作数近点 DOG 输入 S1, 零点 Z 相输入 S2, 脉冲输出 Y, 方向输出
示例DSZR X0 X1 Y0 Y4
步数9
FNCFNC 150
DSZR X0 X1 Y0 Y4

TRD — 读取实时时钟数据 ​

项目说明
格式TRD 目标 D
操作数目标 D
示例TRD D0
步数3
FNCFNC 166
TRD D0

TRD 读时钟:比 TWR 多写一格星期,两片区域别按同一长度规划

TWR — 写入实时时钟数据 ​

项目说明
格式TWR 源 S
操作数源 S
示例TWR D0
步数3
FNCFNC 167
TWR D0

TWR 写时钟:一个操作数读 6 个字,非法值整条丢弃并置 M8019

TCMP — 时钟数据比较:比较 时S1/分S2/秒S3 与 时间数据S(3字),结果输出到 D 起始的 3 位(>/=/<) ​

项目说明
格式TCMP 时S1, 分S2, 秒S3, 时间数据S(3字), 结果D(3位)
操作数时S1, 分S2, 秒S3, 时间数据S(3字), 结果D(3位)
示例TCMP K11 K10 K20 D0 M0
步数11
FNCFNC 160
TCMP K11 K10 K20 D0 M0

TZCP — 时钟区间比较:判断 比较值S3(3字) 是否在 [下限S1, 上限S2] 区间内,结果占 3 位 ​

项目说明
格式TZCP 下限S1(3字), 上限S2(3字), 比较值S3(3字), 结果D(3位)
操作数下限S1(3字), 上限S2(3字), 比较值S3(3字), 结果D(3位)
示例TZCP D20 D30 D0 M3
步数9
FNCFNC 161
TZCP D20 D30 D0 M3

TADD — 时钟数据加法:S1(3字 时/分/秒) + S2(3字) → D(3字) ​

项目说明
格式TADD S1(3字), S2(3字), D(3字)
操作数S1(3字), S2(3字), D(3字)
示例TADD D12 D22 D32
步数7
FNCFNC 162
TADD D12 D22 D32

TSUB — 时钟数据减法:S1(3字) − S2(3字) → D(3字) ​

项目说明
格式TSUB S1(3字), S2(3字), D(3字)
操作数S1(3字), S2(3字), D(3字)
示例TSUB D12 D22 D32
步数7
FNCFNC 163
TSUB D12 D22 D32

HOUR — 小时计(运行累时):累计条件为 ON 的时间,到达 S 小时后置位 D2 ​

项目说明
格式HOUR 目标小时数 S, 当前值 D1(字), 输出 D2(位)
操作数目标小时数 S, 当前值 D1(字), 输出 D2(位)
示例HOUR K100 D200 M0
步数7※
FNCFNC 169
HOUR K100 D200 M0

DHOUR — 32 位小时计(运行累时) ​

项目说明
格式DHOUR 目标小时数 S, 当前值 D1(双字), 输出 D2(位)
操作数目标小时数 S, 当前值 D1(双字), 输出 D2(位)
示例DHOUR K100 D200 M0
步数13※
FNCFNC 169 (D)
DHOUR K100 D200 M0

HTOS — 时:分:秒 → 秒 转换(S 占3字 → D=秒数) ​

项目说明
格式HTOS 源 S(3字), 目标 D
操作数源 S(3字), 目标 D
示例HTOS D0 D10
步数5
FNCFNC 164
HTOS D0 D10

STOH — 秒 → 时:分:秒 转换(S=秒数 → D 占3字) ​

项目说明
格式STOH 源 S, 目标 D(3字)
操作数源 S, 目标 D(3字)
示例STOH D0 D10
步数5
FNCFNC 165
STOH D0 D10

RD3A — 读本机板载 AI 通道值(非外部模块)。操作数顺序:通道, 数据个数, 存入地址 ​

项目说明
格式RD3A 偏移量 S(=AI 通道), 数据个数 n, 存入 D
操作数偏移量 S(=AI 通道), 数据个数 n, 存入 D
示例RD3A K0 K1 D100
步数7
FNCFNC 176
RD3A K0 K1 D100

RD3A 读本机模拟量缓冲区:偏移、个数、软元件三个操作数

WR3A — 写本机板载 AO 通道值(非外部模块)。操作数顺序:通道, 数据个数, 源地址 ​

项目说明
格式WR3A 偏移量 S(=AO 通道), 数据个数 n, 源 D
操作数偏移量 S(=AO 通道), 数据个数 n, 源 D
示例WR3A K0 K1 D100
步数7
FNCFNC 177
WR3A K0 K1 D100

WR3A 写本机模拟量缓冲区:偏移 + 个数 超范围才报错,AI 实际只有 85 格

COMRD — 读软元件注释 ​

项目说明
格式COMRD S(软元件), D(目标)
操作数S(软元件), D(目标)
示例COMRD D0 D10
步数5
FNCFNC 182
COMRD D0 D10

CRC — 计算 CRC 校验码(n 字节数据) ​

项目说明
格式CRC S(源首址), n(长度), D(结果)
操作数S(源首址), n(长度), D(结果)
示例CRC D0 K10 D20
步数7
FNCFNC 188
CRC D0 K10 D20

ABS — 绝对位置编码器当前值读取 ​

项目说明
格式ABS S(ABS 数据输入起始,占 3 点), D1(输出信号起始,占 3 点), D2(保存 32 位当前值)
操作数S(ABS 数据输入起始,占 3 点), D1(输出信号起始,占 3 点), D2(保存 32 位当前值)
示例ABS X0 Y0 D10
步数7
FNCFNC 155
ABS X0 Y0 D10

BTOW — 位→字:n 个位元件合成 1 个字 ​

项目说明
格式BTOW S(位首址), n(位数), D(字)
操作数S(位首址), n(位数), D(字)
示例BTOW M0 K4 D0
步数7
FNCFNC 142
BTOW M0 K4 D0

WTOB — 字→字节:1 个字拆成 n 个字节 ​

项目说明
格式WTOB S(字), D(目标起始), n(个数)
操作数S(字), D(目标起始), n(个数)
示例WTOB D0 D10 K4
步数7
FNCFNC 141
WTOB D0 D10 K4

GRY — 二进制数转换成格雷码 ​

项目说明
格式GRY S, D
操作数S, D
示例GRY D0 D2
步数5
FNCFNC 170
GRY D0 D2

GBIN — 格雷码转换成二进制数 ​

项目说明
格式GBIN S, D
操作数S, D
示例GBIN D0 D2
步数5
FNCFNC 171
GBIN D0 D2

DVIT — 中断定位(遇到中断输入才开始定位) ​

项目说明
格式DVIT S1(中断后的输出脉冲数), S2(输出脉冲频率), D1(脉冲输出 Y), D2(方向信号输出)
操作数S1(中断后的输出脉冲数), S2(输出脉冲频率), D1(脉冲输出 Y), D2(方向信号输出)
示例DVIT K1000 K5000 Y0 Y4
步数9
FNCFNC 151

⚠️ 本机型运行时这条不做任何动作,写法仅供对照三菱程序。替代做法用 DRVI / DRVA。

RND — 随机数生成(把 D 变成一个随机数) ​

项目说明
格式RND D(结果)
操作数D(结果)
示例RND D0
步数3
FNCFNC 184
RND D0

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