最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于单片机的多功能环境检测系统毕业设计

来源:动视网 责编:小OO 时间:2025-09-28 21:06:08
文档

基于单片机的多功能环境检测系统毕业设计

××学院毕业设计(论文)题目:基于单片机的多功能环境检测系统设计作者:指导教师:专业:电气自动化时间:××学院毕业论文基于单片机的多功能环境监测系统设计——串口通信与界面设计Thedesignofmultifunctionenvironmentalmonitoringbasedonsingle-chip——Serialcommunicationsandinterfacedesign摘要随着工业技术的发展,环境问题已经成为全世界关注的问题。近年来,水土流失、荒漠化、草原退化和物种减少;生态相当脆
推荐度:
导读××学院毕业设计(论文)题目:基于单片机的多功能环境检测系统设计作者:指导教师:专业:电气自动化时间:××学院毕业论文基于单片机的多功能环境监测系统设计——串口通信与界面设计Thedesignofmultifunctionenvironmentalmonitoringbasedonsingle-chip——Serialcommunicationsandinterfacedesign摘要随着工业技术的发展,环境问题已经成为全世界关注的问题。近年来,水土流失、荒漠化、草原退化和物种减少;生态相当脆


××学院

   毕 业 设 计(论 文)

题    目:  基于单片机的多功能环境检测系统设计

作    者:                                    

指导教师:                                    

专    业:          电气自动化                

时    间:                                    

××学院毕业论文

基于单片机的多功能环境监测系统设计

                 ——串口通信与界面设计

The design of multifunction environmental monitoring based on single-chip

                     ——Serial communications and interface design

  

摘 要

随着工业技术的发展,环境问题已经成为全世界关注的问题。近年来,水土流失、荒漠化、草原退化和物种减少;生态相当脆弱,自然灾害频繁;环境污染严重,直接危及社会、经济的发展。人们已经认识到,为了保护环境,就将对环境的演化趋势、特点及存在的问题作进一步的细致的了解。多功能环境监测是利用各种技术测定和分析生命系统各层次对自然或人为作用的反应或反馈效应的综合表征来判断和评价这些干扰对环境产生的影响、危害及其变化规律,为环境质量的评估、和环境管理提供科学依据。

本课题从国内外环境监测系统的研究现状出发,结合实际情况设计一个基于单片机的多功能环境监测系统。本文主要负责串口通信及界面软件的设计。其中,上位机软件主要以Windows XP为操作平台,采用Delphi7.0编写。Delphi是一种可视化的、快速的应用程序,具有面向对象编程,支持团队开发,提供工程管理,对数据库的良好支持等特性,是一个集数据通信、存储、查询、处理于一体的综合性软件。

本设计能够实现以下功能:PC机通过串行口与下位机通信,将下位机采集到的温、湿度及光线数据在PC机上实时显示;对历史数据进行查询、分析、统计,并能将相应的结果打印出来。

关键词:温湿度;光线状况;上位机;串口通信

Abstract

With the development of industrial technology, environmental issues have become the world's concern. In recent years, soil erosion, desertification, grassland degradation and loss of biodiversity; ecology very fragile and frequent natural disasters; environmental pollution, directly threatening the social and economic development. Environmental monitoring is the use of multi-function measurement and analysis technology system at all levels of life to natural or man-made role of response or feedback effects of the comprehensive characterization to determine and evaluate the impact of interference on the environment, endanger their trends, the environmental quality assessment, control and provide the scientific basis for environmental management.

This topic embarks from the domestic and foreign environmental monitoring system's research present situation, the union actual situation designs one based on monolithic integrated circuit's multi-purpose environmental monitoring system. This article primary cognizance serial port correspondence and contact surface software's design. And, the superior machine software mainly take Windows XP as the service platform, uses the Delphi7.0 compilation. Delphi is one kind of visualization, the fast application procedure, has the object-oriented programming, supports the team to develop, provides the project management, to database characteristics and so on good support, is a collection data communication, the memory, the inquiry, processing in a body's comprehensive software.

This design can realize the following function: PC machine through serial port and lower position machine correspondence, lower position machine gathering warm, humidity and optical fiber data on the PC machine real time display; Carries on the inquiry, the analysis, the statistics to the historical data, and can print the corresponding result.

Key words:mperature and humidity;Lighting conditions;PC;Serial Communication

第一章  绪论

1.1  课题背景

随着人们对环境问题及其规律认识的不断深化,环境问题不再局限于排放污染物引起的健康问题,而且包括自然环境的保护、生态平衡和可持续发展的资源问题。因此,环境监测正从一般意义上的环境污染因子监测开始向生态环境监测过渡和拓宽。除了常见的各类污染因子外,由于人为因素影响,灾害性天气增加,森林植被锐减,水土流失严重,土壤沙漠化加剧,洪水泛滥,沙尘暴、泥石流频发,酸沉降等,使我国本已十分脆弱的生态环境更加恶化。这促使人们重新审查环境问题的复杂性,用新的思路和方法了解和解决环境问题。人们开始认识到,为了保护生态环境,必须对环境生态的演化趋势、特点及存在的问题建立一套行之有效的动态监测与控制体系,这就是生态环境监测。生态环境监测是环境监测发展的必然趋势。

本质上看,环境保护是以减少或避免生态系统的破坏为终极目标。对环境监测,目前单纯的理化指标和生物指标监测存在很大的局限性,而生态环境监测则可弥补传统环境监测的不足。因此前者强调“局部剖析”,只对大气、水、土壤等中的化学毒物或有害物理因子进行测定;而后者着眼于“整体综合”,对人类活动造成的生态破坏和影响进行测定。可以说,生态环境监测是生态保护的前提,是生态管理的基础,是生态法律法规的依据。目前,生态环境监测已在全球范围内展开,但在我国才刚起步,基础差,底子薄,相对落后,缺乏统一的标准,国家尚未制定技术规范。本文主要结合国内情况拟对生态环境监测作全面介绍,以期大家共同努力来推动生态环境监测工作在我国的开展。

虽然我国经济一直以来快速发展,但是在经济发展的同时对环境的影响也日益扩大,尤其是负面的影响。反过来生态环境的破坏也逐步威胁着我们人类的生存和发展。为了更好的改善人类的生存环境、尽可能的避免环境进一步恶化,对环境情况特别是与人类关系密切的环境参数如温度和湿度的监测无疑具有非常重要的意义。人类的生存和社会的活动与温度、湿度,光线等环境因素的相关性越来越大,对环境参数进行有效的实时监测,已成为目前非常严峻的课题。环境监测是获取环境信息,认识环境质量和评价环境好坏的重要手段,也是进行环境监督和环境治理等管理工作的主要信息来源和途径。

环境监测系统是集传感器技术、通信网络和计算机应用为一体的综合数据分析管理系统,随着自动控制技术、电子信息技术和大规模集成电路等技术近年来迅速的发展,许多西方发达国家已经拥有很多先进的环境监测设备与环境监测手段。如果直接从外国购买这些现成的设备和技术,对于我国来说成本投入是比较高的,而且这些设备和监测手段可能与我国复杂多变的气候条件和具体的情况不相匹配,所以当前不适合直接购买和应用这些设备和技术。

目前,我国的环境监测系统与这些国家相比还有较大的差距,但随着我国科技实力的增强和经济实力的提高,也先后开发了一系列的环境监测系统。在这领域的进展和提高还是比较大的。但是总体来说这些设备的技术水平仍有待提高。因此开发研制出适合我国现状的低成本高性能的环境监测系统,是一项非常紧迫的任务,也对提高我国现代化企业的经济效益和加快我国的现代化水平具有非常重要意义。

1.2 国内外环境监测现状及发展趋势

1.2.1 发展现状

近些年来我国的经济发展迅速,人们的生活水平得到了很大的提高,但是与此同时工业化的发展也给环境带来的巨大的改变。近些年来京津地区的沙尘暴和森林覆盖率的大量减少就是很好的证据。传统上采用比较落后的人工环境监测方法,但是这种方法的实时性差,受自然条件的比较大,而且对于突发的环境问题不能及时发现并且处理,不利于宏观把握环境的变化情况。由于经济等因素我国目前还有很多地方使用传统的环境监测方法。

随着技术的发展和经济实力的提升,我国的环境监测水平也得到了一定的提高。在很多省份实现高速通信网络的同时,环境监测的参数和数据已经能联网的得到观测和控制。硬件设备已经得到很大的改善,传统的人工报表已经改成微机控制系统。还有部分省市已经采用自动的环境监测系统,能更加及时和准确的反馈数据。但是由于我国幅员辽阔,监测终端的需求量很大,并且环境监测系统的软硬件开发功能还不是很完善,数据的综合分析能力也有待提高。国内产品较之国外技术还显得比较薄弱。

主要表现在:

l、目前市场上同类产品存储空间有限。且基于单片机终端操作的,很少具有实时通信的功能,这对于远程进行数据的传输要求的单位的使用是不方便的。

2、现有的产品在数据输出仅支持点对点通讯且速度慢、距离短、且仍受地域。且不能满足大数据量多通道的实时数据的传输的功能。

3、产品的现场安装受使用环境所限,环境应用适用性差、测控手段单一。很难进行远距离的监控和报警。

4、产品只用液晶、LED等方式简单显示,使操作无法进行现场复杂实用的数据分析、读取、按需数据图形打印。

5、设备性能不高,难以适应要求较高的场合。如测量温度范围低,难以满足超高温,超低温的要求。

目前国外的环境监测系统已经广泛应用在各个领域,并发展的比较完善。许多国家的环境参数监控点已经分布在各个地区,技术上也很先进,能够监测温度、湿度、光线和水位等多个环境参数。部分产片还使用了卫星等技术进行环境监测。欧洲的一些国家各国之间以网络为核心进行合作,已经能对欧洲环境的现状和发展趋势作出及时的有效判断的预测,并根据此采取必要的措施来保护环境。一些美国的公司利用空间技术,利用太空的卫星能把地面的情况特别是大气的监测数据做成图像完整的传回地面监测,科学家的数据准确可靠。

令人可喜的是我国的环境监测技术正朝着现代化和高技术含量方向发展。目前在某些领域也把卫星技术、遥感技术和GPS等技术广泛应用于环境的监测。在网络方面利用无线传输、P宽带网络和GPRS、INTERNET等多种传输方式进行数据的传输与处理。可以在对环境指数的采集、分析、整理的基础上实现环境发展的预测。

1.2.2 发展趋势

近年来,神经网络、遗传算法、模糊理论等人工智能方法在国外温室环境控制技术中得到重视并逐步发展,其中神经网络方法应用较广。另外,采用多个环境因子综合考虑的多因子控制方式替代现行的单个环境因子分别考虑的单因子控制方式也是研究的一个重要方向。目前在温室环境控制系统中,分布式系统是主要发展方向,系统中不存在一个控制中心,主要控制功能由各分布的子处理器完成。各个温的控制功能一般由单片机(子处理器)完成,PC机作为主处理器,仅实现辅助功能,脱离主处理器,整个控制系统仍可工作。分布式控制方式具有价格低、控制灵活、可靠性高等优点,将在以后很长一个时期内广泛应用于温室环境控制系统中。随着网络技术的发展,可以通过Iniemet进行远程控制或诊断,在办公室通过网络对温室设备进行操作,达到减轻生产人员劳强度、提高设备利用效率,具有广阔的应用前景。

1.3 本课题主要工作

本设计可实时测量某一具体空间中任意一点的温度、湿度数据以及光线状况,能在小型终端设备的LCD上显示,还能通过串口通信在微机上实现实时数据的显示、分析和图形打印等功能。可以定时地将数据自动地打印出来供随时监管或存档。其中,上位机软件的主要功能如下:

1、历史数据查询功能:对以往的历史数据可以进行查询和分析,并用图表的方式显示环境的发展趋势。

2、动态记录显示功能:能够连续实时的采集和记录监测空间内温度、湿度、光线状况等参数的情况,以数字和表格方式进行实时显示和记录监测信息。

3、数据存储功能:所有的数据采集和记录到计算机上,按要求记录温、湿度以及光线状况表格,可以定时自动保存、备份等。

4、打印功能:按要求打印某个点温、温度、光线状况表格,自动定时打印和手动人工打印画面及参数报表。

第二章  系统设计总体方案

2.1  监测系统结构框图

多参数环境监测系统由环境参数采集单元(包括温度、湿度、光照度传感器及信号调理电路)、单片机、液晶显示模块、PC机、传输设备以及电源组成。结构框图如图2-1所示。

图2-1 系统结构图

2.2 监测终端的设计

监测终端组成框图如图2-2所示,该终端以单片机为核心,由各种传感器、A/D转换器、液晶显示模块、串行口输入/输出端口等构成。环境参数经信号采集电路和A/D转换后送单片机,经处理后在液晶上实时显示,然后通过串口传输给上位机。

          图2-2 监测终端组成框图

2.3 通信方式的选择

串口是计算机上通用设备通信的协议端口,现在大多数计算机包含串口。串口通信的标准经过使用和发展已经有很多中,但基本都是在RS232标准的基础上改进形成的。但是RS232标准只针对于点对点的单通道数据传送,在此基础上形成RS485标准,增加了多点和双向通信能力。这个标准传输信号具有很强的抗干扰能力,可以达到更大的传输距离和更高的传输效率。由于上位机只有一台,而需要通信的下位机有多台,因此不一定能够跟每个下位机同时及时的通信,所以为了更好的实现数据的传输,需要用排队理论来合理的设计和控制传输,使数据的传输更及时和有效,提高系统的通信能力。排队理论就是利用概率论和随机理论,研究随机系统内服务与需求之间的关系,以便合理地设计和控制排队系统。

在所研究的系统中,某一下位机请求与上位机通信,当上位机空闲时,立即响应请求,当上位机忙时,不能立即响应该请求。呼叫持续等待是一个有限的时间,若某一等待响应的呼叫超过规定的等待时间还没有响应则该下位机挂断,等待几分钟后再发送请求。各下位机的地位一样时,相应的规则采用先到先服务的形式。服务时间为一次传送数据的通信时间。由于多路请求是随机的,并且相互之间完全,但对整个系统而言,各下位机传送的数据都能送入上位机中。

目前串口是仪器仪表设备通用的通信协议端口,也用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位发送和接收字节。尽管比按字节的并行通信慢,但是由于串口通信是异步的,可以在使用一根线发送数据的同时用另一根线接收数据,其他线用于握手。

第三章  上位机开发环境与主要技术

3.1 上位机开发平台

Delphi是著名的Borland公司开发的可视化软件开发工具。Delphi系列软件的工作平台相当广泛,可以工作于Windows95、Windows98、WindowsNT、Windows2000以及Windows XP下,编程所用的语言为Object Pascal语言。Object Pascal语言具有高度清晰的结构,高效率的优化系统,是一种简单易学,但又不乏其作为优秀编程语言的特点。

Delphi具有简单、高效、功能强大的特点。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用。由于Delphi同时兼备了VC功能强大和VB简单易学的特点,因此它成为了程序员至爱的编程工具。

Delphi的主要特性如下:

1)Delphi是32位应用程序,使用它可以开发出各种功能强大的应用程序;

2)Delphi的编译器是目前世界上最快的32位本地代码编译器,使用这种编译器产生的运行文件(EXE)是的,不需要链接运行时的解释器DL;

3)Delphi可充分发挥Windows95/98/2000/NT和Windows NT的强大功能;

4)Delphi提供了多种32位可视组件;

5)Delphi是一种面向对象的程序设计语言,因此可做到对可视窗体的继承;

6)Delphi采用三层数据库管理模式(数据层、对象层、应用程序层),把例如数据模型、业务规则、窗体和对象等集中存储在对象存储库中;

7)应用程序可通过在Delphi中使用Borland公司提供的数据引擎(BDE)功能从而毫无障碍地使用多种数据库,例如Oracle、Sybase等;

8)使用Delphi提供的数据库浏览器。

3.2 数据库方案的实现

目前常用的数据库有Oracle、SQL、Server、Access和Mysql等,下面对这几个主流的数据库各自特点简单介绍。

Oracle数据库系统是对象关系型数据库,支持大型多用户数据系统和分布式数据库和分布处理,具有可移植性和兼容性,一般用在大型事务处理及客户/服务器结构的应用系统,但价格昂贵,不适合一般开发应用。

SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大;是真正的客户机/服务器体系结构,图形化用户界面,使系统管理和数据库管理更加直观、简单;丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地:对网络技术的支持,使用户能够很容易地将数据库中的数据发布到网页上。

Mysql是一个开放源码的小型关系型数据库管理系统,目前被广泛地应用在Intemet上的中小型网站中。由于其体积小、速度快、总体成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了Mysql作为网数据库。Mysql可以支持Windows、UNIX、Linux和SUN OS等多种操作系统平台。

Access是微软公司推出的基于Windows的桌面关系数据库管理系统,是Office系列应用软件之一。它提供了表、查询、窗体、报表、页、宏和模块来建立数据库系统的对象;提供了多种向导、.生成器和模板,把数据存储、查询、界面设计、报表生成等操作规范化等。

几种数据库各有特点,其中Access是一个中、小型数据库管理系统,使用方便、功能强大、易操作并且很实用,它适合数据量不太大的应用,在处理数据库时效率也很高。所以本课题选用Access作为数据库平台,既可以满足数据操作方便迅速的特点,也可以降低软件的开发成本。

3.3 串口通信的实现方法

3.3.1 概述

实际中串口通信程序的开发很少直接使用API函数,因为这会无谓的增加编程难度,也会给调试带来诸多不便。在面向对象方法下通常使用串口类(即串口函数库),这样编程效率即高,调试又方便。下面就从通信API介绍、串口类开发这两方面加以介绍。

l、串口通信API函数基础

通信API函数是整个串口通信程序的基础,串口类中的任何成员函数也只不过是对通信API函数的封装而己。通信API函数所涉及的操作包括串口的打开、关闭、初始化与读写等。

(1)串口的打开与关闭

    Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮槽、磁盘,还是控制台,都是用API函数Create File()来打开或创建的。如果打开成功的话会返回一个串口的句柄,应用程序应对这个句柄判断其有效性。当不再使用该串口句柄时,应该调用CloseHandle0函数关闭之,以方便其它应用程序申请对串口的控制权。

(2)串口的初始化

在打开串口后,常常需要对串口进行一些初始化工作,这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串行口的属性时,都要用DCB结构来作为缓冲区。

调用函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile0打开串行口后,就调用GetCommState()函数来获取串行口的初始配置。要修改串行口的配置,应该先修改DCB结构,然后再调用SetCommState0函数用指定的DCB结构来设置串行口。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小。Windows用阳缓冲区来暂存串行口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区.调用SctupCommO函数可以设置串行口的输入和输出缓冲区的大小。在对串口进行读写的时候,需要考虑超时问题。超时有两种:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。在用异步方式读写串行口时,虽然在完成读/写操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是读/写函数的返回时间。

(3)串口的读写控制

这部分内容关系到串行通信的核心内容,将分读/写串口API函数、异步I/O操作两部分介绍。

读/写串口API函数:

win32中使用ReadFile0函数或者ReadFileEx0数从串口中读取数据。两者区别是:前者对同步操作和异步操作都支持,而后者仅支持异步操作。eadFile0函数第四个参数,在读操作之前应置为0。同样,写串口函数也有两个,一个是writeFile0,另一个是writeFileEx0前者同时支持同步操作和异步操作,而后者仅支持异步操作。写函数不论在声明形式上还是在使用方法上都与ReadFile0十分相似,具体可以查看MSDN帮助文档。

异步I/O操作:

在用ReadFile0和writeFile0读写串行口时,既可以同步执行,也可以异步执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在异步执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的端口上同时执行I/O操作,甚至可以在同一端口上同时进行读写操作。“异步"一词的含义就在于此。ReadFile0和writeFile()函数是否为异步操作模式是由CreateFile()函数决定的。如果在调用CreateFileO创建句柄时指定了ILE FLAG OVERLAPPED标志,那么调用ReadFileO和writeFileO对该句柄进行的读写操作就是异步的,如果未指定异步标志,则读写操作是同步的。

在设置了异步I/O操作后,I/O操作和函数返回有以下两种情况:

第一种,函数返回时I/O操作己完成:此时结果好像是同步执行的,但实际上这是异步操作的结果。第二种,函数返回时I/O操作还没完成:此时一方面,函数返回值为0,并且GetLastErrorO函数返回ERROR IO PENDING;另一方面,系统把OVERLAPPED中的信号事件设为无信号状态。当I/O操作完成后,系统将它设置为有信号状态。如果GetLastError0函数返IEIERROR IO PENDING,则说明异步操作还没完成,线程可以等待操作完成。有两种等待办法:一种办法是用像WaitForSingleObject0这样的等待函数来等待OVERLAPPED结构的hEvent成员,可以规定等待的时间,在等待函数返回后,调用GetOverlappedResult0。另一种办法是用GetOverlappedResult()函数等待,如果指定该函数的bWait参数为TRUE,那么该函数将等待OVERLAPPED结构的hEvent事件,并且只有当I/O操作完成后方返回(实际上这又变成了同步方式)。同时GetOverlappedResultoi函数可以返回一个OVERLAPPED。结构来报告包括实际传输字节在内的重叠操作结果。

2、串口类的开发

串口类是对通信API函数进行最一般的封装,以便能够应用于不同的串口应用程序开发中。现在开发串口应用程序的方法很多,如微软的MSCcomm控件,但是MSComm本身存在一定的弊端,如只能发送ASCII码等。从用户角度讲上位机串口通信模块的使用流程一般分四个步骤,即“初始化并打开串口一监视串口~读写串21--关闭串口’’。

3.3.2 串口通信API函数的实现原理

实际中串口通信程序的开发很少直接使用API函数,因为这会无谓的增加编程难度,也会给调试带来诸多不便。在面向对象方法下通常使用串口类(即串口函数库),这样编程效率即高,调试又方便。

通信API函数是整个串口通信程序的基础,串口类中的任何成员函数也只不过是对通信API函数的封装而己。通信API函数所涉及的操作包括串口的打开、关闭、初始化与读写等。

    (1)串口的打开与关闭

Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮槽、磁盘,还是控制台,都是用API函数CreateFile()来打开或创建的。如果打开成功的话会返回一个串口的句柄,应用程序应对这个句柄判断其有效性。当不再使用该串口句柄时,应该调用CloseHandle0函数关闭之,以方便其它应用程序申请对串口的控制权。

    (2)串口的初始化

在打开串口后,常常需要对串口进行一些初始化工作,这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串行口的属性时,都要用DCB结构来作为缓冲区。

调用函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在CreateFile0打开串行口后,就调用GetCommState()i函l数来获取串行口的初始配置修改串行口的配置,应该先修改DCB结构,然后再调用SetCommState0函数用指定的DCB结构来设置串行口[3]。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小。Windows用阳缓冲区来暂存串行口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区.调用SctupCommOi函数可以设置串行口的输入和输出缓冲区的大小。在对串口进行读写的时候,需要考虑超时问题。超时有两种:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。在用异步方式读写串行口时,虽然在完成读/写操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是读/写函数的返回时间。

    (3)串口的读写控制

这部分内容关系到串行通信的核心内容,将分读/写串口API函数、异步I/O操作两部分介绍。读/写串口API函数:win32中使用ReadFile0函数或者ReadFileEx0数从串口中读取数据。两者区别是:前者对同步操作和异步操作都支持,而后者仅支持异步操作。ReadFile0函数第四个参数,在读操作之前应置为0。同样,写串口函数也有两个,一个是writeFile0,另一个是writeFileEx0前者同时支持同步操作和异步操作,而后者仅支持异步操作。写函数不论在声明形式上还是在使用方法上都与ReadFile0十分相似,具体可以查看MSDN帮助文档。

    异步I/O操作:

在用ReadFile0和writeFile0读写串行口时,既可以同步执行,也可以异步执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在异步执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的端口上同时执行I/O操作,甚至可以在同一端口上同时进行读写操作。“异步"一词的含义就在于此。ReadFile0和writeFile(i)函数是否为异步操作模式是由CreateFile函数决定的。如果在调用CreateFileO创建句柄时指定了FILE FLAG OVERLAPPED标志,那么调用ReadFileO和writeFileO对该句柄进行的读写操作就是异步的,如果未指定异步标志,则读写操作是同步的[5]。

  3.3.3 串口类的开发

串口类是对通信API函数进行最一般的封装,以便能够应用于不同的串口应用程序开发中。现在开发串口应用程序的方法很多,如微软的MSCcomm控件,但是MSComm本身存在一定的弊端,如只能发送ASCII码等。从用户角度讲上位机串口通信模块的使用流程一般分四个步骤,即“初始化并打开串口--监视串口--读写串口--关闭串口”。封装串口类CMyCom的成员函数时也正是基于这种理解,各成员函数介绍如下:

(1)初始化并打开串口函数

函数声明形式:BOOL CMyCom:InitMyCom(int nPort,int nBaud,int nDataBits,int nStopBits)

参数含义:nPort为端口号,支持串口l至串口4;nBaud为波特率,支持常用波特率如9600baud;nDataBits为数据位数,支持5—8位:nStopBits为停止位数,支持1—2位;

返回值:当设置成功后,返回值为TRUE;失败时,返回值为FALSE;

实现原理:本函数只支持操作一个串口。程序根据串口配置情况调用CreateFile0函数打开串口,随后启动串口监视线程等待应答数据。

        图3-1-InitMyCom()函数流程图

(2)写串口函数。

函数声明形式:BOOL CMyCom:WriteMyCom(char*bur,DWORD dwBufLen)

参数含义:buf为待发命令的缓冲区指针,dwBufLen待发字符。

返回值:返回值为实际发送的字符数;

实现原理:该函数调用WriteFileO发送命令并调用GetOverlappedResult0函数返回实际发送的字符[6]。

第四章  使用SPComm控件实现串口通信

Delphi可以利用的众多串行通信控件中,SPComm控件可谓是最简单,功能比较强大的一种。它支持Data Bits(数据位)、Parity(奇偶校验)、Stop Bits等设置,支持Read/Write,Timing Control(时序控制),Read Interval Timeout(读间断超时控制),WriteInterval Timeout(写间断超时控制)等,同时还支持DTR/DSR,RTS/DTS等硬件流程控制及Xon/Xoff(握手协议)软件流程控制,是比较完善的控件。

4.1安装SPComm控件

从互联网能下载SPComm控件。选择下拉菜单Component中的Install Component选项,在Unit filename处填写SPComm控件所在的路径,其他各项可用默认值,点击OK按钮。如图4-1安装后,在System控件面板中将出现一个红色控件COM。现在就可以像Delphi自带控件一样使用COM控件了[9]。

图4-1 安装SPComm控件

4.2 SPComm的主要属性,方法和事件

4.2.1 属性

CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。

BaudRate:设定波特率9 600,4 800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。

ParityCheck:奇偶校验。

ByteSize:字节长度5, 6, 7, 8等,根据实际情况设定。

Parity:奇偶校验位。

pBits:停止位。

SendDataEmpty:这是一个布尔属性,为True时表示发送缓存为空,或者发送队列里没有信息;为False时表示发送缓存不为空,或者发送队列里有信息。

4.2.2 方法

Startcomm方法用于打开串口,当打开失败时通常会报错。错误主要有7种:串口已经打开;打开串口错误;文件句柄不是通信句柄;不能够安装通信缓存;不能产生事件;不能产生读进程;不能产生写进程。

StopComm过程用于关闭串口,没有返回值。

WriteCommData(pDataToWrite: PChar; dwSi-zeofDataToWrite:Word ):boolean用于发送一个字符串到写线程,发送成功返回True,发送失败返回False,执行此函数将立即得到返回值,发送操作随后执行。函数有两个参数,其中pDataToWrite是要发送的字符串, dwSi-zeofDataToWrite是发送的长度[9]。

4.2.3 事件

 OnReceiveData:procedure(Sender:TObject;Buffer:Pointer;BufferLength:Word) of object当输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,Buff-erLength是收到的数据长度。OnReceiveError:procedure(Sender: TObject; Event-ask:DWORD)

当接受数据时出现错误将触发该事件。

4.3 SPComm的使用

以实现PC机与单片机8051之间的通信为例,首先要调通他们之间的握手信号。假定他们之间的通信协议是:PC到8051一帧数据6个字节,8051到PC一帧数据也为6个字节。当PC发出(F0,01,FF,FF,01,F0)后8051能收到一帧(F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。

创建一个新的工程COMM.DPR,把窗体的标题定义为单片机串口通信:

图4-2 单片机串口通信窗口

实现PC机与单片机之间的数据发送及接收具体步骤:

(1)初始化并打开串口

需要选择本次通信使用的串口,确定通信协议,即设置波特率、校验方式、数据位、停止位等属性,打开该串口。代码如下:

//初始化并打开串口:

Comml.BaudRate:=9600;          //波特率9600bps

Comml.Parity:=None;            //奇偶检验无

Comml.ByteSize:=8:             //数据位8

Comml.StopBits:=l;             //停止位1

Comml.StartComm:                //打开串口

(2)建立握手信号

实现PC机与单片机之间的通信,首先要调通它们之间的握手信号,握手信号可以随意选择某特定字符串,当Pc发出这样一帧数据后,通过接收事件能收到单片机返回的这一帧数据或特定的某字符串,则表示握手成功,系统通信正常。两者之间就可以按照协议相互传输数据。否则需重新建立握手信号。

(3)发送数据

在编写基于串口的计算机工业测控时,通常需要由PC机向下位机发送命令以控制下位机的行为,同时向下位机发送有关数据。利用SPCOMM串口控件向下位机发送数据代码如下:

//发送数据和控制子程序

procedure senddata;

var

i:integer;commflg:Boolean;

begin

commflg:=true;

for i:=l to 8 do

begin

if not fcomm comml writecommdata(sendbutter,i)then

begin

Commflg=false;

break;

end;

end;

end;

(4)接收数据

在编写基于串口的计算机工业测控时,通常需要由下位机向PC机发送数据以使PC机了解系统的测试数据或下位机的运行状态,并进而控制下位机的行为[11]。利用SPCOMM串口控件接收下位机发送的数据信息的代码如下:

//事件驱动方式接收数据程序

procedure TForm 1.CommlReceiveData(Sender:Tobject;

Buffer:Pointer;bufferLength:Word);

var

receivedata:array ofbyte;

begin

sleep(100);                      //等待lOOms,保证接收到所有数据

move(buffef,receivedata,bufferlength); //将接收缓存区中的数据转移到数组中

......

end;

(5)关闭串口

在系统开发中,应注意在不使用串口时应及时关闭串口,释放系统资源,否则可能会影响系统的其它应用。关闭串口的代码如下:

procedure TForml.FormClose(Sender;TObj ect:var Action:TCIoseAction);

begin

comml.StopComm;

end;

第五章  上位机软件设计

5.1 系统设计概述

本软件采用模块化设计方案,以系统主界面模块为主导,实现用户等级管理等主要功能,这样可以使整个软件结构层次化,且更易于维护和升级。

图5-1 软件模块结构图

5.2数据库平台的选择

数据库平台选用Microsoft Access 2003,Access2003是office2003中文版的组件之一,是一个中、小型数据库管理系统,使用方便、功能强大,与其它数据库有良好的接口。

Access2003具有完整的数据库应用开发工具,用户可以方便地设计、修改、浏览一个记录数据的基本表;可以在表数据中进行各种筛选和查询操作;可以设计和使用各种窗体以实现数据显示和操作;可以根据表数据设计打印各种报表;对表进行一系列特定的操作。

Access2003内有强大的操作向导,为用户提供了丰富的数据库基本表模板。用户只需简单的操作就可建立数据库中所使用的各种基本表、窗体和报表。在Access2003中,可以设定、修改基本表之间的关联,从而实现在多个相关表之间的关系查询。Access2003中的宏可以实现操作的自动化,使操作更加简单、快捷。Access2003不仅可以处理自身的数据库文件,还可以处理其它一些数据库系统管理软件所建立的数据库文件,能识别dBase、FOxBase、FoxPrO、Paradox、Btrieve等数据库格式文件,并且支持开放式数据库互连性标准(ODBc)的SQL。倒与其它的关系型数据库管理系统相比,Access2003具有以下优点:

(l)存储文件单一。Access2003的一个数据库文件中包含了该数据库中的全部数据表、查询、窗体、报表等所有数据,便于管理。

(2)支持长文件名,并可以在文件名内加空格,使文件便于理解、查找。

(3)具有强大的网络功能,可通过网络传送数据。

(4)使用简便,用户无需了解编程语言,便可轻松地设计和开发数据库应用程序。

(5)可以处理多种数据信息,如文本文件和其它数据库文件。

5.3 串口通信在本系统中的实现

串口通信模块是本远程监测软件的重要组成部分之一,是上位机与下位机进行正常通信的重要依据。能否及时准确的接受温湿度,光线监测数据在很大程度上取决于通信协议和通信流程的设计,本软件采用自定义的通信协议,有效地避免了数据碰撞的现象,提高了通信的质量与速度,减轻了通信量的负荷,降低了程序的复杂度。

5.3.1通信协议的设计

l、通信模型的设计

在确定通信流程与通信格式之前,应该首先明确通信方式,即明确上、下位机之间将采用什么组网形式及什么通信规约的问题。根据本课题研究的对象和主要目的,选择采用总线型网络结构、主从通信模式将更能满足上、下位机即时通信的需求,实现最终目的。应该考虑使用负载能力更的RS485协议。RS485协议是为弥补RS232的不足而提出的,它改进了RS232通信距离短、速率低的缺点,具有更强的抗干扰与负载能力,允许在一条平衡总线上连接最多256个收发器,支持半、全双工通信。RS485只对物理接口的电气特性做规定,因此需要用户建立自己的高层通信协议。

在通信过程中,通信设备双方是互相的。这也就是说,通信中数据的传输存在着不可确定性,即一方通信设备向另一方发完数据后,并不知道另一方是否正确收到。能否很好的克服这种客观存在的不可确定性,完全取决于通信协议中通信流程的设计。

具体协议表如下:

步骤上位机方向

单片机
1待机状态待机状态
2发送“EE” 

未收到数据不动作
3两秒钟内未接收“DD”显示通信失败,返回步骤1

如果收到数据回复“DD”

表示收到

4开始接收数据发送当前温湿度,光线状况数据
5回复“CC”表示收到每秒重复步骤2—5周期一次

返回步骤1待机状态

2、通信流程的设计

通常我们判断上位机所发出的命令信息是否被下位机正确接收到的依据是下位机的应答。下位机应答的可能性有四种情况:第一种是所求数据的应答(当成功执行时);第二种是表示命令执行失败的应答;第三种是表示未能成功接收上位机所发命令的应答;第四种是在规定时间内未接收到任何应答。当上位机遇到除第一种情况以外的其它三种情况时,常规做法会重发命令帧,但在本监测软件中就不允许重发,因为引起后三种情况的原因有很多,如下位机没有正确接收到上位机的命令帧:下位机执行命令时出错:下位机虽然执行完命令,但上位机接收的应答帧有误:下位机死机等等,如果对这些情况逐一处理就会令上位机程序疲于重发同一命令而无暇顾及轮询,从而影响监测效率。如果不用轮询而改用下位机自动报告的方式则又可能出现数据碰撞的情况。

因此在本监测软件的通信流程为:上位机首先呼叫下位机,下位机若接收到呼叫则向上位机发出应答信号。上位机接收到下位机的应答信号后向下位机发送命令信息,下位机接收到此命令后就开始根据这个信息的命令代码执行相应的操作,即发送数据或接收数据。若下位机没有收到上位机的呼叫信号就不会向上位机发出应答信号,那么上位机将继续呼叫下位机,直到下位机有应答为止。

 (1)上位机发送命令/接收应答流程

当上位机发送一个命令帧之后,立即转到线程串口监视线程,等待下位机的应答帧。上位机接收到正确应答后会继续发送下一帧命令,而不会向下位机发送任何表示正确接收的命令。当在超时时间内没有接收到下位机的应答帧时,上位机的行为会出现继续向下位机发送命令帧。

图5-3 上位机发送命令,接收回应流程图

(2)下位机接收命令/发送应答流程

在通信过程中,下位机一直处于接收状态,随时准备接收上位机发来的命令帧。当下位机接收到一个呼叫命令帧后,向上位机发送应答信号。然后上位机向下位机发送命令帧,下位机接收执行命令帧。

    图5-4 下位机发送命令∕接收回应流程图

3、通信格式的设计

    通信协议中的数据格式大多是基于帧的,即将所要发送数据/命令的头尾加入修饰性的字符,形成一个帧发送出去;接收时将所接收到的帧去掉所加入的头尾即可取出数据1命令。实践中大家通常采用的数据/命令帧的格式有两种,如表5-1、表5-2所示。

表5-1 数据∕命令帧格式1

表5-2 数据∕命令帧格式2

5.3.2通信程序的开发

SPComm控件通过串口传输和接收数据,为应用程序提供串行通信功能。该控件串行通信功能的实现实际上是调用了WindOWS的API函数,再由Comm.dry解释并传送给设备驱动程序。跟所有其它的ActiveX控件一样, SPComm.OCX定了一系列的属性和接口。在Delphi中,用户用设置属性值和编写方法就可以进行操作。

SPComm控件提供了两种串行口消息处理的方法:一种是查询方式,另外一种是事件驱动方式。对于较简单的通信任务,可通过查询串行12的CommEvent属性来了解最近发生的事件或错误并进行相应的处理。对较复杂的通信任务,就应用事件驱动接口,它只响应OnComm事件对己发生的事件或错误进行处理,与CommEvent属性密切相关。在Delphi中实现事件驱动方法时,要控件的变量,以后针对此对象操作即可。

事件驱动通信是处理串行端12交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CD或RTS线上一个字符到达或一个事件发生时。在这些情况下,可以利用SPComm控件的OnComm事件捕获并处理这些事件。OnComm事件还可以检查和处理通信错误。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个的设计实现SPComm控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个SPComm控件。在PC机串行端口通信时,使用了十几条线进行信号传输。

利用SPComm控件开发串口通信软件,需要了解以下线的名称及其作用,这些线的高低电平状态分别对应SPComm控件相应属性的True和False值。

5.4上位机程序的开发设计

本系统流程图如图5-5所示:

图5-5系统流程图

5.4.1系统登录模块

软件运行之后,首先就是进入用户登录窗体,本界面实现的功能是用户输入用户名和密码,根据不同的用户登录选择不同的操作主界面功能,并进入系统进行相应操作。

图5-6 用户登录模块截图

下面对重要的控件的属性加以说明:

表5-3 TTable控件属性

属性
NameTable1
DatabaseNameShuju
TableNameDenglu
ActiveTure
表5-4 TQuery控件属性

控件属性设置值
NameQuery1
DatabaseNameSjk
ActiveFalse
5.4.2系统主界面模块

该界面是本软件中最重要的部分。温室环境的监测,环境参数的设置输出以及温室内各个设备的运行状况都要在这里实现。其运行界面如图5-7所示。

图5-7 系统主界面截图

5.4.3用户设置模块

用户设定窗体主要是便于管理员和用户随时修改登录密码和增减用户名并相应修改管理权限的功能。但在修改之前需要输入原先的密码,然后才能进行修改。新的密码需要输入两次,如果两次输入的新密码不一样,则系统会弹出对话框提示密码没有修改成功。用户可以重新输入新密码。用户设置窗体只有以管理员登录的用户才有权利修改,否则弹出该窗体的按钮是灰色的不能实现如上操作。

图5-8用户设定模块截图

5.4.4历史数据查询模块

历史数据查询页设计功能有:按日期时间顺序对历史数据的查询、打印,对所查询到的记录产生报表并以文本格式输出。其运行界面如图5-9所示,报表界面如图5-10所示。

具体实现代码如下:

Procedure TForm4.setmaxminO;

Currentmaxdata:=fieldlist.fields[i].asfloat;

Currentmindata:=fieldlist.fields[i].asfloat;

While not(eof)do begin

If fieldlist.Fields[i].asfloatCurrentmindata:=fieldlist.fields[i].asfloat;

Currentmindate:=fieldlist.fields[O].asdatetime

If fieldlist.fields[i].asfloat>currentmaxdata then begin

Currentmaxdata:=fieldlist.fields[i].asfloat;

Currentmaxdate:=fieldlist.fields[0].asdatetime;

图9 历史数据查询界面

图10温室环境监测系统报表

结论

本文通过对国内外温室环境控制现状分析,指出了温室环境监测智能化是发展的必然趋势。根据温室内作物生长的需要,对温室环境因子进行实时监测控制,主要完成了温、湿度及光线状况环境监测系统的上位机软件的设计 ,本设计可实时测量某一具体空间中任意一点的温度、湿度数据以及光线状况,能在小型终端设备的LCD上显示,还能通过串口通信在微机上实现实时数据的显示、分析和图形打印等功能。但由于时间和个人能力有限,该设计难免有许多不完善之处,敬请更正。

致谢

无论是做毕业设计还是写论文对我来说都是第一次,我对串口通信的了解只是一些基本知识,而缺乏真正的实践经验。能顺利的完成这次毕业设计并写出这篇论文,我要十分感谢我的指导老师程老师。程老师在我遇到挫折与困难时总是能给我足够的信心与动力和一些建设性的指导意见,使我终于完成了这个对我来说蔚为艰巨的任务。程老师严谨认真的治学态度、渊博的知识、深厚的专业功底、敏锐的洞察力、求真务实的科研精神,及谦虚热情的待人风格使我受益匪浅。从这次的毕业设计中我学会了怎样去的思考和完成一项任务,以及怎样去面对和了解我所未知的东西,从何下手,怎样解决。首先,要分析这个任务的目的跟要求;然后去收集跟它有关的资料,进行整理和消化,全面和深入的了解这些资料并整理出大概的思路,系统的整理出任务的流程图和提纲;最后再按照流程图和提纲去完成这个任务。这样就能并很好的完成一项任务了。我想,这次的经历必将给我今后的工作带来很大的帮助和难得的经验。由于时间仓促,本设计难免有考虑不完善之处,敬请指正。

   谢谢!

参 考 文 献

[1]黄兴海.智能网络犁环境温湿度监测系统系统集成方案.电子质量-2001年第3期.

[2]林振强.基于网络技术的实验室温、湿度监测系统.化学分析计量.2006.04

[3]郭庆.基于RS485总线的环境监控系统设计与实现.国外电子测量技术.2006.07

[4]刘爱荣.多通道温.湿度循环检测仪.河南科学.2006—02

[5]钱君.Delphi5串12通信编程.机械工业出版社.2006 ,P121-132

[6]Ray Liscbner. Delphi技术手册.中国电力出版社.P66-88

[7]李海兵,杨晓亮.Access 2003数据库管理从入门到精通.中国青年出版社

[8]蒋培,肖江等.1氐消耗无线温湿度监测系统设计.木材加工机械.2007年4期.

[9]王树晓湿度计算机监测系统开发与应用.北京纺织.2003—02

[10]张毅刚,新编MCS-51单片机应用设计,哈尔滨工业大学出版社,2006,P145-155

[11]张培仁,基于C语言编程MSC-51单片机原理与应用,清华大学出版社,2002,P134-156

[12]沈红卫,单片机应用系统设计实例与分析,北京航空航天大学出版社,2003

[13]李长林,Visual C++ 串口通信技术与典型实例,清华大学出版社,2006,P132-166

[14]周亚玲,苏治中.delphi开发实用编程200例.中国铁道出版社,2006,P15-36

[15]曹岩.delphi程序设计实用教程.化学工业出版社,2008,P25-88

附录

主要程序:

(1).初始化按钮代码:

Procedure TFoml.FormCreate(Sender:TObject);

Begin

MSComm.CommPort:=1:                          //COM 1为选择端口

MSComm.Setting:=’9600,n,8,1’;          //波特率9600,数据8位,无奇偶校验,停止1位

MSComm.InBufferCount:=0;                    //清空接收缓冲区

MSComm.InputLen:=O;                        //读取整个缓冲区内容

MSComm.InBufferSize:=4096;                //接收缓冲区4096个字节

MSComm.RThreshold:=1000;                  //每次接收到1000个字节即产生OnComm事件

MSComm.OutBufferCount:=O:                //清空发送缓冲区

MSComm.OutBufferSize:=512;              //发送缓冲区512个字节

MSComm.SThreshold:=l;                  //每次发送缓冲区字节数少于1个即产生OnComm事件

If not MSComm.PortOpen then              //打开串口

MSComm.PortOpen:=True;

End;

(2)发送数据按钮代码:

procedure senddata;

vali:

integer;eommflg:Boolean;

begin

commflg:=true;

for i:=l to 8 do

begin

if not fcomm comml writecommdata(sendbutter,i)then

begin

Commflg=false;

break;

end;

end;

end;

(3)接收数据按钮代码:

procedure TForm1. Comm1ReceiveData (Sender: TObject;

Buffer:Pointer;

BufferLength:Word);

var

I,j:integer;

commRevstr:shortstring;

begin

viewstring:=″″;

SetLength(CommRevStr,BufferLength);

//设置字符串长度与缓冲区大小相等;

move(buffer^,pchar(@rbuf^),bufferlength);

//将缓冲区拷贝到字符串地址上;

for i:=1 to bufferlength do

 begin

viewstring:=viewstring+inttohex(rbuf[i],2)+″″;

……                               //其他语句

end;

end;

  (4)导出数据按钮代码:

Procedure TForm5.Buttonl Click(Sender:TObject);//导出数据过程

Var iCount,jCount:Integer;                    //设置变量

XLApp,Sheet:Variant;                         //存储生成Excel数据表格变量

Begin

Screen.Cursor:=crHourGlass;                 //将鼠标显示为忙状态    

If not VarlsEmpty(XLApp)then                 //XLApp是否为空

Begin

XLApp.DisplayAlerts:=False;

XLApp.Quit;

VarClear(XLApp);                           //XLApp不为空将其清空

End;

Try

XLApp:=CreateOleObject(’Excel.Application’);      //看系统中是否有Excel程序

Except

Screen.Cursor:=crDefault;

Showmessage(’没有找到Excel程序’);           //如果没有则弹出对话框显示未找到

Exit;

End;

XLApp.WorkBooks。Add;                        //添加一张表

Sheet:=XLApp.Workbooks[1].WorkSheets[1];

Sheet.name:=shuju.text;                   //给sheet一个名字

Sheet.Range[’AI:B 1’].Merge;            //合并单元格

Sheet.Range[’AI:B1’].value:=温湿度数据; //设置标题

Sheet.Columns[1].ColumnWidth:=25;

Sheet.columns[2].columnwidth:=9;

Sheet.columns[3].columnwidth:---9;       //设置表格栏名

Sheet.cells[2,l].value:=’时间’;

Sheet.cells[2,2].value:=’温度’;

Sheet.cells[2,3].value:=’湿度’;        //将记录导出来

DBGridl.DataSource.DataSet.First;        //将记录指针直到第一条

While not DB嘶d1.DataSource.DataSet.Eofdo       //将数据记录导入到Excel表中

Begin

For iCount:=O to DBGridl.Columns.Count-1 do

Sheet.Cells[jCount,iCount+1]:=

DBGridl.Columns.Items[iCount].Field.AsString;

Inc(Count);

FiguredbGrid.DataSource.DataSet.Next;

End;

Showmessage(’导出成功.);

X1App.Visible:=True;                 //将Excel表格显示出来

Screen.Cursor._crDefault;             //导出成功之后屏幕鼠标变回默认型

End;

 (5)数据打印按钮代码:

Procedure TFom5.Button2Click(Sender:TObject);

Begin

Printerdial091.Execute;

Print;

End;

 (6)刷新数据按钮代码:

Procedure TFonIl5.button3Click(Sender:TObject);

Begin

With adoqueryl do

Begin

Close;

SQL.Clear;

Sql.Add(‘select distinct*from ID0157 order by time’);

Open;

DateTimepickerl.DateTime:=adoqueryl.FieldList.Fields[0].AsDateTime;

DateTimepicker2.DateTime:=adoquery2.FieldList.Fields[0].AsDateTime;

With dbchartl do

Begin

AllowZoom:=true;             //将图形设置成放大缩小

Lef认xis.Automatic:=true;

LeftAxis.Increment:=one minute;

BottomAxis.DateTimeFormat:=‘MM—dd hh:mm';

End;

With dbgridl do

Begin

Seriesl.XLabelsSource:=‘时间’;

Seriesl.YValues.ValueSource:=‘温度’;

Series2.YValues.ValueSouree:=‘湿度’;

Columns[O].title.caption:=‘时间’;

Columns[O].fieldname:=‘time’;

end;

With DBChartl.BottomAxis do                 //动态显示数据

Begin

Automatic:=false;

DateTimeFormat:=‘MM-dd hh:mm’;        //设置时间坐标的格式

SetMinMax(IncMinute(now,-60),now);       //设置显示一小时的数据

End;

(7)中断按钮代码:

Procedure TForm5.FormCloseQuery(Sender:TObject;vat CanClose:Boolean);

Begin

Comm 1.StopComm;

End;

文档

基于单片机的多功能环境检测系统毕业设计

××学院毕业设计(论文)题目:基于单片机的多功能环境检测系统设计作者:指导教师:专业:电气自动化时间:××学院毕业论文基于单片机的多功能环境监测系统设计——串口通信与界面设计Thedesignofmultifunctionenvironmentalmonitoringbasedonsingle-chip——Serialcommunicationsandinterfacedesign摘要随着工业技术的发展,环境问题已经成为全世界关注的问题。近年来,水土流失、荒漠化、草原退化和物种减少;生态相当脆
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top