工业自动化软件设计

来源:互联网 发布:新浪财经宏观数据 编辑:程序博客网 时间:2024/06/11 09:16
 
适逢11、11,先祝程序员朋友们多走向社会、亲近自然、身体健康、生活愉快。刚好最近工作告一段落,就借此机会将最近编写代码的一些设计心得、体会写出来,一来整理一下思路,加深自己的印象,二来也好与论坛的朋友们分享交流。

假设我们刚完成一个项目不久,客户告诉我们,或者功能需求有变,比如:
界面要换一个logo————我们更换一个图片,ok;
界面需要全屏显示————我们添加配置文件的某一处,ok;
需要增加一个新的功能————我们新写一段脚本,添加进去,ok;
数据类型需要增加新的字段(添加新功能)————没问题,配置数据类型,更新相关的模块,ok;
需要增加一个原来不曾考虑到的功能————麻烦些,我们新编译一个插件,添加进去,也ok了。

假如我们做第二个类似的项目:
将前一个项目的配置参数略作修改,ok;

假如我们做第二个行业不太相关的项目:
我们定义新的数据类型;
我们编写新的脚本逻辑;
我们绘制新的UI元件、功能块;
调试、运行,ok;
再做类似的项目,略作配置即可;

再假如我们做的是单网不冗余的系统,需要做出冗余的系统,修改配置即可;

我们做了几个独立的监控项目,现在需要建立集控站;
非常简单,一切都不用变,在集控站配置几台工作站即可;

然而现实可能是,一个小小的功能改动,好则我们只修改代码的某一处,重新rebuildall,然后更新程序,复杂点的,我们更改代码的好几个地方,甚至还有可能引入新的bug,再调试,等等,最后的代码维护变得越来越难以继续下去,看到代码我们就想回避,到最后,不堪重负,推倒一切重来,再遇上核心设计人员变动,再重复开头的一切。

先简单介绍一下最近设计编制的软件系统:

PANS,Platform of Automation Network System(磐石自动化网络系统平台),是全可视化的集监控、仿真、控制为一体的系统平台。
PANS可以采用面向对象或者针对数据点的方法对数据模型进行快速组态,集成了脚本处理、动态页面监控、实时事件告警、实时曲线趋势、历史事件和曲线、报表查询等常用的过程监控、历史数据处理方法;同时兼容matlab/simulink进行系统仿真和控制,对于工业控制时限要求不很严格(>10毫秒)的控制逻辑可以采用监控系统本身的脚本实现,对于要求严格的(20us---1ms)的可以采用linux实时操作系统+PCI接口的IO板卡;PANS的远景是成为集成自动化系统软硬件解决方案提供者。

PANS,首先是一个平台,一个适用于实时数据收集、显示、告警等处理的一个平台。PANS内核仅仅提供了一个与应用无关的(冗余的、分布式的)参数数据库、实时数据库、历史数据库,提供基本的数据模型配置、事件处理、用户管理、进程管理、连接管理等,以及一个可靠的数据订阅机制,而基于此,对于不同行业应用的快速实现与扩充提供强有力的支撑,甚至,大部分情况下,不需要编写代码,仅仅通过配置便可完成大部分默认的数据处理功能,例如最大、最小值统计、越限告警等等;对于控制逻辑、动态图元可以通过编写简单的脚本来实现;而数据采集,支持常见modbus、dde、opc、103、104等等一些常见的规约,对于暂不支持的规约,可以通过平台接口进行集成扩充。

PANS系统设计精巧、配置灵活,可以单机运行、可以多机冗余运行、同样可以组成分布式的集群服务,适用于从几个数据点到上百万、上千万数据点的采集和处理,适用于所有跟数据收集与处理(SCADA)相关的场合,例如污水处理监控、钢厂的过程控制,电力系统监控,变电站监控、西电东送、地铁监控、电力系统调度等等。

PANS基于图形化组态软件,不仅仅适用于监控画面的编辑、运行,也可以配置数据点、组织数据对象,生成代码进行拓扑分析、逻辑设计等,可以编译为标准C代码,生成运行于powerpc、arm、dsp等等硬件平台之上。

基于自己这一段对于PANS的反复设计、编码,我将对该过程中出现的典型设计问题、一些方法、技巧,总结成一个系列文章,希望与论坛的朋友们交流,也鞭策自己继续前行。
 
 
先列个目录,参照该目录,以督促自己不定期的整理思路,交流心得

0、序   目录
  
1、设计与选择

    设计前期的反复验证
    如何对待编码过程中出现的问题
    实现特例化、通用化的选择
    90%常用功能与10%不常用功能的设计
    谁家的孩子谁抱走
    说说设计语言与开发环境
    错误的处理,面向错误还是容纳错误
    
2、C++/Qt
    模板应用
    C++的类层次组织
    QMetaObject
    QtScript
    QML
  
3、图形组态软件设计
    Qt和图形组态软件
    编辑态与运行态
    脚本的必要性
    属性编辑器的设计
    基本图元、元件、模板
    基本操作之选择、拖拉、成组、undo、属性修改等
    连接线
    自由报表
    Item类层次组织
    QGraphicsView体系和QML体系
    图形组态软件的扩展,使之成为图形组态平台
    
4、图形化的代码生成
    直观、简便、统一、易于调试的图形化代码生成
    拓扑分析、潮流计算、计算仿真、dsp应用代码生成等
    再说连接线,与图形组态软件的统一
    实时代码生成与编译
    与matlab的兼容
    
5、网络通信协议选择
    面向连接与广播
    异常与可靠性
    自定义协议、RPC、ACE、Ice、Erlang
    
6、面向对象的参数数据设计
    为什么需要统一的参数数据库
    怎样面向对象(对比面向数据点)
    可自由配置的参数类型
    一个简单的设计
    与图形组态软件的统一
  
7、实时数据库的选择设计
    效率选择
    冗余
    分层次、分布式设计
    berkeley DB、Mnesia简介
    
8、统一的数据处理平台
    为什么需要这么一套平台
    进程与线程的选择
    统一的log系统
    进程、服务的管理
    前置数据解析
    过程数据分析
    后台数据监视与控制
  
9、实时性操作系统
    rtx、vxworks、realtime linux、xpc等比较
    基于组态软件的代码生成
    基于组态软件的调试
    基于组态软件的通信、监控
    
10、行业对比
    scada软件
    仿真软件
    工控
    siemens(TDC)、abb(DCC)