主流分为 S7-200 SMART / S7-1200 / S7-1500(TIA 博途)、老式 S7-300/400(STEP7),下面以目前工程最通用的 博途 TIA(1200/1500/200SMART) 为主,兼顾通用规范。
一、主流编程语言(博途支持)
LAD 梯形图:现场调试最直观,电气工程师首选
FBD 功能块图:适合逻辑运算、模拟量、连锁条件
STL 语句表(1200/1500 逐步弱化,不推荐新项目大量使用)
SCL 结构化控制语言(重点推荐)类 Pascal 高级语言,适合算法、数据处理、通讯、配方、复杂运算
GRAPH 顺序功能图 SFC:流水线、工序步进、设备流程控制
IEC 定时器 / 计数器、工艺块(运动控制 PID)
✅工程推荐搭配方案:连锁、DI/DO 逻辑 → LAD/FBD通讯、运算、配方、数据处理 → SCL流水线工序流程 → GRAPH
二、两种核心编程思想
1. 线性编程(不推荐大中型项目)
全部程序写在 OB1 里,程序很长,难以维护。适用:小型简易设备(单气缸、简易输送)。
2. 结构化编程【标准工程方案,强制优先使用】
核心思路:功能拆分,封装 FB/FC
FC:功能,无背景数据块,临时变量断电不保存
FB:功能块,自带背景 DB,内部静态变量可以断电保持
运动控制、伺服轴、通讯、设备单体控制一律使用 FB
结构化分层标准架构(行业通用模板)
plaintext
OB1(主循环) ├─ FC100:系统初始化(OB100调用) ├─ FB10:设备A控制(输送机) ├─ FB20:设备B控制(翻转机构) ├─ FB30:机械手控制 ├─ FC200:报警处理 ├─ FC300:人机交互逻辑 ├─ FC400:通讯数据处理(Modbus、Profinet) └─ FC500:模拟量采集、PID处理
三、组织块 OB 使用规范
OB1:主循环所有周期性逻辑调用入口,禁止把大量复杂代码直接写在 OB1 内。
OB100:暖启动初始化只执行一次!初始化参数、复位标志、加载配方;不要放脉冲、循环逻辑。
OB35:周期性中断(固定周期,如 100ms)PID、高速采集、定时刷新通讯数据放在 OB35;不要占用过长执行时间。
OB82/OB83/OB86:故障中断处理模块故障、从站掉线,避免 PLC 直接停机。
❌禁止:在 OB35、中断 OB 中调用 GRAPH、等待类逻辑!
四、变量命名规范(标准化设计规则)
遵循 匈牙利命名法 / IEC 标准命名,禁止中文变量!
推荐前缀统一规则
表格
| 前缀 | 含义 | 示例 |
|---|---|---|
| DI_ | 数字输入 | DI_Pump_Ready |
| DO_ | 数字输出 | DO_Valve_Open |
| AI_ | 模拟量输入 | AI_Temperature |
| AO_ | 模拟量输出 | AO_Speed_Set |
| FB_ | 功能块 | FB_Conveyor |
| FC_ | 功能 | FC_Alarm_Handle |
| Stat_ | FB 内静态变量 | Stat_Motor_Run |
| Temp_ | 临时变量 | Temp_Flag |
| HMI_ | 触摸屏交互变量 | HMI_Start_Auto |
| Set_ | 设定值 | Set_Speed |
| Act_ | 实际反馈值 | Act_Pressure |
强制约束
变量名称不能空格、不能中文,使用下划线
_分隔布尔量命名尽量使用名词 + 状态:
Ready、Fault、Run、Enable不要简写过度(禁止写 DI1、DO2 这种无意义名称)
五、FB、FC、DB 设计重要规则
1. FC(Function)使用准则
适合:逻辑运算、数据转换、报警判断、无状态功能
⚠️Temp 临时变量不具备记忆功能,循环结束数据丢失
FC 内部禁止自保持电路依靠临时变量,极易出现随机性 BUG!
2. FB(Function Block)优先使用场景
设备单体控制、伺服轴控制、阀门电机控制、Modbus 通讯通道
Static 静态变量可以保存状态,支持断电保持
多个相同设备:多重背景 DB,减少 DB 块数量(重要优化手段)
3. 数据块 DB 规范
优先使用 优化块访问(博途默认);除非第三方通讯需要地址,再取消优化访问
DB 分类规划:
DB_Global:全局公共变量(模式、启停总信号)
DB_Equip:设备 FB 背景 DB
DB_Recipe:配方数据块
DB_Alarm:报警信息
需要断电保存:勾选变量属性【保持】,不要整个 DB 全部勾选保持(增加存储卡负担)
六、逻辑编程通用设计规则(现场避坑)
1. 启停控制标准范式(推荐)
自动 / 手动模式分离,禁止多处线圈重复输出(西门子不允许同一线圈多处赋值,会出现逻辑冲突)✅原则:一个输出点只在一处决定通断,条件汇总到一处
2. 连锁、安全逻辑优先级
安全条件 > 急停 > 故障报警 > 工艺连锁 > 自动运行逻辑急停、硬限位信号:优先硬件回路,软件做二次监控。
3. 定时器使用规范
短时脉冲(<1s):IEC_Timer(TON/TOF/TP)
⚠️不要大量使用同一定时器 instance 嵌套调用
避免在中断 OB 频繁启停定时器
4. 边沿指令 EU/ED(上升沿 / 下降沿)大坑
上升沿指令检测只维持一个扫描周期;边沿指令不要放在分支中间,防止条件跳转导致边沿丢失;复杂条件边沿优先在外部生成边沿标志位。
七、通讯程序设计规范(结合你之前 485 通信场景)
以 Modbus RTU(S7-1200 CB1241 / S7-200SMART RS485)为例:
通讯采用轮询机制,禁止多个 Modbus 指令同时触发同一 485 端口同一时刻只能收发一条报文;用状态机轮询多台伺服 / 仪表。
通讯程序独立封装 FC/FB,分离 “发送报文” 和 “工艺逻辑”
设置通讯超时检测,通讯失败产生报警,避免设备卡死等待应答
通讯数据区单独 DB 隔离,工艺程序不能直接改写通讯缓冲区
和你之前项目对比提醒:三菱 FX3U 是寄存器连续寻址、自由协议 RS 指令;西门子强烈建议直接调用官方 Modbus 库,不建议手写 RTU 报文 + CRC。
八、程序安全与调试规则
程序注释强制要求FB/FC 头部写功能说明、版本、作者;复杂逻辑段增加行注释;
区分【手动调试模式】【自动模式】,手动模式增加互锁,防止误动作;
重要参数(速度、位置、延时)全部做成 HMI 可修改变量,不要写死常数;
故障报警统一管理:故障代码、发生时间、故障文本,集中上传 HMI;
在线修改:生产设备优先 “下载不停止”,关键设备修改前备份程序。
九、西门子 vs 三菱编程理念核心差异(方便你切换)
三菱:偏向线性思维,大量使用内部继电器 M、寄存器 D,习惯于把逻辑平铺;
西门子:强制面向功能块结构化,推崇把每一台机构封装独立 FB;
三菱 485 经常手写 CRC 自由协议;西门子优先调用标准通讯库;
三菱线圈重复输出不会报错;西门子同一地址多处赋值编译 / 运行异常。
十、标准项目文件夹结构(完整工程模板结构)
plaintext
PLC_1200 ├─ OB │ OB1 主循环 │ OB100启动初始化 │ OB35定时中断 ├─ FB │ FB_Motor 电机通用控制块 │ FB_Modbus_RTU 485轮询块 │ FB_Axis_Control 伺服工艺块 ├─ FC │ FC_Init 初始化 │ FC_Alarm 报警处理 │ FC_HMI_Data HMI数据交互 └─ DB DB_Global 全局变量 DB_Motor_DB1 电机背景块 DB_Com 通讯数据区。





