架构是一组有关软件组织方式的重要决策,是一种对系统内构成元素、元素接口、以及这些元素间协作行为方式的选择;是一种把这些结构和行为元素逐步组合为更大子系统的合成方式;也是一组构建规则,在其指导下,把这些元素、接口、及其协作有效组织起来。
软件架构都不会是通用的,都是为了解决某一特定领域而设计的。而本文讨论的工业自动化软件,则是一个广义的实时数据收集、显示、告警等处理的一个平台,包括了系统参数定义、实时数据处理、历史数据保存、数据的组态显示,以及拓展开来的双机双网冗余、进程管理、用户管理、连接管理、以及由图形组态而来的代码生成等等。
软件构造的一些基本原则,或者在面临选择的时候,应该基于一个什么样的原理?先简要给出一个列表,在后续文章中再逐步展开。基于数据对象的不确定性和GUI程序的易变性,尽可能多的元素及其行为都是可配置的,而不变的只有元素间的接口;当需要新增一个功能时,是新增if...else...实现,还是实现一个该类功能管理器;有些功能常用或不常用,需要较多代码和技巧实现或者需要较少代码实现,当有冲突时如何选择?设计为插件,还是代码的累加?遇到比较麻烦的事情时,究竟该谁处理(谁家的孩子谁抱走)?是尽量的throw...catch...,抑或各自专注各自的实现,让错误尽早暴露?……
工业自动化软件应该实现的组件包括:通讯平台(前置、实时数据、HMI)、系统冗余(服务高可用性)、进程服务监视管理、参数组态(可配置的参数库)、图元组态(数据显示)、功能块组态(代码生成)、通用服务(log、user、event等)等。
系统的配置方式,怎么样管理、启动、停止每一个系统?系统的默认配置的行为?