构建值得信赖的软件

Eelco van der Wal是位于荷兰的工业控制组织PLCopen的总经理,他正在进行一场影响应用的运动,因此,软件可靠性控制工程师的一部分是负责的。然而,他的努力只能提供部分解决方案。

汉克·霍根为《控制工程》撰写 二零零七年七月一日
栏:
“我们不想测试产品的质量;我们希望提高质量。”
要构建值得信赖的软件,请仔细检查操作系统

Eelco van der Wal是位于荷兰的工业控制组织PLCopen的总经理,他正在进行一场影响应用的运动,因此,软件可靠性控制工程师的一部分是负责的。然而,他的努力只能提供部分解决方案。

可靠的控制软件需要坚实的基础,只有供应商才能提供。随着程序从几行代码扩展到数千行或更多行代码,van der Wal看到了不断膨胀的成本和风险。他还指出,在将应用程序部署到控制器之前或之后,更改几乎是可以保证的。

IEC 61131-3是一项标准化工业自动化编程语言的努力,提供了结构化编程环境的定义,包括功能块。

根据van der Wal的说法,降低成本和风险的关键是通过全球工业控制编程标准IEC 61131-3指定的接口进行结构化编程。虽然结构化编程的使用代表了对传统方法的一种改变,但van der Wal表示,其回报可以提高软件的可靠性等等。他说,当考虑多个项目时,收益甚至更大。

“如果在第一个项目和第二个项目之间有一定的重叠,你将看到成本、时间和风险因素的显著减少,以及(软件)质量的提高,”他说。

节省的成本各不相同,但范德沃尔表示,40%是一个不错的数字。因此,更可靠的软件的生产成本也可能更低。

看看控制工程师可以做些什么来提高软件的可靠性,也揭示了一些现有的工具,使工作更容易。此外,与控制器制造商的讨论揭示了他们如何通过改进自己的方法来确保软件可靠性来应对编码挑战。

功能块基础

在提倡基于标准的结构化编程方法的同时,van der Wal指出,这些好处并不是免费的,它们确实需要改变传统的代码开发方式。“你必须有一个合适的软件开发理念,”他说。

对于控制工程师来说,这意味着采用结构化的方法。问题必须分解成单独的组件,然后由功能块处理,这些功能块定义了输入和已知输出。

功能块是使用IEC 61131-3标准中的一种图形或文本语言设计的。在内部,它们定义了变量和数据类型,如整数、实数、布尔或数组。在设计了功能模块的基础上,进行了离线仿真。然后,当它满足需求时,将它与其他功能块集成到最终的应用程序中,然后对其进行部署和维护。

范德沃尔说,正是这些功能模块提高了可靠性,降低了成本。前者的出现是因为功能块相对较小且简单。因此,有可能在测试中完全练习它们,并确切地理解它们在做什么。成本降低是能够在另一个项目中重用完成的功能块的结果。其他节省是由于能够更容易地进行更改,从而以更少的时间维护应用程序。

结构化编程方法确实需要更多的前期工作,特别是在第一个项目中。这也意味着你不可能一头扎进一个问题里,不管那有多诱人。然而,控制问题划分任务可以借助于诸如顺序功能图之类的工具。

基于模型的设计工具

马萨诸塞州内蒂克的私人控股公司Mathworks对可靠的控制系统软件采用了不同但概念上相似的方法。随着技术计算软件,公司开发和提供基于模型的设计工具,这是其控制软件的基础。它的基于模型的方法来开发控制系统,就像结构化编程一样,需要定义问题并将其分解为更小的步骤。完成后,该公司的Simulink过程建模软件可以创建功能块模拟。

Mathworks的控制设计自动化市场总监保罗·巴纳德(Paul Barnard)解释说,一旦对流程进行建模,软件就可以用于代码开发。“你可以图形化地设计或描述一个算法,并通过自动代码生成生成C代码,然后编译并通常在某种类型的嵌入式目标上运行。”

美国国家仪器公司的LabView采用了类似的方法。图形化开发方法的好处在于,它们抽象了控制问题,让单个开发人员能够管理更多的功能。与生成机器指令的编译器一样,自动代码生成将人的因素从过程中移除。生成的代码比人工编写的代码更统一,而且可能更可靠,尽管这不能保证。

Mathworks负责验证、确认和测试的技术营销经理Brett Murphy指出,Mathworks意识到自动代码生成不是绝对正确的,并提供了测试生成的解决方案及其产生的模型的方法。“例如,我们有模型检查标准,”他说。

其他工具提供对模型和代码的形式化分析,从而证明是否有可能达到特定的故障模式。这样的工具允许在组件或模型级别进行检查,但是它们目前还不能扩展到大型系统。

没有机器是孤立的

缺乏可伸缩性是很不幸的,因为应用程序运行在平台上,而且通常运行在大型网络的一部分系统上。这种组合带来了一系列全新的问题,这些问题可能会影响到软件的可靠性,而这些问题有时超出了控制工程师的范围。

位于弗吉尼亚州夏洛茨维尔的通用电气发那科自动化公司Proficy HMI/SCADA软件的产品营销经理Roy Kok指出,平台操作系统(在这种情况下是微软Windows、NT或Vista)需要更新,如果可能的话,需要打完整的补丁。他说,但是在非关键领域还没有成熟之前就打补丁会对软件的可靠性产生负面影响。因此,像GE Fanuc这样的供应商必须提供专业知识,以了解补丁何时像童话中的粥一样刚刚好。

同样,其他软件和组件可能会损害自动化应用程序—即使最初没有问题。Kok说:“辅助软件的更新会直接影响到主要解决方案的运行和可靠性。

虽然软件的可靠性可以通过移除非关键或未经测试的额外组件来提高,但这还不够,KOK继续说道。我们需要的是一种能够发现第三方组件和其他地方变化的诊断方法。

例如,一条生产线可能是停机的,如果引用限位开关的一段代码被绕过,它可能会重新启动。有一个巨大的动机是立即进行更改,绕过开关,然后修复问题软件。考克说,重要的是,不能让这种暂时的解决方案在不知不觉中变成永久性的,并在一段时间后导致失败。GE发那科的变更管理系统可以定期自动扫描控制器软件,将结果与备份文件进行比较,识别变更,从而将其记录下来。

提高软件可靠性需要程序员和软件供应商做出改变,但是回报可能是更高的可靠性、更高的质量和更低的成本。

信任,但要验证已知的良好配置。Harding说:“这允许系统检测是否安装了未经测试的组件版本,包括第三方组件。”

西门子工程与自动化公司工程软件产品市场部的Eric Kaczor指出,终端用户面临着许多不同的软件。这种情况使得版本控制和版本兼容性难以实现和管理。有一种技术是冻结时间——至少就软件而言——来减少这个问题。因此,西门子将提供一张“黄金DVD”,其中包含用户使用其设备所需的软件。Kaczor说,这种设置下的软件会在某种程度上落后于最新的版本,但这种组合提供了一些最新软件可能无法比拟的东西。“这一切都保证能一起工作。”

对于西门子来说,Kaczor说,它试图确保软件与所有已发布硬件的任何组合都是兼容的。该公司通过广泛的回归测试来做到这一点,在满是设备的房间里测试每个新的预期软件版本。这样的检查是彻底的,但不是100%详尽的,因为对所有第三方软件进行验证是困难的,也许是不可能的。

Opto 22是一家位于加州Temeucula的I/O、控制器和软件硬件制造商。和其他公司一样,该公司在向客户发布软件之前进行回归测试。Opto 22质量保证小组的高级工程师罗杰•赫舍尔(Roger Herrscher)表示,该公司最近重组了其质量保证小组,以便更好地针对一系列可能的硬件测试其软件。以前,QA团队是由专门从事产品测试的工程师组成的。现在,Opto 22已经引进了软件和硬件设计师。这些努力增加了详细的产品知识,改进了测试,并最终提高了质量。

由于软件的性质,这样的努力伴随着一个警告:“当使用软件时,几乎总是有不止一种方法来完成给定的任务,”Herrscher指出。

他说,一个自然的趋势是,软件设计者有一种偏爱的做事方式。因此,设计师可能没有考虑和运用用户可能遵循的所有途径。Herrscher说,通过让其他人设计测试功能,可以规避这个问题。

和其他供应商一样,法国鲁伊尔马尔梅松(Rueil Malmaison)的施耐德电气(Schneider Electric)也会在每次发布Unity Pro软件包时进行回归测试。施耐德电气自动化产品经理Rich Hutton特别指出,处理流量的通信层是可靠性和一致运行的关键。他指出,诊断可以捕获内存故障和其他问题,但添加它们需要资源。他说,如果做得极端,诊断实际上会影响主应用程序的可靠性。

虽然施耐德电气致力于使其软件可靠,但该公司也在采取措施确保最终用户创建所需应用程序所做的编程也是可靠的。Hutton指出,该公司的开发工具支持五种IEC 61131-3语言进行编程。这样做的部分原因是它帮助施耐德电气的客户尽自己的一份力量来确保软件的可靠性。

标准编程语言的选择“提高了设计者的可靠性,因为他们可以利用标准的编程风格,”Hutton说。“这使得他们编写的代码通常更可靠。”

作者信息
汉克·霍根是《控制工程》的特约编辑。

“我们不想测试产品的质量;我们希望提高质量。”

在开放系统和快速变化的时代,控制软件质量对所有开发人员来说都是一个挑战。2007年6月,在凤凰城举行的霍尼韦尔用户组会议的最后一天,用户的问题转向了软件升级和补丁管理。霍尼韦尔技术副总裁DonnaLee Skagg向大家发表了讲话,并谈到了持续改进。

“当你谈论软件质量时,你谈论的是三件事。首先要讨论的是防止缺陷的发生,”她说。Skagg解释说,当你开发任何软件程序时,都有风险因素,也有其他不那么危险的因素。“我们希望识别和了解最危险的因素,并对其进行测试。

“第二,”斯卡格说,“如果有缺陷,你不希望它们消失。你想在软件发布给客户之前,在内部找到它们并修补它们。”

第三,Skagg说,“你想看看你发现的任何缺陷,而不仅仅是修复它们。你想看看是什么导致了这些问题,并进行根本原因分析,以确保它们不会在其他地方再次发生。”

Skagg表示,霍尼韦尔正在转向迭代软件开发战略,该战略将在未来一年半内部署。迭代开发意味着软件功能的开发、评估和测试更快,并且在新版本的生命周期中更早。客户可以更早地检查功能,测试也可以更早地完成,这样结果就可以反馈到正在开发的其他功能中。

“最终,我们不想测试质量;我们希望从一开始就建立质量。迭代过程使我们能够做到这一点,”Skagg说。

要构建值得信赖的软件,请仔细检查操作系统

当控制工程师和供应商与日益增长的软件复杂性和因此而降低的可靠性作斗争时,有迹象表明,一切的基础——操作系统——正受到越来越多的审视。

现在,每个月的第二个星期二都会发布微软的安全补丁,其中一些适用于操作系统的核心组件。由于网络连接的增加和对网络安全的担忧,不安装补丁的选择越来越少。因此,供应商必须及时对补丁进行回归测试。

罗克韦尔自动化FactoryTalk服务平台的产品经理Stephen bryant表示,微软的核心业务并不是工业自动化。因此,他说,微软的软件需求不一定与控制系统用户的需求一致。他说,使用非微软操作系统可以提高软件的整体可靠性,但必须仔细考虑利弊。

Briant还指出,目前的控制器软件总体上具有很高的可靠性,并预测这可能会产生深远的影响:“市场的趋势是,其他所有东西都需要在与控制解决方案相同的完整性水平上运行。”