储油罐实时监测系统的设计与实现_第1页
储油罐实时监测系统的设计与实现_第2页
储油罐实时监测系统的设计与实现_第3页
储油罐实时监测系统的设计与实现_第4页
储油罐实时监测系统的设计与实现_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 毕业论文油罐实时监控系统的设计与实现 油罐实时监控系统的设计与实现中国石油资源丰富,石油开采和提炼企业众多。储油罐是储存油品的重要设备。储油罐液位的准确测量对生产工厂的库存管理和经济运行有很大的影响。然而,在我国许多反应罐、大型储油罐和加油站中,液位测量仍然采用人工标尺检查和分析的方法,其他参数没有实时动态测量,容易造成安全事故,无法为生产运行和管理决策提供准确的依据。针对以上问题,系统采用相应的传感器采集储油罐的温度和压力,并通过单片机显示储油量和温度值。同时利用串口将数据发送到上位机,以便进行更精确的计算和统计。关键词:储油罐,液位监控,QT,ARM,嵌入式目录TOC o 1-3 h u

2、 HYPERLINK l _RefHeading_Toc2273 1 系统概述1 HYPERLINK l _RefHeading_Toc18385 1.1 题目分析1 HYPERLINK l _RefHeading_Toc19273 1.1.1 选题意义1 HYPERLINK l _RefHeading_Toc32252 1.1.2 需求分析1 HYPERLINK l _RefHeading_Toc29886 1.2 功能分析2 HYPERLINK l _RefHeading_Toc20818 2方案论证3 HYPERLINK l _RefHeading_Toc28857 2.1硬件方案3 H

3、YPERLINK l _RefHeading_Toc19472 2.1.1、硬件方案13 HYPERLINK l _RefHeading_Toc17049 2.1.2、硬件方案23 HYPERLINK l _RefHeading_Toc26053 2.1.3、两种硬件方案论证3 HYPERLINK l _RefHeading_Toc18073 2. 2 软件方案3 HYPERLINK l _RefHeading_Toc26883 2.2.1、软件开发工具论证4 HYPERLINK l _RefHeading_Toc1857 2.2.2、方案比较4 HYPERLINK l _RefHeading

4、_Toc24457 3 系统设计之下位机部分6 HYPERLINK l _RefHeading_Toc13146 3.1液面测量模块:6 HYPERLINK l _RefHeading_Toc216 3.2.温度检测模块12 HYPERLINK l _RefHeading_Toc24769 3.3 串口数据发送模块14 HYPERLINK l _RefHeading_Toc15947 3.4 显示模块16 HYPERLINK l _RefHeading_Toc27272 4 系统设计之上位机部分18 HYPERLINK l _RefHeading_Toc8500 4.1 PC端软件18 HYP

5、ERLINK l _RefHeading_Toc27960 4.2 ARM嵌入式设备端软件21 HYPERLINK l _RefHeading_Toc4740 5 系统调试23 HYPERLINK l _RefHeading_Toc14916 5.1 调试计划23 HYPERLINK l _RefHeading_Toc8456 5.2 程序运行中的错误23 HYPERLINK l _RefHeading_Toc9189 5.3 调试结果23 HYPERLINK l _RefHeading_Toc16963 6 总结分析28 HYPERLINK l _RefHeading_Toc19700 附录

6、311系统概述1.1主题分析1.1.1选题的意义随着科学技术的发展,特别是计算机技术的广泛应用和快速发展,传统的人工测量逐渐向计算机智能监控方向发展。相比较而言,国外油罐区安全监控系统性能良好,但价格过高,远远超出了我国用户的承受能力。而国内开发的系统大多计算精度低,稳定性和可靠性差。因此,研究和开发符合我国国情的油罐区安全监控系统,不仅可以保证油罐区的安全生产,还可以加快石油工业的现代化管理进程。根据油库储油罐地理分布广、信号传输距离长的特点,采用“功能分散、负荷分散、风险分散、管理集中”的分布式控制系统设计思想和“硬件模块化、软件组合、通信网络化”的设计方法。1.1.2需求分析在设计储油罐

7、管理系统时,首先确定系统设计目标和功能需求,从技术和经济角度进行可行性分析,然后进行方案选择和总体设计,考虑下位机硬件电路结构是否合理、性价比等问题,讨论上位机的功能框架、采用的数据结构等细节,然后进行详细设计和调试,最终完成设计任务。在设计初期,主要考虑以下因素:(1)可靠性。该系统运行安全可靠,性能稳定,能在恶劣环境下长时间连续工作。(2)普遍性。在设计中应充分考虑其应用对象的通用性,使系统具有很强的通用性,可以在油库推广应用。(3)兼容性。该系统应该能够携带不同类型的传感器并测量各种参数。(4)经济。该系统成本经济合理,性价比高。(5)操作维护方便。软件方面,要求人机界面友好,操作简便;

8、硬件方面,要求维护方便。1.2功能分析根据对油罐液位监测和计量管理任务的深入分析,系统应实现以下功能:系统参数的设置和修改储油区参数的设置和修改:储油池号、标签、通讯参数的设置,储油池分区管理的定义等。储油罐参数的设定和修改:储油罐安全高度、液位高低报警值等的设定和修改。储油罐的实时监控与测量油箱状态实时监控:实时监控油箱液位等参数。油罐实时测量:根据压力值,计算液位高度和剩余百分比。3.视觉信息服务显示系统的总体外观和组成,每个油箱的温度、液位和压力数据。2方案论证2.1硬件方案硬件方案1硬件方案1的系统主要由现场仪表和管理主机或服务器组成,对储油罐进行实时监控和计量。上位机和现场仪表通过R

9、S-485总线连接,两个压力传感器是实时监测和采集储油罐液位的核心。整个系统的工作流程大致如下:压力传感器从储油罐终端采集数据,经单片机处理(A/D转换)并显示在现场端的数码管上。同时通过串口传输到上位机实现远程监控,与计算机相连。计算机显示并保存上传的液位数据,数据可由管理软件进行后续处理。硬件方案2硬件方案二是用单片机设计液位监控系统。硬件由单片机、A/D转换部分和液位显示部分组成。采集的数据经单片机处理后显示在数码管上,管理人员可以定期查看各个储油罐的信息。2.1.3两种硬件方案的演示结合两种硬件方案,采用的硬件结构是不同的。方案二采用单片机作为硬件系统,显然电路复杂,可靠性低,无法向上

10、位机发送数据实现远程监控。而且系统调试困难,无形中延长了开发周期,系统稳定性不高。本设计最终选择方案一,因为与方案二相比,系统结构相对简单,结构高度模块化,电路设计功耗低,全数字总线接口,通信协议开放,网络扩展能力强,抗干扰能力强,液位测量技术成熟,可靠性高。2.2软件方案储油罐计量监控管理系统能够实时采集和处理储油罐内储存的油品数据,并通过软件显示和打印油品储量、温度及相关数据,使管理人员了解每个油罐的情况。通过对储油罐实时监控和计量管理设计目标的论证,确定上位机主要实现以下功能:(1)系统参数的修改(2)储油罐的实时监控和测量2.2.1软件开发工具演示一、下位机端:方案一:用汇编语言编写单

11、片机程序。其特征在于高执行效率。方案二:用keil软件和C语言编写单片机程序。具有可读性强、可维护性高、开发简单、代码量少的特点。二。上位机:选项1:使用 HYPERLINK ./%20%20%20%20:/%20%20%20%20itisedu%20%20%20%20/phrase/200604042241255.html t _new Delphi作为一种开发工具, HYPERLINK ./%20%20%20%20:/%20%20%20%20itisedu%20%20%20%20/phrase/200604042241255.html t _new Delphi它是由著名的Borland公

12、司开发的可视化软件。 HYPERLINK ./%20%20%20%20:/%20%20%20%20itisedu%20%20%20%20/phrase/200603282233345.html t _new 软件开发工具。 HYPERLINK ./%20%20%20%20:/%20%20%20%20itisedu%20%20%20%20/phrase/200604042241255.html t _new Delphi它的优点是:不能隐式定义,结构严谨,方便快捷,运行速度快,使用方便,可读性高。缺点是结构过于严谨,编程水平相当高。方案二:用Qt设计计量管理系统。好处是Qt提供了强大的可视化编程

13、能力。编程语言是C+,一种面向对象的语言,功能强大。Qt良好的封装机制使得Qt具有模块化和可重用性,非常方便用户开发。Qt提供了一种叫做signals/slots而不是callback的安全类型,使得各个组件之间的协作变得非常简单。方案比较一、下位机端:显然,用C语言开发下位机程序具有可读性强、编程容易、代码量少的优点,还可以降低开发难度和开发周期。二。上位机:夸脱 HYPERLINK ./%20%20%20%20:/baike.baidu%20%20%20%20/view/125370.htm 面向对象的语言,易于扩展,允许组件编程,为以后的软件维护和功能扩展提供了极大的便利,是完全开源的免

14、费软件。所以我们选择Qt作为本系统的上位机开发软件。系统设计的下位机部分。3.1液位测量模块液位测量模块的功能是测量液位的高度,并计算液位高度比。大致的实现方法是由两个压力传感器获得两路压力模拟信号,经过A/D转换后以I2C数据的形式送到单片机。单片机经过一定的算术运算得到当前液位与满载液位的高度比。包括I2C总线驱动,A/D转换,数学建模等。具体实现方法将在后面的模块中详细描述。(1)数学模型部分用压差法计算储油罐的液位,可以消除密度对计算的影响。如图3.1所示,其中P1和P2是底部和顶部的压力值。成品油是混合物,各种规格的成品油密度不一致。即使是同一厂家生产的不同批次的成品油,其密度也相差

15、很大,不需要用压差法提前测量各种油的密度。因此适应性更广。无论是常压容器还是压力容器,只要被测溶液是均匀液体,即容器内液体的密度处处相等,就可以用差压法测量液位。压差计算的思路是:压差比=液面高度比图3.1储油罐的数学模型两个传感器之间的相对高度h0是预设固定的,也就是说底部的压力值P1减去顶部的压力值P2就是这个液位的压差。同样,底部的压力值P1减去顶部的压力值就是当前液位H(顶部和底部)的压差。根据液体压力计算公式P=gH,液体在某一位置的压力与深度h有关,液面顶部的深度为0,那么液面顶部的压力也为0。由此可以推导出当前液面的压力差,即底部的压力值。(1)(2)联立方程(1)和(2)可以消

16、去,g,得到当前液位H的计算公式:(3)它不是压力的参考量,而是力和面积的导出量,所以测量压力的方法很多。在这个系统中,我们要测量液体的压力,所以我们选择液体压力计。液体压力计可分为U型管压力计、单管压力计、倾斜微压计和自动液柱压力计等。无论使用哪种压力传感器,在测量压力时,两种传感器必须是同一规格,这样测量的数据在计算时才有意义。无论是常压储油罐还是加压储油罐,底部都是压力最大的区域。监测储油罐压力值时,应以底部为监测部位。该值可以通过物理量化底部压力值P1获得。需要注意的是,P1和P2是通过将两个模拟压力量转换成8位A/D转换器得到的数字值。8位A/D转换器的取值空间是0 255,也就是说

17、只能把一个模拟量分成256份。这个量化值无法对高达几十米的大型油罐进行精确统计,所以需要提高A/D转换器的精度,比如使用16位转换器,但原理是一致的。在该系统中,使用了一个8位转换器。根据公式(3)计算当前液面高度H时,所用的压力值均为比例关系,因此无需计算精确的物理压力。两个传感器之间的距离h0设置为1000mm,可以根据两个传感器之间的实际距离在程序中手动更改。这样,可以容易地计算出当前的液面高度h。然后将当前液位高度除以储油罐满载时的高度hmax,即可得到当前储油量与满载时的百分比。我们将这两个压力值通过串口发送到上位机,让PC或32位ARM嵌入式设备进行计算,并将结果输出到软件界面的相

18、应位置。但在下位机端,单片机很难进行乘除运算,精度相当差。因此,上述数学模型不适用于下位机。在下位机中,需要建立另一套数学模型,将底部压力乘以一个常数,得到一个液位高度的近似值,显示在下位机的数码管上。(2).模数转换部分该系统需要监控两个模拟压力值。如果使用传统的8位并行A/D转换器,光数据端口将占用16个I/O端口。对于一个只有4组8位I/O口的单片机来说,硬件成本确实很大。所以在设计过程中,我选择了PCF8591,它也可以实现两路模拟检测,硬件资源开销极小。PCF8591是一款单芯片集成、独立供电、低功耗、8位CMOS数据采集器件。PCF8591有四个模拟输入、一个模拟输出和一个串行IC

19、总线接口。PCF8591的三个地址引脚A0、A1和A2可用于硬件地址编程,允许在同一IC总线上连接八个PCF8591器件,而无需额外的硬件。PCF8591器件上的地址、控制和数据信号输入和输出都是通过双线双向IC总线以串行方式传输的。PCF8591的功能包括多路模拟输入、跟踪保持、8位模数转换和8位数模转换。PCF8591的最大转换速率由IC总线的最大速率决定。用PCF8591监控两路压力模拟信号,首先要确定PCF8591在I2C总线上的地址,然后再确定控制字节。PCF8591采用典型的I2C总线接口寻址方式,即总线地址由器件地址、引脚地址和方向位组成。飞利浦公司规定A/D器件地址为1001,

20、A2 A1 A0脚由用户硬件编程。在这个系统中,三个引脚都接地,这意味着A2 A1 A0分别为0 0 0。因此,在I2C系统中最多可以连接23=8个A/D设备。总线地址的最后一位是方向位,当主机读取A/D器件时为1,当主机写入时为0。在总线操作期间,由器件地址、引脚地址和方向位组成的从机地址是由主机发送的一个字节。这时,总线上的I2C设备会根据自己的地址判断主人是否在呼叫自己。如果收到的地址与您自己的地址和您自己的地址相匹配,您应该准备好接收数据。主机发送的第二个字节是控制字节,用来控制设备实现各种功能,比如模拟信号从哪些通道输入。存储在控制寄存器中的控制字节的格式如图3.2所示:图3.2控制

21、寄存器格式其中:D0 D1为A/D通道号:00通道0,01通道1,10通道2,11通道3;在该系统中,使用A/D通道0和A/D通道1。D2是自动增益位,有效值为1。当该位置位时,在A/D通道0的转换完成后,芯片将自动转换A/D通道1的值,依此类推。D3是保留位。D4 D5模拟输入选择:00四个独立输入,01三个差分输入,10个单端和差分输入,11个模拟输出允许有效。我们选择在这里单独输入。D6是A/D D/A选择位,选择0进行A/D转换,选择1进行D/A转换。D7也是一个保留位。因此,当单片机要监测某一压力值时,其工作流程如下:MCU向I2C发送一个8位设备地址,D0位(读/写位)为0,通知受

22、控设备将向其写入,并等待响应;收到响应后,发送控制字节,写入被控设备的控制寄存器,等待响应;收到响应后,发送一个8位设备地址,其中D0(读写位)为1,通知受控设备将读取其发送的数据,并等待响应;收到响应后,将总线的控制权交给被控设备,读取其发送到总线的数据。结合这个过程和这个系统,写操作时PCF8591的器件地址为1001,引脚地址为000,方向位为0,即0 x90,读操作时方向位为1,即0 x91。读取通道0时,控制字节为0000 0000,读取通道1时,控制字节为0000 0001。操作的程序代码:ISendByte(0 x90,0 x 00);/ISendByte是数据发送函数。P1 =

23、 IRcvByte(0 x 91);/AD0将模数转换为0,将值赋给p1。该功能的作用是发送器件地址0 x90和控制字0 x00(A/D通道0 ),以读取A/D通道0的值。具体实现过程请参考附录中的源代码。至此,我们已经成功读取了所需的压力值,但我们不禁会想:数据是如何在总线上传输的?这个问题将在下一小节介绍:I2C公交车司机。I2C客车驱动部分I2C总线设备是飞利浦公司推出的串行总线设备。与传统的并行总线装置相比,它具有结构简单、可维护性好、易于扩展、易于模块化标准设计和可靠性高等优点。但是STC89C516RD+ MCU中没有集成I2C总线设备模块,所以当外围的I2C总线设备与MCU通信时

24、,需要用软件程序模拟I2C总线设备的时序电路,这无疑增加了系统开销和开发难度。而使用I2C总线传输数据只占用主控设备的两个管脚,可以传输8个外围设备的数据,节省了硬件资源。因此,综合考虑优缺点,本系统采用I2C总线设备传输压力数据。其工作原理如下:I2C总线设备通过数据总线SDA和时钟总线SCL连接到中央控制装置。I2C总线传输数据时,数据线上的数据必须在高电平时钟信号期间保持稳定。只有当时钟线上的信号为低电平且高电平状态持续一定时间(通常为5微秒)时,才允许数据线上的高电平或低电平状态发生变化(如图3.3)。如图3.3更改时钟和数据规则当SCL为高电平时,SDA线由高电平变为低电平的变化(下

25、降沿)表示开始信号,而当SCL为高电平时,SDA线由低电平变为高电平的变化(上升沿)表示停止信号(图3.4)。图3.4开始信号和结束信号传输数据时,要求每个字节必须是8位长。发送数据时,首先发送最高有效位(MSB ),每个发送的字节后必须跟随一个响应位(即一帧有9位)。如果一段时间没有收到从机的回复信号,就会自动认为从机已经正确接收到数据,如图3.5所示。图3.5确认和非确认信号所有I2C总线设备的驱动方式都是一样的,只提供了一种传输数据的机制,也就是说,驱动器只提供了一种实现与两条数据线通信的方式。这种方法的实现步骤在网上和相关书籍上都有详细介绍,这里就不做更详细的解释了。具体实现方法请参考

26、附录中的程序代码部分。在这个系统中,我们更关心I2C总线传输的是什么数据,这些数据的意义是什么。这是一种操作I2C总线的策略,与机制完全不同,可以由用户自己设置,让I2C总线上的不同设备实现不同的功能。在该系统中,这种策略体现在A/D转换芯片PCF8591的操作中,上面已经详细描述过。3.2温度检测模块储油罐的温度监测由温度传感器DS18B20完成。DS18B20数字温度计是DALLAS公司生产的1线制器件,具有电路简单、体积小的特点。所以用它来组成测温系统是非常方便的,因为电路简单,一根通讯线上可以挂很多这样的数字体温计。DS18B20温差传感器是数字传感器,省去了A/D转换的麻烦。硬件电路

27、上只有一条数据线,占用的硬件资源非常少。硬件的节省也需要软件来弥补,这就注定了DS18B20操作的繁琐。通常我们使用TO-92封装的DS18B20,如图3.6所示。图3.6 DS18B20封装由于DS18B20采用1-wire总线协议,即通过一条数据线实现数据的双向传输,但对于51单片机来说,像I2C总线器件,硬件不支持单总线协议,所以必须用软件模拟单总线的协议序列来完成对DS18B20芯片的访问。DS18B20在I/O线路上读写数据,因此对读写数据位有严格的时序要求。DS18B20有严格的通信协议,保证数据传输的正确性和完整性。协议定义了几个信号的时序:初始化时序、读时序和写时序,如图3.7

28、-3.9所示。所有时序都使用主机作为主设备,使用单总线设备作为从设备。每个命令和数据传输都从主机主动启动写序列开始。如果要求单总线器件发送回数据,在写命令之后,主机需要启动读序列来完成数据接收。并且数据命令的传输是低位优先。图3.7 ds18b 20的复位时序图3.8 ds18b 20的读取时序DS18B20的读序列分为读0序列和读1序列两个过程。DS18B20的读时隙是主机拉低单总线后,必须在15us内释放单总线,这样DS18B20才能向单总线传输数据。DS18B20完成一个读序列过程至少需要60us。图3.9 ds18b 20的写时序DS18B20的写时序仍然分为写0时序和写1时序两个过程

29、。对于DS18B20,写0时序和写1时序的要求是不同的。写入0时序时,单总线应至少下拉60us,以确保DS18B20能够在15us至45us之间正确采样IO总线上的“0”电平。写入1时序时,单总线应被拉低,然后在15us后释放。在该系统中,DS18B20的2引脚DQ连接到主控制器STC90C516RD+的P23引脚,并且只有一个DS18B20安装在该I/O线上,因此在操作期间不必忽略DS18B20的ROM代码。在单器件的情况下,为了节省时间,可以选择jump ROM指令(#define jump_ROM 0 xCC),也就是把指令写到DS18B20。如果安装了太多芯片并且使用了该命令,将会出现

30、数据冲突和错误。DS18B20的整体操作如下:重置;写跳转ROM指令:0 xcc;写温度转换指令:0 x44;重置;写跳转ROM指令:0 xcc;写数据读指令:0 xbe;读取温度值的低八位;读取温度值的高八位;最后读取的温度数据以十进制形式返回给主调谐功能。3.3串行数据发送模块串行数据发送模块的主要功能是通过串口将温度、压力等数据发送给上位机,从而实现对储油罐的远程检测。本系统采用的串行数据通信芯片是MAX485。一般PC机接收到的RS232电平不识别RS485电平信号,所以在接收端需要将RS485电平转换成RS232电平。使用MAX485的主要原因是其有效传输距离可达1500m,而普通R

31、S-232电平信号的有效距离最多不能超过20m。在大型炼油厂中,储油罐与主机的距离不能达到20m,RS232电平不能满足远距离数据传输的功能。当操作MCU发送串行数据时,应使用定时器来设置波特率。主要操作步骤:选择工作模式,设置串口对应的寄存器,设置定时器的寄存器,将待发送的数据放入串口缓冲区。串行端口按以下顺序发送数据:0 x00、0 xff、罐号、温度、底部压力和顶部压力;0 x00、0 xff是数据检查标记。上位机接收一个数组时,首先判断第一位是0 x00,第二位是0 xff,然后才知道第三位是数字、温度、压力等有效数据。因为数据长度是预先知道的,所以不需要结束标记位。发送到上位机的数据

32、是连续向上发送的,每秒钟可以发送几次。然后上位机有选择地接收数据并进行相应的处理。使用windows下的串口调试工具,接收到的数据如图3.10所示。图3.10串行调试工具用串口调试工具查看串口数据时,这些数据以十六进制显示,是一系列数据。我不知道它们是什么意思。用一定的方法分析这些数据后,我们就能清楚地理解它们的含义。在linux平台的终端中,分析后的数据显示如图3.11所示:图3.11 Linux平台的终端数据3.4显示模块显示模块的作用是将各个传感器检测到的值,经过其他相应的功能模块处理后,以数值的形式显示在数码管上。相对来说,显示模块是这个系统中比较简单的模块。硬件由一个八位八段数码管、

33、一个3-8解码器(74H138)和一个锁存器(74H373)组成,如图3.12所示。图3.12显示电路锁存器的输入端连接到单片机的P0端口,P0输出的电平被保存以防止其跳变。输出数码管的段选择信号。3-8译码器的输入端接单片机p2.1p2.2p2的三个端子,八个输出端分别接8位数码管上的位选择信号。所选比特的电平逻辑可以参考3-8解码器的真值表,这里不做描述。特别是在操作单片机给P2.1 P2.1 P2.2的三个端口赋值时,应该只给这三个端口赋值,尽量不要用“P2 = XXX”的形式。虽然这样可以改变这三个端口的值来达到操作3-8解码器的效果,但是也改变了P2端口的其他五个端口的值,这意味着显

34、示模块的操作可能会导致连接到P2端口的其他模块的功能出错。您可以像这样赋值:p20 = x;P21=十世;P22=十世;但当这三个端口的值不断变化时,这种赋值方法就比较复杂,所以用C语言进行按位and、按位or、左移右移就比较简单,例如:P2 & = 0 x F8;/*在给p2赋值之前,请将P2与(1111 1000)相连And逻辑,把p2 0,p2 1,p2 2清零,以免出现。其他声音位的原始音量*/P2 | = Wei tablew;/*将位选择信号放入P2的低三位,并且只改变它。P2改变低三位的值而不影响其它位*/模块的显示程序代码提供了一个外部接口:显示(d,w)功能。d是段选择参数,

35、用来显示什么数字;w是一个位选择信号,它的作用是在那个位上显示。打电话挺方便的。显示方式为动态扫描显示,即数码管上一次只能显示一个数字,显示完当前数字后可立即显示下一个数字。中间间隔小于20m时,人眼视觉察觉不到闪烁,视觉效果与多位数同时显示一致。系统设计的上位机部分。上位机可以是x86平台的计算机,也可以是32位ARM嵌入式设备。一般监控几十个储油罐不会消耗系统太多资源,可以说是轻而易举。一般PC功耗超过150W,对储油罐的监控始终是连续的。这种电能的累积消耗将是一个很大的数量。粗略算下来,每天要消耗3千瓦时的电能,一年也就是1000多千瓦时。而一个专门为使用嵌入式设备的储油罐设计的监控系统

36、,功耗一般在10W以内,也能完成PC能实现的监控功能,但功耗远低于PC。下面就简单解释一下这两种方式。4.1电脑软件软件运行平台:x86 32位Linux 2.6软件开发平台:Red Hat Enterprise Linux 5用于linux的Qt 4.3PC端软件在linux操作系统下编译开发,也运行在linux 32位平台上。软件是Qt4.3,是奇趣科技在1991年开发的跨平台。 HYPERLINK ./%20%20%20%20:/baike.baidu%20%20%20%20/view/824.htm C+图形用户界面 HYPERLINK ./%20%20%20%20:/baike.ba

37、idu%20%20%20%20/view/330120.htm 应用程序框架,2008年,奇趣科技被诺基亚收购,QT成为 HYPERLINK ./%20%20%20%20:/baike.baidu%20%20%20%20/view/1724.htm 诺基亚它的编程语言工具,也就是我们熟悉的塞班操作系统的图形界面,是用Qt写的。因为Qt是一个跨平台的程序开发软件,所以只需对源代码做最小的修改,就可以在Windows平台上运行。之所以选择linux操作系统,是因为它稳定且免费。大型IT公司的服务器大多采用linux操作系统,甚至微软也大量采用了linux系统的服务器。作为工业监控设备,稳定性非常重

38、要。通常linux操作系统启动一年后不会有任何问题,完全可以满足持续监控的任务。整个图形界面的源代码由以下文件组成,如图4.1所示。图4.1文件组织Images目录是软件的一些图片,posix _ qexteserialoprt.ccp;posix _ qexteserialoprt.hqextserialbase.cpp这四个文件extserialbase.cpp是第三方为Qt封装的串口通信类,widget.cppWidget.h两个文件是自己写的数据处理和可视化接口文件。串口设置代码如下:myCom =新POSIX _ QextSerialPort(/dev/ttys 0 ,QextSer

39、ialBase:Polling);myCom- open(QIODevice:read write);myCom- setBaudRate(baud 9600);myCom- setDataBits(DATA _ 8);myCom- set parity(PAR _ NONE);myCom- setStopBits(STOP _ 1);myCom- set FLOW control(FLOW _ OFF);myCom- setTimeout(10);read timer = new q timer(this);read timer- start(1000);connect(readTimer,

40、SIGNAL(timeout(),this,SLOT(read mycom();这种接收方式相当于单片机的串口工作方式2,实现了上位机和下位机的串口通信。软件打开界面和软件界面如图4.2和4.3所示:图4.2软件打开界面图4.3操作界面这是一个简单的监控界面。为了实验和整体界面布局美观,暂只设计4个储油罐监测位。如果用于工业监控,很容易在程序中增加几十个监控位。因为能力有限,暂时无法在软件上做太多的功能。但是Qt是个很厉害的东西。可以建立数据库,对储油量、温度、压力进行各种统计,绘制图表,制作统计报表,建立监控日志。这些功能都可以实现。4.2 ARM嵌入式设备软件软件运行平台:ARM 32位L

41、inux 2.6软件开发平台:Red Hat Enterprise Linux 5交叉编译器用于linux的Qt 4.3其实PC和嵌入式设备上的源代码都是一样的,只是编译的软件不一样。Gcc编译软件在PC上使用,arm-linux-gcc编译软件在嵌入式设备上使用,生成可以在arm平台上运行的二进制可执行文件。其他的没有太大区别。用arm-linux-gcc编译源代码,将生成的可执行文件移植到arm平台设备上。效果如图4.4所示:图4.4操作界面下位机通过串口与开发板连接,也可以对储油罐进行监控。上图开发板的CPU是三星公司的S3C2440,主频400MHz,RAM 64M,ROM 256m,

42、屏幕只有3.5寸。除了显示屏,其他配置都能满足系统的要求。如果要用在工业上,可以用带VGA接口的器件,比如miniS3C2440做VGA。连接普通显示器时,分辨率可达1024*768,与普通PC完全一致。如果上位机除了监控储油罐什么都不做,可以使用ARM嵌入式设备,从环保和经济的角度来看,这是最好的选择。5系统调试5.1调试计划1.审查设计方案,检查是否有与方向有关的错误。2.运行Qt的调试功能,检查是否有语法错误。3.选择合理或不合理的输入条件,检查是否有逻辑错误。5.2程序运行中的错误设计完程序代码后,需要处理和调试错误。在QT软件开发中,错误信息的处理非常重要。有些错误可以在编译时发现,

43、但有些错误是在软件运行时用户输入错误造成的。这就需要软件开发人员在软件设计和开发过程中注意处理这方面的错误。的常见错误分为三种类型:语法错误。这种错误是在编译时提示的,通常是变量定义错误或者语法结构错误。运行时错误。这个错误部分是用户操作造成的,比如输入的坦克数量超过设计值,界面就不会显示。(3)逻辑错误。这种错误是编程过程中最复杂也是最容易犯的。5.3调试结果下位机调试温度试验提高温度传感器的温度,观察数码管温度显示的变化;图5.1温度调试用手指触摸温度传感器,温度上升。压力传感器测试旋转电位计(该电位计用于模拟压力传感器),观察压力值和液位值的变化,如图5.2所示:图5.2压力调试串行数据

44、测试将本系统的串口连接到电脑上,用串口调试工具观察串口数据。调试结果如图5.3所示:图5.3串行调试结果上位机调试开始测试检查软件是否能正常启动;通过多次测试,软件在32位linux平台上运行正常,没有出现异常情况。背景数据测试在linux终端模式下,以文本形式检查各项数据是否符合要求,如图5.4所示:图5.4后台数据调试图形界面测试在软件镜像界面下,检查数据是否与下位机数据一致,如图5.5所示:图5.5软件界面数据调试错误处理测试设置储油箱号超过软件测试范围(1到4)并观察现象,如图5.6所示。当罐号超过4时,界面无数值显示,符合要求。图5.6错误数据的调试结果6汇总分析经过两个多月的奋斗,

45、本次毕业设计终于顺利完成,但仍有许多不足之处需要在今后的学习和实践中加以改进,如:由于本人水平有限,时间较短,曾多次尝试在系统中添加数据库和统计功能,可惜都没有成功。但是面向对象的Qt图形编辑软件完全支持这些功能,可以在以后的学习过程中添加。单片机的算术计算能力有限,计算较大数值的乘除法会产生较大的误差。需要其他方法(算法)来解决这个问题。本系统采用的数学模型不适用于计算球形和其它不规则的储油罐。在最初的编程系统中,没有统一的变量名,给后期调试造成了很多不必要的麻烦,这是一个经验和教训。因为对基础知识的掌握不够扎实,在设计过程中走了很多弯路,做了很多无用功。总的来说,这个课程设计还是比较成功的

46、。虽然在设计中遇到了很多问题,但是在老师和同学的帮助下逐渐解决了,我也有点成就感。最后觉得平时学的东西有实用价值,达到了理论联系实际的目的。在设计过程中也学到了很多新知识,锻炼了自己的能力,让自己对未来的路有了更清晰的认识。同时,我对未来有了更多的了解。参考1易纲。单片机原理及应用。:高等教育,2003年12月2伯禽,吴宁,微型计算机原理与接口技术,清华大学,2007年8月。3杜春蕾。ARM架构和编程。:清华大学,2003年9月4杜仁,鲍军.传感器原理与应用技术.:机械工业,2003年8月5程洁。Linux窗口编程:Qt4精彩实例分析。:清华大学,2008年11月6黄维同。Visual C+面

47、向对象与可视化编程(第3版)。:清华大学,2011年8月7杜仁,鲍军,传感器原理与应用技术,机械工业,2003年8月。8童,模拟电子技术基础,高等教育,2006年5月。9周航慈,单片机应用程序设计,:航空航天大学,2003年8月储油罐实时监控系统姓名:张国亚指导老师:张振宏张毅摘要:我国石油资源丰富,炼油企业众多,储油罐自然成为储存石油的重要设备。与此同时储油罐的液位对工厂的库存管理和经济运行有很大的影响。然而,许多反应罐、大型油罐、加油站的液位测量仍然采用人工检测和分析化验的方法,其他参数的测量也没有实行实时动态测量。这种情况使得事故容易发生,不能为工厂的生产经营和管理决策提供准确的依据。本

48、系统针对上述问题,采用单片机技术和传感器技术来测量油液的温度和压力,并显示油液的容量和温度值。它还利用串口向PC机发送数据,从而有一个更简洁的计算和统计。因此,该系统可以为工业生产的安全提供技术支持。关键词:储罐、液位、监控系统附录下位机源代码:1主要功能代码1.1主要原因#include #包含“main.h”void main()乌恰p、白、石、葛;uchar x;uchar wd,wdshi,wdgewhile (1)p = ADmain();wd =杜文();for(x = 0;x = 110 x+)白= p/100;Shi =(p % 100)/10;ge = p % 10显示器(白

49、,1);显示(石,2);显示(ge,3);wdshi = wd/10;wdge = wd % 10显示(wdshi,7);显示(wdge,8);COM _ Out(0 x 00);COM _ Out(0 x Fe);COM _ Out(num);/储油罐号,在main.h文件中定义并赋值COM _ Out(wd);COM _ Out(pdow();/将底部压力值发送到串口。COM _ Out(pup();/将压力上限值发送到串口。1.2主页#定义uint无符号整数#定义uchar无符号字符uint ADmain();/储油功能void显示(uchar,uchar);/显示功能void COM

50、_ Out(uchar I);/串口发送功能乌恰杜文();/温度读取功能无符号字符pup();/上压力返回功能无符号字符pdow();/底部压力返回功能无符号字符数= 1;/储油罐号2显示模块功能代码显示/*数码管动态扫描显示功能,片选信号接38位解码器,段选信号接锁存器,*/#include#包含“display.h”#定义uchar无符号字符#定义uint无符号整数sbit段= p37;/P37连接到74HC573闩锁的闩锁信号端子。uchar代码weitable9 = 0,0,1,2,3,4,5,6,7 ;/*应该是:魏8 = 0,1,2,3,4,5,6,7但是这个,魏1对应二次元,魏0

51、对应二次元。是的第一个元素。为了直观方便,让魏1对应选通第一个数码管。的代码0 x00(即数组中的0)在数组前面加1。空元素(可以是任何值),数组大小增加一位。*/uchar代码段表10 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f ;/*上表中的10个元素显示在数码管上。时间是0,1,2,3,4,5,6,7,8,9。Table0对应于数组中的第一个元素,显示到数字。在代码上,它是:0,以此类推。在表9的相应数组中显示在数码管上的第十个元素是:10 */无效显示(uchar d,uchar w)段= 0;P0 = 0

52、 xff段= 1;/打开闩锁的闩锁端。P0 =段表d;/将段选择信号放入锁存器段= 0;/关闭闩锁的闩锁端。P2 & = 0 x F8;/*在给p2赋值之前,用(1111 1000)进行逻辑与P2运算,/将P2 0、P2 1和P2 2清零,以免影响其他位的原始电平*/P2 | = Wei tablew;/*将位选择信号放入P2端口的低三位,/只改变P2端口低三位的值,不影响其他位*/delay _ display(8);无效延迟_显示(单位I)uchar x,j;for(j = 0;j I;j+)for(x = 0;x = 110 x+);/*显示数字时,只需调用display(),格式:显示

53、(段、位);*/2.2显示void显示(无符号字符,无符号字符);void delay _ display(unsigned int I);3串口发送模块代码3.1网站/*文件名:串口发送。c*说明:该文件实现了单片机通过串口向计算机发送数据,。*/#include#include#包含“COM.h”#定义uchar无符号字符#定义uint无符号整数/*名称:Com_Init()*功能:初始化串口程序,晶振11.0592,波特率9600*输入:无*输出:无*/空Com_Init(空)TMOD = 0 x 20;PCON = 0 x 00;SCON = 0 x 50;TH1 = 0 xFdTL1

54、 = 0 xFdTR1 = 1;/*名称:COM_Out()*功能:发送数据*/void COM_Out(uchar i)com _ Init();/初始化串行端口SBUF = I;/将传入数据放入SBUF而(!TI) /如果传输结束,硬件将设置TI。_ nop _();TI = 0;/TI清零。3.2网站/*文件名:串口发送。c*说明:该文件实现了单片机通过串口向计算机发送数据,*/#include#include#包含“COM.h”#定义uchar无符号字符#定义uint无符号整数/*名称:Com_Init()*/空Com_Init(空)TMOD = 0 x 20;PCON = 0 x 0

55、0;SCON = 0 x 50;TH1 = 0 xFdTL1 = 0 xFdTR1 = 1;/*名称:COM_Out()*/void COM_Out(uchar i)com _ Init();/初始化串行端口SBUF = I;/将传入数据放入SBUF而(!TI) /如果传输结束,硬件将设置TI。_ nop _();TI = 0;/TI清零。温度测量功能代码4.1DS18B20.c/*文件名:DS18B20.c*说明:该文件用温度传感器DS18B20实现温度采集。*/#include#包含“DS18B20.h”#定义uchar无符号字符#定义uint无符号整数#define jump_ROM 0

56、 xCC /总线上只有一个器件,0 xCC表示不响应ROM编码。#define start 0 x44 /仅接收到一条指令后,芯片执行温度转换。#define read_EEROM 0 xBEsbit dq = p23;/DS18B20数据端口未签名char TMPL TMPH;/*名称:延迟()*功能:延时功能*/无效延迟int I;for(I = 0;I N;i+);/*名称:重置()*/uchar复位(无效)uchar欺骗_就绪;DQ = 0;延迟(29);DQ = 1;延迟(3);欺骗_就绪= DQ;/将DQ的值赋给这个变量延迟(25);return(欺骗_就绪);/返回DQ的级别状态

57、/*名称:read_bit()*/uchar读取位(void)乌恰尔一世;DQ = 0;DQ = 1;for(I = 0;I 3;i+);返回(DQ);/*名称:write_bit()*/void write_bit(uchar bitval)DQ = 0;if(bitval=1)DQ = 1;延迟(5);DQ = 1;/*名称:read_byte()*/uchar read_byte(空)uchar i,m,receive _ datam = 1;receive _ data = 0;for(I = 0;I 8;i+)if(read_bit()接收数据=接收数据+(m I);延迟(6);re

58、turn(receive _ data);/*名称:write_byte()*/无效写入字节(uchar val)uchar i,tempfor(I = 0;I I;temp = temp & 0 x01write _ bit(temp);延迟(5);/*姓名:杜文()*/乌查尔杜文uchar温度;reset();write _ byte(jump _ ROM);write_byte(开始);reset();write _ byte(jump _ ROM);write _ byte(read _ ee rom);TMPL =读取字节();TMPH =读取字节();temp = TMPL/16+

59、TMPH * 16;返回温度;4.2DS18B20.hvoid delay(无符号整数N);无符号字符重置(void);无符号字符read _ bit(void);void write_bit(无符号char bit val);无符号字符read _ byte(void);void write_byte(无符号char val);无符号字符杜文();5液位测量模块的功能代码5.1 I2C.h/*文件名:I2C。H功能:是AD转换模块的头文件。*/外部位确认;/启动总线功能extern void Start _ I2c();/结束总线功能extern void Stop _ I2c();/响应子

60、函数外部void Ack_I2c(位a);/字节数据发送功能extern void SendByte(无符号char c);/带有子地址的函数发送多字节数据extern无符号char RcvByte();/字节读取功能extern bit ISendByte(无符号char sla,无符号char c);/发送设备地址和控制字extern unsigned char IRcvByte(unsigned char SLA);/读取模数转换值(A/D)无符号字符pup();/上压力返回功能无符号字符pdow();/底部压力返回功能5.2 I2C/*这部分是I2C公交车的司机。*/#include#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论