写在面前
前面我们给大家介绍了WinCC OA:
初识西门子Wincc OA——超大型/分布式SCADA
还讲了WinCC OA 连接 Mindsphere的实例:
当WinCC OA遇上Mindsphere,自动化工程师的数字化之路
今天我们来聊一聊WinCC OA的软件架构~
背景
在与同事交流WinccOA的时候,发现很多问题都是对于OA的架构体系不太了解导致对一些概念模棱两可,
本文着重讲解OA的软件架构,至于业务架构,待教程更新一定程度再来详细说明,相信这样效果会更好
一张图
WinccOA 官方文档里有一张非常重要的图 这里给大家展示下
按照官方说明WinccOA为一个模块化系统(由好多模块组成的系统),
每个模块都单独负责一项业务,具体到软件上每个模块为一个单独的管理器
OK,下面我们对这个图进行详细的拆解
分层
按上图示 将这些模块的归属分为四个层级
UI层(User Interface/用户接口)
控制层
消息层
设备层
下面我们由下向上分层讲解
设备层
设备层我们工控的小伙伴们应该都好了解,针对现场设备采集数据的一层
具体到WinccOA里面可以映射为各驱动(Modbus S7…)模块
负责将设备数据采集到OA系统
消息层
消息层是整个OA系统里面最为重要的一层 我们看到架构图里有三个成员 EV DB CON
EV
EventManager(事件管理器) 我们看到EV位于整个架构的核心位置,它负责整个系统的消息分发,
WinccOA整个系统的运行是基于消息机制的,
比如说设备层采集来一个重要的数据,第一时间他会把数据通知EV,
EV拿到数据之后,首先检索下谁对这个消息感兴趣(感兴趣指的是 数据存储模块要存储这个数据,显示界面要显示这个数据,报警模块可能要分析这个数据等)
OA系统根据模块的优先顺序向相应模块发送数据消息,相应模块接到消息后处理数据
DB
数据库管理器 数据的存储查询是一个消息接收量比较大的模块,这个模块后续会详细介绍
CON
连接管理器(connect to other system) 根据官方示意 猜测这个模块为OA向外提供数据交互的模块
控制层
本层主要两个成员 CTRL 跟 API
CTRL
ctrl为WinccOA内置的脚本语言,我们在用OA做业务的时候 不是组态的过程就是在写脚本啦,
OA之所以要实现自己的脚本语言就是要实现在线开发的概念,我们知道WinccOA是基于Qt开发的图形界面,
而Qt是C++的一个图形界面库,正常写完一个C++程序需要编译才能跑起来,如果项目很大的话,编译的时间将会很长.
这样很不便于修改,尤其是SCADA系统,我们经常要调节一些小的参数,因此WinccOA实现了一个自己的虚拟机,
用于运行自己的脚本语言,这样不仅能简化开发OA的难度,还能实现在线开发的效果,我么会在稍后详细带大家入门Ctrl脚本语言
API
OA提供了丰富的API接口 如果懂IT的小伙伴可以通过这些接口用C#/C++…写自己的控制程序
视图层
这一层的内容 主要是跟我们的视觉打交道的,比如我们能看到的产品界面,组态界面 ,甚至手机App等等 人机交互的的都称之为UI(user interface)
透视软件架构
OK, 上面详细介绍了我认为WinccOA里面重要的一张图,但是这张图背后的运作是怎么回事?下面敲黑板 重点来了
首先我们结合某工程项目管理页面
然后我们打开任务管理器
我们看到一个管理器对应操作系统里的一个进程,没错这就是WinccOA系统的进程模型,上图
Process Moniter 为其主进程负责对其余进程的启停及监控
EventManager 各管理器进程通过EV进行消息的交互
进程通讯方式