结构化程序设计的三种基本结构(结构化程序设计的基本原则)

结构化程序设计的三种基本结构(结构化程序设计的基本原则)

作者|伊尔科·范德瓦尔

IEC 61131-3标准包括强大的结构化工具,可以帮助用户将控制系统分解为可管理的单元,从而提高整体效率。

根据现代软件开发环境的要求,IEC可编程逻辑控制器标准第3部分编程语言IEC 61131-3包括强大的结构化工具。关键部分是顺序功能图(SFC)和用户自定义功能块。它们都提供了一个很好的方法来将控制系统分解成可管理的单元。

不同背景的人更容易使用和理解这些单元。它提供了系统工程师、软件开发人员以及安装和维护人员之间缺失的环节。此外,它还为这些不同的群体提供了表达和交流的工具。

这样,在更大的应用程序中,多学科团队也可以相互协作,编译更容易理解和重用的代码,并在程序员、安装人员和维护人员以及用户之间提供不同级别的隔离。

此外,错误检测和错误处理可以在软件开发的早期阶段进行。另一种方法是在安装过程中(甚至在运行时)创建这些程序,但对于供应商(支持)和用户(停机)来说,成本都太昂贵了。

为控制系统编程提供结构

结构化控制代码的优势有很多,包括:对系统有一个更好的概述不仅对最初的程序员很重要,对安装人员和维护人员也很重要;为多专业开发团队的内部交流提供更好的基础;不同职责之间的明确划分;多关注现实问题和可能的解决方案;也是可复用软件的基础。

结构化是通过将问题分成更小的部分来完成的。这些部分可以进一步细分。但是,这有其局限性:不能无限细化,因为会增加集成工作。

模块化砌块的使用涉及五个基本原则:

编程语言应该支持模块化单元。

单元的组成和数量应该使得它们具有最少的接口和相互作用。

接口应该很小,需要最少的数据交换。

需要清楚地定义模块交互,以增加其可重用性。

模块要提供数据封装功能:对应用数据进行分区,每个分区只能被一组函数访问,这样可以隐藏,避免不必要的访问。

编程软件结构化的 7 个步骤

以下七个步骤提供了构建控制系统编程软件的成功方法:

识别控制系统的外部接口。

定义控制系统和工厂其他部分之间交换的主要信号。

定义所有运营商的交互、覆盖和监控数据。

控制问题分析,从顶层到逻辑分区,逐步分解。

定义所需的功能块。

定义应用程序不同部分的扫描周期要求。

通过定义资源、将程序与物理输入和输出连接起来以及将程序和功能块分配给任务来配置系统。

IEC 61131-3提供的适当环境可以支持这些步骤。下面将以发酵过程及其控制系统为例,详细讨论编程软件构建的过程。图1是整个系统的示意图。

发酵过程包括一个大容器,容器内可以装液体(进料阀),用加热带加热(对流冷却),用电机搅拌,容器内可以加入酸和碱。处理后,收获阀用于收获产品。要为此示例创建控制程序,您需要完成以上7个步骤:

1步骤1

识别控制系统的外部接口,包括:

来自温度传感器的反馈;

来自pH传感器的反馈;

来自阀门位置的反馈;

来自电机的反馈(速度);

输出到阀门;

输出到电机;

输出到加热带。

第二步

定义控制系统和工厂其他部分之间交换的主要信号。

在这个例子中,系统没有与工厂的其他部分耦合,但这在现实中是不太可能的。例如,人们可能需要连接到容器的管道,容器也需要连接到接收系统,例如容器或瓶子的运输系统。它还可以与企业资源规划系统相结合。

3步骤3

定义所有操作员来交互、叠加和监控数据。

对于操作员,我们将“开始”、“停止”和“持续时间”按钮定义为系统输入。

4第四步

控制问题分析,从顶层到逻辑分区,逐步分解。

该流程有5个主要功能:

A.主要顺序,例如,最上面的工艺步骤-灌装、加热、搅拌、发酵、收获和清洗;

B.阀门控制,操作用于填充和清理空容器的阀门;

C.温度控制,用于监控容器的温度,调节加热器;

d)搅拌器控制,用于根据主工艺顺序的要求启动搅拌器电机。

E.pH控制,用于监控发酵内容物的酸度,并根据需要添加酸或碱液。

第五步

定义所需的功能块。

使用上述定义并添加(高级)功能块,我们可以在编程语言中使用这些功能块图。发酵控制程序的功能框图如图2所示。

▎图2:该图显示了发酵过程的功能框图,左边是输入,右边是输出。

功能块的主序列与操作员输入相连。它由连接到相关输入和输出的其他控制块支持。这些附加模块可以是供应商提供的模块,例如由PID控制的温度控制模块;也可以自己创建(图3是SFC构建的序列)。

▎图3:顺序功能图(SFC)提供了一种将可编程控制器程序分成一系列步骤和转换的方法,这些步骤和转换彼此直接相连。

SFC提供了一种将可编程控制器程序分成一系列步骤和转换的方法,这些步骤和转换彼此直接相连。与每个步骤相关联的是一组动作,与每个转换相关联的是一个转换条件。

从初始化开始,由于系统第一次启动时系统的状态是未知的,所以我们必须检查阀门的位置等。然后开始加注,直到达到合适的液位。下一步是加热,直到发酵过程开始。然后,进入实际发酵过程控制部分。

完成后,收获产品,然后清理干净,准备重新开始。这种分解使每个参与者清楚地理解所涉及的序列,进一步模块化成功能块,然后用四种语言中的任意一种进行编程。

现在是时候在执行层完成编程了。这些工作可以分配给不同背景的人。为此,IEC定义了两种图形和两种文本编程语言,即指令表、结构化文本、梯形图和功能框图,以最好地满足眼前的需求和问题。此外,如果需要,SFC可以进一步分解执行块..

第六步

定义应用程序不同部分的扫描周期要求。

在这个例子中,我们原则上只有一个循环,可以以连续模式运行。或者,我们可以让它定期运行,比如每20毫秒运行一次。剩余时间可用于其他序列,如收获期间的检查,或控制运输/装瓶系统,或检查所有边界和错误情况。

第七步

通过定义资源、将程序与物理输入和输出连接起来以及将程序和功能块分配给任务来配置系统。这个阶段是特定于相关系统的。

它包括符号到I/O地址的物理映射。通过使用符号表示,可以获得更好的硬件独立性。这对于创建独立于硬件的功能块尤其有效。有了清晰的物理映射,现场重新布线更容易完成。比如交换两个数字输入的接线,在物理映射中只需要改变两条线,程序的其余部分不变仍然有效。

在这里,资源是相互映射的,也就是说无论哪个部分运行在系统的哪个处理器上,都可以一一对应。IEC 61131-3支持多线程处理环境,尽管大多数系统实际上使用一个处理器来处理程序。

用户还必须将任务映射到扫描周期和事件,如步骤6中所定义。这样一个系统就可以有多个程序,比如这里说的发酵过程,有整体的检测和控制来支撑,背后还有支撑的环境,比如供应链前端的装瓶或者液位。

IEC 61131-3编程标准为多层次的用户和应用程序提供了强大的工具。高级SFC可以很好地概述正在开发的系统,从而提高可读性和透明度。它为当前控制问题的模块化提供了指导。此外,它为区分不同的开发任务提供了基础,并着眼于实际的编码层来创建可重用的软件代码。

关键概念:

■ IEC 61131-3编程标准为多级用户和应用提供了强大的工具。

■顺序功能图(SFC)和用户派生的功能块是基本部分。

想一想:

你是否充分利用了IEC 6113-3标准进行结构化设计?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/298549.html

发表回复

登录后才能评论