AB 罗克韦尔 PLC(ControlLogix/CompactLogix/Micro800)中,线性函数(y = kx + b) 最标准、最省事的实现是用 SCP 指令(Scale with Parameters),也可以直接写公式运算。
下面给你 完整、可直接套用的步骤(Studio 5000 / RSLogix 5000 环境)。
一、核心原理
AB 里线性函数本质就是 量程映射:y = (x – x_min) × (y_max – y_min) ÷ (x_max – x_min) + y_min
x:输入(自变量:计数器、时间、模拟量、设定值)
x_min / x_max:输入范围
y_min / y_max:输出范围(送给 AO 模拟量输出)
二、方法 1:用 SCP 指令
SCP 是 AB 专门的线性比例缩放指令,一步到位。
1. 指令格式(梯形图 / 功能块)
plaintext
SCP Input: <输入值 x (INT/REAL)> Input Min: <x最小值> Input Max: <x最大值> Output Min: <y最小值> Output Max: <y最大值> Output: <输出值 y (REAL/INT)>
2. 典型应用:模拟量输出(4–20mA / 0–10V)
例:
输入:D0 从 0 → 1000(时间 / 计数器自增)
输出:模拟量 4–20mA → Raw 范围 6241~31206(1769-OF4 标准)
要求:x=0 → 4mA;x=1000 → 20mA
SCP 参数:
Input: D0
Input Min: 0
Input Max: 1000
Output Min: 6241
Output Max: 31206
Output: Local:2:O.Ch0Data (AO 通道 0 原始值)
3. 让 x 随时间自增(自动跑函数)
plaintext
TON Timer1 .PRE 100 // 100ms 周期 Timer1.DN INC D0 // 每 100ms x+1
三、方法 2:直接写公式(结构化文本 ST)
适合需要灵活修改、加斜率 / 截距、多段线性的场景。
公式写法:
st
// 定义变量 x: REAL; // 自变量 x_min: REAL := 0.0; x_max: REAL := 1000.0; y_min: REAL := 6241.0; // 4mA y_max: REAL := 31206.0; // 20mA y: REAL; // 输出到AO // 线性计算 y := (x - x_min) * (y_max - y_min) / (x_max - x_min) + y_min; // 限幅(防止超量程) y := LIMIT( y_min, y, y_max ); // 写入模拟量输出通道 Local:2:O.Ch0Data := INT( y );
四、硬件与组态关键
1. 模拟量输出模块组态(以 1769-OF4 为例)
打开 I/O Configuration → 双击 AO 模块
Ch0 Data Format:选 Raw(全量程整数)
Output Type:
Current → 4–20mA
Voltage → 0–10V
工程单位范围:0–100% 对应 Raw 6241–31206(4–20mA)
2. 常见 Raw 范围(务必记)
4–20mA:6241 ~ 31206
0–20mA:0 ~ 31206
0–10V:0 ~ 31206
±10V:-31206 ~ +31206
五、完整步骤汇总(从 0 到输出)
组态 AO 模块:设为 Raw、信号类型(4–20mA/0–10V)
定义变量:x(输入)、y(输出)、范围参数
产生 x:
时间自增(TON+INC)
外部设定值(HMI / 上位机)
模拟量输入(AI 通道)
线性转换:
梯形图:SCP 指令
结构化文本:y = kx + b 公式
限幅:用 LIMIT 指令防超量程
写入 AO:赋值给 Local:X:O.ChXData
六、常见问题
输出不动:检查模块是否设为 Raw,不是 Engineering Units
超量程:加 LIMIT 指令
4mA 不为最小值:确认 Input Min/Output Min 对应
波动大:AO 模块开滤波,或程序加平滑、


