三菱 FX2N 系列 PLC 本身无直接的反三角函数指令(arcsin/arccos/arctan),需通过三角函数的数学近似公式,结合 FX2N 的基础数学指令(ADD/SUB/MUL/DIV/SQR/FLT/INT 等)编程实现,核心先将整数转换为浮点数(FX2N 仅浮点数支持高精度乘除 / 开方),再通过近似公式计算,最终还原为实际工程角度(弧度 / 角度转换)。
以下是 FX2N 实现反正弦 (arcsin)、反余弦 (arccos)、反正切 (arctan) 的完整方法,含数学原理、编程步骤、通用程序框架、弧度 / 角度转换,直接适配 FX2N 的编程逻辑(梯形图 / 指令表均可)。
核心前提:FX2N 的浮点数基础
FX2N 的数学计算依赖浮点数(32 位,占用两个相邻 D 寄存器),所有反三角函数计算均在浮点数域进行,需先掌握 2 个核心指令:
FLT:整数→浮点数转换(D0→D1D0,16 位整数转 32 位浮点数)
INT:浮点数→整数转换(D1D0→D0,浮点数转 16 位整数,按需使用)
基础浮点运算:+ - × ÷(直接用浮点数模式的四则指令,FX2N 支持浮点运算)
SQR:浮点数开方(计算x,必备)
通用数学基础:反三角函数的计算规则
定义域限制(必须遵守,否则计算无意义):
arcsin(x):x∈[−1,1]
arccos(x):x∈[−1,1]
arctan(x):x∈R(无限制,最易计算)
单位转换:PLC 计算结果为弧度,工程中需转为角度,公式:角度弧度取,预存为浮点数到寄存器
近似公式选择:为适配 FX2N 的简易编程,选择泰勒展开式 / 快速近似公式(精度满足工业现场需求,无复杂高阶运算),以下均用收敛快、计算量小的近似公式。
一、反正切arctan(x)(最推荐先实现,精度高、无定义域限制)
1. 适用近似公式(|x|≤1,精度 0.001 弧度;|x|>1 时做倒数转换)
arctan(x)=x−3x3+5x5−7x7+9x9(∣x∣≤1)若∣x∣>1,用恒等式转换:arctan(x)=2π−arctan(x1)(x>0)/arctan(x)=−2π−arctan(x1)(x<0)
2. FX2N 编程步骤(浮点运算,寄存器分配示例)
预存常数(浮点数,提前写入 PLC,用数据寄存器 D 赋值):
D100D99:π = 3.1415926536
D102D101:π/2 = 1.5707963268
D104D103:180.0(角度转换用)
D106D105:3.0、D108D107:5.0、D110D109:7.0、D112D111:9.0(公式系数)
D200D199:输入值x(浮点数,需先转浮点,保证 | x|≤1 或做倒数转换)
D300D299:arctan(x)计算结果(弧度,浮点数)
D400D399:最终角度结果(浮点数)
编程逻辑(指令表 / 梯形图):
输入值处理:将实际整数输入→FLT 转换为浮点数存入 D200D199,判断 | x | 是否≤1;
若 | x|≤1:直接计算、、、(用浮点 MUL 指令连乘),再按公式做加减除;
若 | x|>1:计算 1/x(浮点 DIV),再代入公式计算,最后用π/2做减法;
弧度转角度:D300D299×D104D103÷D100D99 → 存入 D400D399。
二、反正弦arcsin(x)(基于反正切转换,简化编程)
1. 数学转换公式(避免直接泰勒展开的慢收敛,用反正切替代,精度更高)
利用恒等式将arcsin(x)转为arctan计算(已实现 arctan,直接调用即可),无需重新编近似公式:arcsin(x)=arctan(1−x2x)(x∈[−1,1])
2. FX2N 编程关键步骤
输入值x(浮点数)存入 D200D199,先验证x∈[−1,1],超出则置位报警;
计算x2(浮点 MUL),再计算1−x2(浮点 SUB,1.0 预存为 D114D113);
计算1−x2(浮点 SQR 指令);
计算x÷1−x2(浮点 DIV),结果作为arctan的输入值;
调用已编好的arctan子程序,输出结果即为arcsin(x)的弧度值;
弧度转角度,得到最终工程值。
三、反余弦arccos(x)(基于反正弦 / 反正切转换,最简)
1. 数学转换公式(直接复用已实现的 arcsin/arctan,无额外编程)
选最简易的恒等式转换(推荐用 arcsin):arccos(x)=2π−arcsin(x)(x∈[−1,1])或用 arctan 转换:arccos(x)=arctan(x1−x2)(x∈(0,1])
2. FX2N 编程关键步骤
验证输入值x∈[−1,1],超出报警;
调用已编好的arcsin(x)子程序,得到弧度值;
用π/2(D102D101)减去arcsin(x)的结果(浮点 SUB),即为arccos(x)的弧度值;
弧度转角度,得到最终值。
二、FX2N 通用编程框架(梯形图 / 指令表通用,模块化设计)
为方便复用和调试,将反三角函数做子程序模块化,FX2N 中用CALL/POP指令调用,核心框架分为 3 个模块:
模块 1:常数预存模块(开机执行一次,用 M8002 初始化)
功能:将、、、、、等常数转为浮点数,存入指定 D 寄存器;
示例指令(M8002 触发):
plaintext
FLT K31415926 D100D99 ;整数转浮点,近似π(或用MOV直接写浮点数,部分编程软件支持) FLT K15707963 D102D101 ;π/2 FLT K180 D104D103 ;180.0 FLT K1 D114D113 ;1.0
注:若编程软件(如 GX Developer)支持*直接写入浮点数,可直接用
MOVR指令(浮点传送),更精准:MOVR 3.1415926536 D99。*
模块 2:输入转换模块(实时执行)
功能:将现场的整数输入(如模拟量采集的 D0)转为浮点数,做归一化处理(将输入值映射到 [-1,1],适配 arcsin/arccos 的定义域);
示例:若模拟量输入范围为 0-4095,对应 - 1~1,则先计算(D0−2048)/2048(浮点运算),得到归一化的 x。
模块 3:反三角函数计算子程序(CALL 调用)
功能:包含 arctan/arcsin/arccos 的计算逻辑,输入为 D200D199(浮点 x),输出为 D300D299(弧度)、D400D399(角度);
关键:加入定义域判断(用 CMP 浮点数比较指令),若 arcsin/arccos 的 x 超出 [-1,1],置位 M0 报警,停止计算。
模块 4:弧度转角度模块(子程序内执行)
固定公式:
弧度值 × 180 ÷ π(浮点 MUL+DIV),结果存入角度寄存器。
三、FX2N 编程关键指令(浮点运算)
FX2N 在浮点数模式下的核心运算指令,需在编程时选择浮点运算(部分指令表需加E后缀,如 MULE = 浮点乘、DIVE = 浮点除),常用:
| 功能 | 指令(浮点) | 说明 |
|---|---|---|
| 浮点数传送 | MOVR | 浮点数常数→D 寄存器 |
| 浮点加 | ADDE | D1D0 + D3D2 → D5D4 |
| 浮点减 | SUBE | D1D0 - D3D2 → D5D4 |
| 浮点乘 | MULE | D1D0 × D3D2 → D5D4 |
| 浮点除 | DIVE | D1D0 ÷ D3D2 → D5D4 |
| 浮点开方 | SQRE | √(D1D0) → D3D2 |
| 浮点数比较 | CMPE | 比较两个浮点数大小 |
四、实操注意事项(FX2N 专属,避坑关键)
寄存器占用:32 位浮点数必须占用两个相邻 D 寄存器(低地址为尾数,高地址为指数),如 D1D0、D3D2,不可用单个 D 寄存器;
精度控制:近似公式取前 5 项(x-x³/3+x⁵/5-x⁷/7+x⁹/9)即可满足工业现场精度(误差 < 0.1°),无需更多项(否则增加编程量,FX2N 运算速度有限);
负数处理:FX2N 支持浮点负数,直接输入即可,近似公式对正负数均适用;
运算速度:FX2N 的浮点运算速度较慢,反三角函数单次计算约 10ms,适合低速采集 / 控制(如温度、液位的角度换算),不适合高速运动控制;
报警逻辑:必须加入定义域判断和除零保护(如 arctan 倒数转换时,x=0 需单独处理,置位报警)。
五、简易替代方案(若编程能力有限)
若觉得近似公式编程繁琐,可采用查表法:
提前在电脑上计算好 [-1,1] 内的 x 对应的 arcsin/arccos/arctan 值(角度),存入 FX2N 的数据寄存器 D(建立查询表);
现场输入 x 后,通过线性插值(ADD/SUB/MUL/DIV)计算近似值;
优点:编程简单,运算速度快;缺点:精度由查表步长决定(步长越小,精度越高,占用 D 寄存器越多)。
总结
FX2N 实现反三角函数的核心逻辑:整数输入→浮点数转换→归一化([-1,1])→反正切近似公式计算→弧度转角度→浮点数转整数(按需)其中反正切 arctan是基础,arcsin/arccos 均通过数学恒等式转为 arctan 计算,大幅简化编程;所有运算均在32 位浮点数域进行,需严格遵守 FX2N 的浮点数寄存器使用规则。


