储油罐实时监测系统的设计与实现(编辑修改稿)内容摘要:

况下我们采用的是 TO- 92 封装的 DS18B20, 如 图。 图 DS18B20 封装 由于 DS18B20 采用的是 1- Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对 51 单片机来说,跟 I2C 总线设备一样,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对 DS18B20 芯片的访问。 DS18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。 DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。 该协议定义了几种信号的时序:初始化时序、读时序、写时序,如图 所示。 所有时 序都是将主机作为主设备,单总线器件作为从设备。 而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。 数据和命令的传输都是低位在先。 图 DS18B20 的复位时序 长治学院学士学位论文 13 图 DS18B20 的读时序 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程。 对于 DS18B20 的读时隙是从主机把单总线拉低之后,在 15us 之内就得释放单总线,以让 DS18B20 把数据传输到单总线上。 DS18B20 在完成一个读时序过程,至少需要 60us才能完成。 图 DS18B20 的写时序 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程。 对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线上的 “0”电平,当要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放单总线。 在本系统中, DS18B20 的 2 引脚 DQ与主控器 STC90C516RD+ 的 P2^3 引脚相连,这条 I/O线上只挂载了一个 DS18B20,所以在操作时不 必去理会 DS18B20的 ROM编码,在单器件的情况下,为了节省时间则可以选择跳跃 ROM 指令( define jump_ROM 长治学院学士学位论文 14 0xCC),即向 DS18B20 写入指令: 0xCC。 如过多芯片挂载使用此指令将会出现数据冲突,出现错误。 对 DS18B20 的整体操作如下: ; ROM 指令: 0xcc; : 0x44; ; ROM 指令: 0xcc; : 0xbe; ; ; 最后将读到的温度数据以十进制的表示方法返回给主调函数。 串口数 据发送模块 串口数据发送模块的主要功能是将温度,压力等数据用串口发送给上位机,实现对储油罐的远端检测功能。 在本系统中采用的串口数据通信芯片是 MAX485。 PC 机一般接收的 RS232 电平,不识别 RS485 的电平信号,所以在接收端需要将 RS485 电平转换为 RS232 电平。 利用 MAX485 的主要原因是它的有效传输距离能达到 1500m,而普通 RS232 电平信号的有效距离最多也超不过 20m。 在一个大型的炼油厂,储油罐与上位机的距离不可能在 20m之内, RS232 电平无法满足长距离传输数据的功能。 操作单片机发送串口 数据时,要利用定时器来设置波特率。 主要的操作步骤: 选择好工作方式,设置好串口的相应的寄存器,设置好定时器的寄存器,将要发送的数据放入串口缓存区。 串口发送的数据顺序是: 0x00, 0xff,油罐编号,温度,底端压力,上端压力; 其中 0x00,和 0xff是数据校验标志,当上位机收到一个数组后,先判断第一位是 0x00,且第二位是 0xff 后,就知道从第三位开始就是编号,温度,压力这些有效数据了,因为事先知道数据长度,就不用结束标志位了。 长治学院学士学位论文 15 向上位机发送的数据是源源不断的发送上去,每秒钟能发好几次,上位机再选择性的 接收数据并做出相应的处理。 在 windows 下使用串口调试工具,收到的数据如图 所示。 图 串口调试工具 用串口调试工具查看串口数据时,这些数据是以十六进制显示的,而且是一连串的数据,不知道它们代表的是什么意思。 用一定的方法将这些数据解析完毕后,我们就可以很清楚的理解他们的意思了,在 linux平台的终端中,显示解析后的数据如图 : 图 linux平台的终端 数据 长治学院学士学位论文 16 显示模块 显示模块的功能是:将各传感器检测到的值经其他相应功能模块处理之后,以数值的形式显示在数码管上。 相对而言,显示模块在本系统中是一个比较简单的模块,硬件上由一个八位的八段数码管、一个 38 译码器( 74H138)和一个锁存器( 74H373)构成 ,如图 所示。 X T A L 218X T A L 119A L E30EA31P S E N29RS T9P 0 .0 /A D 039P 0 .1 /A D 138P 0 .2 /A D 237P 0 .3 /A D 336P 0 .4 /A D 435P 0 .5 /A D 534P 0 .6 /A D 633P 0 .7 /A D 732P 1 .0 /T 21P 1 .1 /T 2 E X2P 1 .2 /E C I3P 1 .3 /C E X 04P 1 .4 /C E X 15P 1 .5 /C E X 26P 1 .6 /C E X 37P 1 .7 /C E X 48P 3 .0 /R X D10P 3 .1 /T X D11P 3 .2 /I NT 012P 3 .3 /I NT 113P 3 .4 /T 014P 3 .7 / R D17P 3 . 6 / W R16P 3 .5 /T 115P 2 .7 /A 1 528P 2 .0 / A 821P 2 .1 / A 922P 2 .2 /A 1 023P 2 .3 /A 1 124P 2 .4 /A 1 225P 2 .5 /A 1 326P 2 .6 /A 1 427U1A T 8 9 C51 RD 2A1B2C3E16E24E35Y015Y114Y213Y312Y411Y510Y69Y77U37 4 HC 1 3 8X1CR Y S T A LC11nFC21nFR12 4 0 kD03Q02D14Q15D27Q26D38Q39D413Q412D514Q515D617Q616D718Q719OE1LE11U27 4 L S 3 7 3 图 显示电路 锁存器的输入端接单片机的 P0 口,将 P0 输出的电平保存起来,防止其跳变。 输出端接数码显示管的段选信号。 38 译码器输入端接单片机 三端, 8 个输出端分别接 8 位数码管上的位选信号。 位选的电平逻辑可参考 38 译码器的真值表,在此不再赘述。 特别强调的是,在操作单片机给 三端赋值时,应只给这三个端口赋值,尽量不要采用 “P2 = XXX”的形式。 这样虽然可以改变这三个端口的值,达到操作38 译码器的效果,但同时也改变了 P2 口其他五个端口的值,这就意味着对显示模块的操作可能会导致其他与 P2 口相连模块的功能产生错误。 可以这样赋值 : P2^0 = X; 长治学院学士学位论文 17 P2^1= X; P2^2= X。 但这种赋值方式在这三个端口值不断变化的情况下,较为繁琐,所以利用 C 语言按位与,按位或,左右位移等方法较为简便,例如: P2 amp。 = 0xf8。 /*给 P2口赋位选值前,先将 p2 与( 1111 1000) 逻辑与,将 P2^0,P2^1,P2^2 清零,从而不影 响其他位原来的电平 */ P2 |= weitable[w]。 /*将位选信号放进 P2 口的低三位,只改 变 P2口低三位的值,不影响其他位 */ 显示模块的程序代码中对外提供一个接口: display(d , w)函数。 其中 d 是段选参数,作用是显示什么数字; w 是位选信号,作用是在那一位上显示。 调用起来相当方便。 显示的方法是动态扫描显示,即每次只能在数码管的某一位上显示一 个数字,显示完当前数字之后立即显示下一位数字,当中间间隔小于 20m时,由于人体视觉有一定的滞留时间,所以无法察觉闪烁感,视觉效果与多位同时显示一致。 长治学院学士学位论文 18 4 系统设计之上位机部分 上位机可以是 x86 平台的计算机,也可以是 32 位 ARM 嵌入式设备。 一般对几十个储油罐进行监测,系统的资源消耗不会很大,也可以说是轻而易举一件事儿。 通的 PC功耗一般都超过 150W,对储油罐的监测是永不间断的,这种电能的消耗累计起来将是一个很大的量,粗略计算一下每天会消耗 电能 3 千瓦时 ,一年下来就是一千多 千瓦时。 但是用嵌入式设备制作一个专门 针对储油罐 的 监测系统,功耗一般不会超过 10W,同样能完成 PC 所能实现的 监测 功能, 但 功耗比 PC 低的多。 以下将简单对这两种方式做一简要的说明。 PC端软件 软件运行平台: Linux for x86 32 位 软件开发平台: Red Hat Enterprise Linux 5 Qt for linux 上位机 PC 端软件是在 linux操作系统下编译开发的,也是要运行在 linux 32 位平台上。 开发软件是 , Qt 是一个 1991 年由奇趣科技开发的跨平台 C++图形用户界面应用程序 开发框架, 2020 年,奇趣科技被诺基亚公司收购, QT 也因此成为 诺基亚 旗下的编程语言工具,我们熟知的塞班操作系统的图形界面就是用 Qt 写的。 因为 Qt是跨平台程序开发软件,所以将源代码做极小量的修改,就可以在 Windows 平台下运行了。 选择 linux操作系统的原因是它很稳定,而且是免费的,绝大多数大型 IT 公司的服务器都采用的是 linux操作系统,甚至就连微软也采用了大量的 linux系统的服务器。 作为工业监测的设备,稳定性是相当重要的,通常情况下 linux操作系统开机一年都不会出现任何问题,完全能满足连续监测的任务。 整个图形化界面的源代码由以下文件组成见图。 长治学院学士学位论文 19 图 文件组织 其中 images 目录内是软件内的一些图片, ;; ; 这四个文件是第三方为 Qt封装的一个串口通讯的类,。 两个文件是我自己写的数据处理和图像化界面文件。 对串口的设置代码如下: myCom = new Posix_QextSerialPort(/dev/ttyS0,QextSerialBase::Polling)。 myCom open(QIODevice::ReadWrite)。 myComsetBaudRate(BAUD9600)。 myComsetDataBits(DATA_8)。 myComsetParity(PAR_NONE)。 myComsetStopBits(STOP_1)。 myComsetFlowControl(FLOW_OFF)。 myComsetTimeout(10)。 readTimer = new QTimer(this)。 readTimerstart(1000)。 connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()))。 } 长治学院学士学位论文 20 这种接收方式相当于单片机的串口 工作 方式 2,就实现了 上位机 与下位机的串口通讯。 软件开启 界 面 与 软件 界 面 如图 和 所示: 图 软件开启界面 图 操作界面 长治学院学士学位论文 21 这是一个简单的监测界面,出于实验和整体界面布局美观的考虑,暂时只设计了对四个储油罐监测的位置,若用于工业监测时,在程序中很容易增加几十个监测位置。 由于本人能力有限,暂时不能对该软件做出太多的功能。 但 是 Qt 是一个很强大的东西,可以建立一个数据库,对储油量,温度,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。