.NET在工控图片仪器组配中的预设和践行
组件技术软件设计技术经过了从结构化软件设计、面向对象软件设计到组件式软件设计的发展过程,组件式技术是面向对象技术的发展和提高。它的开发思想就是将复杂的软件开发分解成若干个功能组件,这些组件可以由不同的厂家用任何语言开发,开发环境也无特别限制。若干组件可以根据具体应用要求可靠而有效的组合在一起完成复杂的任务。
组件(component)是指可方便插入语言、工具、操作系统、网络软件系统中的一种独立可重用的二进制形式的代码和数据。构件的结构和功能被封装在内部,对外界提供必要的接口,所有的数据交换都是通过接口实现的。组件就是对象,是对数据和方法的封装。一个完整的组件应该有自己的属性、方法、事件。
属性是组件数据的简单访问者,方法是组件的一些简单而可见的功能,事件是一种特定的操作,在某对象上发生或对某对象发生的。自定义组件的事件就是指对所做组件的某种特定操作,像“按钮”的单击事件。
工控仪表组件的设计与实现本文介绍的组件是用C#。NET工具开发的。C#(Csharp)是由Microsoft公司开发一种最新的、面向对象的编程语言。它由C和C++派生出来,融合了VisualBasic的高效和C/C++强大。C#可以自动利用。NET类库。
C#。NET组件设计方法在C#中,组件就是实现了接口System.Compo-nentModle.Icomponent的类,或者从System.Compo-nentModle.Componet类或其他实现了Icomponent接口的类的派生类。用C#开发的组件主要包括3种方法:从已有的Windows类派生、从UserControl类派生,或者从Control类派生。我们选择的方法是从UserControl类派生,也就是自行创建一个用户控件。采用这种方式需要从UserControl类派生自己的控件类,然后添加所需要的功能。UserControl类中定义了Windows窗体控件最基本的功能,包括窗口句柄、消息循环、鼠标键盘等用户界面事件。采用这种方式需添加绘制代码,可以对组件充分制定。
首先选择从[模板]列表中选择[Windows控件库]选项创建新项目,Visualstudio会在窗体设计器创建新的组件控件。我们要做的工作就是在原始控件上绘制图形,添加属性、方法、事件等。具体包括:(1)绘制控件外观,一般应用GDI+中提供的方法。(2)根据需要添加属性,编写get{}set{}访问程序,存取属性。(3)根据具体要求编写方法和事件,设定该控件与用户的交互。(4)编译生成。dll文件。
组件的测试方法。代码编写完成以后生成。DLL文件。由于它不是可执行文件,不能直接运行该程序,要创建例程来测试这个组件。首先把组件文件(。dll文件)添加到工具箱中;创建Windows应用程序;把组件拖放到Windows应用程序的Form窗体中,可以看到设计的组件的效果,从属性窗口修改控件属性,也可以测试控件中设计的方法和事件。
组件设计中涉及的技术一是GDI+技术。GDI+是GDI(GraphicsDeviceInterface图形设备接口)的改进产品,是Microsoft的下一代二维图形系统,它是完全面向对象的。GDI+包括3部分:二维矢量图形绘制、图像处理和文字显示。
GDI+中提供了各式各样的画笔、画刷、图像等图形对象,此外还包括一些新的绘图功能。图形仪表组件中的动态和静态界面都要用GDI+编程绘制实现。
二是多线程技术。用多线程技术可以编写能够同时执行多个任务的应用程序。操作系统使用进程将正在执行的不同应用程序分开。线程是操作系统分配处理器时间的基本单元,并且该进程中可以有多个线程同时执行代码。与用户交互的软件必须尽可能快地对用户的活动作出反应,以便提供丰富多彩的用户体验。但同时它必须执行必要的计算以便尽可能快地将数据呈现给用户。要提高对用户的响应速度并且处理所需数据以便几乎同时完成工作,使用多个线程是一种强大的技术。在本设计中多线程技术用于实现组件的报警功能。计算机在监测到输入的数据超过警戒值时触发报警事件,驱动蜂鸣器发出报警声音。在报警的同时,计算机要继续显示并检测现场,因此需要启动多个线程,实现两个功能的并行。
三是要解决控件绘图中的闪烁问题。在控件运行中,由于数值的改变需要不断地重绘,这就造成了控件的闪烁。为了解决这个问题可以采用以下几种办法:(1)仅重绘控件中改变的部分。
(2)采用双缓存。具体做法是在控件的构造函数中添加代码:SetStyle(ControlStyles.UserPaint,true);SetStyle( ControlStyles.AllPaintingInWmPaint,true);//禁止擦除背景SetStyle(ControlStyles.DoubleBuffer,true);//双缓冲这段代码的意义如下:UserPaint如果为true,控件将自行绘制,而不是通过操作系统来绘制,此样式仅适用于派生自Control的类;AllPaintingInWmPaint如果为true,控件将忽略WM_ERASEBKGND窗口消息以减少闪烁,仅当UserPaint位设置为true时,才应当应用该样式;DoubleBuffer如果为true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将UserPaint和AllPaintingInWmPaint样式位设置为true.
(3)在内存中绘制图形。GDI+函数向屏幕输出并不是立即显示在屏幕上,而是保存在显存中,而显卡每隔一段时间把显存的内容输出到屏幕上。而如果控件的绘制不是在一个刷新周期内完成,那势必会造成闪烁。为解决这个问题,控件的绘制可以在内存中完成,然后利用一条命令再将之绘制到屏幕上。经过试验,这种方法效果良好。
温度计、仪表盘组件的设计与实现温度计组件功能分析:(1)显示温度:这是温度计最基本的功能,通过水银柱的升降显示数据的变化,通过刻度读出温度值。(2)报警功能:在工业监测中,当检测到温度高于警戒温度时,要进行声光报警。(3)组件的属性:对温度计背景、水银柱、文本、刻度等的颜色可以根据用户的需要自由搭配,仪表量程可以根据测量要求设置。如表1所示。
解决让水银柱随输入的温度升降的问题。水银柱实际上是一个矩形,让水银柱升降就是改变水银柱高度。实现方法就是将原来的水银柱用底色覆盖,然后用新高度绘制一个新矩形,当连续输入温度时,水银柱不断重绘,由于人的视觉器官有一定的反应时间差,所以不会察觉重绘,只绘观察到水银柱在做升降运动。仪表盘组件的功能要求类似,不同的是要通过指针的转动显示速度值。所以关键是要通过旋转坐标系,实现指针的转动。仪表盘刻度是圆形排列的,要把坐标转移至中心,逆时针旋转作图。仪表盘组件设计中用到的相关方法函数:TranslateTransform:坐标原点移动。
RotateTransform:以原点为中心,将图形或文本旋转一定角度。实现仪表指针的转动要通过输入的数据计算需要转动角度y2.y2=(240/Graduate)*Pointvalue其中Graduate为量程,Pointvalue是输入的数据。使用函数RotateTransform(y2+150),将指针旋转到指定位置。
应用实例是仪表和温度计组件在“测温测速监控管理系统”中的应用。下位机通过串行口发送检测数据,上位机用高级语言编程实现数据的实时监控和数据管理。系统通过数据库实现数据管理功能,调用组件,实现数据显示的图形化。该系统利用组件技术实现界面模拟仪表的软件重用,在满足界面美观、功能完善的同时,简化编程工作量、提高设计效率。经过该系统的测试,仪表组件显示正常,各项功能稳定。
结束语组件技术对提高软件开发效率、减轻维护负担、保证软件质量和版本的健壮、更新都具有非常重要的意义。本文提出利用组件技术,开发一个可移植性强的通用工控图形仪表组件库,根据用户的不同需求嵌入到各种具体的应用设计中,具有极大的灵活性和实用性。http://www.grainyq.com
