1. 课程导入

在工业自动化现场,很多初学者写PLC程序的方式是“从第一行网络一直写到最后一个输出”,所有逻辑堆在OB1里,靠注释和记忆维持可读性。设备一多、工艺一改,程序就变成一团乱麻:找不到变量、改一处崩三处、调试只能靠在线监控逐段猜。本课程要解决的核心问题,正是把这种“线性堆砌式编程”转变为结构化编程,并配套建立一套可复用的调试方法论。

一、学习目标:从“能跑通”到“可维护、可调试、可复用”

本课程面向已具备西门子S7-1200/1500或S7-300/400基础指令能力的工程师。完成学习后,应达到以下四个层次的目标:

  • 结构层:能按设备与工艺划分功能块,正确使用OB、FB、FC、DB,理解块接口(Input/Output/InOut/Static/Temp)的语义差异。
  • 数据层:能用UDT定义设备数据结构,用多重背景DB管理同类设备的实例数据,避免全局变量泛滥。
  • 调试层:能使用交叉引用、调用结构、在线监控表、断点、强制表、诊断缓冲区定位故障,而不是盲目下载重试。
  • 工程层:能编写带版本管理、注释规范、错误处理与仿真验证的程序,使程序可交付、可交接。

二、核心概念:结构化编程的四个支点

结构化编程不是“把程序拆成很多块”这么简单,它的本质是用接口隔离变化。四个支点必须同时理解:

  1. 块(Block):OB是系统调用的组织块,FB/FC是用户编写的功能单元,DB是数据容器。块是程序的“封装单位”。
  2. 接口(Interface):块的输入输出参数定义了它与外界的契约。接口稳定,内部实现可自由修改。
  3. 实例(Instance):FB必须依附背景DB才能运行,背景DB保存了该FB的静态变量,使同一FB可被多个设备复用而互不干扰。
  4. 调用(Call):调用结构决定了程序的执行顺序与数据流向,是调试时追踪信号链的地图。
结构化编程的判断标准:如果新增一台同型号设备,只需复制一次FB调用并指定新的背景DB,而不需要复制粘贴大段逻辑,那么结构就是合格的。

三、整体框架:本课程的六条主线

课程共30章,围绕“结构设计—数据组织—调试排障—工程交付”展开,可归纳为六条主线:

主线关键内容典型产出
编程模型OB/FB/FC/DB、接口类型、调用关系块结构规划图
数据结构UDT、数组、多重背景、变量表设备数据模板
逻辑组织状态机、步序控制、模式管理可复用功能块
调试手段交叉引用、监控表、断点、强制调试记录表
故障诊断诊断缓冲区、错误OB、模块诊断故障树与处理流程
工程规范命名、注释、版本、仿真验证可交付程序包

下图展示了从“工艺需求”到“可调试程序”的整体数据流与结构关系,也是本课程后续章节反复回访的全局地图:

结构化编程与调试整体框架 工艺需求 设备动作 / 联锁 / 模式 结构设计 OB / FB / FC / DB 划分 数据组织 UDT / 多重背景 / 变量表 程序实现 状态机 / 步序 / 错误处理 调用结构(Call Structure) OB1 → 主控FB → 设备FB(多重背景)→ 公共FC 决定执行顺序与信号流向,是调试追踪的地图 调试手段 交叉引用 · 监控表 · 断点 强制表 · 调用结构视图 故障诊断 诊断缓冲区 · 错误OB 模块诊断 · 故障树定位 工程交付 命名规范 · 注释 · 版本 仿真验证 · 程序归档 结构决定可维护性,调试手段验证结构正确性,二者闭环迭代

四、案例场景:同一台输送线,两种写法

假设一条输送线有3台同型号电机,每台需要启动、停止、过载保护、运行指示。线性写法会在OB1中重复三段几乎相同的逻辑,变量名为M1_Start、M2_Start、M3_Start……一旦要增加“启动前鸣笛3秒”,就要改三处。结构化写法则是:

FB "MotorControl"
  Input:  Start, Stop, Overload
  Output: Run, Fault
  InOut:  Timer_StartDelay
  Static: TON_Delay, State

OB1:
  CALL "MotorControl", DB_M1
  CALL "MotorControl", DB_M2
  CALL "MotorControl", DB_M3

新增设备只需增加一次调用;修改逻辑只需改FB内部一处。这就是结构化编程在真实项目中的直接收益。

五、学习方法与常见误区

建议学习路径:先画调用结构图,再定义UDT与接口,最后写逻辑;每完成一个FB,立即用监控表验证输入输出,不要等整机联调才第一次下载。
常见误区一:把FB当成“带参数的FC”,忽略背景DB的静态保持特性,导致状态丢失。
常见误区二:所有变量都建在全局DB,块接口形同虚设,结构退化回线性程序。
常见误区三:调试只靠“改一改、下载、再看”,不使用交叉引用和诊断缓冲区,排障效率极低。
常见误区四:不做仿真验证就直接上机,把现场当试验场。

复盘时可以用三个问题自检:这段逻辑能否被另一台设备直接复用?这个故障能否在30秒内通过交叉引用定位到具体块?如果明天由同事接手,他能否只看接口就理解这个块的作用?三个问题都答“能”,说明结构化编程与调试能力已经真正建立。