返回主站|会员中心|保存桌面

三菱电机服务商    

PLC、变频器、伺服驱动、触摸屏,机器人

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 解析三菱Q列数学运算、子程序的调用!
新闻中心
解析三菱Q列数学运算、子程序的调用!
发布时间:2026-06-07        浏览次数:1        返回列表

一、Q 系列数学运算(BIN 整数 + 浮点)

1. 基础规则

  • 数据寄存器:D(16 位)、D+D(32 位,如 D0 = 低 16,D1 = 高 16)

  • 后缀 P:上升沿执行一次(常用);不带 P:每个扫描周期都执行

  • 16 位 BIN:-32768~+32767

  • 32 位 BIN:-2147483648~+2147483647

  • 浮点:E 系列指令(EADD/ESUB/EMUL/EDIV),32 位单精度

2. 16 位整数四则运算(最常用)

plaintext

+P  S   D      ; (D) = (D) + (S)
-P  S   D      ; (D) = (D) - (S)
*P  S1  S2  D  ; (D) = (S1) × (S2)
/P  S1  S2  D  ; (D) = (S1) ÷ (S2),余数在D+1

例子:

plaintext

LD   X0
+P   D0   D10   ; D10 = D10 + D0
*P   K100 D20   ; D20 = D20 × 100

3. 32 位整数(D+D)

指令前加 D

plaintext

D+P  S   D
D-P  S   D
D*P  S1  S2  D
D/P  S1  S2  D

S、D 都占连续 2 个 D(如 D0 = 低,D1 = 高)。

4. 浮点运算(E 开头,模拟量 / PID 常用)

plaintext

EADD  S1  S2  D   ; D = S1 + S2(浮点)
ESUB  S1  S2  D   ; 减
EMUL  S1  S2  D   ; 乘
EDIV  S1  S2  D   ; 除

注意:S1/S2/D 都占2 个 D,且必须用浮点格式存入(如 FLT 指令把整数转浮点)。

5. 常用配合指令

  • MOVP K123 D0:把常数送入 D

  • FLT D0 D10:D0(整数)→ D10/D11(浮点)

  • INT D10 D0:浮点→整数

  • CMP D0 D1 M0:比较 D0、D1,结果→M0/M1/M2(>、=、<)


二、子程序调用(CALL / RET / FEND 核心三件套)

1. 基本结构(必须严格遵守)

plaintext

; ---------- 主程序 ----------
LD   X0
CALL P1        ; 调用P1子程序(X0=ON时)
...
FEND           ; 主程序结束!下面全是子程序

; ---------- 子程序P1 ----------
P1             ; 子程序入口(母线左边,无LD)
LD   D0
OUT  Y0
...
RET            ; 子程序返回,回到CALL下一行

END            ; 整个程序结束

2. 指令详解

  • FEND:主程序结束标记,必须在所有子程序之前

  • CALL Pn:调用指针 Pn 的子程序;Pn 范围:P0~P255

  • RET:子程序返回;每个子程序必须有且只有一个 RET

  • CALLP Pn:上升沿调用一次(常用,避免反复进子程序)。

3. 带参数调用(高级,Q 系列支持)

plaintext

CALL P1 D0 D10  ; 把D0、D10传给P1子程序

子程序里用 **S1、S2…** 接收参数(自动映射)。

4. 多子程序示例

plaintext

LD   X1
CALL P2        ; 调用P2

FEND

P2
LD   D1
OUT  Y1
CALL P3        ; 子程序里再调用另一个子程序(允许嵌套)
RET

P3
...
RET
  • 嵌套深度:最多 8 层


三、常见错误与注意事项

数学运算

  1. 溢出:16 位超过 ±32767 → 用 32 位(D+);32 位超范围→浮点。

  2. 除法为 0:/P 时 S2=0 → 报错停机,务必加判断。

  3. 浮点混用整数:E 指令只能用浮点,否则乱码。

子程序

  1. FEND 位置错:写在子程序后面→编译报错。

  2. 无 RET 或多个 RET→报错。

  3. Pn 重复:两个子程序用同一个 Pn→报错。

  4. 主程序漏 END→程序不运行。


四、总结

  • 数学运算:16 位用+P/*P,32 位加D,浮点用EADD;注意溢出与数据类型。

  • 子程序:主程序→CALL PnFENDPn子程序→RETEND;用于复用代码、减少步数。

收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服