《无线数据采集系统的设计》研究报告.doc

上传人:管** 文档编号:850546 上传时间:2023-09-15 格式:DOC 页数:18 大小:1.07MB
下载 相关 举报
《无线数据采集系统的设计》研究报告.doc_第1页
第1页 / 共18页
《无线数据采集系统的设计》研究报告.doc_第2页
第2页 / 共18页
《无线数据采集系统的设计》研究报告.doc_第3页
第3页 / 共18页
《无线数据采集系统的设计》研究报告.doc_第4页
第4页 / 共18页
《无线数据采集系统的设计》研究报告.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、摘要数据采集是一项在生产、生活和科研中都会要经常进行的工作,而在一些环境、地形复杂的领域,由于有线的数据采集和传输受到了很大程度的限制,所以无线数据采集和传输就成为了人们必须要解决的一个问题。本项目的无线数据采集系统由温度数据采集模块、无线数据收发模块和PC端软件智能控制系统三个部分组成。可将多个测量点实测的温度数据通过无线数据收发模块发送给主节点,再由主节点通过串口通信将数据上传PC端的智能控制软件,软件系统会根据人工的设定进行温度的智能控制。整个系统通过无线的方式进行数据收发,无需布线,不仅方便、成本低,而且解决了有线网络架设难度大的问题。一、绪论 数据采集(Data Acquisitio

2、n)是获取信息的基本手段。数据采集技术作为信息科学的一个重要分支,是以传感器、信号测量与处理、微型计算机等技术为基础而形成的-f综合应用技术。数据采集系统是利用计算机、通信、测控等技术采集、记录和显示现场的各种物理参量,以供管理人员和现场操作者参考的系统;是现代测控系统的基础,用于获取各种现场测量数据。远程数据采集系统,与传统的数据采集系统相比,具有不受地理环境、气候、时间的影响等优势。而借助无线传输手段的远程数据采集系统,更具有工程造价和人力资源成本低,传输数据不受地域的影响,可靠性高,免维护等优点。通信、计算机等技术的飞速发展,特别是远程传输手段的多元化和技术水平的提高,使远程数据采集技术

3、有了广泛的应用。近年来,随着科学技术的飞速发展,尤其是通信技术、计算机技术和传感器技术的发展,特别是在传感器在信息技术领域内的广泛应用,从传感器和其它待测设备等模拟和数字被测单元中采集到的非电量或者电量信号怎样送到上位机中进行分析和处理就成为了一个难题。传统的有线传输方式的优点在于传输的质量比较可靠,实时性比较好,但是为数据采集而架设有线网络的一次性投资较大,而且遇到一些环境、地形复杂的地方将很难架设线路。而无线数据采集系统既具有有线方式的效率高,实时性好、成本低的优点,同时安装方便、可维护性好、易实现网络化管理。所以,无线数据采集和传输就成了一个亟待解决的问题,并且它也代表着工业控制及现场监

4、测等领域的一个发展方向。二、系统硬件设计2.1总体设计框图整个无线数据采集系统主要分为三个模块,温度采集模块、无线数据收发模块和PC端智能控制系统模块。图2-1 总体设计框图接收端主节点通过串口与PC相连,将从发送端收集到的温度数据送给智能控制系统,通过方便的人机交互界面人工手动控制或者PC智能控制。图2-2 接收端框图2.2系统硬件设计2.2.1温度采集模块 温度采集模块在其测量电路中采用Dallas公司生产的1一Wire总线数字温度传感器DSl8B20。DSl8B20采用3引脚TO一92小体积封装形式:温度测量范围为-55125,可编程控制器(PLC)的AD转换准确度为912位测温分辨力可

5、达0.0625被测温度以带符号扩展的16位数字量方式串行输出。系统采用从端脚引入工作电源的方式。2.2.2数据收发模块本项目使用的NRF9E5无线收发芯片是真正的系统级无线射频收发芯片,内嵌高性能的8051MCU,4通道12位ADC。内置NRF905收发器,包括了所有NRF905芯片特性,可以工作在Shockburst模式下(自动处理前缀,地址和CRC),最大程度的抑制了噪声,工作电压范围为1.9V-3.6V。NRF9E5符合FCC标准和ETSIEN300 220-1标准。图2-3 NRF9E5应用原理图2.2.3串口通信本系统中采用RS-232-C。主要用来进行CC2430与电脑的通信。 R

6、S-232-C:也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标 准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标准”。 由于电脑的串口电平规范与单片机的电平规范不同,因而需要外加电平转换芯片。电路如图所示:图2-4 串口通信电路三、系统软件设计3.1下位机软件设计下位机软件设计涉及到温度的测量、封装及编码,数据命令报送协议的编写及上位机与下位机的通信。温度的测量采用DS18B20温度传感器。传感器将温度量转化成电压值,利用内部12

7、位AD采集传感器电压,根据相关公式换算成温度值。发送温度数据时将温度数据封装成节点代号加温度值的格式发送,温度值为十进制数值。连接建立后,协调器就可以允许其他的设备与自己建立连接。在本工程中终端节点作为网络协调器,传感节点作为从设备。终端节点采用轮询机制依次向传感节点发送命令,传感节点在没有收到命令时处于休眠状态收到命令后根据相关命令做出响应。数据命令报送协议包括要求传感节点发送温度数据命令、指定节点加热或制冷命令及温度数据等。命令发送时采用接收节点代号加相应命令代号组成。代号所代表的意义自定义。图3-1 终端节点程序流程图图3-2 传感节点程序流程图3.2上位机软件设计本项目的上位机软件是由

8、Visual C+语言来编写的串口通信测序,我们在这里用Visual C+6.0版本来编写串口测序。编写串口测序可以使用VC6.0的MSComm控件,也可以直接使用Windows API函数进行编写,考虑到编程的方便简单,我们通过使用多线程串口编程工具CSerialPort类进行串口编程。编程的工作流程如下:首先设置好串口参数,再开启串口监测工作线程,串口监测工具线程监测到串口接收到的数据、流控制事件或其他串口事件后,就以消息方式通知主测序,激发消息处理函数来进行数据处理,这是对接收数据而言的;发送数据则可以直接向串口发送。3.2.1建立程序框架在VC6.0集成开发环境中,新建基于对话框的MF

9、C AppWizard(exe)应用程序,所有步骤保持默认,然后在对话框中添加控件。3.2.2添加类文件将类文件SeriaPort.h 和 SerialPort.cpp复制到工程所在的文件夹中,然后再把类文件加入工程中即可。3.2.3通过ScerailPort类完成串口操作1,在头文件SerialPortTestDlg.h中添加函数说明2,然后在SerialPortTestDlg.cpp文件中进行WM_COMM_RXCHAR消息映射3,接着,在SerialPortTestDlg.cpp文件中加入函数OnComm的实现3.2.4主要函数1,串口初始化函数InitPort这个函数是用来初始化串口的

10、,即设置串口的通信参数;需要打开的串口号、波特率、奇偶校验方式、数据位、停止位,这里还可以用来进行事件的设定。如果串口初始化成功,就返回TURE,若串口被其他设备占用、不存在或存在其他故障就返回FALSE。2,启动串口通信监测线程函数StartMonitoring串口初始化成功后,就可以调用BOOL StartMonitoring()来启动串口监测线程。线程启动成功,返回TURE。3,暂停或停止监测线程函数StartMonitoring该函数暂停或停止串口监测,但是调用该函数后,串口仍然被占用。4,关闭串口函数ClosePort该函数的功能是关闭串口,释放串口资源。调用该函数后,如果要继续使用

11、串口,还需要调用InitPort函数。5,通过串口发送字符、写串口函数WriteToPort该函数完成写串口功能,即向串口发送字符。完成以上步骤后,我们将进行程序的编译和调试,如果发现有错误,则按照错误提示的位置进行修改,直到编译没有错误为止。 软件界面如图所示图3-3 无线数据采集系统软件界面3.2.5软件操作流程框图图3-4 软件操作流程图四、实物照片五、总结到目前为止,我们已经基本完成了系统所有的设计和调试工作,按照预期实现了无线数据采集系统的功能。在这个过程这,从开始的查阅资料,整理信息,比较和筛选方案,到确定方案以后的具体硬件电路的设计和软件程序的编写,以及后期的调试,这里面遇到了不

12、少的困难。通过向指导老师请教,和同学之间的讨论交流,还有通过学习图书馆的书籍和网络上查找的相关资料、文章,不断的克服困难。我们锻炼了自己解决实际问题的能力,也增强了自己与人交流的能力和团队协作力,最重要的是让我们的动手能力得到了质的提升,并且增强了我们的创新意识。虽然我们基本完成了项目的基本功能,但是不管硬件电路和软件程序都还有很多需要完善的地方,在后期我们也将继续弥补这些缺陷。附件:1,上位机程序 2,无线模块控制程序附件一:SerialPort多线程类代码:#ifndef _SERIALPORT_H_#define _SERIALPORT_H_#define WM_COMM_BREAK_D

13、ETECTEDWM_USER+1/ A break was detected on input.#define WM_COMM_CTS_DETECTEDWM_USER+2/ The CTS (clear-to-send) signal changed state. #define WM_COMM_DSR_DETECTEDWM_USER+3/ The DSR (data-set-ready) signal changed state. #define WM_COMM_ERR_DETECTEDWM_USER+4/ A line-status error occurred. Line-status

14、errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. #define WM_COMM_RING_DETECTEDWM_USER+5/ A ring indicator was detected. #define WM_COMM_RLSD_DETECTEDWM_USER+6/ The RLSD (receive-line-signal-detect) signal changed state. #define WM_COMM_RXCHARWM_USER+7/ A character was received and placed in the inp

15、ut buffer. #define WM_COMM_RXFLAG_DETECTEDWM_USER+8/ The event character was received and placed in the input buffer. #define WM_COMM_TXEMPTY_DETECTEDWM_USER+9/ The last character in the output buffer was sent. class CSerialPort public:int m_nWriteSize;void ClosePort();/ contruction and destructionC

16、SerialPort();virtualCSerialPort();/ port initialisationBOOLInitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = N, UINT databits = 8, UINT stopbits = 1, DWORD dwCommEvents = EV_RXCHAR, UINT writebuffersize = 1024);HANDLEm_hComm;/ start/stop comm watchingBOOLStartMonitoring();

17、BOOLRestartMonitoring();BOOLStopMonitoring();DWORDGetWriteBufferSize();DWORDGetCommEvents();DCBGetDCB();voidWriteToPort(char* string);voidWriteToPort(char* string,int n);voidWriteToPort(LPCTSTR string);voidWriteToPort(LPCTSTR string,int n);protected:/ protected memberfunctionsvoidProcessErrorMessage

18、(char* ErrorText);static UINTCommThread(LPVOID pParam);static voidReceiveChar(CSerialPort* port, COMSTAT comstat);static voidWriteChar(CSerialPort* port);/ threadCWinThread*m_Thread;/ synchronisation objectsCRITICAL_SECTIONm_csCommunicationSync;BOOLm_bThreadAlive;/ handlesHANDLEm_hWriteEvent;HANDLEm

19、_hShutdownEvent;/ Event array. / One element is used for each event. There are two event handles for each port./ A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent). HANDLEm_hEventArray3;OVERLAPPEDm_ov;COMMTIMEOUTSm_CommTimeouts;DCBm_dcb;/ owner win

20、dowCWnd*m_pOwner;/ miscUINTm_nPortNr;char*m_szWriteBuffer;DWORDm_dwCommEvents;DWORDm_nWriteBufferSize;#endif _SERIALPORT_H_SerialPortTest类代码:#if !defined(AFX_SERIALPORTTEST_H_556B3D04_5375_11D8_870F_00E04C3F78CA_INCLUDED_)#define AFX_SERIALPORTTEST_H_556B3D04_5375_11D8_870F_00E04C3F78CA_INCLUDED_#if

21、 _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include resource.h/ main symbols/ CSerialPortTestApp:/ See SerialPortTest.cpp for the implementation of this class/class CSerialPortTestApp : public CWinApppublic:CSeria

22、lPortTestApp();/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CSerialPortTestApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL/ Implementation/AFX_MSG(CSerialPortTestApp)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in thes

23、e blocks of generated code !/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_SERIALPORTTEST_H_556B3D04_5375_11D8_870F_00E04C3F78CA_INCLUDED_)附件二:#include #define HFREQ 0 #define POWE

24、R 3 bit rx_rqst;char rcv_data;unsigned int syn_count;unsigned char SpiReadWrite(unsigned char b) EXIF &= 0x20; SPI_DATA = b; while(EXIF & 0x20) = 0x00) ; return SPI_DATA;SpiWrite(unsigned char b)while(EXIF & 0x20) = 0x00) ; EXIF &= 0x20; SPI_DATA = b; void PutChar(char c) while(!TI) ;TI = 0; SBUF =

25、c;void PutString(const char *s) while(*s != 0) PutChar(*s+);void Init(void) unsigned char tmp;/SPI 设置 SPICLK = 0; SPI_CTRL = 0x02; / Configure Radio: RACSN = 0; SpiReadWrite(WRC | 0x03); SpiReadWrite(0x01); SpiReadWrite(0x01); RACSN = 1; RACSN = 0; SpiReadWrite(RRC | 0x01); tmp = SpiReadWrite(0) & 0

26、xf1; RACSN = 1; RACSN = 0; SpiReadWrite(WRC | 0x01); SpiReadWrite(tmp | (POWER 2) | (HFREQ 1); RACSN = 1; RACSN = 0; SpiReadWrite(RRC | 0x09); tmp = SpiReadWrite(0) | 0x04; RACSN = 1; RACSN = 0; SpiReadWrite(WRC | 0x09); SpiReadWrite(tmp); RACSN = 1;void uart_init(void) TH1 = 0xE6; CKCON |= 0x30; PC

27、ON = 0x80; SCON = 0x52; TMOD = 0x20; TR1 = 1; P0_ALT = 0x06; P0_DIR = 0xA2; void Transmitstring()TRX_CE = 0;RACSN = 0;SpiWrite(WTP);SpiWrite(0x23);RACSN = 1;TRX_CE = 1;void DR_ISR(void) interrupt 10 EXIF = EXIF & 0xBF; RACSN = 0; SpiReadWrite(RRP);rcv_data = SpiReadWrite(0); RACSN = 1;if (rcv_data = 0x23)rx_rqst=1;P04 = P04;void main(void) Init();uart_init();EX4 = 1;PX4 = 1;EA = 1;PutString(hello world!n); while(1)syn_count+;if (syn_count=32000)TXEN = 1;if (syn_count=32767)Transmitstring();P03 = P03;syn_count=0;TXEN = 0;if (rx_rqst=1)rx_rqst=0;PutChar(rcv_data);

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 研究报告

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922