一、线性函数通用公式
y=xmax−xminx−xmin×(ymax−ymin)+ymin
或者你要最简单的斜率截距形式:y=k×x+b
ABB PLC 里直接在 ST 结构化文本 里写公式最方便,梯形图也能用浮点运算块实现。
二、ABB PLC 实现步骤
1. 变量定义(REAL 浮点)
在 VAR 里定义:
st
VAR x : REAL; // 输入值(AI、计数器、位置等) x_min : REAL; // 输入最小值 x_max : REAL; // 输入最大值 y_min : REAL; // 输出最小值 y_max : REAL; // 输出最大值 y : REAL; // 线性输出结果 END_VAR
2. 直接写线性公式(复制即用)
st
// 线性函数计算 y := ((x - x_min) / (x_max - x_min)) * (y_max - y_min) + y_min; // 限幅(必须加,防止超量程) y := LIMIT(y, y_min, y_max);
这就是 ABB 里等价于 SCP 缩放的纯公式实现。
三、如果你只要最简单的 y = kx + b
直接写:
st
y := k * x + b; y := LIMIT(y, 下限, 上限);
例如:
st
y := 1.25 * x + 30.0;
四、梯形图方式(浮点运算块)
如果你必须用梯形图,就按顺序拖块:
SUB:x − x_min
SUB:x_max − x_min
DIV:(x−x_min) ÷ (x_max−x_min)
SUB:y_max − y_min
MUL:结果 × (y_max−y_min)
ADD:+ y_min
LIMIT:限幅
和公式完全一一对应。
五、实战例子:模拟量输出 AO
需求
输入 x:0 ~ 1000
输出 AO:4–20mA → 对应 0 ~ 27648 或 6241 ~ 31206(看模块)
线性跟随
程序
st
x := INT_TO_REAL(AI1); // AI 整数转浮点 x_min := 0.0; x_max := 1000.0; y_min := 6241.0; // 4mA y_max := 31206.0; // 20mA y := ((x - x_min)/(x_max - x_min))*(y_max - y_min) + y_min; y := LIMIT(y, y_min, y_max); AO1 := REAL_TO_INT(y);
六、ABB PLC 关键注意点
一定要用 REAL 浮点INT 整数运算会丢精度,线性输出不准。
必须 LIMIT 限幅防止输入超范围导致 AO 输出爆表。
AI/AO 要做类型转换
AI 整数 →
INT_TO_REALAO 输出 →
REAL_TO_INTABB 不叫 SCP 指令线性缩放就是用上面这条公式,所有品牌通用。





