IEC 61131-3 标准包含强大的结构化工具,可以帮助用户将控制系统分解为可管理的单元,从而提高整体效率。
国际电工委员会(IEC) 可编程逻辑控制器标准第3 部分编程语言IEC 61131-3 包括基于现代软件开发环境需求的强大结构化工具。关键组件是顺序功能图(SFC) 和用户定义的功能块。两者都提供了将控制系统分解为可管理单元的好方法。
这些单元更容易被不同背景的人使用和理解。它提供了系统工程师、软件开发人员以及安装和维护人员之间缺失的联系。此外,它还为这些不同的群体提供了表达和交流的工具。
这样,在较大的应用程序中,多学科团队也可以相互协作,生成更易于理解和可重用的代码,并在程序员、安装和维护人员以及用户之间提供不同级别的隔离。
此外,可以在软件开发的早期执行错误检测和错误处理。另一种方法是在安装期间(甚至在运行时)创建这些程序,对于供应商(支持)和用户(停机)来说都太昂贵。
提供控制系统编程的结构
结构化控制系统代码的优点有很多,包括: 更好的系统概述,不仅对原始程序员很重要,而且对安装和维护人员也很重要;为多学科开发团队的内部沟通提供更好的基础;不同职责之间的明确区分;更好地关注实际问题和可能的解决方案;以及可重用软件的基础。
结构化是通过将问题分成更小的部分来完成的。这些部分还可以进一步细分。但这也有局限性:持续细化不能无限制,因为这会增加集成工作。
模块化块的使用涉及5 个基本原则:
? 编程语言应支持模块化单元。
? 单元的组成方式和数量应使其具有最少的接口和最少的交互。
? 接口应该很小,需要最少的数据交换。
? 需要明确定义模块交互以提高其可重用性。
? 模块应提供数据封装能力:应用程序数据被分区,每个分区只能由一组函数访问,从而可以隐藏不必要的访问。
构建编程软件的7 个步骤
以下7 个步骤提供了构建控制系统编程软件的成功途径:
? 识别控制系统的外部接口。
? 定义控制系统和工厂其他部分之间交换的主要信号。
? 定义所有操作员交互、覆盖范围和监控数据。
? 分析控制问题,从顶层到逻辑分区逐步分解。
? 定义所需的功能块。
? 定义应用程序不同部分的扫描周期要求。
? 通过定义资源、将程序连接到物理输入和输出以及将程序和功能块分配给任务来配置系统。
IEC 61131-3 提供了可以支持这些步骤的合适环境。下面以发酵过程及其控制系统为例详细讨论软件构建的编程过程。图1是整个系统的示意图。
发酵过程包括一个可以填充液体的大容器(进料阀),用加热带加热(通过对流冷却),通过电机搅拌,并且可以将酸和碱添加到容器中。加工完成后,使用收获阀收获产品。要创建本例的控制程序,需要完成上述7个步骤:
1. 步骤1
识别控制系统的外部接口,包括:
? 温度传感器反馈;
? pH 传感器反馈;
? 阀门位置反馈;
? 来自电机的反馈(速度);
? 输出至阀门;
? 输出至电机;
? 输出至加热区。
2. 步骤2
定义控制系统和工厂其他部分之间交换的主要信号。
在此示例中,系统未与工厂的其余部分耦合,但这在现实中不太可能。例如,可能需要一根连接到容器的管道,该管道还需要连接到接收系统,例如容器或瓶子的运输系统。与企业资源规划(ERP) 系统的结合也是可能的。
3. 第三步
定义所有操作员交互、覆盖范围和监控数据。
对于操作员,我们将“开始”、“停止”和“持续时间”按钮定义为系统的输入。
4.第四步
分析控制问题,从顶层到逻辑分区逐步分解。
这个过程有5个主要功能:
A。主顺序,例如顶层工艺步骤——灌装、加热、搅拌、发酵、收获、清洗;
b.阀门控制,操作用于填充和清空容器的阀门;
C。温度控制,用于监测容器温度并调节加热器;
d.搅拌器控制,用于根据主工艺顺序的要求启动搅拌器电机。
e. pH控制,用于监测发酵内容物的酸度,并根据需要添加酸或碱。
5.第五步
定义所需的功能块。
使用上面的定义并向其添加(高级)功能块,我们可以在编程语言中使用这些功能块图。发酵控制程序功能框图如图2所示。
图2:该图表示发酵过程的功能框图,左侧为输入,右侧为输出。
功能块主序列连接到操作员输入。它由连接到相关输入和输出的其他控制块支持。这些附加块可以是供应商提供的块,例如使用PID 控制的温度控制块,也可以由您创建(图3 中所示的序列是使用SFC 构建的)。
图3:顺序功能图(SFC) 提供了一种将可编程控制器程序划分为一系列直接相互连接的步骤和转换的方法。
SFC 提供了一种将可编程控制器程序划分为一系列直接相互连接的步骤和转换的方法。与每个步骤相关联的是一组操作,并且与每个转换相关联的是一个转换条件。
从初始化开始,因为系统第一次启动时,系统的状态是未知的,所以我们必须检查阀门的位置等。然后开始灌装,直到达到适当的液位。下一阶段是加热,直到发酵过程开始。接下来进入实际发酵过程控制部分。
完成后,农产品就会被收获,然后清理干净并准备再次开始。这种分解使每个参与者都能清楚地了解所涉及的序列,并进一步模块化为功能块,然后可以用4 种语言中的任何一种进行编程。
现在是时候完成执行级编程工作了。这些工作可以分配给来自不同背景的人。为此,IEC 定义了2 种图形和2 种文本编程语言,即指令表、结构化文本、梯形图和功能块图,以最好地满足当前的需求和问题。此外,如果需要,可以通过SFC 进一步分解执行块。
6.第六步
定义应用程序不同部分的扫描周期要求。
在此示例中,原则上我们只有一个循环,可以以连续模式运行。或者,我们可以让它定期运行,例如每20 毫秒运行一次。剩余时间可用于其他序列,例如收获期间的检查,或控制运输/装瓶系统,或检查所有边界和错误条件。
7.第七步
通过定义资源、将程序与物理输入和输出链接以及将程序和功能块分配给任务来配置系统。这个阶段是针对相关系统的。
它包括符号到I/O 地址的物理映射。通过使用符号表示,可以实现更好的硬件独立性。这对于创建独立于硬件的功能块特别有效。有了清晰的物理映射,现场重新布线就更容易完成。例如,交换两个数字输入的接线仅更改物理映射中的两条线,程序的其余部分保持有效,无需更改。
这里,资源是相互映射的,意味着无论系统中哪个部分运行在哪个处理器上,都存在一一对应的关系。 IEC 61131-3 支持多线程处理环境,尽管大多数系统实际上仍然使用单个处理器来处理程序。
用户还必须将任务映射到步骤6 中定义的扫描周期和事件。这样,系统中可以有多个过程,例如这里描述的发酵过程,并得到整体检查和控制的支持,从而具有支持环境,例如供应链前端的装瓶或液位。
IEC 61131-3 编程标准为多个级别的用户和应用程序提供了强大的工具。使用高级SFC 可以很好地概述正在开发的系统,从而提高可读性和透明度。它为当前控制问题的模块化提供了指导。此外,它为区分不同的开发任务并将注意力集中在实际编码层、创建可重用的软件代码提供了基础。