摘 要
本课题设计的是一套计算机控制的温度、湿度实时监测与报警系统,可应用于多种需要采集温湿度数据的场合,本文完成了整个系统的软硬件设计。
系统采用单总线传感器网络和 RS485 传输网络的设计思想。其中温度、湿度传感器都以智能终端的形式挂接到单总线上,多条单总线汇总到一起,由一台数据采集器集中控制,每台数据采集器负责一定区域内的温湿度监测。数据采集器的核心部件为单片机,主要完成对其所连接传感器件的测量与控制以及与主机的通信等功能。各采集器以网络结点的方式挂接到 RS485 传输网络上,传输距离远,还可有效的抑制共模干扰。设计中的 RS232/RS458 转换器用来实现 RS485 总线网络与主机 RS232 串口通信的相互转换。系统中为主机与各采集器之间的数据通信制定了完备的通信协议,采用主机调度工作形式,CRC 技术校验数据,以保证通信的可靠性。用 Delphi 开发了具有温湿度数据显示、告警、历史数据和曲线显示与打印等功能的主机用户管理软件。
关键词: 单总线, 单片机, 循环冗余码校验, 通信协议
1 绪论
本章首先介绍了课题研究的目的和意义,温度、湿度数据实时采集与监测技术的发展历程,然后简要描述了温度、湿度监测与报警系统的组成,最后介绍本课题的主要特点。
1.1 课题研究的目的和意义
在现代工业现场,随着科技的进步和自动化水平的提高,电缆的用量越来越大,电缆的安全保护已成为不可忽视的问题。从国内外有关电缆火灾的统计资料看,许多电缆火灾是由电缆头击穿绝缘引起的。因此为电缆配置在线温度监测系统,对于电缆接头多,电缆密集的场所,就显得尤为重要。
粮食是人类生存的必需品,温度与湿度是保存好粮食的先决条件,我国的公粮现均集中存放在国家或地方的仓库中,最大粮库方圆几公里,仓库库房数为数十个,测点可达数千个。按照国家粮食保护法则,必须定期抽样检查各点的粮食温度与湿度,以确保粮食的存储质量。
档案馆中的档案资料同样会受到外界空气温湿度变化的影响,纸张纤维热胀冷缩,使强度降低,湿度过大会使霉菌和害虫滋长,以致造成资料质变。
由此可见,温度、湿度监测在人们现实生活生产中应用已日渐广泛,在发电厂、纺织、食品、医药、仓库、农业大棚等众多的应用场所,对温度、湿度参量的要求都非常严格,因此能否有效对这些领域的温、湿度数据进行实时监测和控制是一个必须解决的重要前提。
本课题即以上述问题为出发点,设计实现了温度、湿度的实时监测系统,该系统不仅能实时采集各抽样点的温度值与湿度值,而且能够迅速处理,友好的将数据结果显示给用户,并存储结果以方便以后的对比研究。
1.2 温度、湿度数据采集与监测技术的发展历程
最早的也是最简单的实现对温度、湿度的监测是采用人工的方式,这种方式不仅效率低,劳动时间长,而且会由于抽样的不具代表性使得监测结果失去其原有的意义。该方式还有一个弊端——其应用场所有很大的局限性,工作人员不可能直接测量地下电缆的表面温度;去提取存有炸药、鞭炮等危险品仓库温湿度数据的工作人员还要承担一定的风险。
后来随着电子技术的出现与进步,科研人员开始采用温度与湿度传感器代替原始的温度计与湿度计,开发了以单片机为核心的监测系统[1] P285~P287,并佐以接口芯片将结果显示在LED 数码显示管上,单片机可直接控制打印监测数据。这种方式在很大程度上提高了工作效率,并扩展了应用范围。但其中所采用的温度、湿度传感器直接输出为模拟电压信号,该信号在传输过程中易损耗,影响系统精度,且传输距离较近,需要经过 A/D 转换芯片才能被单片机接收。每个测试点都需要各自独立的信号线,为了实现多点监测不仅需要成百上千条信号线,还需要多路模拟转换开关电路轮流对多个测试点进行连续监测,从而增加了整个系统的环节,使其难于维护,价格昂贵。
近年来,伴随微处理器芯片和网络通信技术的发展,为了简化系统设计并降低成本,各公司及科研机构开始致力于相关领域的探索,使得温湿度数据监测数字化、网络化的实现成为可能。其中美国达拉斯半导体公司推出了 1-Wire(单总线)接口协议,单总线技术与其它总线不同,它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的,因此单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。该公司所提供的适用于单总线微网技术的单总线器件具有无需另附电源、在测试点直接将模拟信号数字化等特点,一方面减少了系统环节,另一方面保证了系统的精度。同时各软件公司开发的可视化软件开发工具,更是向着效率高、功能强大的方向努力,从而为获得良好的用户界面奠定了基础。
1.3 本课题的主要特点
本课题采用基于单总线网络的设计思想来设计温度、湿度实时监测与报警系统。
系统的主机和多个数据采集器间采用 RS485 总线通信方式传输数据,管理各采集器和进行数据集中显示和处理的计算机主机采用的是 RS232 通信协议,在通信中制定了完备的通信协议,主机调度工作形式,并采用 CRC 校验技术,以保证通信的可靠性。
温度与湿度测量均采用单总线器件,器件送出的温度信号是数字信号,因此省去了外部 A/D 转换,简化了硬件电路,简化了系统的设计,提高了数据监测的智能化程度,器件采用恒压供电,响应速度快,重复性好,抗污染能力强。数据采集器采用双隔离供电方式,保证了系统能在恶劣的环境条件下工作。
用 Delphi7 开发了用户监测软件,全图形界面,力图画面美观,运行可靠,操作简便、直观。并且具有监测、报警、数据记录、历史显示与打印等多种功能。
2 系统的总体设计
本章首先介绍了该系统的功能,然后详细描述系统的总体设计,结合其结构框图说明了系统的工作过程。
2.1 系统功能
该系统的功能:
1)一台主机可最多管理 32 台数据采集器,若增设中继器,可使系统扩展大于 32台采集器;
2)一台数据采集器可管理 32 个测试点(温度测试点与湿度测试点合计),这样一般系统总的测试点个数可达 32×32=1024 个;
3)各温湿度测试点与其所属采集器的最远距离不超过 150 米;
4)主机与采集器间可远距离通信,最大通信距离 1.2km,若增设中继器,可使最大通信距离超过 1.2km;
5)Delphi7 编写主机用户监测软件,全图形界面;
6)可随时查询、以表格形式打印历史数据;
7)可对每一个测试点设定单独的报警限值,且当采集到的数据超过其上下限时给出报警信号,同时显示测试点位置。可随时查询并可以表格形式打印报警数据。
2.2 系统主要技术指标
1)温度测量:
(1)测量范围:-55℃ ~+125 ℃;
(2)测量精度:±0.5℃(-10℃ ~+85 ℃);
±2.0℃(-55℃ ~+125 ℃);
(3)分辨率:0.1℃;
2)湿度测量:
(1)测量范围:1%~99%RH;
(2)测量精度:±5%RH(25℃);
(3)分辨率:1%RH;
2.3 系统的总体结构
如图 2-1 所示,整个监测报警系统从结构上分为三层:第一层是由工控机等组成的用户监测层作为上位机;第二层是由单片机 AT89C52 构成温湿度采集器作为下位机;最底层是由 DS18B20 构成的温度传感器结点和 DS2438 与 HIH3610 构成的湿度传感器结点。其中温度结点和湿度结点均为满足 1-Wire 通信规约的数字化结点。上位机与下位机之间的通信为总线结构的 RS485 通信网,下位机与数字化结点之间的通信由 1-Wire 网络完成。

该系统的组成[2] P25~P27大体上可以分为三部分:一是温湿度参数的测量转换,二是测量数据的传输,三是数据的集中显示与处理[3] P18~P21。
温湿度测量是系统的主要环节,由系统组成结构框图中温湿度采集器来完成数据的获取与处理。
各数据采集器在得到温湿度数据后,加以简单处理,然后将其传送给主机,这之间的数据可靠传送是该系统中另一个要解决的关键问题。管理各采集器和进行数据集中显示和处理的计算机主机采用的是 RS232 通信协议,该协议只允许点对点通信最大通信距离为 15 米,而且驱动器只允许有 2500pF 的电容负载,通信距离也将受此电容限制。通过RS232/ RS485转换器将 RS232 转换成进行多点通信的 RS485 方式被应用到该系统中。RS485 具有带负载能力强,传输距离远(可达 1200 米),功耗小,传输速率高(最高可达 1Mbps)等特点。此外,RS485 收发器采用平衡发送和差分接收,因此具有很强的抑制共模干扰能力。每块采集器所发送的数据采用的是 RS485 标准,主机发送数据采用的是 RS232 标准,将系统中完成两者之间转换的模块称为 RS485/RS232 模块。
该系统的使用最终是要面向用户的,因此用户监测软件的开发将决定系统能否方便高效地运行。本系统采用美国 Borland 公司优秀的面向对象开发工具 Delphi7 编写用户界面,力图画面美观,运行可靠,操作简便、直观。用户软件功能一般包括数据读取与显示、报警参数的设置、数据记录、报表打印等。
2.4 系统的工作过程
系统中每台采集器都有一个唯一且固定的地址编码。由于系统的主机与下位机之间采用半双工的 RS485 通信标准,所以主机采用问答式的通信方式,通过不同的地址编码逐一同下层的采集器通信。作为主机的工控机以命令的方式对下层的采集器统一管理,这些命令包括:采集器搜索底层传感器的 64 位 ROM 序列码,采集器启动温度传感器和湿度传感器的数据转换,采集器上传采集到的温湿度数据,主机与各采集器之间的通信通道校验等,它们均要求被主机选中的采集器上传应答信号,以确保通信。
上位机把采集到的温度值与湿度值通过应用程序管理界面显示给用户,用户可通过该界面设置每一个测试点的报警上限和下限。当采集回来的温湿度值超过其对应测试点的报警上下限时,系统给出报警信号。
为了实现该系统的实时性,主机是定时向各采集器发出温湿度数据采集与读回命令的,传送回来的温湿度数据以动态刷新的形式直观的显示在主机的用户管理界面上,用户可根据需要在界面上直接设置发送采集数据与读回命令以及数据刷新的时间间隔。为了保证传输数据的可靠性,所有的命令和数据传输都制定了严格的通信协议,并采取了CRC 校验方式。系统会定时将采集结果存储到数据库中,以供今后的数据分析使用,该记录时间间隔也可由用户根据需要在界面上直接设置。
3 单总线与温度、湿度传感器
该系统的特点之一是测量温湿度数据的传感器均采用 Dallas 公司的单总线器件,单总线器件的数据传输严格遵守单总线协议。本章首先介绍由单总线温度传感器DS18B20 组成的温度采集结点,然后介绍了单总线系统,其中详细描述了单总线器件严格遵守的单总线协议,最后设计与实现了由单总线 A/D 转换器 DS2438 与湿度传感器HIH3610 构成的湿度采集结点,该湿度采集结点同样遵守单总线协议。
3.1 温度传感器 DS18B20
系统中温度测试点的数据采集由 Dallas 公司的单总线数字温度传感器 DS18B20 完成[4]P1~P7。
3.1.1 DS18B20 简介
(1)独特的单线接口方式,只需一个接口引脚即可通信;
(2)每一个 DS18B20 都有一个唯一的 64 位 ROM 序列码;
(3)在使用中不需要任何外围元件;
(4)可用数据线供电,电压范围:+3.0V~+5.5 V;
(5)测温范围:-55℃ ~+125 ℃,在-10℃~+85℃范围内精度为±0.5℃,分辨率 0.0625℃。等效的华氏温度范围是-67°F~+257°F;
(6)通过编程可实现 9~12 位的数字读数方式。温度转换成 12 位数字信号所需时间最长为 750ms,而在 9 位分辩模式工作时仅需 93.75ms;
(7)用户可自设定非易失性的报警上下限值;
(8)告警搜索命令可识别和定位那些超过报警限值的 DS18B20;
(9)支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点测温。
(10)电源极性接反时,DS18B20 不会因发热而烧毁,但不能正常工作。
3.1.2 DS18B20 的内部结构
DS18B20 采用 3 引脚 TO-92 小体积封装,其内部结构如图 3-1 所示,主要由 4 部分组成:64 位 ROM 序列码、温度传感器、非易失性的温度报警触发器 TH 和 TL、配置寄存器。
图 3-1 DS18B20 的内部结构
ROM 中的 64 位序列码是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列码,每个 DS18B20 的 64 位序列码均不相同。如图 3-2 所示,64 位光刻 ROM 的排列是:开始 8 位是单线产品系列编码(比如 DS18B20 的编码是 28h,DS1820 的编码是 10h,DS2438 的编码是 26h),同一型号的单总线器件的编码相同。接着的 48 位是该 DS18B20唯一的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1)。单总线器件的序列号唯一性特点,保证了在一根总线上可以挂接多个单总线器件的实现。
8位CRC编号 |
48位序列号 |
8位产品系列编码 |
MSB LSB MSB LSB MSB LSB
(最高有效位) (最低有效位)
图 3-2 64 位 ROM 结构示意图
如图 3-3 所示,DS18B20 的内部存储器包括一个高速暂存(便笺式)RAM 和一个非易失性 EEPROM(高温触发器 TH、低温触发器 TL 和配置寄存器)。暂存存储机制有利于在单线通信时确保数据的完整性。数据通常首先写入暂存存储器,在那里它可以被读回。当数据被校验后,复制暂存存储器的命令把数据传送到非易失性 EEPROM。这一过程确保了更改存储器时数据的完整性。同时非易失性 EEPROM 也保证了 TH、TL 与配置寄存器内容的掉电不丢失,器件每一次上电时这三个字节的内容被重置到高速暂存 RAM 对应的空间。
图 3-3 DS18B20 的存储器组织
高速暂存存储器是按 9 个 8 位字节存储器来组织的。其中第 0、1 个字节为只读型字节,分别包含测得温度信息的低位和高位字节,第 2 和第 3 个字节是 TH 和 TL 的易失性拷贝,在每一次上电复位时被刷新。如果在使用 DS18B20 的过程中不对其施加告警搜索命令,则第 2 和第 3 个字节可用作通用用户存储器,在本系统中即作为通用存储器使用,定义这两个字节存储该温度传感器在系统中的序号,为每个温度传感器分配的序号在系统中是唯一的。第 4 个字节为配置寄存器,接着的三个字节为器件内部使用而保留,不可对其施加写命令。第 8 个字节为只读型字节,它是前面所有 8 个字节的循环冗余校验字节(CRC)
Bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0 |
R1 |
R0 |
1 |
1 |
1 |
1 |
1 |
图 3-4 配置寄存器
其中配置寄存器的结构如图 3-4,R1 和 R0 用于确定温度值的数字转换分辨率,DS18B20 工作时按此寄存器中的分辨率将温度转换为相应精度的数值。如表 3-1 所示(DS18B20 出厂时被设置为 12 位)。
表 3-1 R1 和 R0 模式表
R1 |
R0 |
分辨率 |
最大的温度转换时间 |
0 |
0 |
9-bit |
93.75ms |
0 |
1 |
10-bit |
187.5ms |
1 |
0 |
11-bit |
375ms |
1 |
1 |
12-bit |
750ms |
由表 3-1 可见,设定的分辨率越高,所需要的温度数据转换时间就越长。本系统中对于各 DS18B20 的配置寄存器都没有进行修改,即采用其出厂时的配置,使得采集到的温度值分辨率可达到 12bit。
当 DS18B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 0,1 字节。主机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以 0.0625 ℃/LSB 形式表示。
3.1.3 CRC 校验原理与实现
CRC 的英文全称为 Cyclic Redundancy Check(Code),它是一类重要的线性分组码。CRC 校验的基本思想是利用线性编码理论[5,6],将要发送的数据比特序列当作一个多项式f(x)的系数,在发送方用双方预先约定的生成多项式 G(x)去除,求得一个发送余数多项式。将发送余数多项式加到数据多项式之后发送到接收端,接收端用同样的生成多项式 G(x)去除接收数据多项式 f′(x),得到接收余数多项式。如果接收余数多项式与发送余数多项式相同,则表示传输无差错,否则表示传输有差错,由发送方重发数据,直至正确为止。CRC 检错能力强,容易实现,是目前应用最广的检错码编码方法之一。
CRC 生成多项式 G(x)由协议规定,目前已有多种生成多项式列入国际标准中,例如:
CRC-12 G(x) = x12 + x11 + x3 + x2 + x +1
CRC-16 G(x) = x16 + x15 + x2 +1
CRC-CCITT G(x) = x16 + x12 + x5 +1
器件DS18B20在两个方面应用了CRC校验的理论[4]P7。其中一方面是存储在64位ROM最高有效字节内的 8 位 CRC,该 CRC 校验字节的作用是:总线上的主机可以根据 64 位ROM 的前 56 位计算 CRC 值并把它与该校验字节进行比较,用来确定主机搜索回来的 ROM信息是否正确。CRC 生成多项式的函数为:
G(x) = x8 + x5 + x4 +1 (3-1)
另一方面DS18B20也利用上述的多项式函数产生一个CRC校验字节放在高速暂存存储器的第九个字节,并把此值提供给总线的主机以确认数据字节的传送。在使用 CRC 来确认数据传送的每一种情况中,总线主机必须使用上面给出的多项式函数计算 CRC 值,并把计算所得的值或者与存储在 64 位 ROM 中的 CRC 值,或者与高速暂存存储器中的 CRC值进行比较。CRC 值的计算、比较和是否继续操作都由总线主机来决定。
在本系统中,为了减少系统的硬件开销,采用软件来实现 CRC 校验过程。作为单总线上主机的单片机中有相应的程序段供 CRC 校验调用。用汇编语言实现的 CRC 校验的源
程序代码段如下:
CRC: NOP
MOV A,@R1
PUSH B
MOV B,#08H
CRC_LOOP:
PUSH ACC
XRL A,TEMP
RRC A
POP ACC
RR A
PUSH ACC
MOV A,TEMP
JNC ZERO
XRL A,#18H
ZERO:
RRC A
MOV TEMP,A
POP ACC
DJNZ B,CRC_LOOP
MOV A,TEMP
POP B
RET
该程序段实现的是对一个字节数据的校验,其中 R1 作为间址寄存器,即 R1 中为待检测字节所在单元的地址,temp 为移位寄存器的值,b 寄存器记录移位寄存器向右移动的次数。对若干个连续字节的值进行校验时,只需要设置一个循环,循环次数由字节个数决定,每一次循环中改变 R1 寄存器的值,然后调用该程序段即可实现。
3.2 单总线系统
单总线(1-wire)技术是近年来由美国 Dallas 半导体公司研发的一种总线技术[7,8]。与 SPI、I2C 等多种标准串行数据通信方式不同,它采用单根信号线传输时钟和数据,以其具有的节约 I/O 资源、结构简单、成本低廉、便于总线扩展和维护等优点越来越多的被广泛应用于民用电器、工业控制领域。
单总线适用于单个主机(master)控制一个或多个从机(slave)设备的系统。当只有一个从机设备时,系统可按单节点系统操作,当有多个从机设备时,系统可按多节点系统操作。其中主机可以是微控制器,从机为单总线器件。在 Dallas 的产品中,这类单总线器件有温度传感器 、一线存储器、A/D 转换器、可寻址开关等。与其它如并行、串行及专用总线相比,单总线突出的特点是主机控制器件的地址线、数据线和控制线合成为一条信号线与从机设备进行双向的数据交换。所以在有多路多个测控对象时,系统的布线简单、方便。但是较小的硬件开销需要相对复杂的软件设计进行补偿。
本数据采集系统即为单总线系统,系统中的主机为单片机,从机为单总线器件。
3.2.1 单总线协议
经过单线接口访问单总线器件有严格的单总线命令序列如下[4]P8~P11:
1)初始化
2)ROM 操作命令
3)存储器操作命令(功能命令)
4)数据传输
每次访问单总线器件,都必须严格遵守这个命令序列。如果出现序列混乱,则单总线器件不会响应主机。
初始化:基于单总线的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道总线上有从机设备且准备就绪。
ROM 命令:当主机检测到应答脉冲后,就可以发出 ROM 命令。
存储器操作命令(功能命令):通过 ROM 操作命令使得总线主机与总线上某些或某一从机设备确定了通信关系之后,主机发出的功能命令便可以驱动从机设备进行相应的动作,当需要进行数据的传输时,从机设备会把主机要求的信息以串行传输的方式送到单总线上。
系统中采用的单总线测温器件 DS18B20 的命令码功能说明见表 3-2。
表 3-2 DS18B20 的 ROM 命令和存储器操作命令表
|
命令 |
指令码 |
功能说明 |
ROM功能命令 |
读ROM 匹配ROM 快速搜索ROM 搜索ROM 报警搜索 |
33h 55h CCh F0h Ech |
直接读DS18B20的ROM信息 寻找与指定ROM相匹配的DS18B20 直接访问总路线上的DS18B20 识别总路线上所以DS18B20的ROMW信息 搜索有报警的DS18B20 |
存储操作命令 |
温度转换 写便笺式RAM 读便笺式RAM 复制笺式RAM 读EEPROM 读供电标识位 |
44h 4Eh BEh 48h B8h B4h |
启动温度转换 写TH TL和配置寄存器 读便笺式RAM(含CRC共9各个字节) 把TH TL和配置寄存器复制到EEPROM 读EEPROM中的数据到TH TL和配置寄存器 0:寄生电源供电; 1:外部电源供电 |
在执行温度转换和拷贝便笺式 RAM 数据至 EEPROM 功能期间,主机必须在单总线上允许强上拉,并且在此期间,总线上不能进行其它数据传输。通过发出复位脉冲,主机可以在任何时候中断数据传输。
所有的单总线器件要求采用严格的通信协议来确保数据的完整性。其协议中规定的信号[4]P14~P16类别有:复位脉冲,应答脉冲、写 0、写 1、读 0 和读 1。所有这些信号,除了应答脉冲之外,均由总线主机产生。并且发送所有的命令和数据都是字节的低位在前。协议中给出了各种信号严格的操作时序,该系统中,使用晶振为 11.0592MHz,根据其初始化时序编写的初始化子程序如下:
INT2: NOP ;以 P0.2 口连接单总线器件为例
CLR EA ;关闭允许中断位
PUSH B
INT20: CLR P0.2 ;主机发出复位脉冲至少持续480μs
MOV B,#200
INT21: CLR P0.2
DJNZ B,INT21
SETB P0.2 ;主机给出正脉冲持续15~60μs
MOV B,#30
INT22: DJNZ B,INT22
MOV B,#100
INT23: CLR C
ORL C,P0.2
JNC INT24
DJNZ B,INT23 ;等待从属器件的应答脉冲,低电平持续时间为60~240μs
INT24: MOV B,#80
INT25: ORL C,P0.2
JC INT26 ;若应答脉冲出现,其持续一定时间后总线应恢复为高电平
DJNZ B,INT25 ;否则主机再发出复位脉冲,进入新一轮的初始化
SJMP INT20
INT26: MOV B,#100
INT27: DJNZ B,INT27
POP B
RET
根据其读时序编写的读数据子程序如下:
READ2: NOP ;仍以P0.2口连接单总线器件为例,读一个字节的数据
PUSH B
MOV B,#8
RE21:
PUSH B
CLR P0.2 ;主机将总线拉至低电平开始读时序,至少持续1μs
MOV B,#4
NOP
NOP
NOP
SETB P0.2 ;主机将总线拉到高电平,准备对总线上数据的采样
RE22:
DJNZ B,RE22
MOV C,P0.2 ;主机采样
RRC A
MOV B,#27
RE23:
DJNZ B,RE23 ;延迟一段时间以满足读时序最短持续期限60μs
SETB P0.2
MOV B,#10
RE24:
DJNZ B,RE24 ;读时序时两位数据之间的间隔最少为1μs
POP B
DJNZ B,RE21 ;循环8次,接收完一个字节的数据之后,返回
POP B
SER B P0.2
RET
根据其写时序编写的写数据子程序如下:
WRITE2: NOP ;仍以P0.2口连接单总线器件为例,写一个字节的数据
PUSH B
MOV B,#8
WRI21: PUSH B
SETB P0.2
MOV B,#9 ;主机将总线从高电平拉至低电平开始写时序
RRC A
CLR P0.2 ;低电平至少持续15μs
WRI22: DJNZ B,WRI22
MOV P0.2,C
MOV B,#20
WRI23: DJNZ B,WRI23 ;将数据“0”或“1”放到总线上,持续时间最少为45μs
SETB P0.2
MOV B,#10 ;写时序时两位数据之间的间隔最少为1μs
WRI24: DJNZ B,WRI24
POP B
DJNZ B,WRI21 ;循环8次,写完一个字节的数据之后,返回
POP B
SETB P0.2
RET
3.2.2 单总线系统中 ROM 搜索算法的研究与实现
在单总线系统中,当有多路多个单总线器件都并联在信号线上时,意味着这些单总线器件必须能够分别在合适的时间驱动该总线,而实现分时驱动和控制的前提是主机能够区分出各个不同的从者,即主机能够获取各器件的 64 位 ROM。若要对某一个从属器件进行操作(存储器操作),主机必须首先发送该器件 64 位 ROM 序列码到总线上,这时总线上所有的从属器件均会收到此序列,但只有具有同样 ROM 序列的从属器件才进行响应,而且此后的所有操作都是针对该器件的,直到下一个复位脉冲到来。在本系统的开发过程中,即以二叉树的理论为基础,研究得出一种对单总线器件 ROM 的搜索方法,并用单片机的汇编语言得以实现。
ROM 搜索过程是简单三步过程的重复[9]P12:读一位,读该位的补码,写所需要的那一位的值。总线主机将在 ROM 的每一位上完成这一简单的三步过程。在全部过程完成以后,总线主机便知道一个器件中 ROM 的内容。
完整的搜索过程开始于总线主机发出复位脉冲以启动初始化序列,所有的从属器件将对该指令作出反应,即向主机送回存在脉冲,然后总线主机在单线总线上发出搜索ROM 的命令字节。收到该指令后,所有的从属器件通过把它们各自 ROM 数据的第一位放到单线总线上来作出响应。由单总线的特性决定,当所有从属器件同时响应时,最后的结果为所有位的逻辑与,由此得到一位数据,然后总线主机读另一位。因为搜索ROM 命令正在执行,所以单线总线上所有器件通过把它们各自 ROM 数据第一位的补码放到单线总线上来对第二个读作出响应。总线上逻辑与之后便得到第二位数据。对两次读的四种可能情况,其具体含义如下:
00 有器件连接,参与搜索的 ROM 相应位既有 0 又有 1。
01 有器件连接,参与搜索的 ROM 相应位均为 0。
10 有器件连接,参与搜索的 ROM 相应位均为 1。
11 没有器件与单线总线相连。
对于第二、第三种情况,表示所有从属器件的 ROM 数据在该位上是相同的,那么总线主机分别写 0、写 1 之后便可进入下一个简单三步过程。对于第一种情况,表示从属器件的 ROM 数据在该位上有冲突,搜索过程在该位置出现了分支,那么总线主机必须通过写 0 或者写 1 的操作将在该位上冲突的从属器件区分开来,即选择一个分支以保证能够继续下一个简单三步过程,而该点的另一个分支必须保证在以后的某个完整的搜索过程中能够得到遍历。
用二叉树的数据结构对 ROM 搜索的建模[11] P62~P64可表述如下:
现假设单总线上挂接 8 个单总线器件,则其相应的二叉树结构中有 1 个根节点、8个终端结点,结点层数均为 65,从每个终端结点到根节点的路径长度为 64,与搜索到的每个单总线器件 64 位 ROM 地址码相对应。根据二叉树结构的性质:若终端结点数为 8,则度为 2 的结点数为 8-1=7,这里表示在这 7 个结点上同时出现了左子树和右子树,其他结点则只有左子树或右子树,或没有子树(终端结点)。约定左子树写 0,右子树写 1,那么从根节点分别到 8 个终端结点的遍历就可得到 8 个单总线器件的 ROM地址码。
3.3 湿度传感器选择及外围电路设计
3.3.1 湿度传感器 HIH3610
该系统的湿度检测采用了美国 Honeywell 公司生产的相对湿度传感器 HIH3610。HIH3610 的管脚排列如图 3-5,三管脚的外部结构使得其应用起来非常方便。其线性的电压输出可使器件直接与控制器或其它器件相连,驱动电流小使它适合于电池供电,HIH3610 的性能指标如表 3-3 所示,并且厂方单独为每只 HIH3610 提供了标定数据。
图 3-5 HIH3610 的管脚排列图
表 3-3 HIH3610 湿度传感器性能指标
参数 |
指标 |
RH精度 |
±2%RH.,0~100%RH非凝结,25℃(供电电压=VDC) |
RH互换性 |
±5%RH,0~60%RH;±8%@90%RH |
RH线性 |
±0.5%RH典型值 |
RH迟滞 |
±1.2%RH最大量程 |
RH重复性 |
±0.5%RH |
RH反应时间 |
30s, 慢流动的空气中(1/e@25℃) |
RH稳定性 |
±1%RH典型值,50%RH,5年时间内 |
供电电压 |
4~9VDC(传感器在5VDC下标定) |
消耗电流 |
0.2mA,5VDC, 2MA 典型值 9VDC |
3.3.2 单总线数字湿度传感器外围电路设计
由于系统中采用的 HIH3610 湿度传感器,其输出量仍然是模拟电压量,因此在本系统的设计过程中为了实现全数字化的单总线网络,使用 DALLAS 公司单总线器件 DS2438配合 HIH3610 设计一种单总线湿度传感器,使之可以直接挂接到单总线上。
由本章第二节的内容可知,挂在单总线上的器件必须满足以下几方面的要求[12] P21~P24:
⑴低功耗:单总线网络中的器件一般是从总线上窃取电源,不用本地电源供电,因此要求单总线器件必须满足低功耗的特性。
⑵具有唯一的身份码:单总线是通过身份码来识别挂在同一总线上的不同器件的,因此要求每个单总线器件均具有全球唯一的 64 位 ROM 识别码。
⑶必须满足单总线器件的时序要求。
Dallas 公司生产的 DS2438 满足上述要求,利用 DS2438 的 A/D 转换功能,设计出的单总线数字湿度传感器的原理图如图 3-6 所示。
图 3-6 单总线湿度传感器原理图
DS2438 是 Dallas 公司推出的智能电池监视器[13,14]。该器件是为了解决便携式电子产品电池工作状态的实时监测而推出的,主要性能特点如下:
①单总线器件,仅需 1 根口线实现电源及双向数据传输;
②片内 13 位精度温度传感器,最小分辨率 0.03125℃;
③片内 10 位二通道电压 A/D 转换器,最小分辨率为 10mV;
④片内 10 位电流 A/D 转换器;
⑤片内 40 字节非易失性用户存储器;
⑥单电源工作,低功耗特性;
⑦工作温度范围为-40℃~+80℃。
DS2438 采用 SOIC 表面贴装封装形式,其外形及引脚排列如图 3-7 所示。
图 3-7 DS2438 的外形及管脚排列图
DS2438 的内部结构如图 3-8 所示,主要由单总线接口、电压 A/D 转换器、电流 A/D转换器、温度传感器、时钟电路、40 字节的 EEPROM 及与上述硬件相关的寄存器组成。其中的电压 A/D 转换器的输入,可编程为由 VDD 电源端输入或 VAD 输入端输入,以满足VDD 电源端及外部输入模拟量 VAD 的测量要求。
图 3-8 DS2438 的内部结构
DS2438 的存储空间有 8 页,页地址为 00~07H,每页 8 个字节,共 64 个字节,每一页都有对应的高速暂存页,因此存储器包括 RAM 高速暂存器和 SRAM/EEPROM(掉电保护)两部分,这两部分是镜像关系。
单总线器件 DS2438 具有和 DS18B20 相同的供电方式——寄生电源与外部电源供电方式,其 CRC 校验字节的产生使用与 DS18B20 相同的多项式函数,主单片机对它的操作同样要遵循 3.2.1 部分叙述的严格的命令序列与读写时序。其中初始化部分及 ROM 操作命令字节都相同,不同的是由于 DS2438 内部存储器的数目较多,因此对它进行存储器访问命令时,其字节分别变成温度转换命令(44h)、电压转换命令(B4h)、写暂存存储器(4Ehxxh)、读暂存存储器(BEhxxh)、复制暂存存储器(48hxxh)和重调数据(B8hxxh)。
4 温湿度数据采集器与 RS232/RS485 转换器
本章首先介绍了温湿度数据采集器的硬件结构与程序设计流程,然后描述了RS232/RS485 转换电路的硬件设计与软件设计。
4.1 数据采集器的结构与电路设计
本系统中,温湿度数据采集器主要完成以下一系列的工作:接收上位机通过 RS485总线下传的命令,这些命令包括:通信通道校验命令,搜索底层单总线传感器件序列码命令,启动传感器进行温、湿度数据转换命令,上传采集到的温湿度数据命令。所有的命令都需要采集器返回应答信号,以表明采集器的工作状态。采集器把上位机下传的命令通过单总线下传给温、湿度传感器,然后通过单总线接收传感器的温、湿度数据。
采集器结构框图如图 4-1 所示。其原理图见附录 1。
图 4-1 数据采集系统框图
由图 4-1 及附录可以看出,数据采集器以单片机为核心,外围主要包括以下几个单元电路:单总线接口电路;采集器地址选择开关电路;光隔离的 RS485 总线接口电路;单总线器件地址存储电路;供电电路。下面分别介绍上述每个单元电路的功能及特点。
4.1.1 单总线接口电路
根据单总线标准:单总线的作用距离一般可达 200 米,并允许挂接上百个单总线器件。本系统设计为每条单总线最多可接入 4 个单总线器件。数据采集器中单片机 AT89C52 P0 口的 8 条口线均作为单总线接口,这样每个采集器可接入 4×8=32 个单总线器件,为了防止传感器在现场受到干扰脉冲,连接到 P0 口的每条单总线均有二极管钳位。单总线接口电路如图 4-2 所示,其中的 D1~D16 均采用硅整流二极管 IN4002,R10 为 8×4.7KΩ。
图 4-2 单总线接口电路
4.1.2 采集器地址选择开关电路
图 4-3 采集器地址选择开关电路
本系统中可接入多个数据采集器,为了保证主机能够分别与各个采集器进行通信,必须为每个采集器设置一个地址,而且每个采集器的地址编码在系统中都是唯一的。这个地址是通过采集器中 AT89C52 的 P2 口接入地址码开关设置的,采集器初始化时会读入该地址并保存在 RAM 中。地址选择开关电路如图 4-3 所示,管脚接地表示 0,管脚悬空表示 1,其中给 P2 口外接的上拉电阻 R11 为 8×10 KΩ。
4.1.3 RS485 总线接口电路
各个采集器能够连接到 RS485 总线网络上的前提是采集器上 RS485 总线接口电路的实现。
该数据采集系统中使用的 RS485 总线驱动芯片为 SN75176[15] P28~P30。该芯片是德州仪器公司专门为多点、总线式双向数据通讯设计的单片集成电路,满足 EIA-485-A 美国标准,其主要性能包括:接收器和驱动器的三态输出;独立的接收器和驱动器使能端;接收器输入灵敏度为±200mV;低功耗且只用单一+5V 电源。
图 4-4 RS485 总线接口电路
SN75176 与主单片机 AT89C52 的连接如图 4-4 所示。其中,AT89C52 的串口输出与SN75176 的发送输入端相连,它的串口输入与 SN75176 的接收输出端相连。AT89C52 的写控制信号与 SN75176 的发送使能端相连,低电平有效时完成发送数据,此时需要软件实现将 AT89C52 的写控制信号线拉至低电平。将 SN75176 的接收使能端直接接地,表示主单片机 AT89C52 始终处在可接收数据的状态。系统中考虑到来自 RS485 平衡传输线上的有效信号中有可能引入雷击、感应电等干扰信号,在 AT89C52 和 SN75176 之间采用了高速光偶 6N136,具体电路图见附录 1。
4.1.4 供电电路
系统中各数据采集器统一由+24V 电源供电,如图 4-5 所示,每个采集器中均使用了两个+24V/+5V 的 DC/DC,输出分别为 VCC 和 VCC1,其中一路供单片机和连接到该采集器上的温湿度结点,另一路供 RS485 总线通信口;另一方面在单片机与 RS485 总线通信口之间用高速光偶 6N136 隔离。采用这种双隔离的供电方式,可有效的提高系统对恶劣环境的适应能力。
图 4-5 供电电路
4.2 数据采集器的软件设计
数据采集器中主单片机 AT89C52[16]的系统资源分配如下:
定时器/计数器 1:工作在 8 位自动重装载的定时器方式,用作波特率发生器,不允许产生中断。
串行口:串行口波特率为 2.4Kbps,外部晶振 11.0592MHz,置波特率发生器初值为TH1=TL1=0F4H。
单片机的主程序流程图如下:
图 4-6 主程序流程图(第一部分)
图 4-6 主程序流程图(第二部分)
4.2.1 数据采集器中单总线器件的预处理
为了便于主机上层应用程序对各采集器连接的单总线器件的访问,在将单总线器件挂接到单总线网络之前,有必要对单总线器件进行预处理——即对 DS18B20 和 DS2438编写其在它所属采集器中的序号,这个序号是主机上层应用程序对某一采集器所属器件进行区分的依据。该序号占用两个字节的空间,其中第一个字节用来区分器件是DS18B20还是 DS2438,为 DS18B20 分配该字节的值为 00H,为 DS2438 分配的该字节的值为 80H。第二个字节作为每一个器件分配的序号。
为每个单总线器件编写序号的方式是:将一个单总线器件挂接到并且是作为唯一的一个单总线器件挂接到单片机的某个口线,这样在通过软件将分配给该器件的序号写入相应的存储器单元时,可以省略对器件 64 位 ROM 地址码的搜索操作。以对某 DS18B20编写序号为例(为方便调用前述子程序,这里将 DS18B20 挂接到 P0.2 口),其子程序实现如下:
CODING: NOP
LCALL INT2
MOV A,#0CCh ;发送跳过ROM命令
LCALL WRITE2
MOV A,#4Eh
LCALL WEITE2 ;发送写暂存存储器命令
MOV A,SNUMBL ;SNUMBL中为序号地位字节
LCALL WRITE2
MOV A,SNUMBH ;SNUMBH中为序号高位字节
LCALL WRITE2
LCALL DL1 ;调用延时子程序DL1,为写暂存存储器预留充分的时间
LCALL DL1
LCALL INT2
MOV A,#48h ;发送复制暂存存储器命令
LCALL WRITE2
MOV B,#1Fh
WROM1: LCALL DL1 ;调用多次延时子程序DL1,为复制暂存存储器预留充分的
DJNZ B,WROM1 ;时间
LCALL INT2
RET
4.2.2 数据采集系统中对单总线器件的访问
由图 4-6 可见,数据采集器的主单片机 AT89C52 对连接到该采集器上的单总线器件涉及到的访问方式有 64 位 ROM 序列码的搜索和采集温湿度数据。以下分别介绍系统中实现这两种访问的软件流程[4]P12~P13,P17。
其中主单片机对单总线器件 DS18B20 和 DS2438 进行 64位 ROM 序列码的搜索流程如图 4-7 所示,其算法依据见 3.2.2 节。系统中实现序列码搜索的子程序名为 GET_ADDR,每一次数据采集器上电复位或者主机发送进行序列码搜索的命令包时,主单片机调用该子程序。该流程图实现的是对某一口线上连接单总线器件的序列码搜索操作,主要可以分为三部分:搜索得到该口线所连接所有器件的序列码,并依次存储到单片机 60H~7FH存储单元,每个器件的序列码占 8 个字节;然后依次对该存储区域内 60H 单元开始每 8个字节进行 CRC 校验,校验正确的直接进入下一组 8 字节序列码的校验,否则将这 8 个字节的首单元数据置为 00H;4 个器件的序列码全部校验完之后,将这 32 个字节的数据存储到 AT24C04 中为该口线分配的空间。GET_ADDR 子程序中为每一口线都实现了以上三部分操作。
主单片机获得某一口线所连接单总线器件的温度、湿度数据的程序流程如图 4-8 所示,其中在采集温度数据的子程序中(如图 4-8(A)所示)发送快速搜索命令字节(CCH)的目的是要求所有连接到该口线的单总线器件均响应接下来的存储器操作类命令——温度转换(44H)。当要读回某温度传感器的数据时,在发送完匹配 ROM 命令之后,需要把该器件的 64 位序列码放到该口线上,之后该温度传感器获得与主单片机进行通信的权利,在主单片机发送完读 RAM 命令之后,该传感器即把 9 个字节的数据按照低位字节在前、低位比特在前的次序依次串行传送给主单片机。
图 4-7 地址搜索程序流程图
图 4-8 采集温湿度数据流程图
图4-8(A)获得温度数据子程序流程图
主单片机为单总线器件传送回来的温湿度数据保留的存储空间为 80H~FFH,共 128个存储单元,其中为每一个传感器分配 4 个字节的存储空间。主单片机读回温度数据时,对每一个 DS18B20 的 9 字节数据先暂存在 30H~38H 单元,校验正确之后,将其中的第0,1 字节的温度数据存储到为其分配 4 字节空间的后两个字节,将其中的第 2,3 字节的编号信息存储到 4 字节空间的前两个字节。单片机读回湿度数据时,对每一个 DS2438的第 0 页数据及其 CRC 校验共 9 个字节的信息先暂存到 40H~48H 单元,校验正确后,再读该 DS2438 的第 7 页的第 0 个字节,即该 DS2438 的编号信息并将其存储到 47H 单元,然后将 40H~48H 中的第 3,4 字节表示湿度的数字电压值存储到为其分配 4 字节空间的后两个字节,并在 4 字节空间的第 1 个字节直接写 80H,把 47H 单元的编号信息存储到第 2 个字节。
4.3 RS232/RS485 转换器
RS232 作为美国电子工业协会(EIA)正式公布的一种串行总线标准,用来实现计算机与计算机、计算机与外设之间的数据通讯,在异步串行通信中得到了广泛的应用。但是该标准规定驱动器允许有 2500pF 的电容负载,通信距离将受此电容的限制,另外RS232 属于单端信号传送,存在共地噪声和不能抑制的共模干扰。因此 RS232 在通讯中所暴露的缺点为传输距离短,其最大的传输距离为 15 米。
本系统中实现对各数据采集器进行统一管理与处理的主机,只有两个 RS232 串行接口,即 COM1 和 COM22,要实现主机与各个采集器构成的 RS485 总线网络的正常通信,需要一个性能可靠的 RS232 至 RS485 转换接口。该转换接口的核心器件采用的是Winbond 公司的 W77E58。
4.3.1 W77E58
W77E58[17]P2~P56是台湾华邦公司生产的与 MCS51 系列单片机兼容的可多次编程的快速微处理器,在它内部集成有 32K 的可重复编程的 FLASH ROM、256 字节的片内存储器、1K 的用 MOVX 指令访问的 SRAM、可编程的看门狗定时器、3 个 16 位定时器、2 个增强型的全双工串行口、片内 RC 振荡器、双 16 位数据指针等诸多功能。
W77E58 是一个非常难得的、功能强大的微处理器产品,尤其特别适合于对存储器资源有一定要求和对软件运行速度有特别要求的场合。由于它与国内目前使用最广泛的 8051 系列产品兼容,用户使用时不必重新花时间其学习其指令系统,前期也不必在开发仿真装置上重新投资,就可利用原有开发仿真装置对其大部分功能进行直接仿真开发,有些功能进行间接开发,比如对 W77E58的第二串口,可先利用第一串口进行调试,最后将程序移植即可。在对其新增功能进行软件开发设计时,只需在汇编软件的 REG52.INC 中加入新增特殊功能寄存器的定义,就可利用原汇编调试软件对为 W77E58 写的软件进行调试。因此,W77E58 的出现给系统的开发设计提供了更广阔的应用前景。
4.3.2 RS232/RS485 转换器的实现
RS232/RS485 转换器的结构框图如图 4-9 所示。原理图见附录 2。
由图 4-9 可以看出,RS232/RS485 转换器[18]由单片机 W77E58、与 RS485 总线网络的
通信接口电路以及与 RS232 串口标准的通信接口电路[19]三部分组成。单片机 W77E58 主要完成信息的接收与发送(包括来自主机的控制信息和采集器的数据信息),利用W77E58的两个增强型全双工串口使其充当了一个信息中转站的角色。
图 4-9 RS232/RS485 转换电路结构框图
W77E58 的串口 0 与主机的 RS232 串口进行通信,中间由 ICL232 完成 TTL 电平和RS232 电平的转换。W77E58 串口 0 的发送端与主机 RS232 串口的接受端相连,它的接受端与主机 RS232 串口的发送端相连。
W77E58 的串口 1 与由各个数据采集器构成的 RS485 总线网络进行通信,这里使用的 RS485 总线驱动芯片仍然是 SN75176,考虑到来自 RS485 平衡传输线上的有效信号中有可能引入雷击、感应电等干扰信号,在 W77E58 和 SN75176 之间采用了高速光偶 6N136。
由附录 2 的原理图,可见该转换器上的供电电路仍为双隔离形式。
单片机 W77E58[18]P58~P63的系统资源分配如下:
定时器/计数器 1:工作在 8 位自动重装载的定时器方式,用作串口 1 的波特率发生器,不允许产生中断。
串行口 1:串行口 1 的波特率为 2.4Kbps,外部晶振 11.0592MHz,置波特率发生器初值为 TH1=TL1=0F4H。
定时器/计数器 2:工作在波特率发生器方式,用作串口 0 的波特率发生器,不允许产生中断。
串行口 0:串行口 0 的波特率为 2.4Kbps,外部晶振 11.0592MHz,置波特率发生器初值为 TH2=0FFH,TL2=70H。
单片机 W77E58 以中断的方式(通过中断处理程序实现)接收来自主机和各个采集器的数据信息,发送数据部分以非中断方式而被包含在主程序段中。串口 0 的中断处理程序,接收来自主机的数据信息,串口 1 的中断处理程序,接收来自 RS485 总线上(各个采集器)的数据信息。以串口 1 的中断为例,具体实现如下:
SCC1: NOP
JB TI_1,SCC11 ;若是由发送数据引起的中断则直接返回不进入处理
JNB RI_1,SCC11 ;程序
CLR RI_1
PUSH A
MOV A,SBUF1
MOV R0,POIN1
MOV @R0,A ;将接收到的字节型的数据存储到指定空间内
INC R0
MOV A,R0
ANL A,#5FH
ORL A,#50H
MOV POIN1,A
POP A
SCC11: RETI
主程序段实现的功能是将串口0接收到的数据经串口1发送出去,将串口1接收到的数据经串口0发送出去。程序中为了实现该操作,为串口0和串口1分别分配了一个循环型的存储区域(40H~4FH)和(50H~5FH),每个存储区域设定两个指针POIN0(POIN1)和TIME0(TIME1),其中一个指针(POIN0、POIN1)用来记录当前接收到的字节在存储区域内的地址,另外一个指针(TIME0、TIME1)用来记录当前发送出去的字节在存储区域内的地址。初始化时每个串口包含的这两个指针是重合的。在中断处理程序中每接收到一个字节时,对应串口的指针POIN0或POIN1增加1。在主程序段中,通过比较TIME0(TIME1)和POIN0(POIN1)两指针是否重合来判定循环存储区域内的有效数据的发送。如果两指针未能重合则表示仍然存在未发送的数据,这时发送一个字节数据的同时将指针TIME0、
TIME1增加1,然后进入下一次的判定,直到把所有未发送出去的有效数据发送完毕为止,此时两指针又一次重合在一起。其程序流程如图4-10所示。
图4-10 W77E58主程序流程图
5 Delphi 与用户管理软件
本章首先简要描述了该温度、湿度监测与报警系统用户管理软件的开发工具Delphi,然后介绍了保证主机上的 Delphi 与 RS232/RS485 转换器进行正常通信的基础控件 SPComm,最后通过示例的方式介绍了该用户管理软件可实现的各种功能。
5.1 Delphi 简介
Delphi[20,22]是 Borland 公司开发的可视化软件开发系统。Delphi 系列软件的工作平台相当广泛,可以工作于Windows 98、Windows NT、Windows 2000 以及Windows XP 下,编程所用的语言为结构化程度相当高的 Object Pascal 语言。
Delphi 是第一个综合了可视化开发环境、优化的源代码编译器和可伸缩的数据库访问引擎的 Windows 开发工具。用过 Delphi 系列软件的程序员一定都会觉得 ObjectPascal 语言具有高度清晰的结构,高效率的优化系统,是一种简单易学,但又不乏其作为优秀编程语言的特点。同时,由于 Delphi 采用了内置高速的优化编译器,使得程序的编译、链接速度快的惊人。Delphi 的编译器采用了事件编译和选择链接技术,使生成的可执行文件冗余更少,运行起来速度更快。随着 Windows 平台的不断升级,Delphi 也完成了自己从 1.0 到 7.0 的阶梯迈进。Delphi 的每次更新,都给程序员们带来了巨大的惊喜。
5.2 Delphi 与 RS232/RS485 转换器的通信
主机与 RS232/RS485 转换器的通信是通过微型计算机的串口进行的。各数据采集器将采集到的温湿度数据进行初步处理之后,经过 RS232/RS485 转换器再由计算机的串行口送给计算机,通信方式为 RS232。
5.2.1 SPComm 通信控件
本系统中即采用第三方控件 SPComm 实现主机与 RS232/RS485 转换器的通信[22,23]。由于 SPComm 只是一个 PAS 文件,而不是一个组件包,因此它并不依赖于 Delphi 的具体版本,通用性强,程序的可移植性好。
(1) SPComm 的属性
CommName:表示 COM1、COM2 等串行口的名字,在打开串行口之前,必须填写好此值。系统中确定用哪个串口进行通信,就要在此属性进行相应的选择。
BaudRate:根据实际需要设定的波特率,在串行口打开之后也可以更改此值,实际波特率随之更改。系统中设定此值为 2400。
ParityCheck:表示是否需要奇偶校验。本系统中设定不需要奇偶校验。
ByteSize:字节长度,可根据实际情况设定为 5、6、7、8,表示一个字节中使用
多少个数据位收发数据。本系统中设定为 8。
Parity:奇偶校验位。
StopBits:表示一个字节中,使用停止位的位数。本系统中设定为 1。
SendDataEmpty:这是一个布尔型属性,当它为 True 时表示发送缓存为空,或者发送队列没有信息,为 False 时表示发送缓存不为空,或者发送队列里有信息。
(2) SPComm 的方法
StartComm:用来打开串口,开始通信。
StopComm:用来停止串行口的所有进程,没有返回值。
WriteCommData:该方法是个带有布尔型返回值的函数,用于将一个字符串发送到写进程,发送成功返回 True,发送失败返回 False。执行此函数将立即得到返回值,发送操作随后执行。本系统中每发送一个字节调用一次该方法。
5.2.2 通信协议
为了保证主机与各数据采集器之间通信的可靠进行,系统中制定了严格的通信协议。协议中规定所有由主机发出的命令包以 55H 为字头,占据一个字节的空间,所有由采集器回送的数据包或者响应包以 AAH 为字头,占据一个字节的空间。
(1) 搜索地址命令
该命令实现的功能是主机命令各个采集器进行 64 位 ROM 地址码的搜索,然后分别存入各自的 EEPROMAT24C04 中。
(2) 温度与湿度转换命令
该命令实现的功能是主机命令各个数据采集器所连接单总线网络上的温度与湿度传感器进行温度、湿度的转换,并将转换后的温湿度数据存储到采集器上主单片机AT89C52 的内部 RAM。
(3) 温度与湿度数据传送命令
该命令实现的功能是主机命令某采集器上传温湿度数据,
(4)通道检验命令
该命令实现的功能是主机检测与各个采集器的信道是否通畅,其格式为
55H 地址 A4H CRC
其中 A4H 为通道检验操作的命令字节。该命令中的地址(占据一个字节的空间)表示某采集器的地址,主机发送该命令包到 RS485 总线上,总线上的各采集器会查询其中的地址信息是否与自己的地址相符,地址相符的采集器会回送响应包,其格式为
AAH 地址 CRC
主机若收到该采集器回送的响应包,即表示它与该采集器之间的信道是通畅的。
5.3 用户管理软件
该系统的主机用户管理软件是用 Delphi 7.0 开发完成的。由于 Delphi 的图形界面丰富美观、控件集成度好、数据库功能强大、开发周期短、效率高,因此比较适合于此管理软件的开发。
该管理软件主要完成两方面的任务:一方面是与各采集器的主单片机 AT89C52 进行通信,以获取各个采集器的温度、湿度测量数据;另一方面将获取的温湿度测量数据以图形化的方式显示出来,以供用户查看,并且提供异常情况报警和历史情况查询及打印功能。
5.3.1 监测数据的显示与处理
采集器中每个测试点的温湿度数据能够实时的显示在界面上,并且是显示在每个测试点在该采集区域内的实际位置,画面直观,一目了然。其中左侧上半部分用来选择显示哪一个采集区域,右侧空白区域可根据需要显示各种相关信息,比如当前所指温湿度传感器的数值,当前所指温湿度传感器的报警上下限等。
点击界面下侧区域内的按钮可进入相应的窗口进行各种参数的设定:其中温度限值设定和湿度限值设定用来对每一个温度、湿度传感器的报警上下限值进行设定。采样时间可用来设定温湿度传感器采集数据的时间间隔,示例如图 5-1,为了满足各传感器采集数据的时序要求以及各采集器传送数据的时间要求,该时间间隔有一个最小值,任何小于该值的设定都将被拒绝。记录时间用来设定每次将数据存储到数据库的时间间隔,示例如图 5-2,同样该时间间隔也有一个最小值,任何小于该值的设定都将被拒绝。报警按钮提供手动实现报警状态的开启与关闭,若当前正处在报警开启状态,且某个或某些测试点的值落在相应的报警上下限之外,则报警器会发出报警信号提示用户,同时这些测试点会以不同于其处在正常数值范围内的形式显示在该界面上,用来告知用户它们的具体位置,以便做下一步的处理。记录查询按钮可进入查询历史数据的窗口。显示数据刷新按钮可手动获得当前时刻的温湿度测量数据。停止按钮用来开启或关闭所有数据的采集与记录。
图 5-1 采样时间间隔设定窗口示例
图 5-2 记录时间间隔设定窗口示例
5.3.2 历史数据查询
对于该温度、湿度监测与报警系统的用户,他们不仅关心当前各测试点的温度、湿度数据,过去某一时刻的数据或某一时间段内数据变化的趋势走向对于分析用户应用环境及存在的隐患有着十分重要的意义。Delphi 提供的强大的数据库引擎 BDE 组件、数据访问组件以及数据控制组件等数据库类的资源使得在用户管理软件中,通过建立相关的数据库来记录某些时刻的温湿度数据,用户便可以方便快捷的进行历史数据的查询。Delphi 提供的标准的图形显示控件使得历史数据趋势曲线的动态生成成为可能,在动态生成的曲线图中,用户可以直观清楚的看到各测试点温湿度数据随时间变化的情况。
同样的,对于报警测试点的信息,在用户管理软件中同样建立了相关的数据库以供查询与分析,设计方式与显示形式与上述历史数据相类似。
总结与展望
本文从理论设计和实际制作出发,对温度、湿度监测与报警系统展开分析和研究。在传统的温度、湿度监测与报警系统的基础上,从三个方面入手加以改进,设计出计算机控制的温度、湿度监测与报警系统。
(1)单总线数字化器件构成的传感器网络
系统中采用新型的单总线数字温度传感器 DS18B20,利用原有的模拟湿度传感器HIH3610 和单总线器件 DS2438 设计并实现的单总线数字湿度传感器,避免了模拟传感器带来的共地干扰和线路干扰问题。由它们构成的单总线传感器网络线缆少,从而大大减少了现场线缆,简化了系统布线的复杂度,系统可能发生故障的环节少,便于维护,提高了系统测量的准确程度和智能化程度,并在一定程度上降低了系统成本。
(2)各数据采集模块构成的 RS485 现场总线网络
系统中采用 RS485 现场总线将各采集器采集到的温湿度数据传送回主机,并对传输数据进行 CRC-64 校验,是数据在得以远距离传输的同时,保持了较强的抗干扰性。
(3)Delphi 设计主机用户管理软件
系统采用 Delphi 设计主机用户管理软件,界面直观,操作简单,并具有历史数据、报警信息的查询与打印功能,数据库功能强大,开发周期短,效率高,与采用 VC 等编程语言进行设计相比,大大缩短了软件的开发周期。
实践证明,该温度、湿度监测与报警系统的设计方法是可行的,工作稳定,成本也低于同类其它产品,并且系统的扩展与升级也很方便。
在硬件方面,由于大规模集成电路技术的发展,高速数字处理芯片 DSP 和可编程逻辑器件 CPLD 的应用越来越广泛,用它们来设计应用数字电路,可以取代大量分离的数字芯片。不仅开发周期短,外围电路简洁,而且如果批量生产成本也会更低。
在软件方面,该系统中用 Delphi 设计出来的用户管理软件,针对每个不同的应用对象都要重新设计或修改程序。目前在工业自动化领域流行的组态软件为用户建立全新的过程测控系统提供了一整套解决方案,它是集动画显示、流程控制、数据采集、设备输出与控制、网络数据传输、工程报表、数据与曲线等诸多强大功能于一身,并支持国内外众多数据采集与输出设备的软件工具。更重要的是它可以适用于一大类应用对象,对于不同的应用对象,只需改变数据实体(控制回路文件、图形文件、报表文件等),这样便能大大提高系统的成套速度。
致 谢
本论文是在袁海林老师的悉心指导和严格要求下完成的,在此论文完成之际,向袁海林老师致以深深的谢意与感激。
感谢信息工程学院的各位老师,本人取得的点滴成绩无不渗透着他们的辛苦劳动。特别要感谢陈世强、杨兴忠、高发桂、张华老师,他们广博的知识、谦逊的态度、诲人不倦和勇于探索创新的开拓精神给我留下了深刻印象,为我树立了永远的学习榜样。
感谢602寝室的同学在论文整理中所给予的帮助。
最后向所有曾给予作者帮助、支持和鼓励的老师、同学以及朋友、家人们表示最忠心的感谢。
参考文献
[1]林其斌.实用多点测温系统及其在粮仓温度监测中的应用[J].安徽农业大学学报,2000,3:285~287.
[2]张培仁,周延萍,马云,孙占辉,陈真勇.一种基于单总线和 CAN 总线大型温度报警系统[J].微计算机信息,2003,2:25~27.
[3]李文磊,牛斗,张玉霞.分布式温度巡检系统的设计与实现[J].吉林电力技术,1999,3:18~21.
[4]DALLAS SEMICONDUCTOR.DS18B20 Programmable Resolution 1-Wire Digital Thermometer.
http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf, 2003-10-20.
[5]李会如.实时监控系统中的数据通信校验及其实现方法[J].邮电设计技术,1998,11:15~19.
[6]张绪锦,韩江洪.单片机上软件实现循环冗余校验的方法[J].微计算机信息,1999,3:55~57.
[7]刘鸣,陈兴梧,赵煜.单总线技术及其应用[J].仪表技术与传感器,2002,1:40~42.
[8]陈志英,李光辉.单总线(1-Wire Bus)技术及其应用[J].国外电子元器件,2003,8:4~7.
[9]TARGETECH CORPORATION. DS1820 单总线数字温度计.
http://www.targetech.net/download/DS1820.pdf,2003-09-06.
[11]高芳,陆原,武壮.二叉树用于单总线技术中的 ROM 搜索[J].
无线电通信技术,2005,2:62~64.
[12]李敏,孟臣.基于一线总线的温湿度传感器设计[J].传感器世界,2003,4:21~24.
[13]DALLAS SEMICONDUCTOR.DS2438 智能电池监视器.
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2919/ln/cn,2004-02-09
[14]李敏,孟臣.DS2438 及其在单总线微网中的应用[J].单片机与嵌入式系统应用,2004,1:51~54.
[15]陈莉萍.SN75176 在微机多点通信中的应用[J].国外电子元器件,1997,2:28~30.
[16]余永权.ATMEL89 系列(MCS-51 兼容)Flash 单片机原理及应用[M].北京:电子工业出版社,1997
[17]WINBOND ELECTRONICS CORPORATION. W77E58 8-BIT MICROCONTROLLER.
http://www.winbond.com/S-WINBONDHTM/partner/PDFResult.asp?Pname=297,2002-11-21
[18]刘慧文,苏建徽.基于 W77E58 双串口通信的监控系统[J].单片机与嵌入式系统应用,2003,11:27~29.
[19]方建淳,夏东培.ICL232 单电源双 RS232 发送/接收器及其应用[M].
单片机应用技术选编(3):466~470.
[20]Steve Teixeira ,Xavier Pacheco. Delphi5 Developer’s Guide[M].
Macmillan Computer Publishing U.S.A,2000.7
[21] Paul Kimmel.Building Delphi 6 Applications[M].
McGraw-Hill Publishing Companies U.S.A,2001
[22]毛建东,高宗海,李大成.Delphi 环境下单片机与 PC 机串口通信的一种实现方法[J].现代电子技术,2004,2:37~42.
[23]黄军,熊勇,刘燕,刘晓梅.Delphi 串口通信编程[M].北京:人民邮电出版社,2001.
附录1 温湿度采集电路原理图
附录2 通信通路电路原理图
独创性声明
本人声明所呈交的论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文(设计)不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到,本声明的法律结果由本人承担。
学位论文作者签名:
日期: 年 月 日
学位论文(设计)版权使用授权书
本论文(设计)作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文(设计)被查阅和借阅。本人授权湖北民族学院可以将本论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本论文(设计)。
本论文属于
保密□ ,在_____年解密后适用本授权书。
不保密□。
(请在以上方框内打“√”)
学位论文作者签名: 指导教师签名:
日期: 年 月 日 日期: 年 月 日