TIA Portal 报警和诊断系统实战

在之前的教程中,我们介绍了 PLC 编程中的一个有用工具:梯形逻辑中的状态机。这次,我们将扩展状态机的应用,构建一条结构化的路径,用于故障诊断和机器报警开发,从而在西门子 TIA Portal 中创建一个坚实的报警功能块。

PLC 程序能够操作和维护整个机器和工厂的生产,但与物理组件的交互会导致不理想的、常常不安全的系统行为。在开发这类系统时,确定并编写能够预防、警告和阻止不稳定操作的诊断和报警算法至关重要。这可以通过构建 PLC 逻辑来映射最不利的条件并采取相应措施来实现。大多数情况下,这些措施以 HMI/SCADA 报警的形式呈现,让系统操作员知道已检测到问题。

此外,在考虑状态机时,每个状态转换的条件和动作都很容易与警告和故障联系起来——这为报警增添了额外的价值,因为它为操作带来了连续性和清晰度。

1、TIA Portal 中的数字报警

TIA Portal 中的数字报警由字类型变量中的布尔信号表示,因此让我们构建一个简单的报警示例。首先,我们需要一个数据块来声明和存储报警值。

最初,我们需要一组布尔变量(16 个布尔值的数组)和一个字类型变量。PLC 逻辑负责将报警状态写入每个单独的 Alarm_Bool,然后将所有布尔值收集到 Alarms_Word 中,HMI 将访问该字。

状态机程序可以评估激活报警布尔值的条件。在我们的示例中,当机器状态处于初始状态(“State_Machine_DB”.Actual_Step==0)且机器的 Initial_Position 位未激活时,第一个报警布尔值被触发。通常为每个报警条件设置监控时间很有用,在本例中,使用 TON(定时器通电延时)指令来检测这些已持续五秒钟的条件。

该网络的结构可以根据需要复制到所有其他 15 个报警条件中,之后,我们需要将信号从布尔变量转换为字变量。有多种方法可以将一组布尔值转换为一个字;在本教程中,我们使用 “Gather” 块。

现在,PLC 方面已经准备就绪,我们需要将 HMI 添加到项目中。

选择适合您应用的 HMI 设备,然后单击 “Browse...” 按钮以轻松创建 PLC-HMI 连接。

PLC 所需的所有标签都应在 HMI 标签中复制。

在 “Details view” 中,可以通过在项目树中选择所需的数据块(AlarmsDB)来轻松访问 PLC 标签的摘要,然后可以将标签从 DB 拖放到 HMI 标签表中。一旦我们的 Alarm_Word 被复制,就可以将离散报警与该字的每个位关联起来。在我们的示例中,该字的第一位(列 Trigger bit = 0)将触发报警消息:“Start condition - Machine is NOT in initial condition”。

当报警处于活动状态时,报警消息将显示在全局屏幕(一个窗口将弹出在 HMI 屏幕上)。可以通过项目树中的 Screen Management 项在全局屏幕上个性化报警窗口、消息、颜色、激活和属性。

结构化 16 数字报警块

在编程 PLC 系统时,标准化和构建结构良好的代码非常重要,因为它使扩展、后续开发和调试以及在线监控变得更容易。尽管我们在 TIA Portal 中实现第一个报警的方式是功能性的,但它确实带来了一些开发上的繁琐,需要创建多个条件、TON,并生成大量网络进行调试。考虑到这一点,让我们开发一个简单的功能块,能够返回报警字。同时,开发人员要做的就是执行 FB 并为每个块输入指定一个报警条件。

2、梯形逻辑

我们的功能块需要一个整数输入来确定数字报警的数量(从 1 到 16 个报警),以及每个报警条件的额外布尔输入。静态变量对于执行代码本身和存储每个报警状态是必要的。

对于逻辑本身,首先,我们需要将每个布尔状态转换为布尔数组,因为这将使在代码中迭代每个条件变得更容易。在 Network 2 中,我们还将 Num_Of_Alarms 输入偏移一个,因为报警变量的计数从 0 开始,而不是从 1 开始。

将报警数量限制在负值到 15 之间也很有用,最多 16 个报警。

现在,我们将测试报警条件本身。我们将在梯形逻辑中使用 for 循环来迭代所有规定的报警条件、定时器和布尔输出。alarm_pointer 变量被声明为一个整数静态变量,在每次迭代后递增一。对于每个数组类型的变量,可以通过以下格式将其索引寻址到 alarm_pointer 值:“#Array[#Alarm_Pointer]”。在 PLC 的每个 CPU 执行周期中,数组的索引等于 Alarm_Pointer 的值。

*如果需要,可以创建不同的报警组(对于每个 Alarm FB 单独调用)以适应多个超时值。例如:Alarm_Group_1_DB.Timeout_Time= 5s

Alarm_Group_2_DB.Timeout_Time=1M

要退出 for 循环(不跳转到 TEST_CONDITION),Alarm_Pointer 中的值应高于我们规定的 Alarms_Count。循环结束后,我们需要将 Alarm_Pointer 值重置为零,并将 Alarms_Bools 收集到 Alarms_word 中以输出所需的状态。

3、为搅拌机创建报警

既然我们的 FB 已经准备就绪,让我们跳到上一个示例中的搅拌机报警构建的实际示例,其状态机涵盖以下状态和转换。

最初,我们需要设计并列出状态机所需的报警及其描述。

让我们通过将 FB 从项目树拖放到目标网络中,将 16_Digital_Alarms FB 的调用添加到我们的主程序中。

功能块需要输入报警数量(整数值 8,因为我们正在创建 8 个报警)以及导致每个报警的每个条件。

提示:您可以按 F12 键水平分割屏幕,以便更轻松地可视化两个代码窗口,并将标签/指令从一个屏幕拖放到另一个屏幕。

下一步是将 PLC 中的 Alarm Word 标签链接到 HMI 标签,并将每条消息分配给其触发位。一些报警可以配置为 Warning 类,而不是 Error。

在 HMI 报警页面上,可以配置和自定义报警类。

除了在屏幕上弹出报警消息外,利用报警信号来自定义 HMI 中的元素也非常有用。例如,让我们创建一个链接到第六个报警(Valve B Fault)的 Valve Fault 动画。

可以轻松地将红色阀门图像在常规阀门上的可见性链接到相应的报警布尔值。然后,我们选择代表设备故障的图像,使其在报警标签等于一时可见。

14、结束语

报警和诊断系统的开发对于操作和维护基于 PLC 的机器和工厂至关重要。一个结构良好的报警系统不仅实现了主要目标的完整性(清晰性、流程连续性和维护协作),而且提供了一种清晰直观的方式来在各种程序中重现 PLC 逻辑,为开发人员提供了编程和监控报警以及在未来用户功能(如数据分析)中处理诊断数据所需的所有工具。


原文链接:Building an Alarm and Diagnostic System In Siemens Tia Portal

汇智网翻译整理,转载请标明出处