论文部分内容阅读
摘要:本文介绍了用于液化汽储罐计算机远程多点温度采集系统的设计过程、方法以及该系统的硬件构成。下位机的软件设计是在硬件设计的基础上,根据系统结构划分功能模块,进行主程序和各模块程序的设计。上位机用VC++6.0编写了相应的通信及控制程序。由PC机和8031组成的远程控制和数据采集系统,控制简便、灵活,人机界面友好,进行大量的数据传输及数据处理极为方便。
关键词:远程;温度采集系统;PC机;8031单片机;串行通信
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 11-0000-03
温度是液化汽储罐的一个重要参数,所以要进行多点测量,为实现对温度的控制提供数据。系统检测温度范围为0~50℃,分辨率≤0.2℃。在数据采集系统中,常利用PC机串行口通过串行通信,实现远程数据采集。这一问题可以通过微机与下位机的串行通信来解决。远程多点温度数据采集系统以8031单片机为下位机进行现场四点温度数据采集,并实现采集数据向PC机的串行传输。PC机通过串行通信向下位机发布数据传送命令,完成数据处理、存储、显示及历史查询。
一、系统的硬件构成
Win环境下远程多点温度数据采集系统框图如图1所示。系统的硬件构成主要由两大部分组成:一是8031单片机作为下位机所控制的现场数据采集电路,负责采样温度数据;另一是PC机与8031单片机的远程通信电路。
(一)8031单片机数据采集系统
本設计的温度检测范围属于低温,采用集成温度传感器AD590,其工作温度范围为-55~150℃。它能把温度信号转换为与温度成比例的电流信号, 再通过OP07对电流作加法运算,在运放输出端可得到合适的电压信号,作为A/D转换器的输入。
A/D转换器的种类很多,本设计选用8位通用型ADC0809。ADC0809输出8位二进制数,片内有三态输出锁存器,因此与8位机的连接比较简便。
将A/D转换器作为8031的一个扩展I/O口,用高位地址线P2.7(结合或)选通芯片。模拟输入通道地址的译码输入信号A、B、C,由低位地址线P0.0~P0.2经锁存器后提供。这样输入通道IN0~IN7的口地址为7FF8H~7FFFFH,而本设计只要求进行4点温度数据采集,只用输入通道IN0~IN3。
由于只对4路模拟信号进行数据采集,故选择常用的8031作为下位机。片外程序存储器选用2732A EPROM,容量为4K×8位,留有相当余量。
8031的端固定接地。P0口通过锁存器74LS373向 EPROM提供低8位地址,同时复用作为数据线。和是访问外部程序存储器的两个控制信号。2732A的数据线接8031的P0口。12根地址线中,低8位接锁存器输出端,高4位接8031的P2口。输出允许端与8031的相连。因只有一片EPROM,其片选端可以不接高位地址线而固定接地。
8031单片机与PC机之间的通信为了减少送线、降低成本,采用串行通信方式。若将PC机与8031的RS-232C串行口直接相连,双方收发最大距离为15m。而在实际应用中,最大距离远大于此值。为此,采用了一个RS-232C到RS-422方式的转换装置,使PC机与8031间接相连,以RS-422A方式进行通信,这样可大大增加传送距离。
RS-422A标准是一种以平衡方式传输的标准,可双端发送、双端接收。发送端和接收端分别采用平衡发送及差动接收。通过前者把逻辑电平变成电位差,完成终端信息接收。并且RS-422A采用双线传输,大大提高了抗干扰能力。最大传输速率可达10Mbit/s(传输距离15m时),传输速率降至90 Mbit/s时,最大传输距离可达1200 m,这能充分满足系统“远程”的要求。
MC1489是RS-232C串行通信接收器,它把计算机串行TXD发出的232C电平转换为TTL电平,供MC3487驱动传输。MC1488是RS-232C串行通信发送器,它把MC3486接收的电平,送到计算机串行接收RXD。这样接入该转换器后,PC机与8031变成了差分传输,只需D+、D-两根双绞线就能提高传输距离,并消除了共地电势的影响。
(二)硬件合成
把以上各单元组合起来,得到完整的硬件系统,如图2所示。
二、8031单片机程序的编制
8031单片机作为PC机的下位机,一方面要定时完成现场温度数据的采集、更新;另一方面,要能接收上位机定时发出的“准备发送数据”命令,产生中断,实现与PC机的串行通信。所以,8031单片机的程序主要由串行通信程序和数据采集程序组成。
(一)串行通信程序的编制
8031的主程序主要完成系统的初始化,包括定时器、串行口、中断系统的初始化,然后等待中断。中断有上位机发出的“准备发送数据:命令而产生的串行口中断,还有自己定时启动A/D转换器的定时中断,优先级以串行口中断为高优先级。主程序流程图如图3所示。
1.串行口初始化。串行通信方式选方式1。方式1为波特率可变的8位异步通信方式,由TXD发送,RXD接收。一帧数据为10位:1位起始(低电平)、8位数据位(低位在前)和1位停止位(高电平)。波特率取决于定时器T1的溢出率(1/溢出周期)和波特率选择位SMOD。
用定时器T1作波特率发生器时,通常选用定时器工作方式2(8位重装定时初值),但要禁止T1中断(ET1=0),以免T1溢出时产生不必要的中断。设TH1和TL1的初值为N,那么
2-1
从而得到定时器T1工作在方式2时的初值为:
2-2
在波特率的设置中,SMOD位数值的选择影响着波特率的准确度。本设计中,波特率=2400b/s,fosc=6MHZ,这时SMOD位可以选0或1。由于对SMOD位数值的不同选择,所产生的波特率误差是不同的。
·选择SMOD=1时: 2-3
按此值可算出T1实际产生的波特率及误差为:
2-4
2-5
·选择SMOD=0时:
2-6
按此值可算出T1实际产生的波特率及误差为:
从式2-5、2-8分析计算说明:SMOD值虽可任意选择,但在某些情况下它会影响波特率的误差,因此选SMOD=1。
2.定时器的初始化。鉴于温度的变化比较缓慢,使T0定时器每0.1秒对INO~IN3采样一次,即采样周期设为0.1秒。
选用定时器T0方式1,时钟频率fosc=6MHZ,0.1S定时所需要的计数初值为:
2-9
则TH0初值为3CH,TL0初值为0B0H。
3.下位机串行通信中断服务程序的编制。当下位机接到上位机定时发出的“准备发送数据”命令后,产生串行中断,将最新采集的四个通道温度数据发至上位机,然后将数据缓冲区清空,准备统计新的数据。串行通信中断服务程序流程图如图4所示。
(二)数据采集程序的编制
定时器T0以0.1S的采样周期对IN0~IN3分别进行温度检测、数据滤波和标度变换,然后存入30H~33H数据缓冲区,进行数据更新。定时中断服务程序流程图如图5所示。
1.温度检测子程序的编制。温度检测程序的功能是对通道进行连续4次A/D转换,再进行数据滤波,求取转换结果的平均值,存入片内RAM50H单元。A/D转换采用查询方式。温度检测子程序流程图如图6所示。
2.标度变换子程序的编制。生产现场的温度有其实际的数据和量纲,但计算机检测时只能接受一种标准电压(如0~5V)信号,经A/D转换成二进制数字信号,送入计算机内存中。至于怎样才能显示出其工程量的大小,这就要靠标度变换来完成。
本设计AD509为线性仪表,量程为0~50℃,用8位A/D转换器,满量程转换的二进制数为250。现采样数为Y,因此用工程量表示的参数为:
标度变换子程序的流程图如图7所示。
(三)应用程序占用资源情况
占用内部RAM及SFR情况:
30H~33H——数据缓冲区 50H——温度检测值存放单元
60H~7FH——堆栈 A、B、R0、R2、R6、DPTR——工作寄存器
T0——采样周期定时器,中断方式 T1——波特率发生
I/O口使用情况:
P0口——数据/地址总线
P2.0~P2.3——外部程序存储器地址总线 P2.7——A/D转换器地址线
三、 PC机通信程序
PC机通信程序采用VC++6.0编写。调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文中采用API方式,很容易实现Win环境下PC机与8031的串行通信
VC++6.0具有强大的界面编辑功能,是一种完全面向对象的编程语言,用它实现的人机界面直观友好、易操作易实现,PC机程序主界面如图8所示。
使用VC++6.0建立了温度记录的数据库,制作了有“实况”、“录像”和“报警信息”等图标按钮的用户界面,并编写了相应事件的驱动代码。
PC机串行口各参数的设置如波特率、数据格式等,必须与8031串行口完全一致,否则两者之间的通信无法正常进行。
四、结束语
本文用PC机与8031单片机组成简单的多机系统,通过串行通信实现了远程数据采集功能,电路简单,成本低廉,测量精度可达到1级。在某储运公司液化汽罐区投用三年多来,性能稳定、运行可靠,界面友好,操作简单,维护工作量很小。系统只占用PC机的一个串口,占用资源少,对硬件要求不高,各模块在不同的场合可灵活应用。
如果该数据采集系统与DCS连接,可作为该温度调节系统的测量、变送部分。另外在传感器和調理电路等部分稍作改动,则可轻而易举地实现计算机多参数数据采集系统的设计。
参考文献
[1]杨云龙.单片机原理及应用.陕西:西安电子科技出版社,1996
[2]王福瑞.单片机测控系统设计大全.北京:北京航空航天出版社,1998
[3]邬宽明.单片机外围器件实用手册.数据传输接口器件分册.北京:北京航空航天出版社,1999
关键词:远程;温度采集系统;PC机;8031单片机;串行通信
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 11-0000-03
温度是液化汽储罐的一个重要参数,所以要进行多点测量,为实现对温度的控制提供数据。系统检测温度范围为0~50℃,分辨率≤0.2℃。在数据采集系统中,常利用PC机串行口通过串行通信,实现远程数据采集。这一问题可以通过微机与下位机的串行通信来解决。远程多点温度数据采集系统以8031单片机为下位机进行现场四点温度数据采集,并实现采集数据向PC机的串行传输。PC机通过串行通信向下位机发布数据传送命令,完成数据处理、存储、显示及历史查询。
一、系统的硬件构成
Win环境下远程多点温度数据采集系统框图如图1所示。系统的硬件构成主要由两大部分组成:一是8031单片机作为下位机所控制的现场数据采集电路,负责采样温度数据;另一是PC机与8031单片机的远程通信电路。
(一)8031单片机数据采集系统
本設计的温度检测范围属于低温,采用集成温度传感器AD590,其工作温度范围为-55~150℃。它能把温度信号转换为与温度成比例的电流信号, 再通过OP07对电流作加法运算,在运放输出端可得到合适的电压信号,作为A/D转换器的输入。
A/D转换器的种类很多,本设计选用8位通用型ADC0809。ADC0809输出8位二进制数,片内有三态输出锁存器,因此与8位机的连接比较简便。
将A/D转换器作为8031的一个扩展I/O口,用高位地址线P2.7(结合或)选通芯片。模拟输入通道地址的译码输入信号A、B、C,由低位地址线P0.0~P0.2经锁存器后提供。这样输入通道IN0~IN7的口地址为7FF8H~7FFFFH,而本设计只要求进行4点温度数据采集,只用输入通道IN0~IN3。
由于只对4路模拟信号进行数据采集,故选择常用的8031作为下位机。片外程序存储器选用2732A EPROM,容量为4K×8位,留有相当余量。
8031的端固定接地。P0口通过锁存器74LS373向 EPROM提供低8位地址,同时复用作为数据线。和是访问外部程序存储器的两个控制信号。2732A的数据线接8031的P0口。12根地址线中,低8位接锁存器输出端,高4位接8031的P2口。输出允许端与8031的相连。因只有一片EPROM,其片选端可以不接高位地址线而固定接地。
8031单片机与PC机之间的通信为了减少送线、降低成本,采用串行通信方式。若将PC机与8031的RS-232C串行口直接相连,双方收发最大距离为15m。而在实际应用中,最大距离远大于此值。为此,采用了一个RS-232C到RS-422方式的转换装置,使PC机与8031间接相连,以RS-422A方式进行通信,这样可大大增加传送距离。
RS-422A标准是一种以平衡方式传输的标准,可双端发送、双端接收。发送端和接收端分别采用平衡发送及差动接收。通过前者把逻辑电平变成电位差,完成终端信息接收。并且RS-422A采用双线传输,大大提高了抗干扰能力。最大传输速率可达10Mbit/s(传输距离15m时),传输速率降至90 Mbit/s时,最大传输距离可达1200 m,这能充分满足系统“远程”的要求。
MC1489是RS-232C串行通信接收器,它把计算机串行TXD发出的232C电平转换为TTL电平,供MC3487驱动传输。MC1488是RS-232C串行通信发送器,它把MC3486接收的电平,送到计算机串行接收RXD。这样接入该转换器后,PC机与8031变成了差分传输,只需D+、D-两根双绞线就能提高传输距离,并消除了共地电势的影响。
(二)硬件合成
把以上各单元组合起来,得到完整的硬件系统,如图2所示。
二、8031单片机程序的编制
8031单片机作为PC机的下位机,一方面要定时完成现场温度数据的采集、更新;另一方面,要能接收上位机定时发出的“准备发送数据”命令,产生中断,实现与PC机的串行通信。所以,8031单片机的程序主要由串行通信程序和数据采集程序组成。
(一)串行通信程序的编制
8031的主程序主要完成系统的初始化,包括定时器、串行口、中断系统的初始化,然后等待中断。中断有上位机发出的“准备发送数据:命令而产生的串行口中断,还有自己定时启动A/D转换器的定时中断,优先级以串行口中断为高优先级。主程序流程图如图3所示。
1.串行口初始化。串行通信方式选方式1。方式1为波特率可变的8位异步通信方式,由TXD发送,RXD接收。一帧数据为10位:1位起始(低电平)、8位数据位(低位在前)和1位停止位(高电平)。波特率取决于定时器T1的溢出率(1/溢出周期)和波特率选择位SMOD。
用定时器T1作波特率发生器时,通常选用定时器工作方式2(8位重装定时初值),但要禁止T1中断(ET1=0),以免T1溢出时产生不必要的中断。设TH1和TL1的初值为N,那么
2-1
从而得到定时器T1工作在方式2时的初值为:
2-2
在波特率的设置中,SMOD位数值的选择影响着波特率的准确度。本设计中,波特率=2400b/s,fosc=6MHZ,这时SMOD位可以选0或1。由于对SMOD位数值的不同选择,所产生的波特率误差是不同的。
·选择SMOD=1时: 2-3
按此值可算出T1实际产生的波特率及误差为:
2-4
2-5
·选择SMOD=0时:
2-6
按此值可算出T1实际产生的波特率及误差为:
从式2-5、2-8分析计算说明:SMOD值虽可任意选择,但在某些情况下它会影响波特率的误差,因此选SMOD=1。
2.定时器的初始化。鉴于温度的变化比较缓慢,使T0定时器每0.1秒对INO~IN3采样一次,即采样周期设为0.1秒。
选用定时器T0方式1,时钟频率fosc=6MHZ,0.1S定时所需要的计数初值为:
2-9
则TH0初值为3CH,TL0初值为0B0H。
3.下位机串行通信中断服务程序的编制。当下位机接到上位机定时发出的“准备发送数据”命令后,产生串行中断,将最新采集的四个通道温度数据发至上位机,然后将数据缓冲区清空,准备统计新的数据。串行通信中断服务程序流程图如图4所示。
(二)数据采集程序的编制
定时器T0以0.1S的采样周期对IN0~IN3分别进行温度检测、数据滤波和标度变换,然后存入30H~33H数据缓冲区,进行数据更新。定时中断服务程序流程图如图5所示。
1.温度检测子程序的编制。温度检测程序的功能是对通道进行连续4次A/D转换,再进行数据滤波,求取转换结果的平均值,存入片内RAM50H单元。A/D转换采用查询方式。温度检测子程序流程图如图6所示。
2.标度变换子程序的编制。生产现场的温度有其实际的数据和量纲,但计算机检测时只能接受一种标准电压(如0~5V)信号,经A/D转换成二进制数字信号,送入计算机内存中。至于怎样才能显示出其工程量的大小,这就要靠标度变换来完成。
本设计AD509为线性仪表,量程为0~50℃,用8位A/D转换器,满量程转换的二进制数为250。现采样数为Y,因此用工程量表示的参数为:
标度变换子程序的流程图如图7所示。
(三)应用程序占用资源情况
占用内部RAM及SFR情况:
30H~33H——数据缓冲区 50H——温度检测值存放单元
60H~7FH——堆栈 A、B、R0、R2、R6、DPTR——工作寄存器
T0——采样周期定时器,中断方式 T1——波特率发生
I/O口使用情况:
P0口——数据/地址总线
P2.0~P2.3——外部程序存储器地址总线 P2.7——A/D转换器地址线
三、 PC机通信程序
PC机通信程序采用VC++6.0编写。调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文中采用API方式,很容易实现Win环境下PC机与8031的串行通信
VC++6.0具有强大的界面编辑功能,是一种完全面向对象的编程语言,用它实现的人机界面直观友好、易操作易实现,PC机程序主界面如图8所示。
使用VC++6.0建立了温度记录的数据库,制作了有“实况”、“录像”和“报警信息”等图标按钮的用户界面,并编写了相应事件的驱动代码。
PC机串行口各参数的设置如波特率、数据格式等,必须与8031串行口完全一致,否则两者之间的通信无法正常进行。
四、结束语
本文用PC机与8031单片机组成简单的多机系统,通过串行通信实现了远程数据采集功能,电路简单,成本低廉,测量精度可达到1级。在某储运公司液化汽罐区投用三年多来,性能稳定、运行可靠,界面友好,操作简单,维护工作量很小。系统只占用PC机的一个串口,占用资源少,对硬件要求不高,各模块在不同的场合可灵活应用。
如果该数据采集系统与DCS连接,可作为该温度调节系统的测量、变送部分。另外在传感器和調理电路等部分稍作改动,则可轻而易举地实现计算机多参数数据采集系统的设计。
参考文献
[1]杨云龙.单片机原理及应用.陕西:西安电子科技出版社,1996
[2]王福瑞.单片机测控系统设计大全.北京:北京航空航天出版社,1998
[3]邬宽明.单片机外围器件实用手册.数据传输接口器件分册.北京:北京航空航天出版社,1999