基于VC++的温度检测系统设计文档格式.docx
《基于VC++的温度检测系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于VC++的温度检测系统设计文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
![基于VC++的温度检测系统设计文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/9bbabc2a-196a-4ded-b6e9-0a682f8b2e36/9bbabc2a-196a-4ded-b6e9-0a682f8b2e361.gif)
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
该端口已经被打开或者被占用!
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次点击,关闭串口
ComSel=((CComboBox*)GetDlgItem(IDC_COMBO1))->
m_ctrlComm.SetPortOpen(FALSE);
EnableSetting(TRUE);
m_ctrlIconOpenoff.SetIcon(m_hIconoff);
打开串口"
m_bOpenPort=FALSE;
}
(2)读写串口:
即温度数据的接收与处理,在voidCTemperDlg:
OnCommMscomm()函数中加入代码如下:
OnCommMscomm()
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<
len;
k++)
safearray_inp.GetElement(&
k,rxdata+k);
//转换为BYTE型数组
k++)//将数组转换为Cstring型变量
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调试成功