程序开发:如何简化复杂的系统

控制系统工程师的工作过程可能非常复杂。过程、操作员、环境和控制系统之间的相互作用有时会产生一系列令人眼花缭乱的结果。

通过布拉德利Ems 8月12日

“如果你不能简单地解释,说明你还不够理解。”——爱因斯坦

作为控制系统工程师,我们的工作过程可能非常复杂。过程、操作员、环境和控制系统之间的相互作用有时会产生一系列令人眼花缭乱的结果。我们尽一切努力来预测和管理这些结果,但随着系统变得越来越复杂,即使是最彻底的工程师也可能达不到要求。此外,我们还可以使用越来越多的工具集,例如IEC 61131-3编程语言,允许使用预编程代码块的实用程序,以及将控制处理器操作到操作系统级别的能力,而控件的内部复杂性只会增加整个系统的复杂性。现代控制处理器给了我们一把瑞士军刀,它有一千个刀片来帮助我们,我们也可以用一千个刀片来割伤自己。Quinn Norton最近的一篇文章虽然没有特别提到控制,一切都破碎了,提到了这一现象。

在我看来,控制专业人员有责任在我们设计和编程的复杂系统中找到隐藏的简单性。更新爱因斯坦的格言:如果你不能简单地编程,你就不够理解它。如果做不到这一点,对我们的客户、用户以及最终对我们的职业都是一种伤害。

o一家汽车公司有一个喷漆室,它的变色逻辑非常复杂,以至于没有人可以添加、删除或编辑颜色。在这种情况下,复杂性是经过深思熟虑的,程序员这样做是为了期望他将被需要进行任何颜色表的更改,从而使他成为该设施不可或缺的一部分。设备工程师花了几天时间解开代码,并将其重写为可以理解的内容。原来的程序员被永远送走了。

o一家生物技术公司有一台机器,上面有一个简单的序列。然而,该公司坚持使用大量不适合该任务的预编程代码块来编程,而不是简单的梯形逻辑。编程工作所需要的工作量是删除块的绝大多数功能所需要的许多倍,其结果是一个“黑盒”程序,无法由现场人员监控或维护。

那么,如何从一个复杂的系统中提炼出简单呢?下面是我开发的一些规则,让程序更容易理解和维护:

1.了解你的听众。这是编程的首要指令。您的系统会得到维护吗工程师、技术人员还是电工?对正在实现的平台的熟悉程度如何?工厂人员熟悉哪些语言?交付一些代码级别远远高于维护能力的东西,与交付用克林贡语编写的系统文档没有什么不同。

2.保持标记名称的描述性但简短。长标记名可能和太短的标记名一样神秘,并且在故障排除时往往会限制可查看的代码数量。将散文保存为元素描述符。

3.把问题分解成小块。即使是最复杂的系统也可以细分为易于理解的小问题。花点时间来计划你的工作,把一个哥斯拉大小的任务分成几十个壁虎大小的任务。

4.使用直通编程。流程开头的逻辑应该接近应用程序的顶部,而末尾的编程应该接近应用程序的底部。在程序中某个特定点上使用的条件应该在该点之上定义。

5.避免索引。使用带有指针的数组或表是减少代码大小的好方法,但这也是使程序难以监控的好方法。除非绝对必要,否则不要使用数组。

6.限制预编程代码块的使用。这些代码块可以作为简单设备(如电机启动器或阀门)的很好的快捷方式,并且实际上可以提高程序的清晰度。但如果它们变得太大,它们的功能就会变得不确定,甚至依赖于配置。块可能导致程序的大部分成为疑难解答程序或编辑器的黑盒。

7.限制使用不熟悉的语言。如果植物只精通阶梯逻辑,那么使用大量结构化文本可能会令人烦恼。如果需要这样的编程,请尽一切可能限制它,并很好地记录对代码的调用,解释它的功能、代码的输入是什么以及可以预期的输出是什么。

8.文件,文件,文件。除了通常的元素、横杠和节注释之外,在程序的第一个部分,花点时间告诉未来的用户您所做的任何与机器默认值不同的操作。这可能包括I/O扫描设置、故障条件设置、程序执行中断等。你发现修改这些东西很重要,而他可能会发现了解这些东西很重要。

我们很了解自己的业务。让我们通过让我们所做的看起来简单来证明这一点。

本文由Bradley Ems撰写。布拉德利是一名项目经理特立独行的技术是一家领先的自动化解决方案提供商,为流程工业提供工业自动化、战略制造和企业集成服务。MAVERICK提供广泛领域的专业知识和咨询,包括工业自动化控制、分布式控制系统、制造执行系统、运营战略、业务流程优化等。