基于卡尔曼滤波的目标跟踪研究_毕业设计 推荐

2022-05-23 10:51:08   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《基于卡尔曼滤波的目标跟踪研究_毕业设计 推荐》,欢迎阅读!
卡尔曼,滤波,毕业设计,跟踪,基于

设计题目:







基于卡尔曼滤波的目标跟踪研究 XXX

信息与电气工程学院 电气工程及其自动化

XXXX



XXXXXXXXX



XX

20124 24


















本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本论文(设计)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。

此声明的法律后果由本人承担。

作者签名: 二〇一



毕业论文(设计)使用授权声明

本人完全了解鲁东大学关于收集、保存、使用毕业论文(设计)的规定。

本人愿意按照学校要求提交论文(设计)的印刷本和电子版,同意学校保存论文(设计)的印刷本和电子版,或采用影印、数字化或其它复制手段保存论文(设计);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布论文(设计)的部分或全部内容,允许他人依法合理使用。

(保密论文在解密后遵守此规定)



论文作者(签名)

二〇一






引言 1. 绪论

1.1研究背景

1.1.1卡尔曼滤波提出背景 1.1.2 应用范围 1.2本文研究的主要内容

2.初步认识卡尔曼滤波 2.1关于卡尔曼



2.2滤波及滤波器问题浅谈 2.3 卡尔曼滤波起源及发展

3.估计原理和卡尔曼滤波 4.卡尔曼滤波的实现 4.1卡尔曼滤波的基本假设 4.2卡尔曼滤波的特点 4.3卡尔曼滤波基本公式 4.4卡尔曼滤波参数的估计和调整

5.卡尔曼滤波的相关知识 5.1 5.2 5.3

6.卡尔曼滤波器的设计 7.目标跟踪模型的建立

8结合数学模型进行matlb编程 9.目标跟踪仿真 10.结论 11.参考文献 12.致谢



2 2

2

2 5 5 6 8 8 9

11 11 12 13 15 16


鲁东大学毕业设计

基于卡尔曼滤波的目标跟踪研究

杨倩倩

(信息与电气工程学院 电气工程及其自动化 20082 083515586)

卡尔曼滤波是Kalman 在线性最小方差估计的基础上,提出的在数学结构上比

较简单的而且是最优线性递推滤波方法,具有计算量小、存储量低,实时性高的优点。在很多工程应用中都可以找到它的身影,包括航空器轨道修正、机器人系统控制、雷达系统与导弹追踪等。利用卡尔曼滤波预测物体移动的速度、角度,确定物体下一时刻的位置,控制摄像机跟踪物体。同时,卡尔曼滤波也是控制理论以及控制系统工程中的一个重要话题,具有重要的工程实践意义。此论文主要是通过介绍卡尔曼滤波的原理,结合实际建立卡尔曼滤波数学模型,设计关于目标追踪的卡尔曼滤波器。

关键词卡尔曼滤波;目标跟踪;最优



Research on Object Tracking Based on Kalman Filter

Yang Qianqian

(College of Information and Electrical Engineering, Electrical Engineering and Automation, Class2 Grade2008,083515586)

Abstract: Kalman Filter is easy and optimal Linear recursive filtering method In the

mathematical structure,which is raised by Kalman based on linear minimum variance estimation.It has the advantages of small amount of calculation ,low storage capacity and high real-time.It can be found in many engineering application , including aircraft rail correction, robot control system, radar and missile tracking system, etc.Using Kalman filter to predict the object moving speed,angle,identification of objects in the next time location,controlling the camera tracking object.At the same time,Kalman filter is an important topic of control theory and control engineering with important practical significance for engineering.This paper mainly introduces the principle of Kalman filter,combined with reality to establish Kalman filter mathematical model to design object tracking about the kalman filter.

Key Words: Kalman Filter ; Object Tracking ; Optimal;





1


鲁东大学毕业设计

引言

本文首先介绍了卡尔曼滤波的基本原理,分析现有的跟踪算法,重点讨论卡尔曼滤波算法,行驶中的汽车所处的道路环境是相当复杂的,而安装车载雷达的汽车本身也是不时的处于机动状态之中,因此车载雷达所探测的目标也是在不停的变化当中,邻近车道上的车辆,车道间的护拦,路旁的树木和各种标识牌以及空中和远处的高大建筑等物体会产生虚警问题。结合路面目标跟踪的实际,卡尔曼滤波是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻的估计值和现时刻的观测值来更新对状态变量的估计,求出现在时刻的估计值。进而建立数学模型并进行matlab编程仿真最后的出结论,具有一定的实践意义。

1 绪论

1.1 研究背景

1.1.1 卡尔曼滤波提出背景

关于最优估计问题,在20世纪40年代初,维纳提出最优线性滤波,称为维纳滤波。这种滤波是在信号和干扰都表示为有理谱密度的情况下,找出最优滤波器,使得实际输出与希望输出之间的均方误差最小。维纳滤波问题的关键是推导出维纳-霍夫积分方程,解这一积分方程可得最优滤波器的脉冲过渡函数,从脉冲过渡函数可得滤波器的传递函数。通常解维纳-霍夫积分方程是很困难的,即使对少数情况能得到解析解,但在工程上往往难以实现。特别对于非平稳过程,维纳滤波问题变得更为复杂。Wiener 滤波要求信号是平稳随机过程,要求存贮全部历史数据,且滤波器是非递推的,计算量和存贮量大,不便于实时应用,基于以上缺点,改进滤波器设计就有了更进一步的要求。

1960年,卡尔曼提出了在数学结构上比较简单的最优线性滤波方法,实质上这是一种数据处理方法。维纳滤波属于整段滤波,即把整个一段时间内所获得的测量数据存储起来,然后同时处理全部数据,估计出系统状态。卡尔曼滤波是递推滤波,由递推方程随时间给出新的状态估计。因此对计算机来说,卡尔曼滤波的计算量和存储量大为减少,从而比较容易满足实时计算的要求。因而卡尔曼滤波在工程实践中迅速得到广泛应用。



2


鲁东大学毕业设计

1.1.2 应用范围

卡尔曼滤波器最初是专为飞行器导航而研发的,目前已成功应用在许多领域中。卡尔曼滤波器主要用来预估那些只能被系统本身间接或不精确观测的系统状态。许多工程系统和嵌入式系统都需要卡尔曼滤波。

比如,在雷达中,人们感兴趣的是跟踪目标,但目标的位置,速度,加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计。

卡尔曼滤波器是一个最优化自回归数据处理算法(optimal recursive data processing algorithm),它的广泛应用已经超过 30 年,包括航空器轨道修正、机器人系统控制、雷达系统与导弹追踪等。近年来更被应用于组合导航与动态定位,传感器数据融合、微经济学等应用研究领域。特别是在图像处理领域如头脸识别、图像分割、图像边缘检测等当前热门研究领域占有重要地位。

基本卡尔曼滤波(KF)器限定在线性的条件下,在大多数的非线性情形下,我们使用扩展的卡尔曼1滤波(EKF)器来对系统状态进行估计。随着卡尔曼滤波理论的发展,一些实用卡尔曼滤波技术被提出来,如自适应滤波,次优滤波以及滤波发散抑制技术等逐渐得到广泛应用。 其它的滤波理论也迅速发展,如线性离散系统的分解滤波(信息平方根滤波,序列平方根滤波,UD 分解滤波),鲁棒滤波(H∞ 波)。

卡尔曼滤波作为一种数值估计优化方法,与应用领域的背景结合性很强。 因此在应用卡尔曼滤波解决实际问题时,重要的不仅仅是算法的实现与优化问题,更重要的是利用获取的领域知识对被认识系统进行形式化描述, 建立起精确的数学模型,再从这个模型出发,进行滤波器的设计与实现工作。

由于其具有实时递推、存储量小和简单易行的特点,在工程应用中受到了重视,广泛应用于信号处理、控制、通信、航天、制导、目标跟踪、石油勘探、故障诊断、卫星测控、GPS定位、检测与估计、多传感器信息融合、机器人及生物医学等领域。

卡尔曼滤波器应用领域: · 自动驾驶仪 · 动态定位系统

· 经济学 特别是宏观经济学,时间序列模型,以及计量经济学 · 惯性引导系统 · 雷达跟踪器 · 卫星导航系统



3


鲁东大学毕业设计



1.2 本文研究的主要内容

此论文主要是通过详细介绍卡尔曼滤波的发展背景和应用原理,并介绍各种最优估计原理和不同的滤波器,着重分析卡尔曼滤波的优点和和在工程实践中的优良特性,结合实际建立卡尔曼滤波数学模型,对数学模型进行分析计算,结合数学模型进行matlb编程,分析改进程序并进行仿真应用,设计关于目标追踪的卡尔曼滤波器。

2 初步认识卡尔曼滤波

2.1 关于卡尔曼

鲁道夫·卡尔曼(Rudolf Emil Kalman,匈牙利裔美国数学家,1930年出生于匈牙利首都布达佩斯。1953年于麻省理工学院获得电机工程学士,翌年硕士学位。1957年于哥伦比亚大学获得博士学位。1964年至1971年任职斯坦福大学。1971年至1992年任佛罗里达大学数学系统理论中心(Center for Mathematical System Theory)主任。1972起任瑞士苏黎世联邦理工学数学系统理论中心主任直至退休。现居住于苏黎世和佛罗里达。2009年获美国国家科学奖章。

2.2 滤波及滤波器问题浅谈

估计器或滤波器这一术语通常用来称呼一个系统,设计这样的系统是为了从含有噪声的数据中提取人们感兴趣的,接近规定质量的信息。由于这样一个宽目标,估计理论应用于诸如通信、雷达、声纳、导航、地震学、生物医学工程、金融工程等众多不同的领域。例如,考虑一个数字通信系统,其基本形式由发射机、信道和接收机连接组成。发射机的作用是把数字源(例如计算机)产生的01符号序列组成的消息信号变换成为适合于信道上传送的波形。而由于符号间干扰和噪声的存在,信道输出端收到的信号是含有噪声的或失真的发送信号。接收机的作用是,操作接收信号并把原消息信号的一个可靠估值传递给系统输出端的某个用户。

最初滤波器是指某种具有选频特性的电子网络,一般由线圈、电容器和电阻器等元件组成。滤波器将使它所容许通过的频率范围(即通带)内的电信号产生较小的衰减,而使它所阻止通过的频率范围(即阻带)内的电信号产生较大衰减。划分通带和阻带的频率,称为滤波器的截止频率。

按容器通过的频率范围,滤波器可分为低通,高通,带阻和带通滤波器等。 具有选频特性的串联或并联谐振回路,是一种常用的滤波器。收音机或其他差式接

4


鲁东大学毕业设计

收机中的中频放大器,也是一中滤波器。也是一种滤波器。各级中频放大器中回路靠放大器和变压器来耦合,形成一定的通带和阻带。信号在通过中放级时,通带内的成分将被放大,而阻带内的成分将大大衰减,而且对通带内的信号还有放大作用。

按组成电路的元件,滤波器可分为LCRLCRC、晶体和陶瓷滤波器等。我们也可以用机械元件代替电子元件,制成机械式滤波器,或利用物质的铁磁共振原理制成可点电调谐的滤波器。

此外,调幅波接收机中的包络是一种非线性滤波器。非线性滤波器实例还有:自动增益控制电路,调频接收机中的锁相环以及近年来在组合音响装置中用来提高信噪比的Dobly系统等。

上面所举的这些滤波器,不论是线性还是非线性的,由于都是用来对模拟信号进行处理,故统称为模拟滤波器或经典滤波器。

随着集成电路技术的出现,特别是数字电子计算机的广泛应用,模拟滤波器开始向数字滤波器方向发展。A/DD/A转换器,移位寄存器。只读存储器以及微处理机这样一些与传统的模拟滤波电路元件截然不同的电路元件和模块被广泛应用于数字滤波电路中,以适应离散数字信号处理的要求。即使是模拟信号,也可通过A/D转换先变成离散的数字信号,经相应的处理后再恢复成模拟信号。

与模拟滤波器相比,数字滤波器不仅可使体积缩小,成本降低,而且还有如下优点:第一,滤波器的参数可根据对滤波器性能指标的要求来设定,从而具有较高的精度;二,滤波器的参数很容易重新设定或使具有自适应性;第三,有些采用微处理机的数字滤波器可实现对微处理机的分时使用,从而大大提高工作效率。

经典滤波器的另一发展方向,就是利用统计理论来处理滤波问题,由此,产生了统计滤波器。

从经典滤波的观点来看,有用信号和噪声信号是分布在不同频带之内。因此,我们可用具有一定选频特性的经典滤波网络把噪声尽可能地滤除,而保留畸变不大的有用信号。但是,我们所遇到的信号和噪声有时可能是随机的,其特性往往只能从统计的意义上来描述。例如,在导弹控制系统中,由于目标运动的随机性,目标的位置和速度都是随机的。此外,测量装置也会有随机噪声。此时,我们就不可能采用一般的经典滤波器把有用信号从测量结果中分离出来,而只能用统计估算方法给出有用信号的最优估计值。从统计的观点来看,一个滤波器的输出越接近实际有用信号,这个滤波器就越好。也就是说,最优滤波器是输出最接近于实际有用的信号的滤波器。

随着通信系统复杂度的提高,对原消息信号的还原成为通信系统中最为重要的环节,而噪声是接收端需要排除的最主要的干扰,人们也设计出了针对各种不同条件应用的滤波器,其中最速下降算法是一种古老的最优化技术,而卡尔曼滤波器随着应用条件的精简成为了普适性的高效滤波器。

5


鲁东大学毕业设计



2.3 卡尔曼滤波起源及发展

随机信号没有既定的变化规律,对它们的估计也不可能完全准确,所谓最优估计也仅仅是指,在某一准则下的最优。根据不同的最优准则,可获得随机信号的不同最优估计。使贝叶斯风险达到最小的估计为贝叶斯估计;使关于条件概率密度的似然函数达到极大的估计为极大似然估计;使验后概率密度达到极大的估计为极大验后估计;使估计误差的均方误差达到最小的估计为最小方差估计,若估计具有线性形式,则估计为线性最小方差估计,卡尔曼滤波即属此类估计。

卡尔曼滤波理论的创立是科学技术和社会需要发展到一定程度的必然结果。早在1795年,高斯(Karl Gauss)为测定行星运动轨道而提出了最小二乘估计法。本世纪40年代,为了解决火力控制系统精确跟踪问题,维纳(N.Weaner)于1942年提出了维纳滤波理论。维纳根据有用信号和干扰信号的功率谱确定出线性滤波器的频率特性,首次将数理统计理论与线性系统理论有机的联系在一起,形成了对随机信号作平滑、估计或预测的最优估计新理论。比维纳稍早,前苏联科学家戈尔莫克罗夫(A.N.Kolmogorov)于1941年也曾提出过类似的理论。维纳给出了由功率谱求解维纳滤波器频率特性闭合解的一般方法,包括对功率谱的上、下平面分解及傅里叶变换和反变换,运算繁杂,解析求解十分困难。1950年,伯特和香农给出了功率谱为有理谱这一特殊条件下,由功率谱直接求取维纳滤波器传递函数的设计方法,这一方法简单易行,具有一定的工程实用价值。维纳滤波的最大缺点是适用范围极其有限,它要求被处理信号必须是平稳的,且是一维的。人们试图将维纳滤波推广到非平稳和多维的情况,都因无法突破计算上的困难而难以推广和应用。

采用频域设计法是造成维纳滤波器设计困难的根本原因。因此人们逐渐转向寻求在时域内直接设计最优滤波器的新方法,其中卡尔曼的研究最具有代表性,他提出的递推最优估计理论也因此而被称为卡尔曼滤波。由于采用了状态空间法描述系统,算法采用递推形式,所以卡尔曼滤波能处理多维和非平稳的随机过程。

卡尔曼滤波理论一经提出,立即受到了工程界的重视,而工程应用中遇到的实际问题又使卡尔曼滤波的研究更加深入和完善。1959年起,美国太空署即NASA开始研究载人太空船登月方案,当时提出了两个主要问题:①中途导航和制导;②液体燃料助推器大挠度条件下的自动驾驶问题。因这两项研究的工作量都很庞大,所以主要研究前者,即宇宙飞船的测轨问题。导航问题中主要解决太空船运动状态的估计。估计方法曾试图采用递推加权最小二乘和维纳滤波,均因精度满足不了要求和计算过于繁杂而不得不放弃。1960年秋,卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗

6


鲁东大学毕业设计

计划的轨道预测很有用,后来阿波罗飞船的导航电脑使用了这种滤波器。

卡尔曼滤波比维纳滤波的应用范围广,设计方法也简单易行得多,但它必须在计算机上执行,而60年代初,无论是速度、字长、容量,计算机还处于低水平阶段。为了适应当时的技术水平,避免由于字长不够产生的舍入误差引起卡尔曼滤波的计算发散,BiermanCarlsonSchmidt等人提出了平方根滤波算法和UDU分解滤波算法,以确保卡尔曼滤波增益回路中的滤波方差阵始终正定。

卡尔曼最初提出的滤波基本理论只适用于线性系统,并且要求量测也必须是线性的。在之后的10多年的时间里,BucySunahara等人致力于研究卡尔曼滤波理论在非线性系统和非线性量测情况下的推广,拓宽了卡尔曼滤波理论的适用范围。

卡尔曼滤波是一种有着相当广泛应用的滤波方法,但它既需要假定系统是线性的,又需要认为系统中的各个噪声与状态变量均呈高斯分布,而这两条并不总是确切的假设限制了卡尔曼滤波器在现实生活中的应用。扩展卡尔曼滤波器(EKF)极大地拓宽了卡尔曼滤波的适用范围。EKF的基本思路是,假定卡尔曼滤滤对当前系统状态估计值非常接近于其真实值,于是将非线性函数在当前状态估计值处进行台劳展开并实现线性化。另一种非线性卡尔曼滤波叫线性化卡尔曼滤波。它与EKF的主要区别是前者将非线函数在滤波器对当前系统状态的最优估计值处线性化,而后者因为预先知道非线性系统的实际运行状态大致按照所要求、希望的轨迹变化,所以这些非线性化函数在实际状态处的值可以表达为在希望的轨迹处的台劳展开式,从而完成线性化。

不敏卡尔曼滤波器(UKF)是针对非线性系统的一种改进型卡尔曼滤波器。UKF处理非线性系统的基本思路在于不敏变换,而不敏变换从根本上讲是一种描述高斯随机变量在非线性化变换后的概率分布情况的方法。不敏卡尔曼滤波认为,与其将一个非线性化变换线性化、近似化,还不如将高斯随机变量经非线性变换后的概率分布情况用高斯分布来近似那样简单,因而不敏卡尔曼滤波算法没有非线性化这一步骤。在每一定位历元,不敏卡尔曼滤波器按照一套公式产生一系列样点,每一样点均配有一个相应的权重,而这些带权的样点被用来完整地描述系统状态向量估计值的分布情况,它们替代了原先卡尔曼滤波器中的状态向量估计值及协方差。不敏卡尔曼滤器让这些样点一一经历非线性状态方程与测量方程,然后再将这些经非线性变换后的样点按照它们的权重而综合出对当前时刻的系统状态向量估计值。

多态自适应(MMA)卡尔曼滤波器是一种受到广泛关注的滤波器,它由好多个并联、同时运行的卡尔曼滤波器组成。在这组卡尔曼滤波器中,每一个滤波器对未知的滤波参数分别做出相互不同的假设,然后各自按照自己的模型假设进行滤波计算,而多态自适应滤波器最后将它们对系统状态的各个估计值进行加权,并以此作为最优估计值输出。



7


鲁东大学毕业设计

3 估计原理和卡尔曼滤波 2.2 DS18B20的通信协议 2.3 DS18B20的测温原理



4 编程软件VB的特点

VB(Visual Basic)之所以受到广大编程者的喜爱,是由于它强大的功能: (1) 可视化编程:最直观的编程方法,程序人员只需绘制界面,无需编程,VB自动产生界面代码,就可以完成许多步骤。这样大大的提高了程序设计的效率。这些在以前的编程语言下是要经过相当复杂的工作的。

(2) 结构化的程序设计语言:VB具有丰富的数据类型,是一种符合结构化设计思想的语言,简单易学。此外VB作为程序设计语言还有其独特的一面。

(3) 面向对象:VB采用了面向对象的程序设计思想。把复杂的程序设计问题分解为一个个简单的能够完成独立功能的对象集合,就是此程序设计最基本的思想。所谓“对象”就是一个可操作的实体,如窗体、窗体中的命令按钮、标签、时钟、文本框等。面向对象的编程就好像搭积木一样,程序员可根据程序和界面设计的要求,直接在屏幕上“画”出窗口、菜单、按钮等不同类型的对象,并在属性窗口改写每个对象属性,从而达到所要求的目的。

(4) 强大的数据库访问功能。

(5) 多个应用程序向导,支持动态交换、动态链接技术,等等。

4.1 编程软件VBMSComm控件的介绍

VB开发串口通信程序利用VB自身提供的控件MSComm 控件来实现。MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSCommMicrosoft Communications Control)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

4.1.1 MSComm控件两种处理通讯的方式

MSComm提供两种处理通讯的方法:事件驱动方式和查询方式。该论文所采用的方法是事件驱动方式,在初始化代码中将Rthreshold设置为1。这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。

8


鲁东大学毕业设计

事件驱动通讯是一种功能很强的处理串口活动的方法,它是利用MScomm控件的OnComm事件触发机制来完成的。在大多数情况下,用户需要获知事件发生的时间,例如,在串口接收缓冲区中有字符,或者CD (Carrier Detect) RTS (Request To Send) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以捕获和处理通讯中的错误。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。

查询法是通过周期性地读取缓冲区的信号来发现是否有事件发生并进行处理的方法。它不使用端口的硬件中断,必须在足够频繁地查询端口的情况下才能保证不会遗失任何数据或者事件,查询的频率取决于缓存的大小、数据量和对快速响应的要求。查询法不具有自动判断通信的“智能”化,需要人为启动接收或发送数据。

4.1.2 MSComm控件的常用属性

MSComm控件中有很多重要的属性,下面介绍几个重要属性。 CommPort 设置并返回通讯端口号。

Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。 PortOpen 设置或返回串口的状态。也可以打开和关闭串口。 Inputlen 设置或返回一次从接收缓冲区中读取字节数。

Input 从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。

Output 向发送缓冲区发送数据,该属性设计时无效,运行时只读。 CommEvent 是一个非常重要的属性,该属性设计时无效,运行时只读。一旦串口发生通信事件或产生错误,根据产生的错误,MSComm控件为CommEvent属性赋不同的代码,与此同时产生OnComm事件。用户程序就可在OnComm事件处理程序中进行相应的处理。

SThreshold 该属性为一阀值,设置返回传输中所能允许的最小字符数。当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生 OnComm事件。

RThreshold 该属性为一阀值,设置返回要接受的字符数当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。户可在OnComm事件处理程序中进行相应处理。

InBufferSize 设置或返回接收缓冲区的大小。

InBufferCount 设置或返回接收缓冲区中等待计算机接收的字符数。

9


鲁东大学毕业设计

OutBufferSize 设置或返回发送缓冲区的大小。

OutBufferCount 设置或返回发送缓冲区中等待计算机发送的字符数。

4.2 软件编程中的MSComm控件程序设计

'初始化代码

Private Sub Form_Load()

MSComm.CommPort = 4 '设置串口4

MSComm.Settings = "19200,n,8,1" '波特率19200bit/s无校验,8位数据, 1位停止位

MSComm.InputLen = 0 '读取接收缓冲区的所有字符

MSComm.InBufferSize = 1024 '设置接收缓冲区为1024字节 MSComm.OutBufferSize = 512 '设置发送缓冲区为512字节 MSComm.PortOpen = True '打开串口 MSComm.SThreshold = 0 '不触发发送事件

MSComm.RThreshold = 1 '每个字符到接收缓冲区都触发接收事件 MSComm.InBufferCount = 0 '清除发送缓冲区数据 MSComm.OutBufferCount = 0 '清除接收缓冲区数据 Text2.Text = "" '清空接收文本框 End Sub '接收数据

Private Sub mscomm_oncomm() Dim str, numb As String

Select Case MSComm.CommEvent ' 检验串口事件 '错误处理

Case comEventOverrun '数据丢失 Text2.Text = "" '清空接收缓冲区 Exit Sub

Case comEventRxOver '接收缓冲区溢出 Text2.Text = "" '清空接收缓冲区 Exit Sub

Case comEventTxFull '发送缓冲区满 Text2.Text = "" '清空接收缓冲区 Exit Sub

10


鲁东大学毕业设计

'事件处理

Case comEvReceive '接收缓冲区内有数据 str = MSComm.Input '从接受队列中读入字符串 End Select

If str = "NO Devic" Then str = ""

Text2.Text = "没有检测到感温元件" End If

If str = "e" Then str = ""

Text2.Text = "没有检测到感温元件" End If

If str = "p" Then str = ""

Text2.Text = "+" '读出字符串送显 End If

If str = "n" Then str = ""

Text2.Text = "-" '读出字符串送显 End If

Text2.Text = Text2.Text + str '读出字符串送显 End Sub

5 系统应用软件设计方案

5.1 应用程序功能概述

论文选用USB接口作为数据采集系统与PC机之间的接口,它能够在很大程度上改善外设和接口的矛盾。VB给设备提供了一个可控制、编程的界面,例如接收外部发送的温度数据,并显示这些数据等,在此环境下编写温度数据采集系统的驱动程序,完成的应用程序可以直观的看到所采集的温度数据和时间。

5.2 系统总体方案的设计

11


鲁东大学毕业设计

设计步骤:

1.建窗体

添加一个MSComm控件,用来建立与串口的连接;

添加一个Text控件,Name属性为Text2,用来显示接收的温度数据; 添加几个Lable按扭,目的是用于美化界面,使界面看起来更直观、形象; 添加1Timer控件,设置Interval属性为1000(两次调用Timer控件的Timer事件间隔为1000毫秒),还添加了一个Lable控件,用来显示当前时间。时间设置在Timer控件中并且编写数据保存的触发程序,程序编写如下:

'时间设置

Private Sub Timer1_Timer() Label7.Caption = Now()

If Command3.Caption = "停止保存" Then Print #1, Text2.Text, Label7.Caption End If End Sub

添加了3CommandButton按扭,分别用于程序运行过程中测温的开始、结束和测温系统的退出以及数据保存、停止,程序编写如下:

'控制测温按扭

Private Sub Command1_Click()

If Command1.Caption = "停止测温" Then MSComm.PortOpen = False '关闭串口 Command1.Caption = "开始测温" Else

MSComm.PortOpen = True '打开串口 Command1.Caption = "停止测温" End If End Sub '退出系统

Private Sub Command2_Click() Unload Me End Sub

'数据保存与停止

Private Sub Command3_Click()

12


鲁东大学毕业设计

If Command3.Caption = "保存数据" Then

Open App.Path & "\" & "数据保存.txt" For Append As #1 '相对路经 Command3.Caption = "停止保存" Else

Close #1 '关闭

Command3.Caption = "保存数据" End If End Sub

2.根据设计要求对窗体中的所有控件设置属性,查阅相关资料对各个模块的程序进行编写。

3.编写完后,程序进行反复的运行、调试、改写。 4.对界面进行最后的完善、美化。

5.3 系统总体方案设计中出现的一些实际问题

一开始对于时间函数的编写我选用了Print函数,可是此函数程序设计麻烦,只能显示当时时间,然后我又询问了同学,他们告诉我用Now函数在Timer控件中编写就能实现动态显示,特别是对Interval属性的设置。加入一个Lable按扭,程序代码是Label7.Caption = Now() '显示当前时间,简单直观。

当我建文件夹保存数据的时候,总是出错误,不是保存一次数据就是保存几次数据后再不保存了。我最初的设想是每当数据发生变化时采集一次,不过没有编写成功。后在老师的提醒与帮助下,想到在Timer控件程序中触发数据保存按扭,这样随着时间的变化,每秒采集的数据以及时间也会保存下来,而且如果按停止保存按扭,数据保存就会停止。

一开始保存数据的路径我设置的是J:\Documents and Settings\lj\桌面\鲁东大\编程\数据保存.txt由于这是绝对路径,所以它只在我编程用的电脑上好用,如果换了电脑就要修改程序的路径,很不方便。最后想到用相对路径App.Path & "\" & "数据保存.txt",不过一开始的时候程序改了还是不能运行,最后我又上网下了一点相对路径方面的知识,终于发现了自己的错误,改相对路径的时候“数据保存.txt”必须和程序在同一个文件夹里。

5.4 系统方案设计的窗体界面

此界面是在老师的帮助下一步步改进和完善的,基本完成了设计要求的任务。程序运行过程中通过观察软件界面上温度数据的变化规律,操作人员可以对当前正在进行的

13


鲁东大学毕业设计

实验情况有一个清楚的了解,这也有助于逼真、形象的显示采集的温度数据。





5 程序窗体界面









6 代码程序

14


鲁东大学毕业设计





7 运行所采集的画面



6 小节

本界面显示系统采用总体到局部,逐步完善的方法,用硬件描述语言VB完成。该系统界面清晰,模块分明,易于实现温度数据采集、显示和保存等功能。但是本系统也有不足的地方,就是串口选择不太完善,数据的保存不能达到我所期望的目标,我期望的是当数据发生变化时自动保存一次,并且有时间显示,我们可以了解到温度在何时发生变化的,这有待改进。总体上说,本设计系统能够实现温度数据采集、显示和保存的基本功能,能够较好的进行功能扩展。



参考文献

[1] 崔武子,齐华山,于宁.界面设计与Visual Basic[M].北京:清华大学出版社,2004 [2] 唐大仕.Visual Basic程序设计[M].北京:清华大学出版社,2003

[3] 边海龙,贾少华.USB2.0设备的设计与开发[M].北京:人民邮电出版社,2004 [4] 仵浩,齐燕杰.Visual Basic串口通信工程开发实例导航[M].北京:人民邮电出版

15


鲁东大学毕业设计

社,2002

[5] 范逸之,陈立元,孙德营.利用Visual Basic实现串并行通信技术[M].北京:清华大学出版社,2001

[6] 李光忠.基于单片机的温湿度检测系统的设计[D].济南:山东大学,2007. [7] 曹真贯.基于USB接口的数据采集系统的设计[D].淮南:安徽理工大学,2006

[8] 于克龙,毕小龙,邱立峻.数组温度传感器DS18B20的应用[J].Machine Building &

Automation200433(2) 47-49.

[9] 程安宇,孙士民,徐洋.基于DS18B20的单片机温度测量控制系统[J]. 自动测量与控制,2007262

[10] 潘笑,高玉玲,康亚娜.基于模糊PID AT89C2051单片机智能温度控制系统[J]. 工自动化,200635):65-67.

[11] 基于DS18B20数字温度传感器的设计与实现http://www.eccn.com/xsj07/xsj084531w.asp [12] DS18B20数字温度传感器应用详解 http://www.xici.net/u10362888/d53317835.htm

[13] 金伟正.单线数字温度传感器的原理及应用[J ].电子技术应用,2000 3 6):92-96





致谢

论文在软件编程设计和写作的过程中,XX老师给我提供了相关资料,多次询问设计进程,帮助我开拓设计思路。而且每周三傍晚都会组织我们开会,帮助我们解决实际过程中遇到的一些问题,还对我们已完成的一些设计要求提出更完善的建议,在此非常感谢周老师。在做程序调试的时候,周老师又不厌其烦的一次次帮我看程序、给我指导,同时还在思想、生活上给我以无微不至的关怀令我很感动。周老师渊博的学识、严谨的治学精神、灵活的思维方式、耐心细致的言传身教、无私的奉献精神及精益求精的工作作风使我深受的启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理,在此我要向我的导师致以最衷心的感谢和深深的敬意。另外还要感谢在论文的软件编程设计过程中给予我指导、帮助的李XX和王XX同学,他们那种刻苦认真、勤奋进取的精神让我学到了很多。

同时特别感谢我的班主任印XX老师这四年来对我的关心和帮助,感谢父母对我二十多年来辛勤的养育!

16


鲁东大学毕业设计

最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位老师表示感谢!

17


鲁东大学毕业设计



附录:部分关键源程序代码

'控制测温按扭

Private Sub Command1_Click()

If Command1.Caption = "停止测温" Then MSComm.PortOpen = False '关闭串口 Command1.Caption = "开始测温" Else

MSComm.PortOpen = True '打开串口 Command1.Caption = "停止测温" End If End Sub '退出系统

Private Sub Command2_Click() Unload Me End Sub '数据保存与停止

Private Sub Command3_Click()

If Command3.Caption = "保存数据" Then

Open App.Path & "\" & "数据保存.txt" For Append As #1 '相对路径 Command3.Caption = "停止保存" Else

Close #1 '关闭

Command3.Caption = "保存数据" End If End Sub '初始化代码

Private Sub Form_Load()

MSComm.CommPort = 4 '设置串口4

MSComm.Settings = "19200,n,8,1" '波特率19200bit/s, 无校验, 8位数据,位停止位

MSComm.InputLen = 0 '读取接收缓冲区的所有字符 MSComm.InBufferSize = 1024 '设置接收缓冲区为1024字节

18

1
鲁东大学毕业设计

MSComm.OutBufferSize = 512 '设置发送缓冲区为512字节 MSComm.PortOpen = True '打开串口 MSComm.SThreshold = 0 '不触发发送事件

MSComm.RThreshold = 1 '每个字符到接收缓冲区都触发接收事件 MSComm.InBufferCount = 0 '清除发送缓冲区数据 MSComm.OutBufferCount = 0 '清除接收缓冲区数据 Text2.Text = "" '清空接收文本框 End Sub '接收数据

Private Sub mscomm_oncomm() Dim str, numb As String

Select Case MSComm.CommEvent ' 检验串口事件 '错误处理

Case comEventOverrun '数据丢失 Text2.Text = "" '清空接收缓冲区 Exit Sub

Case comEventRxOver '接收缓冲区溢出 Text2.Text = "" '清空接收缓冲区 Exit Sub

Case comEventTxFull '发送缓冲区满 Text2.Text = "" '清空接收缓冲区 Exit Sub '事件处理

Case comEvReceive '接收缓冲区内有数据 str = MSComm.Input '从接受队列中读入字符串 End Select

If str = "NO Devic" Then str = ""

Text2.Text = "没有检测到感温元件" End If

If str = "e" Then str = ""

Text2.Text = "没有检测到感温元件" End If

19


鲁东大学毕业设计

If str = "p" Then str = ""

Text2.Text = "+" '读出字符串送显 End If

If str = "n" Then str = ""

Text2.Text = "-" '读出字符串送显 End If

Text2.Text = Text2.Text + str '读出字符串送显 End Sub '时间设置

Private Sub Timer1_Timer() Label7.Caption = Now()

If Command3.Caption = "停止保存" Then Print #1, Text2.Text, Label7.Caption End If End Sub

20


本文来源:https://www.dywdw.cn/1350c1a16629647d27284b73f242336c1eb930d7.html

相关推荐
推荐阅读