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

西门子PLC服务商    

PLC、变频器、电机,触摸屏,低压

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
首页 > 新闻中心 > 如何在西门子PLC中使用SCP指令实现线性函数?
新闻中心
如何在西门子PLC中使用SCP指令实现线性函数?
发布时间:2026-04-05        浏览次数:1        返回列表

在西门子 PLC(TIA Portal 时代)实现线性函数 y = kx + b,标准、稳定的做法是用 NORM_X(标准化)+ SCALE_X(缩放) 组合,等价于线性变换。以下为完整步骤、可直接套用的示例与关键要点。


一、核心原理与公式

线性函数本质是量程映射:y = (x − x_min) × (y_max − y_min) ÷ (x_max − x_min) + y_min

  • x:输入值(如计数器、AI 原始值)

  • x_min/x_max:输入范围

  • y_min/y_max:输出范围(如 AO 原始值、工程值)

  • y:输出结果


二、NORM_X + SCALE_X 组合(推荐,通用)

1. 指令逻辑

  1. NORM_X:将输入 x 映射到 0.0~1.0(浮点数)公式:norm = (x − x_min) ÷ (x_max − x_min)

  2. SCALE_X:将标准化值缩放到 y_min~y_max公式:y = norm × (y_max − y_min) + y_min

2. 完整步骤(以 S7-1200/1500 为例)

步骤 1:定义变量(DB 块)

表格

变量名数据类型说明
x_inINT输入值(如 AI 原始值 0~27648)
x_minINT输入下限
x_maxINT输入上限
y_minINT输出下限
y_maxINT输出上限
norm_valREAL标准化中间值
y_outINT最终输出(给 AO)

步骤 2:梯形图(LAD)实现

  1. 调用 NORM_X(路径:指令 → 转换操作 → 标准化 NORM_X)

    • VALUE:x_in

    • MIN:x_min

    • MAX:x_max

    • OUT:norm_val

  2. 调用 SCALE_X(路径:指令 → 转换操作 → 缩放 SCALE_X)

    • VALUE:norm_val

    • MIN:y_min

    • MAX:y_max

    • OUT:y_out

  3. (可选)限幅:用 LIMIT 指令防止超量程

步骤 3:结构化文本(ST)等价写法

st

// 1. 标准化
norm_val := (REAL_TO_INT(x_in) - REAL_TO_INT(x_min)) / (REAL_TO_INT(x_max) - REAL_TO_INT(x_min));

// 2. 缩放
y_out := INT(norm_val * (REAL_TO_INT(y_max) - REAL_TO_INT(y_min)) + REAL_TO_INT(y_min));

// 3. 限幅保护
y_out := LIMIT(y_min, y_out, y_max);

三、实战示例:AI→AO 线性变换

需求

  • 输入 AI:4–20mA → 原始值 6400~32000(单极性)

  • 输出 AO:0–10V → 原始值 0~27648

  • 线性关系:4mA→0V,20mA→10V

组态与参数

  1. 硬件组态:AI/AO 模块设为 Raw 数据格式

  2. 变量赋值:

    • x_in = AI 原始值(如 IW64

    • x_min = 6400,x_max = 32000

    • y_min = 0,y_max = 27648

程序(ST 直接复制)

st

// 标准化:4–20mA → 0.0~1.0
norm_val := (REAL(x_in) - 6400.0) / (32000.0 - 6400.0);

// 缩放:0.0~1.0 → 0~27648
y_out := INT(norm_val * 27648.0 + 0.0);

// 限幅
y_out := LIMIT(0, y_out, 27648);

// 输出到 AO 通道
QW80 := y_out;  // 替换为实际 AO 地址

四、关键注意事项(必看)

  1. 数据类型

    • 标准化必须用 REAL 避免精度丢失

    • 输入 / 输出原始值为 INT(16 位)

  2. 模拟量原始值对照表

    表格

    信号类型原始值范围
    0–10V(单极性)0~27648
    4–20mA(单极性)6400~32000
    ±10V(双极性)-27648~+27648
  3. 模块组态

    • AI/AO 必须设为 Raw,禁止使用工程单位模式

    • 双极性信号(如 ±10V)需将 x_min/x_max 设为 -27648~+27648

  4. 限幅保护

    • LIMIT 指令防止输入超量程导致输出异常


五、S7-200 SMART 兼容方案

S7-200 SMART 无 NORM_X/SCALE_X,用 FC105/FC106 或手动公式:

FC105(输入→工程值)

st

// IN:AI 原始值,LO_LIM/HI_LIM:工程范围,BIPOLAR:false(单极性)
y工程 := FC105(IN := x_in, LO_LIM := 0.0, HI_LIM := 10.0, BIPOLAR := FALSE);

手动公式(输出 AO)

st

y_out := INT((x_in - 6400.0) / (32000.0 - 6400.0) * 27648.0);

六、常见问题排查

  • 输出不动:确认模块为 Raw 格式,非工程单位

  • 精度不足:全程用 REAL 计算,避免 INT 截断

  • 超量程:增加 LIMIT 指令,限制 y_out 范围

  • 4mA 不为 0V:检查 x_min/x_max 是否对应 6400/32000。

收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服