Ffgckddelphi课程设计报告.docx

上传人:b****8 文档编号:10830240 上传时间:2023-02-23 格式:DOCX 页数:23 大小:153.31KB
下载 相关 举报
Ffgckddelphi课程设计报告.docx_第1页
第1页 / 共23页
Ffgckddelphi课程设计报告.docx_第2页
第2页 / 共23页
Ffgckddelphi课程设计报告.docx_第3页
第3页 / 共23页
Ffgckddelphi课程设计报告.docx_第4页
第4页 / 共23页
Ffgckddelphi课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

Ffgckddelphi课程设计报告.docx

《Ffgckddelphi课程设计报告.docx》由会员分享,可在线阅读,更多相关《Ffgckddelphi课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。

Ffgckddelphi课程设计报告.docx

Ffgckddelphi课程设计报告

生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。

--泰戈尔

 

河南机电高等专科学校

课程设计报告书

 

课程名称:

DELPHI与电气控制

课题名称:

温度采集

专业:

生成过程自动化

班级:

过控082

学号:

061416217

姓名:

张艳丽

2010年12月20日

设计任务书

一、设计任务

通过利用DS18B20做温度检测传感器,下位机AT89C51单片机,上位机PC和串口线设计城的一个温度采集系统,实现对温度的采集和控制.

通过DS18B0检测到的温度经单片机处理通过串口线发送给上位机,上位机接收到数据后经处理显示在用DELPHI开发软件编写的一个监控软件上,直接显示现场温度,现场时间显示,并设置报警温度值,若温度过高(监控信号为红色闪烁)就立即报警给出信号,相关技术人员立即到现场解决出现的问题,从而保证生产管理的安全,温度正常(监控信号为白色)继续监控,当温度达到上限/下限时,界面设定的状态自动显示低温(蓝色)/高温(红色)/正常(绿色),并弹出低温/高温警报对话框,从而达到对温度的采集和智能监控,此系统能够满足现代生产生活的需要,效率高,具有较强的稳定性和灵活性。

二、设计方案及工作原理

用DELPHI做一个监控界面在上位机用来显示现场温度,以及当前温度处于何种状态:

低温、正常或者是高温,当温度超过所设置的温度是发出相应的信号给以提示,从而能够及时处理当前所发生的问题。

本次设计利用DS18B20做温度传感器,DS18B20是单线数字温度传感器,与微处理器之间采用串行数据传送,一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,其内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

采集到的数据通过串行口传送给AT89S52单片机,经处理传送到SUBF等待上位机接收,上位机接收到数据后通过软件直接显示十六进制数据。

本系统采用

单片机不间断的发送和接收数据,实现动态扫描,上位机通过检测当前数据是否与设定值相同来发出不同的信号,从而实现对温度的准确采集和监控。

串口线用RS-232做系统总线,RS-232-C接口(又称 EIA RS-232-C)RS-232-C有25条线,,分为5个功能组,包括4条数据线,11条控制线,3条定时线,7条备用线和未定义线。

本系统通过对现场温度采集、处理、发送的模式实现对温度准确的采集和控制。

 

目录

第一章、系统设计要求和解决方案

第二章、硬件实现

第三章、软件实现

第四章、缺点及可能的解决方法

第五章、心得体会

附录一、参考文献

 

第1章系统设计要求和解决方案

一.系统设计要求

(1)设计本系统主要用于现场温度采集并通过RS-232发送上位机给人以直观的显示,了解当前现场的温度。

为此应使系统稳定、准确、快速的发送数据,上位机能够准确的接收数据,并显示在当前界面,使系统人性化。

(2)接收DS18B20的数据是用AT89C51单片机处理的,这种单片机处理数据快速、稳定,能更好的确保系统的稳定性。

(3)现场温度检测选用了DS18B20温度传感器,采用此温度传感器首先要了解温度传感器的适用范围、环境、测试精度、特性等一切有关参数。

要求在所测试的环境中能够不间断的测试,把现场的温度接收,通过单线发送给单片机,要保证测试准确无误。

(4)通过SPCOMM控件实现上位机与单片机的通信。

2.解决方案

1,通过SPCOMM控件实现上位机与单片机的通信,因为SPCOMM控件具有一下特点:

(1)属性

CommName:

控件名,可填写COM1,COM2,…等串口的名字,为字符型变量。

BaudRate:

设定波特率,如可为9600,4800等,可以在串口打开后更改波特率。

ParityCheck:

是否选择奇偶校验。

ByteSize:

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

Parity:

奇偶校验位。

StopBits:

停止位的位数。

(2)方法

Startcomm:

用于打开串口,当打开失败时通常会报错。

StopComm:

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

(3)函数

WriteCommData(pDataToWrite:

PChar;dwSizeofDataToWrite:

Word):

boolean

送一个字符串到写线程,发送成功返回true,执行此函数将立即得到返回值,发送操作随后执行。

pDataToWrite是要发送的字符串,dwSizeofDataToWrite是发送的长度。

(4)事件

OnReceiveData:

procedure(Sender:

TObject;Buffer:

Pointer;BufferLength:

Word)ofobject

系统中SPCOMM的设置为:

CommName:

Com1;BaudRate:

9600ParityCheck:

None;ByteSize:

8;StopBits:

1;以实现能与下位机串口通信。

2,用AT89C51做下位机是因为它能够提供以下标准功能:

4k字节的flash闪存,128字节内部RAM,32个I/O口线,两个十六位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路,同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节点工作模式。

空闲方式停止CPU的工作,但允许RAM,定时器/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的数据,从而保证数据稳定存储和处理。

3,采用DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。

对DS18B20操作部分最好采用汇编语言实现。

在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多DS18B20,在实际应用中并非如此。

当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。

在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,要保证DS1820接触良好不能断线,防止程序读该DS18B20时,没有返回信号,程序进入死循环。

第二章硬件实现

一、以单片机(AT89S52)为核心的温度采集系统设计

1、AT89S52功能特性描述:

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

AT89S52引脚图如下:

2、温度传感器DS18B20 

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

1、DS18B20产品的特点

  

(1)、只要求一个端口即可实现通信。

  

(2)、在DS18B20中的每个器件上都有独一无二的序列号。

  (3)、实际应用中不需要外部任何元器件即可实现测温。

  (4)、测量温度范围在-55。

C到+125。

C之间。

  (5)、数字温度计的分辨率用户可以从9位到12位选择。

  (6)、内部有温度上、下限告警设置。

2、DS18B20的引脚介绍

  

TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

(底视图)图1

表1 DS18B20详细引脚功能描述

序号

名称

引脚功能描述

1

GND

地信号

2

DQ

数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源。

3

VDD

可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

3.DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:

初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

DS18B20采用外部供电方式,单总线长度也不宜超过80M,否则也会影响到数据的传输。

在实际应用中还可以使用一个MOSFET将I/O口线直接和电源相连,起到上拉的作用。

对DS18B20的设计,需要注意以下问题

(1)对硬件结构简单的单线数字温度传感器DS18B20进行操作,需要用较为复杂的程序完成。

编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。

尤其在使用DS18B20的高测温分辨力时,对时序及电气特性参数要求更高。

(2)测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。

DS18B20在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。

若VCC脱开未接,传感器只送85.0℃的温度值。

(3)实际应用时,要注意单线的驱动能力,不能挂接过多的DS18B20,同时还应注意最远接线距离。

另外还应根据实际情况选择其接线拓扑结构。

DS18B20实际图形如下:

3、显示模块

在系统运行的过程中,系统要能够显示实时的温度及在设置上、下限是能够显示当前设置。

我们考虑以下显示方案。

使用传统的数码管显示。

数码管具有:

低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高低温、对外界环境要求低、易于维护,同时其精度比较高,称重快,精度可靠,操作简单。

数码管采用BCD编码显示数字,程序编译容易,资源占用较少。

4、控制模块

温度采集后存储在EEPROM里面的上、下限设定值进行比较,得到控制的结果。

本系统采用两路继电器来负责上限和下限的控制,实现对实时温度的控制。

5、温度采集

DS18B20支持“一线总线”接口,测量温度范围为-55°C--+125°C,在-10--+85°C范围内,精度为±0.5°C。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:

环境控制、设备或过程控制、测温类消费电子产品等。

6、MAX232驱动器/接收器

MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供EIA/TIA-232-E电平。

每个接收器将EIA/TIA-232-E电平输入转换为5VTTL/CMOS电平。

这些接收器具有1.3V的典型门限值及0.5V的典型迟滞,而且可以接收±30V的输入。

每个驱动器将TTL/CMOS输入电平转换为TMEIA/TIA-232-E电平。

所有的驱动器、接收器及电压发生器都可以在德州仪器公司的LinASIC元件库中得到标准单元。

其主要特点如下:

单5V电源工作;LinBiCMOS工艺技术;两个驱动器及两个接收器;±30V输入电平低电源电流:

典型值是8mA;符合甚至优于ANSI标准EIA/TIA-232-E

及ITU推荐标准V.28;可与Maxim公司的MAX232互换;ESD保护大于MIL-STD-883(方法3015)标准的2000V。

其引脚图如下所示:

7、RS232九针串口

九针引脚定义符号

1载波检测         DCD2接收数据          RXD3发送数据          TXD

4数据终端准备好 DTR5信号地             SG6数据准备好       DSR

7请求发送          RTS8清除发送          CTS9振铃提示          RI

8、74HC164芯片及四位八段数码管

74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。

这种方法只需要2个MPU的I/O端口,而且在锁存器件这2个端口还可以干别的事。

利用此芯片驱动四位数码管可以节约单片机的I/O口。

第三章、软件实现

主界面:

报警界面:

软件设计包括上位机设计、下位机设计和通信协议设计三大部分。

(1)上位机设计

在开发PC上位机的通信程序中,我们采用了ObjectPascal语言,此语言具有可读性好编写容易的特点,开发Windows环境下的串口通信程序又选用了Spcomm控件,另外先编写打开串口、初始化串口和读串口命令。

再编写显示模块,温度超过设定值时的报警模块,最后退出系统程序模块,便于直观的显示各种必要的信息。

在Windows环境下串行通信有两种:

主要方式即同步方式,异步方式两种方式,其中在同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。

异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其它部分在前台执行。

(2)下位机设计

影响数据转输产生错误的因素有:

转输线分布参数上下位机间的波特率误差现场干扰等。

而针对近程小批量数据的通信,下位机的波特率误差性是影响可靠通信的最主要因素。

所以在下位机软件的设计时应重点考虑并设置好波特率。

下位机软件的实现:

①设置通信方式和波特率的值及发送数据到缓冲器

MOVTMOD,#20H

MOVTH1,#0FDH

MOVTL1,#0FDH

SETBTR1

CLRTI

MOVSCON,#50H

MOVPCON,#00H

MOVR6,#30

SETBP2.7

MOVA,#97

MOVSBUF,A

②等待接收PC机发来的信号帧并按通信协议作出相应响应。

(3)通信协议设计

在进行数据通信的软件设计时,必须解决好两个方面的问题:

一是可靠性,二是速度。

而这两方面的问题,可靠性是第一位的,速度只能是在可靠的基础上的速度。

可靠快速转输的实现,需要PC-单片机软件以及通信协议等各个环节的可靠和其间的相互配合。

由于温度采集和实施控制是通过单片机控制系统实现,而微机完成温度监控,所以需要采用单片机和微机之间的通信协议。

本设计应用条件为传输距离不超过15米的短距离数据传输,且传输数据量较小,所以采用在控制领域里应用较广泛RS232C串行通信方式。

本通信协议的设计思想是基于帧传输方式。

即在向RS232串口发送命令信号,应答信号及数据信号时,是一帧一帧地发送的。

为了使数据快速可靠地传输,将每一帧数据唯一对应一命令帧。

另外串口接收和发送数据过程如下:

串口数据发送过程

串口数据接受过程

以上是将应用程序发送过来的数据作为一个数据流放在发送缓冲区中,通过通信协议进行分帧──切割──发送。

在接收端,分帧的数据去掉帧头重新组合到接收缓冲区中,交给应用程序处理.

主界面代码:

unitUnit1;

interface

uses

Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls,ComCtrls,ExtCtrls,SPComm,TeEngine,Series,

TeeProcs,Chart,DbChart;

type

TForm1=class(TForm)

Panel2:

TPanel;

StatusBar1:

TStatusBar;

Edit2:

TEdit;

Edit3:

TEdit;

Label2:

TLabel;

Label3:

TLabel;

Label4:

TLabel;

Label5:

TLabel;

Label6:

TLabel;

ComboBox1:

TComboBox;

ComboBox2:

TComboBox;

ComboBox3:

TComboBox;

Button1:

TButton;

Button2:

TButton;

Button3:

TButton;

Comm1:

TComm;

Timer1:

TTimer;

DBChart1:

TDBChart;

Series1:

TLineSeries;

Timer2:

TTimer;

Button4:

TButton;

Memo1:

TMemo;

Timer3:

TTimer;

procedureFormCreate(Sender:

TObject);

procedureEdit3Change(Sender:

TObject);

procedureComm1ReceiveData(Sender:

TObject;Buffer:

Pointer;

BufferLength:

Word);

procedureComboBox1Change(Sender:

TObject);

procedureButton1Click(Sender:

TObject);

procedureComboBox2Change(Sender:

TObject);

procedureComboBox3Change(Sender:

TObject);

procedureButton3Click(Sender:

TObject);

procedureButton2Click(Sender:

TObject);

procedureTimer1Timer(Sender:

TObject);

procedureTimer2Timer(Sender:

TObject);

procedureButton4Click(Sender:

TObject);

procedureTimer3Timer(Sender:

TObject);

private

{Privatedeclarations}

public

{Publicdeclarations}

end;

var

Form1:

TForm1;

k:

Integer;

implementation

usesUnit2;

{$R*.dfm}

procedureTForm1.FormCreate(Sender:

TObject);

begin

edit2.Text:

='COM1';

edit3.Text:

='9600';

combobox1.ItemIndex:

=0;

combobox2.ItemIndex:

=0;

combobox3.ItemIndex:

=0;

end;

procedureTForm1.Edit3Change(Sender:

TObject);

var

i:

Integer;

begin

try

i:

=strToInt(Edit3.Text)

except

Edit3.setfocus;

raiseException.Create('波特率设置错误');

end;

comm1.BaudRate:

=StrToInt(Edit3.Text);

end;

procedureTForm1.Comm1ReceiveData(Sender:

TObject;Buffer:

Pointer;

BufferLength:

Word);

var

strRecv:

string;

begin

setLength(strRecv,BufferLength);

Move(Buffer^,pchar(strRecv)^,BufferLength);

Memo1.Lines.Add('当前温度:

'+strRecv+'度');

Memo1.Invalidate;

k:

=StrToInt(strRecv);

end;

procedureTForm1.ComboBox1Change(Sender:

TObject);

begin

comm1.ByteSize:

=TByteSize(combobox1.ItemIndex);

end;

procedureTForm1.Button1Click(Sender:

TObject);

begin

comm1.CommName:

=edit2.Text;

comm1.BaudRate:

=strToInt(edit3.Text);

comm1.ByteSize:

=TByteSize(combobox1.ItemIndex);

comm1.StopBits:

=TStopBits(combobox2.ItemIndex);

comm1.Parity:

=TParity(combobox3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1