• 38439阅读
  • 38回复

基于Qt的组态监控软件实现以及分析 [复制链接]

上一主题 下一主题
离线myer
 

只看楼主 倒序阅读 楼主  发表于: 2007-02-12
— 本帖被 XChinux 设置为精华(2007-04-06) —
  组态软件部分作为自动化网络平台客户端的实现部分,仅仅是其中的一小部分,即HMI界面部分,也只有这部分是基于Qt实现的,所以这个帖子主要介绍的就是这一部分,当然先就整体部分做个介绍

1、    本系统目的是建立一个通用SCADA系统平台。
2、    本系统(自动化网络平台系统),主要由实时数据库、参数数据库、组态软件等几个部分。
a)    面向服务设计,实时数据库、参数数据库等作为一个个服务存在于系统中,添加一个服务所需要作的仅仅是定义接口(类似于idl),实现你的接口即可。可以在线添加服务、在线删除服务,不需要重启整个系统。
b)    单个服务支持主备冗余,对于使用服务的程序来说则完全是透明的,其仅仅需要知道服务名(标识)即可,一个服务不可用时自动切换到另一个服务。
c)    实时数据库提供了python接口,支持python表达式,效率相当高。支持数十万数据点,同时支持插件,即当对于实时数据有不同的处理要求时,可以加载自己写的插件,比如处理最大最小值,越限告警等等,使用插件而不是接口的原因当然是效率,因为在同一个进程,数据处理速度更快。
d)    实现了一个系统级的参数数据库,非常灵活。所有的数据类型都是可以配置的,更改一个表结构所需要做的仅仅是更改配置,而配置文件本身就是作为参数的一部分。支持具有任何数据结构的参数表,你也可以把exe文件保存在参数数据库,应用的时候再取出来,当然主备冗余、数据同步是不可少的。
e)    本系统的设计目的:实现一个自动化网络监控平台,可以用于电力、锅炉、自来水等等所有的自动监控系统。曾经接触过一家国内非常有名的仿真系统平台,本系统不做任何修改即可胜任,呵呵,并且配置非常方便,比较麻烦的则是很多仿真模块的具体实现,一个仿真模块其实就是对实时数据库若干点的输入、处理后若干点的输出,其实现可以通过python表达式,也可以通过插件实现。
f)    最后如果您的企业在开发类似的东西,并且对这套系统感兴趣,欢迎和我联系,当然如果您个人在做类似的工作,期望您的交流。
[ 此贴被myer在2007-12-04 15:02重新编辑 ]
http://user.qzone.qq.com/56430808
离线myer

只看该作者 1楼 发表于: 2007-02-12
组态软件本质上就是实现一个矢量图形编辑器,实现若干个基本图元,例如矩形、圆、线、多边形、位图、连接线,然后基于这些基本图元可以组合为任意的新的图元,即组合图元(group);组合图元本身也是图元,这正是经典的组合模式。每个图元一般会关联到实时数据库中的一个点或者一个对象,然后定时或者其它方式刷新这些值,根据这些值的不同图元则显示为不同的形状或颜色或其它,此所谓的监视,而控制的实现一般为当点击某按钮时向实时库或者前置机发送一个命令。软件一般分为两个部分,即编辑器部分和运行态部分,编辑器支持基本的编辑功能,例如移动、选中、copy-cut-paste、成组、放大缩小、旋转、等等,经编辑后,保存为某种格式,而运行态组件多实现为dll,其加载编辑器生成的文件,显示运行,没有编辑功能,当然也是不允许编辑的。一般组态软件都包含一个脚本系统,以应对很多个性化的东西,有了脚本系统,组态软件通常看起来都很强大,可以做一些简单的游戏,等等等等,实际上其实现往往并不复杂。

选择Qt做组态软件的原因:
1、    天然的跨平台,目前很多监控软件都要求运行于Unix系统,尤其是在电力行业。
2、    Qt提供的Graphics View模块好像为组态软件的实现量身定做,呵呵,应用该模块,效率非常高,支持数十万级别的item。
3、    QSA脚本,与Qt的天然集成,太完美了。
4、    Qt提供的undo模块,经典的命令模式的实现,用在组态软件的undo、redo不费吹灰之力。
5、    这些还不够吗,以上任何一点都够一个开发小组工作一段时间,更重要的是重复发明轮子的意义到底有多大?轮子也未必正常行驶,呵呵

设计时几个主要的环节:
1、    组合模式,即若干图元的组合还是一个图元,这个有QGraphicsItemGroup这个类,基本上工作量小的多了
2、    命令模式,即undo/redo的实现,当然有了QUndoStack这些类,就容易的多
3、    图元大小的改变,即可以由鼠标的拖动改变一个图元的大小,这个相对难一点,因为矩形、椭圆、线处理方式不一样,要分开处理
4、    QGraphicsItem的扩展,由于所有的item都是基于这个类的,但是我们在实现的时候往往需要更多的虚函数,这个实现可以说是必须的,在实现的时候也想到的几种方法,比如扩展某一个虚函数,比如多继承,或者修改Qt这部分的源代码,最后采用的是一种非继承的组合方法即MyItem基类,包含一个QGraphicsItem *成员,这个是目前个人感觉最好的办法。
5、    模版实现,即若干图元组合后的新图元可以保存到模版,用的时候拖放过来即可。
6、    保存格式,一般由二进制、xml文件,这两种各有优缺点,我则直接保存为qsa脚本,load进来后页面也建立了,兼两种格式的优点。
7、    最后用这个软件玩玩游戏、画画图,做个打砖块游戏,画些河流山川房子,不亦乐乎!
http://user.qzone.qq.com/56430808
离线myer

只看该作者 2楼 发表于: 2007-02-12
保留。
呵呵,其实、参数库、实时数据、包括各个服务等等都可以做成可组态的,系统可以面向服务,而针对于各个组成部分的实现可以基于组件,比如一个客户端程序,菜单、工具栏、各个widget都是可配置的,这对于一个可复用、通用程序来说是必要的。
[ 此贴被myer在2007-12-04 15:07重新编辑 ]
http://user.qzone.qq.com/56430808
离线myer

只看该作者 3楼 发表于: 2007-02-12
保留。
http://user.qzone.qq.com/56430808
离线jsayan
只看该作者 4楼 发表于: 2007-04-06
保留。
离线musttieying

只看该作者 5楼 发表于: 2007-09-29
国外qt开源列表:http://freshmeat.net/browse/871/
国内qt开源列表:http://www.qtopia.org.cn/phpBB2/viewforum.php?f=28
离线andy7895
只看该作者 6楼 发表于: 2007-12-03
?我也是做监控软件的
向你学习了!
离线xkhui

只看该作者 7楼 发表于: 2008-01-23
跨平台图形组态系统Graph ZTX,让工业组态变的转松自如

  Graph ZTX是深圳斯凯达控制技术有限公司和十五年工业组态系统的开发经验,汲取国内外优秀工业组态软件的优点,开发成功的新一代工业组态图形软件开发平台。
  本系统是一个高度跨平台的系统,能用于Microsoft Windows、Linux、SUN Solaris、IBM AIX、HP Unix、DEC Tru64等不同类型的操作系统上。本系统在不同的操作系统环境中用户界面和使用方式完全一致。
  本系统操作简易,不需要用户具备专业的计算机知识和工业组态的专业知识。
  本系统具有强大的二次开发能力。本系统中并不提供实时数据库,但是,通过二次开发,很容易与任何一种实时数据库进行集成。
  灵活的体系结构,使得本产品既可用于简单的单机环境,也可用于复杂的网络环境。
  本系统提供对Web应用的全方位支持,既支持瘦客户的Java方式,也支持胖客户的ActiveX方式,能满足各种不同用户的Web浏览要求。
  斯凯达公司拥有本产品百分之百的知识产权,不依赖于第三方的产品,不会要求用户采购第三方软件。因而能用最低的成本来为用户配置系统,保证用户得到最大的投资回报率。
  作为正在蓬勃发展的高科技公司,斯凯达公司一贯秉承“用户至上”的经营宗旨,全力为用户提供最优秀解决方案、高性价比的产品、最迅捷周到的服务。
  目前,基于Graph ZTX开发的工业组态软件产品PGC_EX2000已在电力、石油天然气、水处理、工业控制等众多行业得到了广泛应用。我们期待着与用户和软件开发商一道,共同推进拥有国际先进水平的Graph ZTX的更加广泛的推广和应用。
离线songqiming

只看该作者 8楼 发表于: 2008-01-29
保存学习了 现在正在做图形部分和hmi 只接触了点皮毛 受教了
忘掉自私非爱人
离线skywalker80

只看该作者 9楼 发表于: 2008-04-14
学习了,GUI不容易做
离线dzhdiv
只看该作者 10楼 发表于: 2008-04-14
GUI最难的点啊。支持














我的人生感言:It's never too old to learn wow gold .A journey of a thousand miles begins with a maple story mesos single step,and I like lotro gold.
离线danielfunny
只看该作者 11楼 发表于: 2008-05-21
学习
离线martinz

只看该作者 12楼 发表于: 2008-08-04
有没有图??
离线luckysongyp

只看该作者 13楼 发表于: 2009-05-05
我也在做,盼望得到楼主的指点
离线cspp

只看该作者 14楼 发表于: 2009-05-05
能否介绍介绍插件的方式?
离线sbtree
只看该作者 15楼 发表于: 2009-05-05
不错,学习了。
也正在做相关的图形方面的开发,软件基本成形,不过还有待于完善,上个图给大家看看,是一个能量流的展示,用graphics scene/view开发的,可以是动态
windows 7 + VC++2008 + Qt4.5.2
离线yleesun

只看该作者 16楼 发表于: 2009-05-06
学习了,希望能和楼上的各位更近一步的交流。我也是做监控的,电力行业。
离线long5337

只看该作者 17楼 发表于: 2009-05-06
都是好东西,有前途!
离线cool2009
只看该作者 18楼 发表于: 2009-07-29
很深奥,好帖
离线marsing
只看该作者 19楼 发表于: 2009-12-07
厉害厉害,不知道楼主是哪家公司的?
离线xinqingfly

只看该作者 20楼 发表于: 2009-12-08
做图形的大家多交流交流啊
菜鸟也是鸟
离线babybluema

只看该作者 21楼 发表于: 2010-01-11
受益匪浅.
离线education116
只看该作者 22楼 发表于: 2010-04-09
谢谢你
离线babybluema

只看该作者 23楼 发表于: 2010-06-07
楼主能再详细介绍下实时数据库和文件保存吗?
离线fengyujs
只看该作者 24楼 发表于: 2011-01-13
我正想做这个东东,可不晓得从那下手.希望你能加我,向你学习学习
离线fengyujs
只看该作者 25楼 发表于: 2011-01-13
qq:178097527
离线smilenie

只看该作者 26楼 发表于: 2011-04-09
NB的人,向你学习,我正想做这方面的东西,能留下你的联系方式吗?
离线爱云

只看该作者 27楼 发表于: 2011-04-10
都NB啊!
离线lxsmartcard
只看该作者 28楼 发表于: 2011-07-13
赞一个!非常感谢楼主!
离线acuke

只看该作者 29楼 发表于: 2012-05-09

学习下.
离线walk

只看该作者 30楼 发表于: 2012-12-26
      
离线pan869823184

只看该作者 31楼 发表于: 2013-01-31
你好,我从事智能电网组态软件的研发工作,现公司任务需求正开发一套智能电网组态平台的系统,有机会可以沟通交流下~!我扣扣:1176816030 我主要是做矢量图形绘图,通信相关及模型检测工作
离线zshb1984

只看该作者 32楼 发表于: 2015-02-09
你好,组态软件复杂度比较大啊
离线lyzxing

只看该作者 33楼 发表于: 2016-04-13
       看到你们的发帖感觉都好厉害啊!
现在从事QT的绘图工作,把多个图元加入QGraphicsItemGroup组合图元,加入后对组合图元进行放大、移动或者旋转后,在进行组合图元分解,怎样让分解后的单个图元保持在复合图元中的样子?
研究了好久,请大家给于指点啊!谢谢了,最后能给于源码提示!
      本人QQ:33259233!   关于我提到的问题请发送本人qq邮箱!
      谢谢啦
离线clickto

只看该作者 34楼 发表于: 2016-09-07
马克一下先!
离线littlebee

只看该作者 35楼 发表于: 2017-06-14
楼主人呢?闭关那么久是时候出来了吧
离线大明风华

只看该作者 36楼 发表于: 2020-03-24
真的好厉害
离线clearsky

只看该作者 37楼 发表于: 2020-04-08
这个帖子,今天才看到,学习ing。2007年那时刚做了一个C++写的监控系统,作图+显示。刚刚把那个作图程序改造为SVG编辑器,旧物利用。
渴望  晴朗的天空
离线njliusa

只看该作者 38楼 发表于: 2021-10-26
快速回复
限100 字节
 
上一个 下一个