早期的电子设备是使用三极管,小规模集成电路等分立元件构建而成的。电子工程师将不同功能的电子线路放置在印刷电路板上,多块PCB 组成机架,机架构成机柜。一台早期的IBM360计算机大约有一个教室那么大。伴随着集成电路技术的飞速发展,每一块集成电路完成的功能越来越强大。并且出现了种类繁多的大规模集成电路。现代的电子工程师基本上是选用合适集成电路器件使用电线路CAD 软件设计电子原理图和PCB 版图。电子元器件的性能,引脚,时序关系都是确定的。
为了提高硬件电路的通用性,互换性,人们在标准化方面做了大量的工作,从器件封装,接插件标准化,到电路板尺寸,机架等各个方面都制定了各种各样的技术标准。人类技术进步的方法是很奇特的。为了提高灵活性,却设置了许多的限制。限制带来了自由。
同样的事情也在软件领域发生。相比与硬件电路设计,软件工程师使用几十条指令能够编写出各种各样的程序。但是当软件越来越庞大时,软件变得越来越不可靠。软件故障导致了许多重大的事故之后,人们觉到察到了软件危机的到来。于是提出了所谓的软件工程的概念,也就是使用传统硬件工程的方法和思想来设计软件。软件工程的本质是对软件的设计流程,方法做出许多的规定和限制。软件工程的思想导致了面向对象程序设计,接口与实现分离,减少goto 语句,指针和全局变量等一系列限制措施。使软件更具有可读性,可重用,可测试等能力。提高了软件的可靠性。可以说,软件工程的核心是限制”自由“。采取的方法与硬件电路设计中的方法十分相似。比如自动化领域中的PLC 程序其实模仿了古老的继电器逻辑控制的方式。将丰富多彩的程序设计方法限制成为周期扫描梯形图这样古老的控制流程。程序员们抱怨太LOW,但是却非常可靠。
我们已经进入了工业4.0 的时代,但是如果你仔细地研究一下工业4.0 的相关技术标准就会发现。依然是对自动化,工业软件做出各种各样的规范和约束。对编程方式,名词术语,信息模型,程序执行方法做出种种规范。OPC UA ,工业4.0 管理壳,AutomationML,ECL@SS,IEC62360 等等,几乎所有技术标准都是试图对控制程序和数据模型做限制。一个开放性系统恰恰是一个有所限制的系统。只有共同遵守规则才有自由。
当我们尝试构建一个开放自动化系统的设计工具时发现,往往陷入了两难的境地。既要服从各种各样的标准和协议。又要具备互联互通。制定标准的几乎都是大佬,都自认为代表未来。而客户只希望解决他们的问题,并不在意符合何种标准和协议。
寻找一种简单的,构建系统工程师习惯的方式来构建未来的自动化系统非常重要。目前各种自动化设计工具,物联网低代码平台采取的方式各不相同,大多数比较复杂。
使用硬件工程师设计硬件电路的方法来构建控制软件和数据结构是好的方法。传统的自动化领域是以硬件设备为中心发展起来的。许多工程设计思想来自于硬件设计,自动控制领域的电气工程师接受了良好的电子电路设计的教育。基于电路和电子线路的设计方式也许会受到欢迎。
最近,我们尝试构建了一个类似电子线路设计方式的开放自动化设计工具。让OT 工程师像设计硬件电路那样设计未来的开放自动化系统。在此介绍其中的一些基本概念。
组件(Component)
实现单一功能的软件单元。使用硬件集成电路的符号,一个长方形,外加引脚。引脚是软件单元的接口定义。
组件可以分为:
功能组件(Function Component)
构建控制流程,功能模块可以是一个与或非,一个计数器,也可以是一个PID 算法,数字滤波,等DSP算法,也可以是数据库访问,AI 算法,等等。功能算法可以由第三方专业公司设计,并且提供完整的测试方法。
信息组件(InfoComponent)
用来构建信息模型,例如构建一个OPCUA 服务器,HMI 用户界面或者I4.0 的管理壳。
引脚(Pin)
组件的IO接口,它们有下面几种类型
- 输入事件
- 输出事件
- 输入数据
- 输出数据
- 总线插座和插头
事件的概念来自于IEC61499 基于事件的功能块,当事件到达时,伴随的数据也同时到达,触发组件内部状态机的变化,并且将执行一段程序。事件类似于硬件元件中的时钟信号。
复合组件(Composite Component)
提供了一种使用组件构建复杂逐渐的方法。可以使用多个组件构建一个功能更强大的组件。
组件图
将多个组件通过连线连接起来,形成组件图。实现逻辑控制。组件图类似与PLC 中的功能块网络,或者IEC61499中的功能块网络(在IEC61499 的概念下称为应用Application)。
组件是软件单元的模型,组件库中的组件是模型(Model),而组件图中的组件是实例(Model Instance)。
与硬件电路设计类似,组件图采取了分层结构的方式,一个组件图中能够包含另一个分组件图。组件图是软件设计的逻辑图!
要注意复合组件和组件图的区别,复合功能块类似硬件电路中的模组,厚膜电路,核心板。它们任然是一个元件模型。只有放置到电路板上才成为实例。而组件图类似于原理图,是实例的图。
组件库
显然,这样的系统的生命力在于组件库,如果有丰富的组件库出现,系统就具有价值。需要制造大量的组件,当然这要比开发集成电路器件容易多了。
组件库分为功能组件库和信息组件库。
组件模型与电子元器件的概念对照表:
Component 4.0 | 电子电路设计 | |
组件 | 器件 | |
信息组件 | 存储器件 | |
组件图 | 电路图 | 组件实例的连接图 |
组件库 | 元器件库 | 组件模型 |
事件 | 时钟 |
基于组件设计的优点
也许有人会质疑,为什么不是直接采纳已有的标准而另搞一套呢?比如使用OPC UA ,IEC61131,IEC61499 ,automationML。笔者认为,这些标准提出的建模方式过于底层化。基于组件的建模方式不是放弃采纳标准,而是在标准的基础上,建立一个更加抽象,简单和统一的建模方式。使工程师更加好用。事实上,我们尝试构建的组件模型是建立在OPC UA和IEC61499 功能块建模技术基础上的。底层模型是OPC UA 标准。AutomationML,AAS 和IEC62360等标准的模型被转换成为OPCUA 信息模型。
基于组件的构建方式使OPC UA和功能块建模更加简单,并符合控制工程师的习惯和文化。
下面是基于信息组件的OPC UA 图型化模型。
演示元件界面
我们在设计中采用硬件CAD设计的用户界面和术语。
结束语
目前这个工具软件仍然在开发中。希望得到读者的建议。像硬件工程师一样设计软件。是一个十分有意思的话题。设计一种组态软件并不是最难的。形成一种设计文化更难。