什么是用户自定义功能块?
用户自定义功能块(UDFB)将可编程逻辑控制器(PLC)代码封装为单个可测试的程序组织单元(POU)。该POU可在程序中多次实例化,或作为大型库的组成部分使用。UDFB类似于C编程语言中的函数。
本工程简报介绍了一个专为控制和监测电机启动器设计的西门子TIA Portal UDFB。我们还将重点介绍TIA Portal中简化数字状态机开发和故障排查的部分功能。
假设读者已具备西门子PLC基础知识,并熟练掌握梯形图逻辑(包括移动功能块操作)。
另请注意,本代码基于西门子S7-1200 CPU 1215 FC开发测试。
归纳 :UDFB是PLC程序的核心构建模块,精心设计的UDFB可显著节省时间。它使代码模块化且健壮,并可将测试通过的代码作为库跨项目复用。西门子TIA Portal软件通过高级编程技术(如状态名常量抽象)简化基于UDFB的状态机开发。
延伸阅读
本工程简报是西门子TIA Portal UDFB系列讨论的权威文档,基于西门子S7-1200 CPU 1215 FC开发测试。相关文章包括:
本文隶属 DigiKey 西门子 PLC 与自动化资源中心。访问该中心获取更多关于西门子组件、应用及编程的技术简报。
图 1 :电机启动器实例化时设置了基于时间的测试值以模拟人工操作。
技术提示 :UDFB可分为边沿触发型或电平敏感型。边沿敏感型UDFB会在上升沿或下降沿触发(启动),而电平敏感型块仅在输入有效时激活。明确UDFB类型对理解和故障排查至关重要:
边沿触发 :通过脉冲激活(具体取决于设计的上升沿或下降沿),运行至完成或中止。
电平敏感 :仅在使能信号存在时激活。
本文所述的UDFB为电平敏感型。当xEnable信号存在时,电机启动器的xCoilDrive信号将激活。
电机启动器的控制
从PLC的角度来看,控制大型工业电机启动器有多种方式。其范围涵盖从通过输出引脚实现的简单开环控制,到基于网络可监控各相电流的解决方案。
本说明将通过闭环验证电机启动器是否已激活。如图1所示,这是通过UDFB实现的。具体而言,UDFB在接收到xEnable信号后会激活xCoilDrive输出线路。随后将电机启动器的辅助触点反馈至UDFB的xSensor输入。
电机启动器状态
用户自定义功能块(UDFB)包含五种状态。通过监测电机启动器辅助触点的反馈信号,可检测到与各状态相关的基础故障。
-
断开状态 :电机启动器处于非激活状态,接触器线圈未通电。若电机启动器意外闭合超过timGlitch设定时长,UDFB将进入故障状态。这种情况可能发生在技术人员使用绝缘螺丝刀强制操作启动器衔铁时。
-
闭合中状态 :电机启动器接触器正从断开状态向物理闭合状态过渡。若触点在timClose时限内未能闭合,UDFB将进入故障状态。图1展示了由此状态触发故障的UDFB。
-
闭合状态 :关联电机上的启动器正在运行。若传感器信号丢失超过timGlitch设定时长,UDFB将进入故障状态。该故障可能由连接电机启动器的驱动线松动或反馈线路引起。也可能是过载事件导致,此时热过载保护模块会触发启动器脱扣。
-
断开过程 :电机启动器接触器从闭合状态转为断开状态。若触点在timClose时限内未断开则触发故障,这表明主继电器或中间继电器触点已熔焊。
-
故障状态 :电机启动器处于故障状态。当使能信号禁用且复位按钮按下时,该状态将解除。
梯形图逻辑状态编码
梯形图逻辑中的状态编码方式多样,包括锁存器、置位复位线圈,直至状态的数字表示法。我们的5状态示例可采用这三种方法中的任意一种构建。但笔者认为图2和图3所示的数值法最易于理解。我承认这可能源于我的嵌入式编程背景——我更倾向于用C语言的switch-case语句在树形结构中编码状态。
梯形图逻辑中的枚举数据类型
若完全依赖数字,很容易丢失对数值状态的追踪。例如,用十进制数1指代闭合状态并无内在含义。但通过添加抽象层,可用有意义的关键字替代数字。
如图2所示,西门子TIA门户提供了便捷的常量枚举方法。此处可见每个状态都有意义明确的名称。例如将uiStClosing映射为数值1。本示例采用匈牙利命名法,前缀ui表示无符号整数,st表示状态。
图 2 :UDFB状态使用的状态编码。
这些枚举状态的功能如图3所示,该图展示了闭合状态的梯形逻辑网络。网络起始处使用比较运算符判断uiState变量是否等于uiStClosing常量——我们是否处于状态1?假设当前处于闭合状态,存在三种转移路径,包括跳转至:
-
已闭合状态 :这是电机启动器从开启过渡到闭合的自然流程。
-
故障状态 :当电机启动器反馈在timClose时限前未激活时触发。
-
开启状态 :当操作员快速改变主意,在接触器完全进入闭合状态前尝试打开时发生此状态转移。
注意逻辑中包含字符串移动函数(S_MOVE),会将"failed to close"复制到strFaultCondition字符数组。这为技术人员提供了导致UDFB故障条件的清晰说明。若使用额外代码整合故障字符串,该信息也可用于更大型的HMI报警系统。
图 3 :UDFB闭合状态网络,前三支路为状态转移逻辑,末支路为输出逻辑。
技术提示 :图3包含多个串联连接的置位与复位线圈。这为将输出逻辑整合到每个网络提供了便捷紧凑的方式。关于串联线圈及置位/复位线圈布局的更多注意事项,请参阅此技术论坛帖子。如文中所述,许多人对串联线圈和置位/复位线圈持强烈反对态度。
状态机对称性与设计概述
基于数值的状态机具有惊人的紧凑性和对称性,各状态间存在紧密关联。每个状态都严格遵循图3(闭合状态)模式,通过枚举强调清晰性,包含明确的条件跳转。
若能理解图3,其他状态将易于掌握。其余状态的深入探索留作课后作业。另建议下载此电机控制器的PDF文档。
UDFB.pdf (88.1 KB)
故障状态逻辑
结束前,我们将简要分析图4所示的故障状态。如前所述,首先进行相等性测试——是否处于故障状态。随后分为两个分支:
-
若电机启动器关闭(未启用)且复位按钮被按下,则跳转至开启(空闲)状态。
-
最后一个分支通过串联置位和复位线圈更新UDFB的功能块。
注意:系统复位前必须先关闭电机启动器。这能防止电机意外启动,因为操作员或技术人员必须主动关闭系统。
图 4 :故障状态的逻辑示意图。
最终思考
可采用数值状态变量构建状态机。由此生成的紧凑代码非常适合UDFB封装。在示例中,每个网络封装了状态转移逻辑及各状态的输出逻辑。
虽然示例代码仍较简单,但与锁存器及置位/复位线圈等方案相比,该方法具备良好的扩展性。例如,可逆电机启动器的代码量将翻倍。但每个状态网络的逻辑仍易于追踪。
我们期待您的反馈。您是否有偏好的编程方法?请在评论区分享您的观点。若本文对您有所启发,请不吝点赞。
相关文章
若您喜欢本文,这些相关文章或许也能助益:



