抖音粉丝群1
『7x24小时有问必答』

点击慧通工控关注我,设为星标不错过每一篇深度好文

在西门子S7-200 SMART PLC编程中,STEP7-MicroWIN SMART V3.1版本新增的FB功能块(功能块)极大提升了程序的模块化与复用性,搭配UDT数据类型让复杂逻辑的编写更高效便捷。但很多工程师在实战中会遇到一个棘手问题:FB块内无法直接使用系统自带的上升沿(P)和下降沿(N)指令,即便仅调用一个FB实例,也可能出现信号持续触发的异常情况,给定时器、计数器等核心功能的实现带来阻碍。
今天就结合实战场景,拆解FB块内不能直接使用上升沿指令的底层原因,重点讲解如何通过“自定义上升沿逻辑”,编写可复用、无异常的计时器功能块,解决大家在编程中的实际痛点。

一、先搞懂:FB块内为什么不能直接用上升沿指令?

很多工程师疑惑,主程序(OB1)中可以正常使用的上升沿指令,为什么放到FB块里就失灵了?甚至查阅西门子官方手册会发现明确提示:“在同一周期内多次调用功能块时,不应使用上升沿、下降沿、定时器、ALT、ALTP 和计数器指令”。
核心原因在于:西门子S7-200 SMART的上升沿指令自带隐含的全局变量,这个变量由系统自动分配,用于存储上一个扫描周期的信号状态,且整个项目中该变量是唯一的,并非每个FB实例独有。
简单来说,FB块是带背景数据块的子程序,每个FB实例有独立的存储区,但上升沿指令的隐含变量是全局共享的——当多次调用FB实例,或FB块嵌套调用时,不同实例会共用这个隐含变量,导致信号状态混乱,出现“误触发”“持续触发”等问题;即便仅调用一个FB实例,也会因隐含变量与FB内部逻辑的存储冲突,导致上升沿检测异常,无法达到预期效果。
这里要特别区分:子程序(SBR)中若仅调用一次,偶尔可使用上升沿指令,但FB块无论调用次数多少,直接使用上升沿指令都存在风险,这也是FB块与子程序在沿指令使用上的关键差异。

二、实战核心:自定义上升沿逻辑(替代系统指令)

既然FB块不能直接使用系统上升沿指令,我们就通过“手动存储信号状态”的方式,自定义上升沿逻辑——利用FB块的静态变量(Static)保存上一个扫描周期的输入信号状态,与当前周期的信号状态进行对比,从而判断是否产生上升沿,完美规避全局变量冲突的问题。
核心原理(3步实现):
在FB块中定义3个关键变量:输入信号(IN类型,触发定时器的启动信号)、自定义上升沿输出(OUT类型,替代系统上升沿指令的输出)、信号状态存储(Static类型,保存上一周期的输入信号,避免全局冲突);
1.png

编写逻辑:将当前输入信号与上一周期存储的信号状态进行对比,若当前为“1”、上一周期为“0”,则判定为上升沿,触发自定义输出;
2.png

更新存储:将当前周期的输入信号状态,赋值给静态变量,用于下一周期的对比(静态变量保存在FB实例中,不参与外部传递,每个实例独立存储,不会冲突)。
3.png

关键提醒:静态变量是实现自定义上升沿的核心,其数据会保存在FB的背景数据块中,每个FB实例的静态变量相互独立,不会出现复用冲突,这也是区别于临时变量(TEMP)的核心优势——临时变量仅在当前扫描周期有效,无法保存上一周期的信号状态,无法实现沿检测功能。

三、完整实战:编写可复用的FB计时器功能块

结合上述自定义上升沿逻辑,我们实战编写一个“运行计时器(C_Timer)功能块”,实现“启动信号开始先复位计时器状态位,然后再开始计时”的功能,可直接用于工业控制中的运行计时器功能,且支持多次调用无异常。
本次实战环境:STEP7-MicroWIN SMART V3.1 + S7-200 SMART G2 PLC(如ST32),全程采用符号寻址,贴合实际工程编程习惯,同时兼顾UDT的便捷性(可选)。

步骤1:新建FB块,定义变量表

1. 打开STEP7-MicroWIN SMART V3.1,在项目树“程序块”上右键,选择“插入”→“功能块(FB)”,命名为C_Timer”;
2. 双击FB块,打开“本地变量表”,按以下类型定义变量(变量名称、类型、注释清晰,避免后续调用混乱),可根据需求结合UDT创建变量(需先创建UDT类型,后续修改变量只需调整UDT,无需重新调用FB):
4.png
步骤2:编写FB块核心逻辑(LAD梯形图)
逻辑分为3部分:时长转换、自定义上升沿检测、定时器控制、输出反馈,全程采用梯形图编写,直观易懂,贴合工程师编程习惯,具体逻辑如下:
时长转换
5.png

调用自定义上升沿检测指令:
6.png

定时器控制逻辑:
7.png

复位计时器:
8.png

步骤3:调用FB块,测试功能

1.   FB块编写完成后,保存并编译(无报错即可);调用FB块时,需为其分配背景数据块(DB),系统会自动创建优化的存储区,可在“全局变量表-FB实例表”中查看存储详情,无需手动分配地址;
2.   切换到主程序(Main),从“程序指令”→“功能块”中找到“C_Timer”,拖拽到梯形图中,为其分配背景数据块并连接外部变量:
Start:连接外部触发信号(如I0.0,按钮输入);
PT:设置预设延时时间(如T5s,即延时5秒);
Done:连接外部输出(如Q0.0,控制指示灯、接触器);
ET/RemainingTime:可连接到HMI,用于实时显示当前计时时间或倒计时间。
9.png

3.   下载程序到PLC,进行测试:
10.png

多次调用该FB实例(如分配DB2),分别连接不同的启动信号和输出,测试无冲突、无误触发,证明功能块可正常复用。

四、实战注意事项(避坑关键)

1.   定时器使用注意:FB块内的定时器需定义为Static类型,不可直接使用全局定时器(如T0、T1),否则多次调用FB时会出现定时器编号冲突,导致计时紊乱;同时注意定时器分辨率(1ms、10ms、100ms),根据控制精度选择,避免CPU负载过高;
2.   多实例调用限制:FB块最大嵌套层数为8层,若嵌套运动控制系统块,需注意部分运动控制块本身包含2层嵌套关系;FB块最大数量为128个,调用时需控制数量和嵌套深度;
3.   变量寻址规范:引用FB块中的静态变量时,需在变量前加“,若不加“,系统会自动创建新的全局变量,导致逻辑异常;不同项目之间复制FB块时,需先复制所用的UDT变量,再复制FB块,避免变量缺失。

五、总结

西门子S7-200 SMART STEP7-MicroWIN SMART V3.1中,FB块不能直接使用上升沿指令,核心是系统沿指令的隐含全局变量与FB实例独立存储区冲突导致的。通过“静态变量存储上一周期信号状态+逻辑对比”的方式,可轻松实现自定义上升沿,完美替代系统指令。
本次实战编写的上升沿触发计时器FB块,不仅解决了沿指令使用的痛点,还具备高复用性、无冲突的优势,可直接应用于工业控制中的运行计时功能,同时兼顾了UDT、静态变量等V3.1版本新增功能的使用技巧。
其实FB块的核心价值在于模块化复用,只要掌握自定义沿逻辑、静态变量使用、定时器封装等技巧,就能规避大部分编程坑,大幅提升编程效率和程序稳定性。后续会分享更多S7-200 SMART FB块实战技巧,关注不迷路,一起搞定PLC编程难题!
朋友们想了解和测试哪些ST32的项目呢,欢迎在评论区留言,我们也将尽力在后面的测评文章内给出测试结果与答复。
想要源码的朋友,赞赏一下并留下你的邮箱地址,我将和上期的源码一起发给您。

西门子S7200SMART中关于FB块内使用“定时器”实战:电机反馈信号定时检测方案

相关精选文章分享:

终于忍不住出手了!西门子S7200SMARTG2ST32开箱对比跑程序全实录

免费下载西门子S7200SMART与MCGS触摸屏完整学习例程!模拟量、液压、PID、伺服、高速计数、报警记录等一应俱全!

一文读懂MCGS物联网触摸屏远程下载西门子S7200SMART程序的方法(附资源免费下载)

EPLAN2022绘制安装板平面布局图并自动生成机柜设备清单的步骤
EPLAN2022自动成生端子排接线图的步骤

博途减少定时器/计数器占用DB块数量的三种方法与实践

基于西门子S71500PLC的罗克韦尔FactoryTalkBatch系统集成应用研究

西门子S7200SMART与正泰电子式电能表Modbus通讯详细教程(附例程下载)

PLC在通讯过程中常用的心跳功能

EPLAN2024软件简介(附软件与部件库下载)

在WinCC中如何使用VBS读取变量归档数据到EXCEL表格?附源码下载

如何把WinCC的参数保存到TXT文件中?

西门子PLC常用的功能块与算法收藏大合集(附下载地址)

更多精彩内容请到公众号查阅...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码