WEB开发网
开发学院软件开发VC 一个工业控制管道流动控件的实现 阅读

一个工业控制管道流动控件的实现

 2010-07-11 20:44:38 来源:WEB开发网   
核心提示:从毕业到现在已经有比较长的一段时间了,在这些工作期间,一个工业控制管道流动控件的实现,编写工控软件一直是我主要从事的职业,由于当时所在的是一个中小心公司,然后进行“贴“(BitBtn)到界面上就可以不闪烁了,为了使程序的可读性增强,主要负责电力行业的监控系统,同时开拓一些工控相关的业务

从毕业到现在已经有比较长的一段时间了,在这些工作期间,编写工控软件一直是我主要从事的职业。由于当时所在的是一个中小心公司,主要负责电力行业的监控系统,同时开拓一些工控相关的业务,比如自来水,闸门,橡胶坝等系统。这类系统一个显著的特点就是系统集成度比较高,要求对现场的控制要求比较了解,然后采用PLC+工控机的模式就可以了。现在的PLC品种繁多,而且技术都非常成熟,能够稳定运行,且各PLC厂商都提供了编程软件,能够快速的进行开发,而在上位机(工控机软件)部分也有不少的组态软件提供商,比较有名的诸如组态王、Visual Graph、iFix等。但是这些组态软件很多都是根据项目授权,即投运一个项目需要得到他的一个授权。作为中小心公司,公司领导层觉得既然拥有自己的软件开发工程师如果再采用组态软件来实现的话是一笔很划不来的事情,所以公司的主张就是自己开发自己的监控软件。

开发工控软件很重要的一个部分就是图形系统。很多组态系统提供了丰富的图形组态功能,能够通过他们提供的图形库完成各种复杂的图形开发,而且效果非常好。比如表记,LED,趋势,流动控件等。而自己开发则要单调很多。现在有有了一些诸如世纪飞扬等控件提供商,提供一系列控件开发包,不过一句话,他们都是要花米米的。作为很多开发人员是不愿意去出这些钱的,但是搜索网络上面这类控件,却几乎难得找到几个。前些时候一个朋友接了一个项目,一个泵厂的监控系统,这个系统实现中需要很多的管道和管道内部趋势图,能够实时反映水流的方向等。由于属于私人开发不可能花钱去购买那些控件,于是要我给他做一个可用于这个项目能够反映流动情况的管道控件。

多亏了现在网络上信息的丰富,“如果说我成功那是因为我站在了巨人的肩膀上“,通过考虑,我们可以采用管道和流动相结合的方法来实现我们的控件

首先是管道,管道简单考虑就是横和竖两种(至于您有时间可以考虑那些七七八八转弯的情况),那么我们这里可以把管道定义成两种模式

typedef enum _FlowPattern
{
  FP_HORIZONTAL = 0,
  FP_VERTICAL  = 1
}FLOWPATTERN;

然后是里面的水流的流动方向,横向的可以为由左向右和由右向左,竖向的可以分为由上向下和右下向上,这样我们就可以抽象里面的流动方向:typedef enum _DirectionType
{
  LEFT_TO_RIGHT = 0,
  RIGHT_TO_LEFT = 1,
  TOP_TO_BOTTOM = 2,
  BOTTOM_TO_TOP = 3
}DIRECTIONTYPE;

下面就是管道的绘制了,如何绘制才能达到视觉上的管道效果呢。如果是一个平面矩形是不能看起来视觉效果的管道的。参考了网络上面的一些渐变的处理方法后发现,其实我们的管道可以用这个方法来实现。如果管道的边和中央用两种不同的颜色,这两种颜色为一种颜色近似的值,一种深,一种浅。当颜色处理由边向中央绘制采用的方法为:浅—深—浅时,这样我们可以产生视觉效果的管道的凹表面,反过来则能够产生管道的凸表面。现在网络上面如何进行渐变绘图的方法实例很多,这个是没有问题的。

然后就是我们要考虑的流动的设计了。在我们平常见到过的一些流动控件中(收费控件)流动的形状可以为多种,有的是矩形,有的是小三角形等。而流动的表现就是在管道的中间绘制一些我们上面举例的小图形等。这样,我们为这些单个的小图形设计一个功能类,然后在类中间实现不同的单个小滑块进行绘制,如果我们的管道有N个这样的小滑块组成,如果我们进行动态的绘制小滑块,那么不就会产生视觉上的滑动了。

原理诸如上面所需,我们在滑动的控件中设计一个定时器,利用定时器驱动,然后将管道利用形状动态填充一个滑块列队,每次动态计算每个滑块的位置,通过动态刷新管道背景和滑块位置(擦除掉原来的那些旧的滑块位置)就可以产生滑动的效果了,管道流动控件原理基本上就是这样了。

下面是动手实现了,我们首先通过ClassWizard创建一个继承CStatic的管道流动类CFlowCtrl,然后映射WM_PAINT消息,因为在这里要完成管道和滑块的绘制。如果我们的定时器时间很小,刷新频率很快,将会出现很严重的闪烁现象,这里我们采用双缓冲,在内存中间进行复杂的图形的绘制,然后进行“贴“(BitBtn)到界面上就可以不闪烁了。为了使程序的可读性增强,我们对管道绘制和滑块绘制分两个类(CFlowImpl、CPipeImpl)来进行。

1 2 3 4 5  下一页

Tags:一个 工业控制 管道

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接