环境洁净度实时监测系统毕业论文说明书毕业论文_第1页
环境洁净度实时监测系统毕业论文说明书毕业论文_第2页
环境洁净度实时监测系统毕业论文说明书毕业论文_第3页
环境洁净度实时监测系统毕业论文说明书毕业论文_第4页
环境洁净度实时监测系统毕业论文说明书毕业论文_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、I / 64环境洁净度实时监测系统环境洁净度实时监测系统摘摘 要要本系统主要完成实时检测、数据备份、数据上传、查询等功能。该系统采用 Microsoft 的 VC+ 6.0 开发工具,数据库采用 Microsoft 的 Microsoft Office 2003 中 ACCESS。环境洁净度实时监测系统是用来实时监测周围环境中尘埃颗粒数目的一种监测系统,主要用在对微环境要求高的工作区。本文主要介绍了环境洁净度实时监测系统各个功能模块的实现,并对实现这些功能模块算法的设计做了简单的描述,能够让读者比较清晰的了解这个系统的具体作用,本文具有一定的现实参考意义。关键词关键词 实时系统;监测;洁净度T

2、heThe Real-timeReal-time MonitorMonitor SystemSystem o of fEnvironmentEnvironment CleanlinessCleanlinessAbstractAbstractThe Real-time Monitor system Of Environment Cleanliness is scheduled to complete Real-time Monitor, data backup, data upload, and other functions.This system is used the Microsoft

3、Visual C+ 6.0 II / 64development tool and the background of the database is used is the Microsoft office 2003 ACCESS.The Real-time Monitor System of Environment Cleanliness is a kind of monitoring system used to real-time monitoring the number of dust particles of the environment,mainly used in the

4、micro-environment of the high requirements of the work area.This paper mainly to explain all of the system functions. Also make a simple description of the design, Readers can clearly understand the specific role of the system, this context has a certain degree of reality reference significance.KeyK

5、ey wordswordsReal-time System; monitor;Cleanliness目目 录录第 1 章绪论 1第 2 章需求分析 22.1 系统模型图 22.2 业务流程图 22.3 数据流程 32.4 开发环境 32.4.1 开发环境需求 32.4.2 软件系统安装 42.5 编程简介 42.5.1 编程规和数据类型 52.6 小结 5第 3 章概要设计 63.1 模块划分 63.2 模块功能描述 63.3 数据库设计 7III / 643.4 小结 8第 4 章系统详细设计与实现 94.1 用户界面设计 94.1.1 系统主界面 94.1.2 右击快捷菜单 104.1.3

6、 周期设定对话框 114.1.4 精确查询对话框 114.1.5 模糊查找 124.1.6 打印 124.1.7 数据上传 134.2 通信格式设计 134.3 文件设计 144.4 系统实现 144.4.1 程序结构 144.4.2 串口通讯实现 154.4.3 实时监测设计 184.4.4 周期数据显示设计 204.4.5 功能键设计 204.5 系统的发布 294.5.1 应用程序的封装 294.5.2 安装程序的封装 314.6 小结 33第 5 章测试 34总结 35致 36参考文献 37附录 A 中文翻译 38附录 B 英文原稿 481 / 64第第 1 1 章章 绪论绪论随着科技

7、发展和社会进步,尤其是计算机大围的普与,计算机应用逐渐由大规模科学计算的海量数据处理转向小规模事务的处理和对生产过程的管理,这就产生了以台式计算机为核心,以数据库管理系统为开发环境的信息管理系统在小规模事务的处理和对生产过程的管理等方面的应用,特别是在生产过程之中的应用日益受到人们的关注。近年来我国信息产业发展迅速,纯人工管理方式已不适应企业的发展,采用IT技术提高生产效率、管理水平和降低成本是行之有效的途径。对外开放给国电子产品企业带来了巨大冲击,运用IT技术开发出与各种电子产品相配套的软件已成为简化电子产品的管理与控制、提高企业产品竞争力和生产力的一种行而有效的途径。传统的激光尘埃粒子计数

8、器的管理过程很复杂,在管理中又需要经过若干步骤,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不一样,信息在传递过程中会出现重复现象,因此针对该过程,开发一套信息系统是必然的选择。环境洁净度实时监测系统是常见的监测系统之一,该系统开发的主要任务包括前台应用程序和后台数据库的开发这两个方面。前台程序采用 Microsoft的 VC+ 6.0 开发工具,后台的数据库运用 MicrosoftACCESS2003。环境洁净度实时监测系统主要完成实时监测、数据备份、数据上传、数据查询等功能。本论文主要说明了这个系统各个功能的实现。并对这些算法的设计做了简单的描述,包

9、括系统的算法实现、系统功能实现,以与各个模块的具体功能,能够让读者比较清晰的了解这个系统的具体作用。 该系统开发的任务是实现激光尘埃粒子计数器管理的计算机化、数据库化、系统化、自动化和智能化,从而提高企业生产力和竞争力。第第 2 2 章章 需求分析需求分析环境洁净度实时监测系统采用 C/S 结构。客户端主要是对激光尘埃粒子计数器进行相关功能的实现。2 / 642.12.1 系统模型图系统模型图整个系统的模型如图 2.1 所示:图 2.1 系统模型图2.22.2 业务流程图业务流程图首先要做的就是在创建一个线程在某一 RS232 串口上监听,等待客户端的指令,一旦后台接收到一个指令后便开始解析,

10、根据解析的结果生成响应数据,再将该数据通过 RS232 串口发送给 LPC 型激光尘埃粒子计数器,计数器根据接收的数据做出相应的动作并生成相应的数据结果,最后将结果反馈给客户端,如图 2.2 所示。服务端接收连接等待客户端连接客户端处理请求反馈信息接收请求数据解析请求图 2.2 服务端业务流程2.32.3 数据流数据流程程首先是实时监测数据的流程:计算机客户端通过定时器实时向计数器发出3 / 64数据更新指令,间隔时间为 250 毫秒。当计数器接收到数据更新指令后,将实时采集的数据上传至计算机上,计算机再将收到的数据进行分割还原处理,再将还原出来的数据分别在相应的方本框中显示。其次是脱机数据上

11、传时的数据流程:所谓“脱机数据上传”是指计数器在没有和电脑连接时测试出来的数据临时存放在计数器部的 ROM 寄存器里,等有条件和电脑连接时再将临时存放在计数器部 ROM 寄存器里的数据上传至计算机数据库里。当计算机客户端发出数据上传指令后,计算机后台将解析指令并向计数器发出脱机数据上传信号,计数器收到该信号后,将临时存放在计数器部ROM 里的脱机数据以数据报的形式通过串口上传至计算机,计算机后台再将这些数据分割并还原后存入数据库,最后计算机再从数据库调出上传的数据,放在客户端上供用户查看。2.2.4 4 开发环境开发环境2.4.12.4.1 开发环境需求开发环境需求1 硬件需求如下:(1)任何

12、运行 Microsoft Windows XP 系列的 PC 与兼容机;(2)至少 6 G 可用硬盘空间(软件安装所需空间);(3)至少 256MB RAM;(4)至少 1 个串行口;(5)激光尘埃粒子计数器;注意:系统环境中文 Windows XP 系列操作系统。如用户需要存储大批量的数据资料,则需要额外的磁盘存储空间。2 开发环境所需软件如下:(1) 操作系统:WindowsXP;(2) 开发工具:Visual C+ 6.0(中文版);(3)数据库工具:Microsoft Office Access 2003;(4)打包工具:Install Shield for Microsoft Vis

13、ual C+ 6.0 和 InstallShield10.5;4 / 64(5) MFC 类库(用于服务端系统开发);(6)串口调试助手;(7) 帮助文档:MSDN。2.4.22.4.2 软件系统安装软件系统安装S60 开发环境所需软件安装顺序如下:(1) Windows XP(2) Visual C+ 6.0(中文版)(3) MSDN(4) Install Shield for Microsoft Visual C+ 6.0(5) Install Shield 10.5(6) Microsoft Office Access 2003(7)串口调试工具2.52.5 编程简介编程简介编程时要多测

14、试 LPC 型激光尘埃粒子计数器的运算能力,实时刷新的时间间隔最好控制在 200 毫秒到 250 毫秒之间,这个值是经过多次测试找到的较合适的值。间隔时间太短,计数器受到运算速度的限制会响应不过来;间隔时间太长,会导致实时监测的数据不连续。2.5.12.5.1 编程编程规和数据类型规和数据类型编程规在很大程度上遵循传统的 C+编码规(程序开发的基础是 C+),除此之外,应用程序还有自己的一些编码规:(1) 类的成员变量的第一个字母必须是小写 m,如成员变量 BOOL m_sc(BOOL 为变量类型)。(2) 以 C 开头的类均从基类继承而来(包括间接继承)。程序中预定义了许多 C 类,如 CA

15、boutDlg、CMSComm、CSKApp、CSKSetCSKView 等其他类型。(3) 不是以 C 开头的类均以功能名称相应的拼音来命名。(4)各类成员函数名主要是以“控件名+功能名称”来命名的。如OnBUTTONKaiBang()表示按钮开泵所对应的功能函数。5 / 642.62.6 小结小结本章通过分析,详细描述了开发环境的搭建与其注意事项。同时还简单介绍了该程序的编程规6 / 64第第 3 3 章章 概要设计概要设计经分析,该软件系统从整体上应该分为两个部分,分别为客户端和计数器端。客户端系统主要负责发送信息、定时向计数器更新信息、接收信息和将收到的信息处理显示给用户等。计数器端的

16、主要任务有:等待客户端的连接、接收客户端发送过来的消息、根据客户端的指令做出相应的动作并上传计算机相应的数据等。这些数据应该存入数据库中,这样使用起来比较方便,所以计算机客户端也要负责与数据库的数据交互。3.13.1 模块划分模块划分系统从总体上可以分为四大块:(1)用户界面模块(2)串口通讯模块(3)后台处理模块(4)数据库模块如图 3.1 所示 用户界面模块后台处理模块发送用户需求串口通讯模块处理成符合格式的数据包计数器将数据包发送给计数器将检测的数据上传将上传的数据处理成符合格式的数据数据库将数据存入数据库从数据库读出数据用将户还界原面好上的显数示据 在图 3.1 模块划分3.23.2

17、模块功能描述模块功能描述上一小节概括介绍了系统的各个模块,下面就详细介绍每个模块的功能:7 / 641、用户界面模块:主要负责计算机与用户之间的交互操作2、串口通讯模块:主要实现计算机通过 RS232 串口与计数器之间的通信,包括指令的发送与数据的接收3、后台处理模块负责将从串口接收过来的数据进行分割、还原、显示,还包括将有用的数据整合成统一格式存入数据库以便日后查询4、数据库模块主要是负责存储测试数据,实现对以往测试数据的查询、删除等功能。3.33.3 数据库设计数据库设计根据分析,该系统的数据库应该包括一二维关系表,用来存储信息的相关属性值,其具体的实体关系参见图 3.2,各个属性值的类型

18、、默认值、关键字以与相关说明见表 3.1。图 3.2 数据库设计表 3.1 信息表结构名称关键字类型可否为空默认值说明ammountp自动增长否消息主键time文本可存储该记录的日期时间zhouqi文本可60存储该记录的周期03um文本可存储不大于 0.3m 的尘埃粒子8 / 64数05um文本可存储不大于 0.5m 的尘埃粒子数10um文本可存储不大于 1.0m 的尘埃粒子数20um文本可存储不大于 2.0m 的尘埃粒子数30um文本可存储不大于 3.0m 的尘埃粒子数50um文本可存储不大于 5.0m 的尘埃粒子数3.43.4 小结小结本章简要介绍了该系统各个模块,然后对各个模块的功能进行

19、了描述。最后详细介绍了后台数据库的设计9 / 64第第 4 4 章章 系统详细设计系统详细设计与实现与实现经过上一章的讲解后,我们对这个系统有了一个全面的了解。这一章讲述的是这套通信系统的详细设计和具体实现,包括了用户界面的设计、通信格式的设计、文件格式的设计以与各个功能的实现。4.14.1 用户界面设计用户界面设计4.1.14.1.1 系统主界面系统主界面如图 4.1,主界面从逻辑上分成四个区域:实时监测与周期数据显示区、功能按钮区、单条数据库记录查看操作区和数据库显示区。通过这章的介绍,可以全面了解到用户界面元素的和标准。图 4.1 主界面10 / 64菜单栏中的菜单“联系我们”可以直接到

20、尚科洁净技术的主上,方便客户对公司其他产品的了解与购买。工具栏中四个工具按钮按顺序分别是“转到数据库第一条记录”、“转到数据库上一条记录”、“转到数据库下一条记录”、“转到数据库最后一条记录”。点击后在单条数据库查看区可以看到效果。实时监测与周期数据显示区指的是左上角和右上角的两组动态文本框,用于显示实时监测数据和实时监测的一个周期的数据。功能按钮区是实现该系统主要功能的按钮群,包括:开泵、关泵、周期设定、清零、保存周期数据、删除当前记录、连续保存周期、停止连续保存、精确查询、模糊查找、数据上传和打印。单条数据库记录查看操作区可以逐条查询数据库里的记录,并可以对其进行删除操作。数据库显示区指的

21、是主界面下方的数据记录列表。用于显示数据库记录与数据库查询结果。4.1.24.1.2 右击快捷菜单右击快捷菜单如图 4.2 为右击快捷菜单,将该系统一些常用的功能整合到一起,目的是为了让用户能更加方便快捷地使用该系统以提高工作效率。此快捷菜单可以在主界面中的任何区域右击自动弹出。图 4.2 右击快捷菜单11 / 644.1.34.1.3 周期设定对话框周期设定对话框图 4.3 周期设定对话框如图 4.3 周期设定对话框,此对话框可以在点击“周期设定”按钮后弹出,用于设定计数器的采样周期。设定方法,在动态文本框中输入周期的秒数点击确定即可设定。周期围为 1999 秒。4.1.44.1.4 精确查

22、询对话框精确查询对话框图 4.4 精确查询对话框如图 4.4,该对话框在点击“精确查询”按钮后弹出,用户可以通过下拉列表框选择想要查询的记录的时间,点击确定按钮后得到查询结果。查询结果在主界面下方的数据记录列表显示,查询的时间可以精确到某年某月某日某时某分,缺省值为 2006 年 1 月 1 日 0 时 0 分。12 / 644.1.54.1.5 模糊查找模糊查找图 4.5 模糊查找如图 4.5,该对话框在点击“模糊查找”按钮后弹出,用户可以通过下拉列表框选择想要查询的记录的时间段,点击确定按钮后得到查询结果。模糊查找可以查找出某一段时间所有数据库保存的结果,查询结果在主界面下方的数据记录列表

23、显示。4.1.64.1.6 打印打印图 4.6 打印如图 4.6,该对话框在点击“打印”按钮后弹出,可以将主界面下方的数据记录列表显示的容打印出来,单击“确定”按钮后,连接在计算机上的打印13 / 64机会自动打印。该功能主要负责对精确查询和模糊查找结果的打印。4.1.74.1.7 数据上传数据上传图 4.7 数据上传如图 4.7,该对话框在点击主界面上的“数据上传”按钮后弹出,负责将计数器在脱机状态下保存的测试数据在联机后上传至计算机数据库,单击“上传结束”按钮后,计数器在脱机状态下保存的测试数据将上传至计算机数据库,并在主界面下方的数据记录列表中显示。4.24.2 通信格式设计通信格式设计

24、1数据接受标志:实时数据:回传计算机数据包以“f9”开头,清零指令:回传计算机数据包以“f8”开头接收周期数据:回传计算机数据包以“f7”开头数据格式: 12345678910111213141520.301 号是标志位:如上225 号是数据位14 / 6426 表示泵的状况: 0 x41 表示开泵,0 x42 表示关泵27-30 表示周期的状况: 28,29,30 分别表示周期的百位十位和个位数据换算:将格式中的 2 号位置乘上 65536,3 号位置乘上 273,然后将 2 号位置+3号位置+4 号位置+5 号位置 = 得到单通道的数据大小总共有 6 个通道2 上传数据的格式:123456

25、78910111213141516.第六号表示整个上传中总共有多少组数据, 1012 表示年月日,从 1318 表示一个通道的数据,总共 6 个通道,然后又是表示时分秒年月日.1 号位+2 号位*256+3 号位*655363计数器指令上传数据指令:D数据更新指令:G发送关泵指令:B发送开泵指令:A清零指令:R改变周期指令:C 1 2 3 ,1 位 2 位和 3 位表示时间,如:010 表示周期是十秒4.34.3 文件设计文件设计数据库 SK.mdb 文件是系统的主要文件,用于存放检测出来的记录和数据上传的记录,存放在系统盘下的 Program Files 文件夹下,即 C:Program F

26、iles。15 / 644.44.4 系统实现系统实现4.4.4.4.1 1 程序结构程序结构客户端程序采用了应用程序 MFC 框架,包括一个框架类 CMainFrame,,一个应用程序类 CSKApp ,一个文档类 CSKDoc ,一个视图类 CSKView,一个控件类 CMSComm 和五个对话框类,它们分别是 CAboutDlg 主界面对话框、JingQueChaXun 精确查询对话框、MoHuChaZhao 模糊查找、SJSC 数据上传、ZhouQi 周期设定。类视图如图 4.9图 4.9 类视图4.4.24.4.2 串口通讯串口通讯实现实现串口通讯的实现用的是 MSComm 控件来实

27、现的,先来了解一下这个控件:Microsoft Communications Control(以下简称 MSComm)是 Microsoft 公司提供的简化 Windows 下串行通信编程的 ActiveX 控件,为应用程序提供了通过串行接口收发数据的简便方法。MSComm 控件在串口编程时比较方便,程序员不必花时间去了解较为复杂的 API 函数,而且在 VC、VB、Delphi 等语言中均可使用。但也要了解一点:那就是本控件通信功能的实现,还是间接调用Windows API 编程的结果,只是先通过 Comm.drv 解释,然后再传递给设备驱动程序进行的。它提供了一系列标准通信命令的使用接口,

28、利用它可以建立与串口的连接,16 / 64并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以与监视和响应串行连接中发生的事件和错误。MSComm 控件可用于创建拨号程序、串口通信程序和功能完备的终端程序。再来介绍一下 MSComm 控件在本系统的运用:首先是添加 MSComm 控件,方法如下:在打开的工程中,选择菜单 Project-Add To Project-Component and Controls,在弹出的对话框“Component and Controls Gallery”中选中“Microsoft Communication Controls Version

29、6.0”,单击“Insert”按钮即可完成添加 MSComm 控件操作。然后是在对话框中添加两个文本编辑控件并对他们赋以相应的变量.在视图类的 OnInitialUpdate()函数添加变量并对这些变量初始化,代码如下:/对 MSComm 控件的初始化m_ctrlComm.SetCommPort(1);/选择 COM1 端口m_ctrlComm.SetSettings(9600,n,8,1);/波特率 9600,无校验,8 个数据位,一个停止位m_ctrlComm.SetInputMode(1);/输入方式为二进制方式m_ctrlComm.SetInBufferSize(2048);/设置输入

30、缓冲区大小m_ctrlComm.SetOutBufferSize(1024);/设置输出缓冲区大小m_ctrlComm.SetSettings(9600,n,8,1);/参数 1 表示每当串口接收缓冲区中有多于或等于 1 个字符时将引发接收数据的 OnComm 事件if(!m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(TRUE);/打开串口m_ctrlComm.SetRThreshold(1);m_ctrlComm.SetInputLen(0);/设置当前接收区数据长度为 0m_ctrlComm.GetInput();/先预读缓冲区以清除残留数据

31、17 / 64然后是在对话框中双击控件 MSComm,为其创建一个视图类 CSKView 类的成员函数为 OnComm (),这个函数主要用于从串口接收数据并对其处理。添加代码如下:VARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata2048;/设置 BYTE 数组CString strtemp;if(m_ctrlComm.GetCommEvent()=2)/事件值为 2 表示接收区有字符variant_inp=m_ctrlComm.GetInput();/读取缓冲区safearray_inp=varian

32、t_inp;/variant 型变量转化为 safearray型变量len=safearray_inp.GetOneDimSize();/得到有效数据长度for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/转化为 BYTE 型数组for(k=0;km_ammount=m_pSet-GetMaxID()+1;/获得一个最大的,新的ID 号 m_pSet-AddNew();/新增一条记录 m_pSet-m_50um=m_50mm;/保存大于 5.0m 的尘埃粒子的数量 m_pSet-m_30um=m_30mm;/保存大于 3.0m

33、的尘埃粒子的数量 m_pSet-m_20um=m_20mm;/保存大于 2.0m 的尘埃粒子的数量 m_pSet-m_10um=m_10mm;/保存大于 1.0m 的尘埃粒子的数量 m_pSet-m_05um=m_05mm;/保存大于 0.5m 的尘埃粒子的数量 m_pSet-m_03um=m_03mm;/保存大于 0.3m 的尘埃粒子的数量 m_pSet-m_zhouqi=m_shujukuzhouqi+秒;/保存该条记录的周期长度 /获得当前的系统时间并和记录一起保存在数据库24 / 64 SYSTEMTIME sysTime; /定义一个时间类 GetLocalTime(&sys

34、Time); /获得当前时间 CString strMsgtime; strMsgtime.Format( %4d 年%2d 月%2d 日%2d 时%2d 分, sysTime.wYear,sysTime.wMonth, sysTime.wDay,sysTime.wHour,sysTime.wMinute); /把当前time 赋给字符串m_pSet-m_time=strMsgtime;/将时间存入数据库m_pSet-Update();/刷新记录集 m_pSet-Requery(); m_pSet-MoveLast();/移动到新记录上 UpdateData(FALSE);/刷新窗体/重新开启

35、数据库,将数据库记录重新读出并在主界面下方的列表框控件显示出来 m_pSet-Close();/关闭数据库 m_pSet-Open();/重新开启数据库 m_pSet-MoveFirst();/移动到第一条记录 m_list.DeleteAllItems();/将列表框控件初始化,删除列表框控件里所有容 while (!m_pSet-IsEOF()/遍历数据库,将记录写入列表框控件m_list.InsertItem(0,m_pSet- m_time,0); m_list.SetItemText(0,1,m_pSet- m_zhouqi); m_list.SetItemText(0,2,m_pS

36、et- m_03um); m_list.SetItemText(0,3,m_pSet- m_05um); m_list.SetItemText(0,4,m_pSet- m_10um); 25 / 64 m_list.SetItemText(0,5,m_pSet- m_20um); m_list.SetItemText(0,6,m_pSet- m_30um); m_list.SetItemText(0,7,m_pSet- m_50um); m_pSet-MoveNext();m_pSet-MoveLast();/移动到数据库最后一条记录(2) 删除当前记录新建一个删除按钮,当用户在单条记录显示区

37、域移动到要删除的记录时,点击删除按钮,就可以将这条记录删除,主要代码如下:void CSKView:OnButtonDelete() / TODO: Add your control notification handler code hereif(MessageBox(真的要删除该记录吗?,删除记录,MB_YESNO|MB_ICONQUESTION)=IDYES)/弹出一个确认删除消息m_pSet-Delete();/删除一条记录m_pSet-Close();/关闭数据库m_pSet-Open();/重新开启数据库m_pSet-MoveFirst();/移动到第一条记录UpdateData(

38、FALSE);m_list.DeleteAllItems();/将列表框控件初始化,删除列表框控件里所有容show();/调用 show()函数,在列表框控件里显示数据库记录m_pSet-MoveFirst();/移动到数据库第一条记录(3) 连续保存周期和停止连续保存这两个功能其实是一个功能,主要是考虑到如果用户临时有事,系统可以26 / 64在无人操作的状态下将检测到的数据自动存入数据库,以供用户在方便时查询。主要是通过定义一个布尔型的变量 m_zqlx,对其操作,来确定何时系统自动调用“保存周期数据”这个功能函数 OnButtonBaocenzqsj() 。当用户点击“连续保存周期”按钮

39、时,系统将 m_zqlx 置“1”,并将“连续保存周期”按钮禁用。此后,只要系统一接收到周期数据就自动调用OnButtonBaocenzqsj()函数,将周期数据存入数据库。当用户点击“停止连续保存”按钮时,系统将 m_zqlx 置“0”,并将“停止连续保存”按钮禁用。此后,系统即使接收到周期数据也只是在主界面上显示一下,而不将数据存入数据库。数据流程如图 4.11图 4.11 数据流程(4) 精确查询精确查询是为用户提供精确到某年某月某日某时某分的记录查询服务。这个功能要求用户明确给出所要查询记录的日期和时间。如果用户没有给出,刚按缺省值 2006 年 1 月 1 日 0 时 0 分查询。实

40、现方法如下:首先,新建一个对话框并为其添加一个对话框类 JingQueChaXun。在这个对话框分别添加五个静态对话框和五个组合框,用于让用户输入所要查询的日期和时间。当用户按下确定按钮后,系统根据用户输入的时间,在数据库对所有记录的“time”字段进行查询。在 CSKSet 类的基类 CRecordset 类中有一个27 / 64数据成员m_strFilter,其封装了 select 的功能,可以通过设置该成员实现查找。其主要代码如下:void CSKView:OnButtonJqcx() / TODO: Add your control notification handler code

41、hereint result=m_jqcx.DoModal();/弹出精确查询对话框/组合要查询的时间字符串CString str1=time;if(result=IDOK)/当单击下“确定”按钮后str1=str1+=+m_jqcx.m_time_jqcx+;/根据用户输入的时间条件,组合查询条件m_list.DeleteAllItems();/删除主界面下方列表框控件所有容m_pSet-Close();/关闭数据库m_pSet-m_strFilter=str1;/向 CSKSet 类的基类 CRecordset 类中的一个数据成员 m_strFilter 输入,其封装了 select 的功

42、能m_pSet-Open();/打开数据库int recCount=m_pSet-GetRecordCount();/获得查询后得到的记录数目if(recCount=0)/如果查询到的记录为 0 条MessageBox(没有匹配的记录!,查找,MB_ICONWARNING);/弹出提示框“没有匹配的记录!”m_pSet-Close();/关闭数据库m_pSet-m_strFilter=;/初始化数据库m_pSet-Open();/打开数据库28 / 64else/如果查询后有符合条件的记录show();/在主界面下方的列表框控件中显示出来m_pSet-MoveFirst();/移动到第一条记录

43、(5) 模糊查找模糊查找的功能是用来查找某一段时间的记录。这个功能主要通过手工来完成。首先,和精确查询大致一样,建立一个对话框,添加必要的控件,用来让客户输入要查询的数据段。其次,用一个 while 循环,将数据库每一条记录的“time”字段中的年、月、日字符串分别提出来并转换成整型,与用户输入的条件比较,如果符合用户要求,刚在主界面下方的列表框显示,如果不符合刚丢弃。由于代码过长,就不在这里详细解释了。2、负责系统其他功能的功能键这种功能键主要有:联系我们、最小化、版本号和打印等。(1) 联系我们主要是提供一个菜单,让用户能直接到“尚科”公司主页,以便用户能了解公司其他各种产品的相关资料。主

44、要代码为:ShellExecute(NULL,NULL,.sc-clean.,NULL,NULL,0);(2) 最小化和版本号主要是系统自带的,只要将相关参数进行适当的修改就可以了。(3) 打印主要是将用户在主界面下方列表框控件里显示的记录在与计算机连接的打印机上打印出来,以便用户能将数据库的记录打印出来保存,也可以将精确查询和模糊查找出来的结果打印出来。实现方法主要是将列表框里的记录一条一条读出来,再算出在纸上相应的位置,将读出来的字符串一个一个打印出来。29 / 64由于代码过长,就不在这里详细解释了。4.54.5 系统的系统的发布发布系统的封装包括应用程序的封闭和安装包的封装。4.5.1

45、4.5.1 应用程序的封装应用程序的封装应用程序的封装主要用的是 VC6.0 自带的“Installer for Visual C+ 6.0”。作用是完成初步的系统的封装,装系统封闭成后缀名为“.exe”的正常的应用程序。方法与步骤如下:(1) 安装 VC6.0 自带的“Installer for Visual C+ 6.0”的打包软件。(2) 在 VC6.0 编译环境里打开系统,点击“工具”“InstallShield Wizard”,如图 4.12 打包工具,进入打包软件的欢迎界面。图 4.12 打包工具(3) 通过“浏览”向导,如图 4.13 欢迎界面,浏览到要打包的系统的源文件。选中“

46、SK.dsw”后点“打开”。点击下一步,输入相关的信息点下一步30 / 64进入系统打包的文件目录,查看后点“完成”按钮。图 4.13 欢迎界面(4) 完成上述操作的进入封闭设置界面。点击菜单“Build”“Media Build Wizard”进入 Media 设置向导。如图 4.14 选择存储目录,输入存储名称后点击“下一步”选择存储介质“Custom Size”,点击下一步,保持默认点击下一步直到“完成”。打包前的设置就到此结束。31 / 64图 4.14 选择存储目录(5) 点击菜单“Build”“Run Setup”进入打包介面。点击下一后选择保存路径,其余默认,直到最后完成,应用程

47、序打包结束。4.5.2 安装程序的封装应用程序打包完成后只能在装有 VC 的电脑上使用。但将其用InstallShield 10.5 打包成安装文件后,情况就完全不同了,系统就可以在没有装 VC 的计算机上正常运行了,但前提是在封装时将几个和系统有关的库一起封装进去。封闭步骤如下:(1) 安装好 Install Shield 10.5 后启动,进入软件后点击“File”“New”,浏览 Local 到要想保存最终生成文件的路径,点击“OK”按钮后进入打包向导。如图 4.15 打包向导32 / 644.15 打包向导(2) 进入向导后点击下一步,输入相关信息。点击下一步,直到看到要打包的文件系统

48、。(3) 在“Application Target Folder”里添加以下几个库:MFCO42D.DLL、MSCOMM32.OCX、MSVCRTD.DLL、MFC42D.DLL、MFCD42D.DLL,如图 4.16 添加库在 Program Files 文件夹目录下添加 SK.EXE 、SK.mdb,然后点击下一步直至最后完成。33 / 64图 4.16 添加库4.64.6 小结小结本章完整地描述了这套系统的实现,从用户界面的设计、通信格式的设计、数据库的设计到各个功能的实现与其编码都进行了详细的描述。客户端系统的设计主要采用了 MFC 的设计框架以与面向对象的编程。34 / 64第第 5

49、 5 章章 测试测试测试接收消息:在客户端接收串口数据并实时显示,如图 5.1 测试: 图 5.1 测试实时监测有数据,并且与计数器上显示一致,说明定时器和串口通讯模块工作正常。前一个周期的记录有数据,并且与计数器上显示一致,说明周期数据接收正常。数据库单条记录显示正常,说明读数据库正常。列表框显示正常,显示的数据与数据库一致,说明列表框控件与数据库连接有效,工作正常。此外,精确查询和模糊查询经过测试工作也很正常,打印功能也很正常。测试结果表明,此系统工作正常。35 / 64总结总结通过这次毕业设计,我复习巩固了以前的相关知识,同时也学到了很多新的东西,包括知识、解决问题的方法以与人与人之间的

50、交流等等。这次我选择的课题是“环境洁净度实时监测系统”。毕业设计的第一个问题就是如何实现串口的通信?经过短期的了解和老师的指点,最终我选择了MSComm 开发。这其中有两个原因,其一,该系统对串口要求不是很高,能实现基本的数据交换就够了;其二,运用 MSComm 控件比较简单,上手比较快。在这之前,我对串口通信一无所知,无疑,这对我来说是个挑战。起初我从入门的书籍看起,边看书边熟悉程序的编写。到第五周的时候便开始考虑课题的实现,并做出了具体的计划和实现方案。然后我就朝着这个方向努力,一路上也遇到了许多的困难,如二阶段构造,串口间的通讯,实时的监测显示、连续保存周期、停止连续保存、精确查询、模糊

51、查找、数据上传和打印的编写等等。每一块都是一个难啃的骨头,因为书上介绍的甚少(这方面的中文书本来就很少),也较抽象,不容易读懂,完全靠自己去网上搜索,逛论坛等,这其中效果最好的莫过于 群了,每提一个问题都会有些高手给你解答或者会给你一些提示,你可以根据这些提示在网上找到相应的答案。设计的过程中我还请教过一些同事关于这方面的学习情况,他们是如何进阶这个领域的,答案只有两个字:SDK Help。这给了我很大的启发,要知道那些帮助文件全是英文的,本来对这方面就了解甚少的我,能读懂那些么?经过一段时间的尝试,我现在也慢慢适应了这种全英文的帮助,它里面确实提供了很丰富的资料,包括入门、示例程序、工具的使

52、用等等。经过几个月的努力,我虽然如期完成了毕业设计以与论文,但要想实现这套系统的使用价值,还有待完善。36 / 64致致首先非常感学校给了我这次锻炼的机会,使得我在软件设计的能力上有了很大的提高,同时增强了我的实践能力。其次我要感的是我的指导老师建,是他在我遇到难题编不下去时帮助指导并监督了我。感他给予我的精心指导,每次与他交流时我总能得到详尽的分析。同时也感我实习是的同事和领导吴总经理副总经理,每当我遇到程序难题时,总是他来帮我调试,在技术上他给了我很大的支持,包括这个客户端软件的总体设计框架,是他的建议给了我灵感。没有他的实际帮助,我的毕业设计会变得更加艰难,在此非常感他的帮助。也感我的同

53、事工程师。也感我宿舍里的那些同学,没有他们的帮助和支持,我的设计也是很难完成的。最后还要感系里那些曾给提供帮助的老师们,是他们给我提供了优越的机房环境,让我的设计计划得以顺利进展!37 / 64参考文献参考文献1 科技.Visual C+ 6.0 程序设计与开发技术.人民邮电,2007.62 龚建伟 熊光明.Visual C+_Turbo C 串口通信编程实践.电子工业,2007.103 刀柱 孟繁晶 .Visual C+.实践与提高数据库篇.中国铁道,2007.84 罗斌 .Visual C+编程技巧精选 500 例.2006.125 明日科技. Visual C+ 程序开发例宝典.人民邮电

54、 20066 美David Simon .周瑜萍 Visual C+6 编程宝典.电子工业 20077 Bruce Eckel 著. C+编程思想第二版. :机械工业,20068 CSDN 附录 A 中文翻译1 1 表示符表示符表示符(descriptor)是一直使用的基本对象,它用于存储任意数据。虽然常用于存储文本,但是也可以存储二进制数据,甚至存储串行化的复合对象,因为他们并不依赖于零终止(zero termination)。他们被设计为具有最大的效率,并且可避免使用带有相关存和指令开销的虚函数。因为存在这些问题,所以它们使用一个 API 和需要一定时间才能习惯的派生结构。但是,它们提供了

55、如下功能: 运行时边界检查。 广泛和标注的 API,用于数据和文本管理。 与资源管理例紧密集成。2 2 可修改的可修改的 APIAPI记住,这些 API 是不可修改 API 之外的其他 API。所有可能修改 API 的一个共同特性是,如果尝试增加表示符的长度但是超出了最大长度,将立刻产生严重错误。和前面一样,下面并不是完整的 API 描述,但它包含了可能最常用的一些API:38 / 64 MaxLength():可以存储在表示符中的最大数据项数量。造成表示符长度超出这个值的任何操作将产生严重错误。 MaxSize():数据缓冲器将占据的最大字节数量。 SetLength()、SetMax()和

56、 Zero():将表示符的长度分别调整为指定长度、MaxLength()的值和零。注意:这些函数不会数据缓冲器。特别是,这可能意味着增加长度时将引入未初始化的值。 Append():将给定表示符中的数据追加到当前表示符的末尾。注意,该函数不能异常退出,因为数据缓冲器分配给表示符。如果追加的数据造成超出最大长度,则会产生严重错误。 Insert():在原始表示符的指定位置中插入给定的表示符。 Delete():从表示符中的给定位置中移除已知数量的数据项。随后的任何数据将顺次移动。 Format():以一种类似于(但是并不等同于)sprintf 的方式格式化表示符,假设一个表示符指定了一个格式字符

57、串,然后指定了适当数量的参数。注意,这种格式定义符基本上与 sprintf 的格式符一样,但是还存在一些区别。请查看 SDK 文档,了解更多的相关细节。 Copy():将数据从各种来源处复制到表示符中,这些来源包括原始存地址、8 位和 16 位表示符。从 8 位表示符中复制数据到 16 位表示符中,结果将产生额外的填充字节从 ASCII 转换到 Unicode;反之亦然,不过将大于 255 的Unicode 值转换为 1。3 3 不可修改的不可修改的 APIAPI所有的表示符类型都从抽象基类 TDesC 派生而来,因此它们共享一个不可修改的 API。下面将介绍一些最常用的成员(如果需要了解 A

58、PI 的完整细节,可以查看 SDK 文档的中的 TDesC16): Length():仅返回存储在表示符中的字符数量。 Size():表示符占用的字节数。对于一个 16 位(Unicode)的表示符,39 / 64它的大小将是该长度的两倍;对于 8 位的表示符,它的大小和该长度一样。 Ptr():将 const TUint*(针对 16 位的表示符:如果针对 8 位的表示符,则是 const TUint8*)返回到表示符的数据缓冲器。 Alloc():分配并返回一个给予堆的新表示符 HBufC,同时包含这个表示符中数据的拷贝。如果分配失败,则返回 NULL。 AllocL():执行一样的任务,

59、但是在分配失败时以 KErrNoMemory 异常退出。 AllocLC():等同于 AllocL(),但是它在清除栈上留下一个新分配对象的指针。注意:如果将 Alloc()、AllocL()和 AllocLC()与清除栈上的项目结合使用,则它们的使用将会影响清除栈的使用。请参见后面关于 HBufC 的介绍。 Left()、Mid()和 Right():标准的字符串分割函数,该函数返回一个表示符相关的子字符串的 TPtr 指针。注意,这些函数不影响表示符本身,而只是返回适当位置中相关子字符串的指针。 Find():在另一个表示符中搜索某个表示符的容。返回第一次出现该容的偏移量(以 0 为基数)

60、,如果没有找到,则返回 KErrNotFound。注意,这种搜索总是从表示符的开始处开始,使用 Right()获得表示符的剩余部分,然后根据需要重复查找更多出现该容的位置。 operator()、operator=()和 operator!=():这些运算符是针对文本的重载版本,遵循标准的文本比较规则。当然,可以在包含二进制数据的表示符中使用这些运算符,但结果可能无法预料。 operator():允许以一个基于零的索引检查单个字符或数据项。 operator=():令人惊奇的是,赋值运算符可以用于本来不可修改的表示符。有人可能认为,重新赋值不属于修改,因为它只是使用一些新的数据替换整个数据。TPtrC 是一个例外,它没有重载赋值运算符,并且可以将其认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论