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

西门子PLC服务商    

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

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
首页 > 新闻中心 > 西门子 plc 的编程方法与设计规则!
新闻中心
西门子 plc 的编程方法与设计规则!
发布时间:2026-07-23        浏览次数:1        返回列表

主流分为 S7-200 SMART / S7-1200 / S7-1500(TIA 博途)、老式 S7-300/400(STEP7),下面以目前工程最通用的 博途 TIA(1200/1500/200SMART) 为主,兼顾通用规范。

一、主流编程语言(博途支持)

  1. LAD 梯形图:现场调试最直观,电气工程师首选

  2. FBD 功能块图:适合逻辑运算、模拟量、连锁条件

  3. STL 语句表(1200/1500 逐步弱化,不推荐新项目大量使用)

  4. SCL 结构化控制语言(重点推荐)类 Pascal 高级语言,适合算法、数据处理、通讯、配方、复杂运算

  5. GRAPH 顺序功能图 SFC:流水线、工序步进、设备流程控制

  6. 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 使用规范

  1. OB1:主循环所有周期性逻辑调用入口,禁止把大量复杂代码直接写在 OB1 内。

  2. OB100:暖启动初始化只执行一次!初始化参数、复位标志、加载配方;不要放脉冲、循环逻辑

  3. OB35:周期性中断(固定周期,如 100ms)PID、高速采集、定时刷新通讯数据放在 OB35;不要占用过长执行时间。

  4. 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

强制约束

  1. 变量名称不能空格、不能中文,使用下划线 _ 分隔

  2. 布尔量命名尽量使用名词 + 状态:ReadyFaultRunEnable

  3. 不要简写过度(禁止写 DI1、DO2 这种无意义名称)

五、FB、FC、DB 设计重要规则

1. FC(Function)使用准则

  • 适合:逻辑运算、数据转换、报警判断、无状态功能

  • ⚠️Temp 临时变量不具备记忆功能,循环结束数据丢失

  • FC 内部禁止自保持电路依靠临时变量,极易出现随机性 BUG!

2. FB(Function Block)优先使用场景

设备单体控制、伺服轴控制、阀门电机控制、Modbus 通讯通道

  • Static 静态变量可以保存状态,支持断电保持

  • 多个相同设备:多重背景 DB,减少 DB 块数量(重要优化手段)

3. 数据块 DB 规范

  1. 优先使用 优化块访问(博途默认);除非第三方通讯需要地址,再取消优化访问

  2. DB 分类规划:

    • DB_Global:全局公共变量(模式、启停总信号)

    • DB_Equip:设备 FB 背景 DB

    • DB_Recipe:配方数据块

    • DB_Alarm:报警信息

  3. 需要断电保存:勾选变量属性【保持】,不要整个 DB 全部勾选保持(增加存储卡负担)

六、逻辑编程通用设计规则(现场避坑)

1. 启停控制标准范式(推荐)

自动 / 手动模式分离,禁止多处线圈重复输出(西门子不允许同一线圈多处赋值,会出现逻辑冲突)✅原则:一个输出点只在一处决定通断,条件汇总到一处

2. 连锁、安全逻辑优先级

安全条件 > 急停 > 故障报警 > 工艺连锁 > 自动运行逻辑急停、硬限位信号:优先硬件回路,软件做二次监控。

3. 定时器使用规范

  • 短时脉冲(<1s):IEC_Timer(TON/TOF/TP)

  • ⚠️不要大量使用同一定时器 instance 嵌套调用

  • 避免在中断 OB 频繁启停定时器

4. 边沿指令 EU/ED(上升沿 / 下降沿)大坑

上升沿指令检测只维持一个扫描周期;边沿指令不要放在分支中间,防止条件跳转导致边沿丢失;复杂条件边沿优先在外部生成边沿标志位。

七、通讯程序设计规范(结合你之前 485 通信场景)

以 Modbus RTU(S7-1200 CB1241 / S7-200SMART RS485)为例:

  1. 通讯采用轮询机制,禁止多个 Modbus 指令同时触发同一 485 端口同一时刻只能收发一条报文;用状态机轮询多台伺服 / 仪表。

  2. 通讯程序独立封装 FC/FB,分离 “发送报文” 和 “工艺逻辑”

  3. 设置通讯超时检测,通讯失败产生报警,避免设备卡死等待应答

  4. 通讯数据区单独 DB 隔离,工艺程序不能直接改写通讯缓冲区

和你之前项目对比提醒:三菱 FX3U 是寄存器连续寻址、自由协议 RS 指令;西门子强烈建议直接调用官方 Modbus 库,不建议手写 RTU 报文 + CRC

八、程序安全与调试规则

  1. 程序注释强制要求FB/FC 头部写功能说明、版本、作者;复杂逻辑段增加行注释;

  2. 区分【手动调试模式】【自动模式】,手动模式增加互锁,防止误动作;

  3. 重要参数(速度、位置、延时)全部做成 HMI 可修改变量,不要写死常数;

  4. 故障报警统一管理:故障代码、发生时间、故障文本,集中上传 HMI;

  5. 在线修改:生产设备优先 “下载不停止”,关键设备修改前备份程序。

九、西门子 vs 三菱编程理念核心差异(方便你切换)

  1. 三菱:偏向线性思维,大量使用内部继电器 M、寄存器 D,习惯于把逻辑平铺;

  2. 西门子:强制面向功能块结构化,推崇把每一台机构封装独立 FB;

  3. 三菱 485 经常手写 CRC 自由协议;西门子优先调用标准通讯库;

  4. 三菱线圈重复输出不会报错;西门子同一地址多处赋值编译 / 运行异常。

十、标准项目文件夹结构(完整工程模板结构)

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 通讯数据区。
收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服