欧姆龙 PLC(CP 系列 / CJ 系列 / NJ 系列)中实现 三次曲线函数 y = ax³ + bx² + cx + d,核心是:用浮点数运算分步拆解公式 + 数据类型转换 + 输出限幅。欧姆龙支持 梯形图(LD) 和 结构化文本(ST) 两种方式,ST 更简洁、不易出错。
一、三次函数与变量规划
标准公式
y = a·x³ + b·x² + c·x + d
x:输入(AI、位置、计数器、时间)
a, b, c, d:系数(REAL 浮点)
y:输出(给 AO、伺服、温度 / 压力)
变量(推荐 32 位 REAL 浮点)
X:REAL —— 输入A:REAL —— x³ 系数B:REAL —— x² 系数C:REAL —— x 系数D:REAL —— 常数Y:REAL —— 结果
二、欧姆龙关键浮点指令(CX-Programmer / Sysmac Studio)
1. 梯形图(CP/CJ 常用)
FLT:INT → REAL
FADD:浮点加法
FSUB:浮点减法
**F / FMUL:浮点乘法
LIMIT / LIMITF:浮点限幅
2. ST 语言(NJ/NX 推荐)
直接写表达式:
st
Y := A * X**3 + B * X**2 + C * X + D;
或分步:
st
X3 := X * X * X; X2 := X * X; Y := A*X3 + B*X2 + C*X + D;
三、ST 文本实现(最推荐,NJ/NX/CP 支持)
1. 变量声明(Sysmac Studio)
st
// 1. 整数转浮点 X := INT_TO_REAL(X_Int); // 2. 计算 x², x³ X2 := X * X; X3 := X2 * X; // 3. 三次公式 Y := A * X3 + B * X2 + C * X + D; // 4. 限幅(防止超量程) Y := LIMIT(Y, 0.0, 27648.0); // 5. 转整数输出到 AO Y_Out := REAL_TO_INT(Y);
四、梯形图实现(CP1H/CJ2M 分步指令)
步骤 1:INT → REAL(FLT)
plaintext
FLT D100 D10 // D100(INT) → D10-D11(REAL: X)
步骤 2:X²(FMUL)
plaintext
FMUL D10 D10 D20 // D20-D21 = X²
步骤 3:X³(再乘 X)
plaintext
FMUL D20 D10 D30 // D30-D31 = X³
步骤 4:a・x³
plaintext
FMUL D30 D1000 D40 // D40-D41 = A·X³
步骤 5:b・x²
plaintext
FMUL D20 D1002 D50 // D50-D51 = B·X²
步骤 6:c・x
plaintext
FMUL D10 D1004 D60 // D60-D61 = C·X
步骤 7:求和 aX³+bX²+cX+d
plaintext
FADD D40 D50 D70 FADD D70 D60 D80 FADD D80 D1006 D90 // D90-D91 = Y
步骤 8:限幅
plaintext
LIMIT D90 D1010 D1012 D90 // MIN=D1010-D1011, MAX=D1012-D1013
步骤 9:REAL → INT
plaintext
FINT D90 D200 // D200 = 输出 AO
五、完整实战案例
需求
输入 X:0~1000(位置)
公式:y = 0.000001x³ − 0.001x² + 0.5x + 100
输出:AO 0–10V(0~27648)
限幅:0~27648
ST 完整代码
st
// 输入 X_Int := D100; // AI 输入 X := INT_TO_REAL(X_Int); // 系数 A := 0.000001; B := -0.001; C := 0.5; D := 100.0; // 三次计算 X2 := X * X; X3 := X2 * X; Y := A*X3 + B*X2 + C*X + D; // 限幅 Y := LIMIT(Y, 0.0, 27648.0); // 输出 D200 := REAL_TO_INT(Y);
六、欧姆龙特有注意事项(必看)
必须用 REAL 浮点
整数运算会导致曲线失真、跳变。
32 位浮点占用双字
D10 = 低位,D11 = 高位(IEEE 754)。
数据类型转换
AI 整数 → FLT / INT_TO_REAL
AO 输出 → FINT / REAL_TO_INT
运算顺序
先立方 → 平方 → 一次 → 求和
欧姆龙指令无自动优先级,分步最安全。
LIMIT 限幅
防止 X 超范围导致 AO 爆表。
周期执行
曲线快变时用 定时中断(固定周期)。

