Skip to content

浮点数运算(FNC 110-137) ​

浮点数运算指令使用 IEEE 754 单精度浮点格式,每个浮点数占 2 个连续 D 寄存器。

浮点数占 2 个连续 D 寄存器:IEEE-754 位分解与整数/浮点转换流水线

浮点比较与传送 ​

实用例程 ​

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

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

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

DECMP — 浮点比较(FNC 110) ​

项目说明
格式DECMP S1 S2 D

比较两个浮点数 S1 和 S2,结果输出到 D、D+1、D+2(同 CMP 规则)。

FLT D0 D10            ; 先将整数转为浮点
FLT D2 D12
DECMP D10 D12 M0       ; 浮点比较 → M0/M1/M2

DEZCP — 浮点区间比较(FNC 111) ​

项目说明
格式DEZCP S1 S2 S D

浮点数 S 与区间 [S1, S2] 比较,结果输出到 D、D+1、D+2。

DEZCP  D0  D2  D4  M0     ; D4 这个浮点数落在 [D0,D2] 区间吗 → M0/M1/M2

浮点版的区间比较:D0/D2 是下限和上限,D4 是被判的浮点数,结果占 M0~M2 三个位 (分别对应 小于下限 / 在区间内 / 大于上限)。 四个操作数都是浮点,每个占两个数据寄存器 —— D0 实际用掉 D0+D1,相邻那格不能再放别的数据。

DEMOV — 浮点传送(FNC 112) ​

项目说明
格式DEMOV S D

浮点数传送,将 S 起始的 2 个寄存器浮点值传送到 D。

DEMOV D10 D20          ; D10-D11 → D20-D21(浮点传送)

浮点转换 ​

DEBCD — 浮点转 BCD 浮点(FNC 118) ​

项目说明
格式DEBCD S D

将二进制浮点数 S 转换为十进制浮点数存入 D。

DEBCD  D0  D2        ; 二进制浮点 → 十进制浮点(BCD 形态)

浮点版的 BCD。用在要把浮点数按"一位一位"送进只认 BCD 的显示表头/老设备时。 反方向是 DEBIN。

DEBIN — BCD 浮点转二进制浮点(FNC 119) ​

项目说明
格式DEBIN S D

将十进制浮点数 S 转换为二进制浮点数存入 D。

DEBIN  D0  D2        ; 十进制浮点(BCD 形态)→ 二进制浮点

DEBCD 的反向。读进来的 BCD 形态浮点要先 DEBIN 转回二进制浮点,才能交给 DEADD 这类运算指令, 直接拿去加会得到完全不对的数。

浮点十进制转二进制 DEBIN:两个操作数,各占 2 个字

INT — 浮点取整(FNC 129) ​

项目说明
格式INT S D

将浮点数 S 取整后存入 D(16 位整数)。

INT D10 D0            ; D10-D11 浮点取整 → D0

INT 浮点取整是截掉小数,负数往零那一侧退;结果只占 1 个字

DENEG — 浮点取负(FNC 128) ​

项目说明
格式DENEG D

只有 32 位形态、只有 1 个操作数:读出 D 起的双字浮点值、乘 -1 后写回同一地址(原位变号)。

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

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

LD  M8000
DENEG D10             ; D10-D11 的浮点数取反符号,仍写回 D10-D11

DESTR — 浮点转字符串(FNC 116) ​

项目说明
格式DESTR S1 S2 D

把浮点数按指定格式转成字符串。三个操作数各管一件事,S2 要占连续 3 个字:

操作数含义
S1要转换的浮点数(占 S1 与 S1+1 两个字)
S2输出方式:0 = 小数形式,非 0 = 指数形式
S2+1总位数
S2+2小数位数
D字符串存放的起始地址

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

LD  M8000
FLT D0 D10           ; 先把 D0 的整数转成浮点放 D10-D11
MOV K0  D20          ; 方式:0 = 小数形式
MOV K8  D21          ; 总位数 8
MOV K2  D22          ; 小数位 2
DESTR D10 D20 D100    ; 按 %8.2f 格式化 → 字符串存到 D100 起
END

别和 STR 混用

STR(FNC 200)取的是 16 位整数源、格式块只读 2 个字(总位数、小数位数); DESTR 是浮点源、格式块读 3 个字(多一个"小数/指数形式"方式位)。 把浮点值交给 STR 转,它只会按 16 位整数读低字 —— 编得过、转出来的数字却是错的,这类故障最难查。

DEVAL — 字符串转浮点(FNC 117) ​

项目说明
格式DEVAL S D

把字符串转成浮点数,结果写入 D 与 D+1。只有 2 个操作数(少写/多写都在编译期报错)。

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

LD  M8000
DEVAL D100 D10        ; D100 起的字符串 → 浮点写入 D10-D11
END

浮点四则运算 ​

FNC指令功能
120DEADD S1 S2 DS1 + S2 → D(浮点)
121DESUB S1 S2 DS1 - S2 → D(浮点)
122DEMUL S1 S2 DS1 × S2 → D(浮点)
123DEDIV S1 S2 DS1 ÷ S2 → D(浮点),除数为0出错
FLT D0 D10            ; D0 整数 → D10-D11 浮点
FLT D2 D12            ; D2 整数 → D12-D13 浮点
DEADD D10 D12 D20      ; D20-D21 = D10 + D12(浮点加)
DEMUL D10 D12 D22      ; D22-D23 = D10 × D12(浮点乘)

实用例程 ​

DMOV D25 D27
DEADD D26 E0 D27
AND M8029
RST M45
LD= K7 D150
SET M40
SET M41
SET M42
SET M43
SET M44
SET M45
MOV K0 D150
LD M8000
MOV K30 D80
FLT D80 D82
DECMP D22 D82 M18
LDI M10
ANI M11
INV
OUT M16
LD M8000
MOV K30 D84
FLT D84 D86
DECMP D2 D86 M10
LD M8000
MOV K30 D88
FLT D88 D90
DECMP D2 D90 M11

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

浮点数学运算 ​

FNC指令功能
124DEXP S De^S → D(浮点)
125DLOGE S Dln(S) → D(浮点)
126DLOG10 S Dlog₁₀(S) → D(浮点)
127DESQR S D浮点开方,S<0 出错
136DRAD S D角度 → 弧度
137DDEG S D弧度 → 角度

浮点三角函数 ​

FNC指令功能
130DSIN S D正弦,S 为弧度
131DCOS S D余弦,S 为弧度
132DTAN S D正切,S 为弧度
133DASIN S D反正弦,-1≦S≦1
134DACOS S D反余弦,-1≦S≦1
135DATAN S D反正切

本机浮点数一律占两个数据寄存器,所以这一族只有 32 位形态,三菱给的名字就是上表这一列(DSIN、DEADD…),不带 D。 老程序里能看到 DSIN、DEADD 这种前面多一个 D 的写法,编码器把它当成同一条指令接受、占的步数完全一样; 但一条指令只有一个名字,写程序、让 AI 生成程序都请照上表这一列敲,别两套混着用。FNC 号按三菱 FX3U 的记法给出。

注意:三角函数输入为弧度,角度需先转换:弧度 = 角度 × π / 180。

FLT D0 D10            ; 角度值转浮点
DEMUL D10 D20 D30      ; D20 存放 π/180 的浮点值
DSIN D30 D40           ; sin(弧度) → D40-D41

← 上一章:通信指令 | 下一章:特殊辅助继电器一览 →

各指令详细说明 ​

FLT — 整数转换成二进制浮点数 ​

项目说明
格式FLT 源 S, 目标 D
操作数源 S, 目标 D
示例FLT D0 D10
步数5
FNCFNC 49
FLT D0 D10

DFLT — 32 位整数 → 浮点数 ​

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

DSIN — 二进制浮点数 Sin 运算 ​

项目说明
格式DSIN 源 S, 目标 D
操作数源 S, 目标 D
示例DSIN D0 D2
步数9
FNCFNC 130
DSIN D0 D2

DCOS — 二进制浮点数 Cos 运算 ​

项目说明
格式DCOS 源 S, 目标 D
操作数源 S, 目标 D
示例DCOS D0 D2
步数9
FNCFNC 131
DCOS D0 D2

DTAN — 二进制浮点数 Tan 运算 ​

项目说明
格式DTAN 源 S, 目标 D
操作数源 S, 目标 D
示例DTAN D0 D2
步数9
FNCFNC 132
DTAN D0 D2

DASIN — 浮点反正弦 ​

项目说明
格式DASIN 源 S, 目标 D
操作数源 S, 目标 D
示例DASIN D0 D2
步数9
FNCFNC 133
DASIN D0 D2

DACOS — 浮点反余弦 ​

项目说明
格式DACOS 源 S, 目标 D
操作数源 S, 目标 D
示例DACOS D0 D2
步数9
FNCFNC 134
DACOS D0 D2

DATAN — 浮点反正切 ​

项目说明
格式DATAN 源 S, 目标 D
操作数源 S, 目标 D
示例DATAN D0 D2
步数9
FNCFNC 135
DATAN D0 D2

DEXP — 浮点数 e 的指数运算 ​

项目说明
格式DEXP 源 S, 目标 D
操作数源 S, 目标 D
示例DEXP D0 D2
步数9
FNCFNC 124
DEXP D0 D2

DLOG10 — 浮点数常用对数(以 10 为底) ​

项目说明
格式DLOG10 源 S, 目标 D
操作数源 S, 目标 D
示例DLOG10 D0 D2
步数9
FNCFNC 126
DLOG10 D0 D2

DLOGE — 浮点数自然对数(以 e 为底) ​

项目说明
格式DLOGE 源 S, 目标 D
操作数源 S, 目标 D
示例DLOGE D0 D2
步数9
FNCFNC 125
DLOGE D0 D2

DRAD — 角度 → 弧度(浮点) ​

项目说明
格式DRAD 源 S(浮点角度), 目标 D(浮点弧度)
操作数源 S, 目标 D(各占 2 个数据寄存器)
示例DRAD D0 D2
步数9
FNCFNC 136

D = S × π / 180。给 DSIN/DCOS/DTAN 喂角度值之前先过这一条,否则三角函数按弧度算, 90° 会被当成 90 弧度,结果完全不对。

DDEG — 弧度 → 角度(浮点) ​

项目说明
格式DDEG 源 S(浮点弧度), 目标 D(浮点角度)
操作数源 S, 目标 D(各占 2 个数据寄存器)
示例DDEG D0 D2
步数9
FNCFNC 137

D = S × 180 / π。DASIN/DACOS/DATAN 出来的是弧度,要显示成度数就接这一条。

这两条也只有 32 位形态

本机浮点数占两个数据寄存器,所以 DRAD/DDEG 本来就是 32 位的,前面不加 D (老资料/手册正文里的 RAD、DEG 是不带 D 的行文短名,本站不并列 —— 正名是 DRAD、DDEG)。 运算用的是单精度浮点、π 取 3.1415926,来回转一次(DRAD 后面再接 DDEG)结果不会正好等于原值, 末几位总有出入。所以别拿浮点结果直接判等(AND= 很容易判不上),要比较请先用 INT 取整, 或者判一个允许的偏差范围。

DEADD — 二进制浮点数加法 ​

项目说明
格式DEADD S1, S2, D
操作数S1, S2, D
示例DEADD D0 D2 D4
步数13
FNCFNC 120
DEADD D0 D2 D4

浮点加法 DEADD:三个操作数各占 2 个字,除零溢出不报错

DESUB — 二进制浮点数减法 ​

项目说明
格式DESUB S1, S2, D
操作数S1, S2, D
示例DESUB D0 D2 D4
步数13
FNCFNC 121
DESUB D0 D2 D4

浮点减法 DESUB:结果写 D 起的两个字

DEMUL — 二进制浮点数乘法 ​

项目说明
格式DEMUL S1, S2, D
操作数S1, S2, D
示例DEMUL D0 D2 D4
步数13
FNCFNC 122
DEMUL D0 D2 D4

浮点乘法 DEMUL:三个操作数各占 2 个字

DEDIV — 二进制浮点数除法 ​

项目说明
格式DEDIV S1, S2, D
操作数S1, S2, D
示例DEDIV D0 D2 D4
步数13
FNCFNC 123
DEDIV D0 D2 D4

浮点除法 DEDIV:除零不报错,结果是 inf 或 nan

DESQR — 二进制浮点数开平方 ​

项目说明
格式DESQR S, D
操作数S, D
示例DESQR D0 D2
步数9
FNCFNC 127
DESQR D0 D2

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