王玉霞,赵凤霞,张琳娜,郑鹏
(郑州大学机械工程学院,河南郑州450001)
在工件的磨削加工中,砂轮会产生磨损,因此依靠磨床本身来控制工件的加工精度是很难实现的。采用主动量仪对磨削过程进行主动实时测量,是磨床加工过程中的重要环节[1]。但是目前国产的磨加工主动量仪基本上还是停留在以单片机为核心的微机化仪表水平上,甚至有的还处于指针式仪表阶段,具有测量精度不稳定、显示不够直观、测量范围及控制点调整不方便等缺点[2]。徐金虎等[3]针对工控式磨加工主动量仪采用组态王技术实现了现有的主动量仪显示不够直观、设置调整不方便等问题。组态软件拥有丰富的工具箱、图库和操作向导,但是组态王软件在数据采集速率方面无法满足磨加工过程中高速数据采集的要求,在实际应用中需要与其他编程技术联合开发主动量仪的控制程序。祁继超等[4]针对嵌入式磨加工主动量仪利用WinCE 系统的多线程技术实现测量数据处理。但是,WinCE 系统下的控件库不够完善,缺少比如仪表显示、进程条、实时曲线、历史曲线等一些常用控件,这些控件图形的开发绘制过程费时费力,并且不具有配置化使用以及一次组建多次应用的功能。因此有必要开发WinCE 系统下的磨加工主动量仪所需的常用控件,以弥补WinCE 系统的不足,且缩短系列磨加工主动量仪产品的研发周期。
作者在Microsoft Visual Studio 2008 编程环境下,应用C#开发语言,在. NET Compact Framework 平台下开发了磨加工主动量仪测量控制实时显示所需的仪表、进程条、实时曲线、历史曲线等常用控件,并给出这些控件的应用方法。
磨加工主动量仪工作过程中需要实时进行人机交互,将工件的测量结果、所处的加工状态、加工过程中所设定的基本参数呈现给操作者,所需的主要控件有:仪表显示(见图1)、进程条、实时曲线、历史曲线(见图2)等。
图1 仪表
图2 历史曲线
(1)仪表显示
仪表显示控件动态直观地显示主动量仪在工作过程中所采集的数据。在Z 系列磨加工主动量仪中,仪表直观显示所加工机械零件的加工余量。加工工件外径时,指针显示数值随着加工进程,从正值趋近于0;加工工件内径时,指针显示数值随着加工进程,从负值趋近于0。
(2)进程条
进程条控件监控机床加工零件时的工作进程。在Z 系列磨加工主动量仪中,进程条控件与仪表显示控件作用基本一致,只是在表达方式上有所不同。
(3)实时曲线
实时曲线可显示主动量仪采集数据的当前趋势,以监控该数据在现场工况变化的情况下的控制稳定性。
(4)历史曲线
历史曲线可观察过去一段时间内某一点的变化趋势,并供工艺人员分析工艺流程的稳定性和故障原因。
WinCE 中应用程序的图形输出是依靠图形设备接口GDI (Graphic Device Interface)来实现的。GDI+是GDI 版本的继承者,在其基础上新增了许多功能。C#语言基于GDI+技术绘制图形时,使用Graphics 类封装图形绘制方法,如DrawLine()(绘制直线)、DrawDllipse()(绘制椭圆)、DrawArc()(绘制圆弧)、FillPolygon()(多边形填充)等,为图形界面程序的编辑提供全方位的支持,最大程度上减少了对底层API 的直接调用,提高了编程效率。
嵌入式软件的开发平台为. NET Compact Framework(NCF),它继承了公共语言运行时的完整. NET Framework(NF)结构。NCF 是NF 的一个子集,在NCF平台下,缺少很多常用控件绘图函数,所以必须利用其他的方法来实现在NF 平台下可以轻松实现的绘图命令[5]。例如,在NF 平台下,绘制圆弧可以直接使用DrawArc(Pen,Rectangle,startAngle,sweepAngle)命令。但是,NCF 平台不支持DrawArc 命令,需要运用数学的方法来实现,可以在每段弧上取很多点,连接起来即可,取的点越多,画弧越像。
在Microsoft Visual Studio 2008 编程环境下,控件的开发技术是一致的,只是在控件的属性和事件方面有所区别,因此,文中以仪表显示控件的开发为例详述主动量仪常用控件开发技术。
在仪表显示控件中,最多的操作其实是绘制出刻度线,并将实际采集的数据映射到仪表指针上。该控件完全使用了. NET Compact Framework 中的基础类库,未使用其他第三方库。控件基于NCF 的User-Control,用户自定义设计控件,这样生成的dll 文件,可以被引用到toolbox 设计框中,实现拖拽式调用。
(1)新建项目
打开Microsoft Visual Studio 2008,选择新建项目后在打开的对话框中选择项目类型以及模板,创建新建项目的名称“BIAOTOU”、解决方案名称“biaotouDLL”及选择项目存储位置,点击“确定”后,在新弹出的对话框里选择目标平台为“Windows Mobile 5.0 Pocket PC SDK”,NCF 版本为3.5 版,模板为“控件库”,点击“确定”。这样就生成了一个空的控件项目。
(2)为控件添加属性和事件
以图3 所示控件为例。
图3 仪表示例
①首先声明变量。分析图3 仪表的变量,对圆心位置、圆心大小、指针颜色、指针长度以及长短刻度的各个参数进行变量声明。
②属性封装
封装是一种信息隐藏机制,在面向对象程序设计中得到了极其广泛的应用,其目的在于将程序的使用者与程序的设计者进行分离,让使用者不必了解具体功能的实现细节,而只需根据设计者提供的方法来使用不同的功能,同时使得设计者在进行设计更新时,不会影响到使用者的正常使用[6]。
C#中采用get (访问方法)、set (修改方法)对变量进行封装。当使用get、set 将变量封装为属性以后,可以控制它们的可见性(能否被读取、能否被修改、能被谁操作等),修改的时候可以对将要修改的值进行验证是否合法,防止被其他类意外修改。
将仪表显示控件的刻度值颜色变量封装成属性的代码如下所示:
其他变量也用“get/set”方法封装成属性,代码不再一一写出。
爱情就是爱情吧!她想,女人对男人千般好,并非充气娃娃的特权。再说这世上哪个女人不是男人的充气娃娃呢?哪个女人在某一些特殊的时间里不是男人的充气娃娃呢?身体上的充气娃娃,或者,灵魂里的充气娃娃。低到尘埃里,张爱玲说的吧?女人既然可以心甘情愿地低至一粒尘埃,为什么不能心甘情愿地变成一个玩偶呢?
如上述代码所示,“get/set”方法可使得“Color刻度值颜色”属性以及其他属性均在toolbox 属性框中出现,如图4 所示。
图4 属性框截图
(3)图形绘制
图形绘制时使用GDI+技术。调用的名称空间包括Systerm.Drawing 和Systerm.Drawing.Text 等。
图3 中仪表刻度线及刻度值的绘制。首先声明刻度线所在的圆弧半径、起始与终止弧度、刻度值所在圆弧半径值、指针半径以及每一刻度的弧度值等,然后利用for 循环语句以及各个变量之间的函数关系,实现刻度线、刻度值的正确绘制以及指针的正确指示。主要代码如下所示:
在这里值得一提的是,由于仪表和进度条绘制过程较为复杂,图形刷新较快,容易造成屏幕闪烁,双缓冲绘图技术的运用很好地解决了以上问题。NCF GDI+中特有的双缓冲功能,只要重写OnPaintBackground 方法即可。
(4)控件生成
代码编写完成后,即可生成DLL 文件,这样就完成控件的生成。生成后的DLL 文件放于Bin 目录下,在需要时可通过引用DLL 文件来使用,也可以在VS 工具箱里以添加组件的形式加载到工具箱中,和其他系统控件一样作为工具使用,同时也可以将整个项目添加到一个新的项目中使用。
所开发的控件可以作为一个相对独立的程序单位被其他应用程序重复调用。在应用时,开发人员通过拖拽式调用把控件放在Form 窗口中,然后配置控件的属性进行相应的函数连接,控件就能完成其复杂的功能。下面以仪表显示控件为例进行说明。
(2)在解决方案资源管理器中,右击解决方案,单击“添加现有项目”,显示“现有项目”对话框。单击“biaotouDLL”项目,将该项目添加到解决方案里,这样就可以看到在工具箱里出现自定义控件。
(3)从工具箱中选择自定义控件,添加到Form窗口,可以更改圆心位置、控件大小、背景颜色等属性等。仪表显示控件如图5 所示。
图5 仪表控件
(4)在解决方案资源管理器中,右击“Testmybiaotou”项目,然后单击“生成”。并将该项目设为启动项目。
(5)单击“Debug”调试按钮或“Crtl +F5”执行程序。在SDK 模拟器中测试控件的可用性。见图6。
图6 SDK 模拟器中仪表控件
将仪表显示控件应用到磨加工主动量仪软件系统中,更改控件背景颜色、刻度间隔、刻度颜色等控件属性,并将主动量仪瞬时采集、处理的最终结果通过消息传递方式传递到主线程中,在测量结果上以仪表形式显示出来。在磨加工主动量仪上的应用结果如图7 所示,进程条控件在磨加工主动量仪上的应用如图8 所示。
图7 仪表显示
图8 进度条显示
针对基于WinCE 系统的磨加工主动量仪产品开发的需要,应用C#开发语言,在. NET Compact Framework 平台下开发了磨加工主动量仪测量控制实时显示所需的仪表、进程条、实时曲线、历史曲线等常用控件。所开发的控件不依赖任何第三方插件,在Visual Studio 2008 开发环境中,通过编译生成. dll 文件,可以在多种语言环境下添加引用,显示直观,调整方便,提高了代码的重用性和扩展性,满足了磨加工主动量仪的测量控制显示需求,缩短了产品的研发周期。
[1]王鸿伟.可在线测量圆度的新型主动测量仪[J].工具技术,2004,38(10):76-77.
[2]郑鹏,张琳娜,刘武发,等.新型磨加工主动测量控制仪的研究[J].仪器仪表学报,2013,10(34):2365-2372.
[3]徐金虎,张琳娜,郑鹏,等.基于组态王的磨加工主动测量仪的数据处理[J].机床与液压,2013,41(13):75-80.
[4]祁继超,张琳娜,郑鹏,等.嵌入式主动量仪数据处理技术的研究与实现[J].机床与液压,2013,41(23):101-103
[5]曹宏涛,顾振.基于WinCE 机舱延伸报警系统的设计[J].船舶机电设备,2012(1):48-52.
[6]刘云根,李洋.Delphi 封装机制实现方法的研究[J].计算机与现代化,2004(4):3-5.