西门子 S7-200 SMART PLC 实操案例:中断程序的灵活应用定时中断实现模拟量滤波(下)
四、初始化子程序:中断 “生效的关键开关”,缺一不可
中断程序不会 “自动运行”,必须通过 “配置定时时间→关联事件→全局使能” 三步激活,这部分逻辑放在 “初始化子程序 SBR_Init”,而非直接写在 OB1,核心是 “结构化编程”—— 把 “一次性配置逻辑” 封装,避免主程序冗余。
步骤 4.1:初始化子程序 SBR_Init 逻辑拆解
1. MOVB 100, SMB34:S7-200 SMART 的 “中断时间寄存器” 特性
S7-200 SMART 有两个定时中断(中断 0 和中断 1),对应专用的时间寄存器:
- 定时中断 0→SMB34(时间范围 1~255ms,单位 ms);
- 定时中断 1→SMB35(时间范围 1~255ms,单位 ms);
若需更长时间(如 500ms),需在中断程序里加 “二次计数”(比如中断 0 每 100ms 触发,计数 5 次 = 500ms)。案例用 100ms,刚好在 SMB34 的量程内,直接设置即可。
2. ATCH Filter_Int, 10:“事件号” 是中断的 “身份证”
S7-200 SMART 给每个中断类型分配了固定的 “事件号”,必须一一对应,否则中断无法触发:
- 定时中断 0→事件号 10;
- 定时中断 1→事件号 11;
- I0.0 上升沿中断→事件号 0;
案例中 “ATCH Filter_Int, 10” 的意思是 “当事件号 10(定时中断 0)发生时,执行 Filter_Int 中断程序”—— 若写错事件号(如写 11),则定时中断 1 触发时才执行,而 SMB34 配置的是中断 0,导致中断 “配置与执行不匹配”,完全失效。
3. ENI:全局中断的 “总开关”,绝不能漏
S7-200 SMART 默认 “所有中断关闭”,即使配置了 ATCH,不执行 ENI,中断也不会触发。ENI 是 “全局使能”,执行一次后,所有已关联的中断都会生效(若需关闭某个中断,用 DTCH 指令解除关联)。
步骤 4.2:主程序调用初始化子程序(仅执行一次)
为什么用 “LDP SM0.1”(上升沿触发)?
SM0.1 是 “PLC 上电后首次扫描为 ON,之后一直为 OFF”:
- 用 LDP(上升沿):确保初始化子程序只执行一次,避免每次扫描都调用 SBR_Init,重复配置 SMB34、ATCH(虽然重复配置不会报错,但浪费扫描时间,且不符合 “一次性初始化” 的逻辑);
- 若用 LD SM0.1(电平触发):首次扫描期间 SM0.1 为 ON,主程序扫描几次就会调用几次 SBR_Init,完全多余。
五、案例优势的 “工业落地价值”:不只是 “技术优势”,更是 “系统稳定的保障”
案例提到的 3 个优势,不是 “文字游戏”,而是直接对应工业现场的 “系统可靠性需求”:
1. “定时精准”→ 保障 “滤波效果的一致性”
工业控制中,“采样间隔均匀” 是滤波有效的前提 —— 比如 10 次采样若间隔忽快忽慢(50ms、150ms、80ms...),相当于 “采样点分布不均”,平均值可能偏向 “采样密集时段” 的数值,无法真实反映过程值。而中断的 100ms 精准间隔,确保每次采样的 “时间权重相同”,平均值更接近真实值,为后续控制(如 PID)提供可靠的过程值。
2. “数据稳定”→ 避免 “控制逻辑误动作”
若不用滤波,AIW12 波动大(如温度 80℃,采集值 75~85℃跳变),传给 PID 后会导致:
- PID 输出频繁波动(一会儿加热,一会儿停止);
- 执行器(如加热棒、调节阀)频繁动作,缩短使用寿命;
- 被控参数(温度)无法稳定,出现 “超调”(比如冲到 85℃再掉回 75℃)。
10 次平均值滤波后,采集值稳定在 79~81℃,PID 输出平滑,执行器动作平缓,被控参数稳定在设定值附近,符合工业 “精准控制、设备长寿命” 的需求。
3. “不阻塞主程序”→ 确保 “多任务并行稳定”
工业系统中,主程序往往同时运行 “电机控制、阀门控制、HMI 通信” 等多个任务,若中断程序执行时间太长(比如超过 50ms),会导致主程序 “卡顿”:
- 电机控制响应变慢(按下启动按钮,几秒后才启动);
- HMI 显示延迟(实际温度变了,HMI 几秒后才更新);
案例中中断程序仅 4 条指令,执行时间约 1~2ms,远小于主程序扫描周期(几十 ms),完全不会影响主程序的正常运行,实现 “模拟量滤波” 与 “其他控制任务” 的并行稳定。
六、潜在扩展:从 “基础滤波” 到 “工业级抗干扰方案”
案例是 “基础版滤波”,实际工业中可根据干扰强度、精度需求扩展,核心是 “不改变中断定时的核心逻辑,只优化数据处理与异常判断”:
1. 优化 1:增加 “超限采样值剔除”(抗大干扰)
若现场有 “脉冲大干扰”(如接触器启停导致 AIW12 突然跳到 10000),10 次平均值会被严重拉偏 —— 可在 Network1 后加 “超限判断”:
通过 “剔除异常值”,进一步提升滤波后数据的稳定性。
2. 优化 2:多通道滤波(同时采集多个模拟量)
若需同时采集 AIW12(温度)、AIW2(压力),可扩展变量与逻辑:
- 新增变量:Sum_Value2(VD104,压力累加和)、Sample_Count2(VB106,压力计数)、Avg_Value2(VW108,压力平均值)、Temp_Sample2(VD114,压力临时值);
- 中断程序 Network1 增加:MOV_DW AIW2, VD114→+D VD114, VD104→INC B VB106;
- Network2 增加:LDB= VB106,10→/D 10, VD104→MOV_DW VD104, VW108→MOV_DW 0, VD104→MOVB 0, VB106;
实现 “一个中断程序处理多个模拟量通道”,节省中断资源。
3. 优化 3:与 PID 结合(稳定控制的闭环)
滤波后的 Avg_Value(VW104)可直接作为 PID 的过程值(PV),避免干扰导致 PID 震荡:
- 在主程序中调用 PID 子程序,将 Avg_Value 传给 PID 的 PV 参数;
- PID 输出(如 AQW0)控制执行器,形成 “采集→滤波→控制” 的闭环,提升系统稳定性。
总结:中断程序的核心价值 ——“实时精准响应,不拖系统后腿”
该案例的本质是 “用中断的实时性解决定时问题,用平均值滤波解决抗干扰问题”,与之前的 “子程序模块化” 形成互补:
- 子程序:解决 “重复功能的复用”(如多电机控制);
- 中断程序:解决 “实时精准的响应”(如定时采样、急停);
实操时必须记住两个 “红线”:
- 中断程序必须 “短小精悍”,执行时间 < 10ms,避免阻塞主程序;
- 中断程序用全局变量(V 区)存储数据,绝不能用局部变量(TEMP);
掌握这个案例后,可迁移到其他中断场景(如高速计数中断、急停中断),核心思路都是 “识别实时性需求→用中断满足→优化数据处理→确保系统稳定”—— 这也是工业 PLC 程序员从 “会编程” 到 “编好程” 的关键一步。