工业软件的特点和设计方法

前言

        信息技术(IT)和控制技术(OT)相互融合成为了当前的热门话题,但是要真正实现这个目标并不是容易的事情。IT和OT 之间存在着一条认知的鸿沟,在IT 人士看来,OT人士过于保守;而且OT人士则埋怨IT人士过于冒进, 瞎胡闹。

        越来越多的人看到工业软件的重要性,IT行业的软件公司,团队,工程师也开始带着互联网创业的激情,投入工业软件的研发行列之中。不过他们发展的并不顺利。充满激情的IT软件工程师发现,用户单位的OT工程师对他们精心开发的平台并不买账,觉得它们没有为用户带来价值。笔者认为,IT软件工程师应该静下心来研究工业软件与通用计算机软件的区别到底在哪里? 应该如何遵循工业领域的客观需要,经验和文化来开发工业软件?

        现代控制技术是伴随者计算机技术的发展起来的技术。 硬件从早期的继电器,晶体管电路构建的控制系统到中规模集成电路,微处理器,分布式控制系统构成的系统。 软件从纯粹的电气线路,集成电路构建的专用指令控制器, 微处理器程序,发展到分布式软件。程序设计语言也经历了机器指令,汇编程序,高级程序设计语言,图形化,模型化编程的转变。

       IT 和OT 是不断融合中相辅相成,共同发展起来的,OT领域采纳了IT领域大量的新技术,新成果。但是他们并不是简单粗暴地“拿来主义”,而是根据控制领域的特点,做出了新的诠释。变成了IT不认识的模样。大家反而生疏了。

工业控制软件的要求

实时性

          控制系统要根据输入参数的变化,迅速地做出输出响应。某些自动控制系统对系统响应时间要求非常高。例如高速电机伺服驱动器中,需要高速采样编码器的编码,然后调节电机的转速,在一个机械设备的振动分析系统中,需要实现高速数据采样。这对于系统的实时性要求很高,OT工程师更重视时间节拍。

可靠性

        现代控制系统是一个极为复杂的系统,它们可能是一条化工产品生产线,一个饮料灌装线。这些系统一旦发生停机等故障,可能会造成巨大的生命和财产损失。因此工业控制软件对可靠性的要求是非常高。

确定性

   工业控制软件要求对任何外部环境的变化,产生的结果是完全确定的。对系统异常,告警的处置也是明确的。

   确定性包括了输入信号采集时间和误差,软件执行时间,输入到输出延时,网络同步等动态与静态的确定性。

        工业软件的确定性要求有可能会限制某些IT技术的使用,比如AI技术,如果不能保证结果的确定性,就无法在控制领域应用。

      硬件和通信协议也是如此,比如同样是以太网,工业控制领域为了保证确定性,非要搞个分时调度,时间触发的EtherCAT。并不是OT 行业矫情,而是他们不是简单地追求高速,而是要满足确定性。

安全性

      安全性是指软件要有一系列检测,预防和处置系统安全事件的能力。当安全事件发生时,要有明确的处置流程。

        记得许多年前,笔者曾经为铁路部门开发调度监督系统。一开始铁路部门就明确提出了安全处置要求。给我影响特别深的一条是“故障导向安全”。这也就意味着当发生故障时,应该让火车减速,停车。道岔装置要切换到支线铁轨上等等。

        其它领域的应用  软件也同样对实时性,安全性,可靠性具有非常高的要求,比如银行软件,电子支付系统,电信运营平台等等。计算机科学家和工程师们不断地发展软件技术来满足控制系统的需求,无论是各种实时OS,还是各种形式化语言和通信协议都是IT工程师的技术成果。可以预测未来诸如容器,微服务,人工智能技术也会导入到控制领域。只是可能有某些受限条件和盖头换面罢了。

       应该看到,OT 行业的工程师在设计实时性,可靠性,确定性,安全性软件方面更富有经验,技术和敬畏之心。

工业控制软件的特点

嵌入式,软硬件紧耦合

   软件在不同的硬件平台上的运行性能是不同的。比如一个数学信号处理的功能块,在不同性能的CPU 上,其执行时间大相径庭。而信号输入输出也与硬件平台的IO 总线,DMA方式有关。在设计一个控制器时,要在硬件和软件之间做出权衡,对于高速,实时性要求高的功能往往需要硬件来实现。比如FPGA 实现信号处理和高速脉冲输出。

  所以说,自动控制系统而言,无法做到IT 领域推崇的软硬件解耦。那样做的话很难保证性能的确定性。大多数控制系统采用软硬件一体化设计。软件是嵌入式程序为主。即便是像倍福这样的工业电脑厂商,它们的软件也只能在自己设计的硬件平台上才能保证性能。工业软件并非像手机App 安装那么简单,软件在不同硬件上的表现是不同的,而且它们会相互影响,降低性能和实时性。

    如果要真正实现软硬件解耦,笔者认为至少在工业软件中要有一个性能评估(Performance evaluation)模块,在不同应用平台上做性能评估。这是一个不错的研究课题。笔者正在IEC61499 运行时软件中尝试。

      另一方面,由于工业现场安装空间有限,要求控制设备体积小。这也要求采用小型MCU 的嵌入式系统。

实时OS

       操作系统也是影响软件性能的重要因素之一。工业软件通常是在专用嵌入式实时OS 上运行的。如果在一个简单的Linux OS 下运行工业软件,即便是code sys 的运行时,性能也肯定大打折扣。

  在工业领域使用vxworks这样的商业化高可靠性实时OS。即便是使用Linux 系统,也需要打补丁,而且安装的应用软件服务不能很随意。那样做会影响系统的性能。

组态化

          工业控制领域的软件开发难度大,而且要求预先经过完备的测试,保证软件的可靠性和确定性。因此,工业软件一般不允许用户轻易地改动和添加代码。所有,在工业领域,IT 领域的“少代码” 概念是行不通的。工业领域的传统是通过所谓 “组态”的方式来配置软件模块的各种参数来满足应用的需求。

       其实,开发组态化软件要比开发一个面向特定应用的软件困难的多。需要预先了解各种应用的特点,那些参数需要组态。一方面需要对行业非常熟悉,另一方面要开发大量的软件模块。组态化软件就好比是“自助餐”,而特定应用软件是“中餐”,自助餐要预先做大量的菜,供客户选择,而中餐则是“点什么,做什么”。

      使用国际大厂的组态软件总是敬佩他们的软件工程师是如此地富有毅力和经验。能够开发出这么多的组件出来。这并非一日之功,需要长期的积累。

工业软件的设计方法

以模型为核心

        控制理论是在计算机出现之前就开始建立的,早期的控制理论是基于数学和物理模型的基础上建立的。数学是对物理和自然规律建立模型的语言和分析工具。早期的计算机控制系统只是通过计算数学(这是大学数学系的一个专业)实现控制系统中的数学计算。随着计算机信息处理能力的提高,计算机软件能够使用规范的数据结构来形式化描述物理事物的属性及其它们的相互关系。其中最重要的一项技术就是面向对象的思想,计算机软件将物理事物抽象成为“对象”,并且通过计算机程序设计语言和其它形式语言来描述。 

       控制领域吸收了面向对象的思想,构建系统中各种元素的信息模型。通过规范的信息模型实现软件自动化生成,不同设备之间的数据交换,以及形式化文档交流。

        可以说掌握了控制领域的信息模型,就抓住了工业软件的牛鼻子。当下流行的opc ua,automationML,工业4.0 的管理壳(AAS)无一不是建立各种标准化信息模型。

以标准为准绳

         开发工业软件不能“想到哪,做到哪”,在工业软件的开发过程中,不可完全听取客户的需求。这样只会开发出一个定制化的产品。只有符合标准才具有生命力。

          工业控制领域为了实现设备和软件的互联互通,建立了大量的国际标准和工业标准,例如 Modbus,CANOpen ,PLCOpen,IEC61131-3,IEC61499,ISA-95,OPC UA等等。

      这些标准中不仅包括了通信协议,而且包括了软件架构,语义,模型,语言,安全处置等等,全面定义了工业软件的特性。

        开发符合国际标准的工业软件要比根据单一用户的需求来开发软件麻烦的多。但是只有符合国际标准的软件才具有生命力。你会找到“先苦后甜”的感觉。

测试,再测试

  为了满足工业软件对可靠性,确定性的要求,在开发阶段要经过各种测试。对于组态化软件而言,要测试各种组态下的准确性,测试的工作量要比特定应用软件多的多。

  前面已经提到,如果要实现软硬件解耦,性能测试必不可少。

      IT 行业推崇“敏捷开发,逐步迭代”,而OT行业却容不得你这样敏捷与迭代,他们要求安装的软件是完备的,可靠的。如果不是那样的话,可能会出大事的,甚至会死人。软件的预先测试和验证变得十分重要。而且要求具有长期的工业现场验证。

结论

       工业软件难度再大,也需要有人去开发。并不是工业软件只能由自动控制领域的厂商和工程师才能开发。只要我们遵循工业软件的要求,标准和方法。IT 行业利用他们的技术,人才。完全可以开发出高质量,富有创新的工业软件。目前, OT行业存在着人才不足,投入过少,历史包袱重,崇洋媚外等问题。引入IT 新生力量,能够推动行业的又快又好地发展。OT行业应该采取积极的态度接纳IT的新生力量。

融合从彼此了解开始!

Guess you like

Origin blog.csdn.net/yaojiawan/article/details/118873125