UML软件工程组织

基于WinCE.NET的监控软件设计与实现
作者:吴松华 吴国伟 出处:计算机与信息技术

  摘要 本文详细分析了基于嵌入式操作系统WinCE.net的触摸屏监控软件的系统结构及其功能和实现细节,并阐述了其设计思想、方法和技术要点。

  引言

  WinCE.net为快速建立下一代智能嵌入式设备提供了一个健壮的实时操作系统,它的实时响应能力、良好的通信能力、出色的图形用户界面及提供的丰富的应用程序接口使得它在工业控制领域得到了越来越多的应用。在设计中央空调的主机E1_V5型吸收式冷温水机的触摸屏监控设备中,采用了WinCE.net嵌入式操作系统,并利用其提供的应用程序接口设计了嵌入式监控软件,来监控冷温水机的状态参数,为用户提供了友好的图形界面及完成了一些控制功能。本软件可以实时接收、处理从端口传来的数据,并能通过向串口发送命令来设定冷温水机参数。

  监控软件的设计及实现

  通过前面分析可知,本软件的设计任务分为以下几部分,一部分是页面设计,一部分是通讯设计等。鉴于WinCE.net优秀的多线程支持,在本监控软件设计中引入了多线程技术,主要是包括通讯线程、TCP/IP线程。

 

     整个程序流程设计如图1所示

   图1 程序流程图

  系统启动后,首先进行初始化所有工程变量,创建并初始化所有页面,并创建其他线程,包括通讯线程和数字屏监视线程,接着进入消息循环处理,有相应的消息到达,则交给相应的页面处理。

  主线程的主要功能是管理所有页面(切换,显示,隐藏),管理系统主要参数(参数的保存和载入);数字屏监测线程监测数字屏的状态,并负责向当前显示窗口发送鼠标消息(通过主线程可得到当前显示窗口句柄);设备通讯线程负责提供设备命令发送接收功能,并在接收到状态改变时通知当前窗口更新显示;存盘线程负责数据的保存及数据的提取。

  程序主线程派生于CWinApp类:class CTxcontrolApp : public CWinApp。该线程管理所有页面和所有工程变量,负责页面的绘制,页面构建和工程变量的关联处理,是通讯线程和页面沟通的途径。对工程变量的管理通过类CDataManage完成,主线程拥有该类的一个实例。对于工程变量的管理,所有变量保存在数组CArray<COleVariant,COleVariant> m_VarientArray中,其它模块(页面,通讯线程)通过接口函数GetFloatValue、GetIntValue、SetFloatValue、GetVarType访问工程变量。流程如图2所示。

  

图2 工程变量管理

  对于页面的管理,所有页面指针保存在CMapStringToPtr m_PageMap;中,初始化时创建所有页面,并在m_PageMap中保存页面指针,通过一个字符串来查找页面,在程序退出时(ExitInstance)关闭所有页面。通过CSANYOApp::UpdateFace向页面发送工程变量改变消息来驱动页面关联了工程变量的构建的更新。如图3所示。
  

  图3 页面管理

  所有页面从CPage派生,CPage从CDialog派生。CPage完成页面的共同功能:创建和管理页面内的所有构件(如圆和方框);负责在需要重绘时检查需要重绘的构件并调用构件绘制函数;在工程变量变化时负责检查构件,并更新相关的构件;在有用户输入(鼠标消息)时检查需要处理该消息的构件,并调用构件的消息处理函数。

  构件完成程序的绝大部分界面显示和操作,这个系统的构件设计如图4所示。

 

   图4 构件图

  其中CMyCtrl完成构件基本功能,包括位置设定,文本设定,文本颜色,管理变量等;CMyButton完成按钮的基本操作。对用户鼠标输入的响应,按钮按下和弹起状态的处理;CStaticText、CMyProgress、CMyPoly分别实现静态文本框,进度条和折线的功能;CMstButton、CMainButton、CCtrlButton实现三种不同风格的按钮。

  在两种情况下要完成对构件的绘制,一是用户消息,如点击触摸屏,二是工程变量变化了,也要发送相应的消息通知,这两种情况都采用消息响应机制,第一种情况,如图5所示,由CPage类的PreTranslateMessage消息处理函数处理,第二种情况处理如图6所示。

  

   图5 用户消息的处理

  

   图6 工程变量的更新

  每个页面定义了一个由构件ID、消息和处理该消息函数指针构成的结构的静态数组。有变量变化,通过CheckConnectTheVarID根据关联的变量的值更新在该构件状态。

  对于串口通讯线程和TCP/IP通讯线程,本系统软件设计了一个通信基类Ccommunication, 串口通讯线程和TCP/IP通讯线程分别派生为Cserial和CTCPIPTransfer,其中Cserial完成串口的打开、关闭、读写、配置等工作,采用WinCE支持的CreateFile,ReadFile,WriteFile 等函数完成;对于TCPIP通讯线程由CTCPIPTransfer类管理,实现向外界(其他本地或远程程序)提供数据交换的接口,目前支持4个命令:取得所有变量的实时值、取得所有开关量的实时值、取得所有模拟量的实时值、取得指定变量的实时值。TCP端口号定为3333,该部分实现采用标准的Socket编程方法。

  监控软件采用多线程来避免在进行文件操作等耗时操作时会引发阻塞现象的发生。同时为了防止多个线程同时对同一个变量进行操作引起时序上的差错,为了保持线程的同步,还采取了临界区加解锁的技术;由于使用了定时器,可以满足实时显示功能,以便及时的将所接收到的动态数据及时的反映到屏幕上。

  结束语

  经实际运行,所开发的远程监控软件平台运转稳定,使用情况良好,得到了用户的肯定。WinCE.net的实时响应能力、良好的通信能力、出色的图形用户界面及提供的丰富的应用程序接口使得该监控软件运行出色。

 

版权所有:UML软件工程组织