基于VC++的温度检测系统设计.docx
- 文档编号:14482179
- 上传时间:2023-04-23
- 格式:DOCX
- 页数:14
- 大小:545.64KB
基于VC++的温度检测系统设计.docx
《基于VC++的温度检测系统设计.docx》由会员分享,可在线阅读,更多相关《基于VC++的温度检测系统设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于VC++的温度检测系统设计
《现场总线与测控技术》
课程论文
题目:
基于VC++的温度检测系统设计
学号:
2011080911
姓名:
蔡志威
专业:
电路与系统
指导老师:
李跃忠
二零一二年四月二十日
摘要:
为了实现下位机的集散控制,本为介绍了一种有效的方案,实现了下位机的实施温度监测。
下位机通过DS18B20对温度采集,STC89C52单片机实现温度数据处理和显示,同时实时地通过串口发送给上位机。
在上位机上,利用VisualC++编写对应的串口通信软件,从而实现了完整的温度监测系统的设计。
关键词:
VisualC++;上位机;单片机;温度
Abstract:
inordertoimplementamachineofdistributedcontrol,thisisintroducedaeffectiveprogram,realizedtheimplementationofamachineundertemperaturemonitoring.Amachineundertemperaturegatheringtothroughds18b20,stc89c52singlechipmicrocomputertemperaturedataprocessinganddisplay,andreal-timethroughaserialportsendingtothePC.Intheuppermachine,touseVisualC++writethecorrespondingserialinterfacecommunicationsoftware,thusfulfillingthecompletetemperaturemonitoringsystemdesign.
Keywords:
VisualC++;PC;Singlechipmicrocomputer;temperature
前言
随着电子技术和计算机技术的发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
温度是工业生产中主要的被控参数之一,与之相关的跟中温度控制是工业生产过程中经常遇到的过过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量。
温度控制在实际生产中有着广泛的应用,例如:
在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中。
在这些领域中人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。
因而设计一种较为理想的温度控制系统是非常有价值的。
本论文正以上位机与下位机通讯为主要内容,对远程温度控制系统作了较详尽的介绍。
在实时检测和自动控制的应用系统中,单个单片机控制作为一个核心部件来使用往往是不够的,还应根据具体硬件结构,以及针对具体应用对象特点,编写对应的上位机软件,加以完善,才能设计出完整的系统。
本文设计的一种温度控制系统,用STC89C52单片机作为温控器,选用DS18B20数字温度传感器,可以实现如温度自动控制,设定温度、实时温度显示,温度上下限报警,温度上下限报警值设定,目标温度值设定,自动调零等各种不同的功能。
1、设计方案及原理
在设计的过程中,充分考虑了法案的可行性,在通信这一块,由于目前的PC机都淘汰了串口,故采用PL2302芯片进行了USB与RS232的通信协议转换,从而在上位机中模拟了一个串口,经实验证明,其稳定性与通信速率方面都能满足要求。
在下位机中,采用了常用的STC89C52单片机,该单片机集成了片内eeprom,可以记录温度数据,且能掉电保存。
为了验证通信的准确性,下位机同时把温度数据在LCD上显示出来,本设计的整体框图如图1所示:
图1温度检测系统整体原理框图
2、上位机设计
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。
串口通信方便易行,应用广泛。
一般情况下,工控机和各智能仪表通过RS485总线进行通信。
RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。
每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。
在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。
其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。
本设计中我采用了ActiveX控件的方式。
串口的操作可以有两种操作方式:
同步操作方式和重叠操作方式(又称为异步操作方式)。
同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。
在上位机编程中,采用如下步骤完成串口通信的核心框架:
(1)打开并配置串口,双击“打开串口”控件,进入TemperDlg.cpp源程序,在CTemperDlg:
:
OnBtnopen()函数中加入如下代码:
voidCTemperDlg:
:
OnBtnopen()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
m_bOpenPort)//第一次点击,打开串口
{
if(m_ctrlComm.GetPortOpen())
{
AfxMessageBox("该端口已经被打开或者被占用!
");
}
intComSel;
ComSel=((CC
omboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
m_ctrlComm.SetCommPort(ComSel+1);//串口的初始化
m_ctrlComm.SetInputMode
(1);//二进制
m_ctrlComm.SetInBufferSize(1024);
m_ctrlComm.SetOutBufferSize(512);
m_ctrlComm.SetSettings("9600,n,8,1");//无奇偶校验,1个停止位
if(!
m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
//MessageBox(NULL,"串口初始化成功!
",0);
else
{
AfxMessageBox("该端口已经被打开或者被占用!
");
}
m_ctrlComm.SetRThreshold
(1);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
EnableSetting(FALSE);
m_ctrlIconOpenoff.SetIcon(m_hIconon);
((CButton*)GetDlgItem(IDC_BTNOPEN))->SetWindowText("关闭串口");
m_bOpenPort=TRUE;
}
elseif(m_bOpenPort)//第2次点击,关闭串口
{
intComSel;
ComSel=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
m_ctrlComm.SetPortOpen(FALSE);
EnableSetting(TRUE);
m_ctrlIconOpenoff.SetIcon(m_hIconoff);
((CButton*)GetDlgItem(IDC_BTNOPEN))->SetWindowText("打开串口");
m_bOpenPort=FALSE;
}
}
(2)读写串口:
即温度数据的接收与处理,在voidCTemperDlg:
:
OnCommMscomm()函数中加入代码如下:
voidCTemperDlg:
:
OnCommMscomm()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_strRXData="";//每次进入编辑框内容清空等待显示新的数据
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[2048];//设置BYTE数组
CStringstrtemp;
staticintflag;//识别码数字标志位
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{//以下你可以根据自己的通信协议加入//处理代码
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为//ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k { BYTEbt=*(char*)(rxdata+k);//字符型 strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放 m_strRXData+=bt;//加入接收编辑框对应字符串strtemp } } UpdateData(FALSE); } 经过不断调试,不断修正,最终的上位机程序界面如图2所示。 图2上位机软件调试 3.下位机设计 整个下位机程序流程图如图3所示: 图4下位机软件流程图 3.1温度传感器的选用 方案一: 采用DS18B20温度传感器 DS18B20传感器的主要特性如下: (1)适应电压范围更宽,电压范围: 3.0~5.5V,在寄生电源方式下可由数据线供电; (2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯; (3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温; (4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内; (5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃; (6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温; (7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快; (8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力; (9)负压特性: 电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 方案二: 采用AD590温度传感器 AD590是美国模拟器件公司的电流输出型温度传感器,它属于模拟温度传感器,供电电压范围为3~30V,输出电流223μA(-50℃)~423μA(+150℃),灵敏度为1μA/℃。 AD590在正常工作时等效一个高阻抗的恒流源,对应于热力学温度T每变化1K,就输出1uA的电流。 当在电路中串接采样电阻R时,R两端的电压可作为喻出电压。 但是R的阻值不能取得太大,以保证AD590两端电压不低于3V。 AD590输出电流信号传输距离可达到1km以上。 作为一种高阻电流源,最高可达20MΩ,所以它不必考虑选择开关或CMOS多路转换器所引入的附加电阻造成的误差。 适用于多点温度测量和远距离温度测量的控制。 由上述可见,无论使用DS18B20还是AD590都可以满足温度范围上的要求。 使用DS18B20时,因为它带有A/D转换的功能,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,故使用较为简单,电路连接较为方便。 使用AD590时,其转换速度快、转换精度高、功耗小、非线性误差小。 两种温度传感器在使用上各有特点,但为了满足非线性误差的要求,故选用DS18B20。 3.2温度转换的算法与编程 为了提取有效的温度数据,我们必须到达经过有效的编程才能达到要求,根据datasheet,温度与数值的对应关系如表1所示。 例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则: 实际温度=07D0H*0.0625=2000*0.0625=125°C。 例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变),则: 实际温度=370H*0.0625=880*0.0625=55°C 表1温度与二进制码对应表 温度转换的C51核心代码如下: voidtemperature_convert() { ucharTL,TH;//存放温度的高八位和低八位 uintpoint,temp; TL=ds18b20_read_byte();//读取温度值低八位 TH=ds18b20_read_byte();//读取温度值高八位(最高位为符号位) /***********************温度转换成数值**************************/ if(TH>0x07)//判断负温度 { negative_flag=1; TH=~TH;//把负数的补码换算成绝对值 TL=~TL;//如果TL向TH右进位? TL++; } temp=(TH*256+TL)/16;//提取温度整数部分,temp已经扩大了1000 //除16即乘以精度0.0625, temperature[0]=temp/100;//百位 temperature[1]=temp%100/10;//分离十位 temperature[2]=temp%100%10;//分离个位 point=TL&0x0f;//得温度数据小数部分,屏高四位,低四位为小数位 //若point*10000则超出了65535的范围 temperature[3]=(point*1000/16)/100;//个分位 temperature[4]=(point*1000/16)%100/10;//十分位 temperature[5]=(point*1000/16)%100%10;//百分位 } 下位机软件编程 4分析与结论 通过本次课程设计的软件仿真与在线调试,以及下位机单片机系统的设计。 我从中学到了很多知识。 通过实践,虽然暴露了我学习的不足之处,但同时也巩固和提高了所学的知识,使我的专业技能得到锻炼和提高。 最后终于调试成功,下位机的温度能准确无误的传送到上位机。 5参考文献 [1]STCMicrocontrollerHandbook,2007 [2]童诗白、华成英模拟电子技术基础北京: 高等教育出版社 [3]VC知识库 [4]谢剑英、贾青微型计算机控制技术北京: 国防工业出版社 [5]周航慈.单片机程序设计基础[M].北京: 航空航天大学出版社,2003.07 附录: 源代码及实物作品 蔡志威现场总线课设源代码.rar下载链接: 图5KeilC51的下位机编程 图6下位机显示温度20.125度 图7上位机VisualC++编程 图8调试成功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VC 温度 检测 系统 设计