搜档网
当前位置:搜档网 › 基于MATLAB实时串口数据采集与曲线显示

基于MATLAB实时串口数据采集与曲线显示

基于MATLAB实时串口数据采集与曲线显示
基于MATLAB实时串口数据采集与曲线显示

全日制普通本科生毕业设计

基于MATLAB实时串口数据采集与曲线显示REAL-TIME SERIAL DATA ACQUISITION AND FIGURE SHOW

BASED ON MATLAB

学生姓名:

学号:

年级专业及班级:

指导老师及职称:

学院:

提交日期:2011年5月

全日制普通本科生毕业论文(设计)

诚信声明

本人郑重声明:所呈交的本科毕业论文(设计)是本人在指导老师的指导下,进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体在文中均作了明确的说明并表示了谢意。本人完全意识到本声明的法律结果由本人承担。

毕业论文(设计)作者签名:

年月日

目录

摘要 (1)

关键词 (1)

1前言 (2)

1.1 Matlab实时串口数据采集研究现状及发展趋势 (2)

1.2研究的目的和意义 (4)

1.3论文的组织结构 (5)

2Matlab下实时串口数据采集概要 (5)

2.1 Matlab的Serial类 (5)

2.2 数据采集 (6)

2.3曲线显示 (7)

3实时串口数据采集与曲线显示的实现 (8)

3.1实时串口通信的实现 (8)

3.2数据采集的实现 (9)

3.3曲线显示GUI的实现 (10)

4基于MATLAB的实时串口数据采集与曲线显示的具体做法 (12)

4.1数据采集的一般流程 (12)

4.1.1创建接口对象并设置属性 (12)

4.1.2打开串口设备对象 (12)

4.1.3读写串口操作 (13)

4.1.4关闭并清除设备对象 (13)

4.2基于Matlab中断方式的实时串行通信编程 (13)

4.3绘制采集数据的曲线波形和数据显示 (14)

4.3.1绘制曲线波形 (14)

4.3.2数据显示 (15)

4.3.3采集图像 (15)

4.4扩展功能——发送数据 (17)

5结论 (17)

参考文献 (18)

致谢 (19)

附录 (19)

附录1 (20)

基于MATLAB实时串口数据采集与曲线显示

摘要:数据采集是获取信息的基本手段,数据采集技术作为信息科学的一个重要分支,它研究信息数据的采集、存储、处理及控制等作业,具有很强的实用性,与传感器、信号测量与处理、微型计算机等技术为基础而形成的一门综合应用技术。本设计是在Matlab R2008a版本中以串口通信实时接收目标系统数据,将采集的数据进行时间同步和字对齐处理,并在MATLAB的数据采集工具箱支持下,利用图形界面GUI的设计,直观的实时显示数据曲线。设计得重点在于在Matlab 上实现串口数据同步采集与处理,接收数据的时间同步和字对齐,同时扩展了发送数据的功能。

关键词:MATLAB;GUI;实时串口;数据采集;曲线显示;

Real-time Serial Data Acquisition and Figure Show Based on Matlab

Abstract: Data acquisition is the basic means of access to information, this technology as an important branch of information science,research information data collection, storage, treatment and control operations, and highly practical. Data acquisition technology with sensor data acquisition, signal measurement and processing, micro-computers and other technology formed the basis of a comprehensive application technology. This design version use Matlab R2008a serial communication to the target system to receive real-time data, the data will be collected for time synchronization and word alignments, and Matlab’s Data Acquisition Toolbox in support of using the graphical user interface GUI design, intuitive display real-time data curve. Focus designed to achieve the Matlab serial data synchronization acquisition and processing, receive data synchronization and word alignment,expanding the function of sending data.

.Key words:MATLAB; GUI;Real-time serial; Data acquisition; Figure show;

1前言

1.1MATLAB实时串口数据采集研究现状及发展趋势

随着科学技术的发展,数据采集系统得到了越来越广泛得应用,同时人们对数据采集系统的各项技术指标,如:采样率、线性度、精度、输入范围、控制方法以及抗干扰能力等提出了越来越高的要求,特别是精度和采样率更是使用者和设计者所共同

关注的重要问题,于是,高速及超高速数据采集系统应运而生并且得到了快速发展。今天,数据采集技术己经在雷达、水声、振动工程、无损监测、智能仪器、自动控制以及生物工程等众多领域得到广泛的应用并且收到了良好的效果。高速数据采集系统在国防、航天、边缘科学研究中及国民经济的各个领域的成功的应用,进一步引起了各方的关注,推动了它的研制和发展。随着科学技术的发展,数据采集系统得到了越来越广泛的应用。目前,国外很多公司与厂商都投入巨资进行数据采集系统的研制开发与生产销售,其中比较著名的有NEFF,NI、HP,TEK 等。

从数据采集系统产品来看,各大公司提供的系列产品都包括了完成数据采集的诸如信号放大、滤波、多路开关、模数转换和接口等各种模块。现有的高速数据采集器件和开发的产品中,目前还没有完全实现高速、高分辨率。在雷达、通信、谱分析、瞬态分析、等应用领域,为满足实时检测和高速采集的日益更新的需要,实现数据采集的高速、高分辨率已成为数据采集系统的一个发展方向。现有的高速ADC 器件和产品价格都比较昂贵,有些高速、高分辨率的器件本身还存在着不稳定性,因此,在数据采集系统向高速、高分辨率发展的同时,开发和研制的器件和产品应不断地提高可靠性,降低,提高性价比,以便使之得到更广泛的应用。

数据采集与分析一直是生产实践研究与应用领域的一个热点和难点。随着微制造工艺水平的飞速提高及数据分析理论的进一步完善与成熟,目前国内外对数据采集系统的高性能方面的研究上取得了很大的成就。就A/D 转换的精度、速度和通道数来说,采样通道从单通道发展到双通道、多通道,采样频率、分辨率、精度逐步提高,为分析功能的加强提供了前提条件。而在数据分析的微处理器上,最初的数据采集系统以8 位单片机为核心,随着微电子技术的不断发展,新兴单片机的不断问世,十六位、三十二位单片机也为数据采集系统研制厂家所采用,近年来采用具有DSP 功能的数据采集系统也己投入市场。同时,通用PC 机的CPU 用于数据处理也较为常见。总之,伴随着高性能微处理器的采用和用户技术要求的不断提高,数据采集系统的功能也越来越完善。

数据采集系统的发展主要体现在以下几个趋势:

首先,在专业测控方面,基于PC 计算机的数据采集系统越来越成熟和智能化。在过去的二十年中,开放式架构PC 机的处理能力平均每十八个月就增强一倍。为了充分利用处理器速度的发展,现代开放式测量平台结合了高速总线接口,如PCI和PXI/Compact PCI,以便获得性能的进一步提升。计算机的性能提升和由此引起的基于计算机的测量技术的创新,正在持续不断地模糊传统仪器和基于计算机的测量仪器之

间的界线。

其次,在通用测控方面,采用嵌入式微处理器的方案也由早期的采用A/D 器件和标准单片机组成应用系统发展到在单芯片上实现完整的数据采集与分析,即目前极为热门的SOC (System On Chip)。通常在一块芯片上会集成一个,可以采样多路模拟信号的A/D 转换子系统和一个硬CPU 核(比如增强型80_52 内核),而且其CPU 的运算处理速度和性能也较早期的标准CPU 内核提高了数倍,而且有着极低的功耗。这种单芯片解决方案降低了系统的成本和设计的复杂性。

此外,为了解决SOC 方案中数据处理性能的不足,采用DSP 作为数据采集系统的CPU 的研究与应用目前也逐渐引起业内重视。但是这类产品目前仅仅处于发展的初级阶段,在精度、速度或其它性能指标上并不能很好的满足要求。因此,国内外以DSP 作为数据采集系统的采样控制和分析运算的研究与应用正在展开。

近年来随着芯片技术、计算机技术和网络技术的发展,数据采集技术取得了许多新的技术成果,市场上推出了繁多的新产品。高速数据采集技术的发展一方面是提高采集速率,另一方面不断向两端延伸。一端是输入的信号调理,另一端是采集后的数字化信号的实时处理与事后处理。20世纪90年代末,随着数字技术快速发展,数据采集技术已向着并行、高速、大量存储、实时分析处理、集成化等方向发展。

Matlab是Mathworks公司推出的一套高性能数值计算和可视化软件,是目前控制系统数据处理较为实用有效的工具。它不仅能解决测试与控制系统中存在的大量的数值计算和矩阵运算,而且将图像与图形、显示及处理、图形界面设计集于一身。同时,它还提供了强有力的工具箱支持,极大地方便了研究人员的学习与开发。软件开发采用Matlab语言编程,利用Matlab中控制工具箱及仿真工具混合开发的方法,使其编写的程序更精练,软件功能更强大,开发周期更短,软件形式灵活、易于扩展,用户使用起来更容易、更方便。因此,许多工程技术人员把Matlab软件作为数据离线处理的工具。

业内领先的工具箱极大的扩展了Matlab的应用领域,所以Matlab自推出以来就受到广泛的关注,数据采集工具箱就是其中之一。它是为简化和加快数据采集工作而设计的,使用该工具箱更容易将实验测量得到的数据进行分析和可视化操作。利用该数据采集工具箱可以方便地建立数据采集系统。通过建立一个串口接口对象,可以使用Matlab命令直接和外部设备进行通信。

1.2 研究的目的和意义

在近几十年来IC 技术和技术的高速发展,为数据采集与分析提供了非常良好与

可靠的科学技术基础,也提出了更高的要求和强有力的推动。随着现代工业技术的迅猛发展,生产规模的不断壮大,生产过程和制作工艺的日趋复杂,对自动测试和各种信息集成的要求也就越来越高。在当今社会各个领域,包括科研和实验研究,数据采集系统有着不可代替的作用,数据采集和处理进行得越及时,工作效率就越高,取得的经济效益就越大。数据采集系统性能的好坏主要取决于它的精度和速度,在保证精度的条件下,还要尽可能地提高采样速度,以满足实时采集、实时处理和实时控制的要求。

数据采集系统的好坏将直接影响自动测试系统的可靠性和稳定性,为了满足不同的测试需求,以及减少对资源的浪费,在系统的设计上应该尽量满足通用性和可扩展性。在高度发展的当今中,科学技术的突飞猛进和生产过程的高度自动化已成为人所共知的必然趋势,而它们的共同要求是必须建立在有着不断发展与提高的信息工业基础上。人们只有从外界获取大量准确、可靠的信息经过一系列的科学分析、处理、加工与判断,进而认识和掌握自然界与科学技术中的各种现象与其相关的变化规律,并通过相应的系统和方法实现科学实验研究与生产过程的高度自动化。换言之,生产过程的自动化面临的第一个问题就是必须根据从各种传感器得到的数据来检测、监视现场,以保证现场设备的正常工作。所以对现场进行数据采集是重要的前期基础工作,然后再对现场数据进行传输和相应的处理工作,以满足不同的需要。

如果要对大量的实验数据利用Matlab的数据分析处理功能进行处理,则首先要将实验数据转换成Matlab的数据格式,这无疑是一件十分繁杂的任务。若能直接从Matlab 环境下采集实验数据,无疑对与实验分析和数据处理都是有益的。Matlab(Version 7.0)的数据采集箱DAQ (Data Acquisition Toolbox) 为此提供一个实现直接数据采集的平台。利用该工具箱配以适当的数据采集卡不仅可以进行实时数据采集,而且还可以进行实时显示和控制,由此还可以组建成为自动测试分析系统。利用该数据采集工具箱可以方便地建立数据采集系统。

基于MATLAB实时串口数据采集,将采集的数据进行时间同步和字对齐处理,并在Matlab的工具箱支持下实时显示数据曲线,具有重要的意义。

1.3 论文的组织结构

摘要。阐述了此次设计的总思路,利用MATLAB接收目标系统串口通信实时数据,将采集的数据进行时间同步和字对齐处理,并在MATLAB的工具箱支持下实时显示数据曲线。

1.前言。介绍了MATLAB实时串口数据采集的研究现状及发展趋势、研究的目的

和意义,说明了此设计的实用价值。

2.MATLAB实时串口数据采集概要。对此设计中的理论知识进行概述,是设计过程中所需要的理论和条件支撑,以便设计的顺利进行。

3.实时串口数据的采集与曲线显示的实现。大致描述了该设计的设计与实现方法,是设计过程中所需要的实践环节。

4. 基于MATLAB的实时串口数据采集与曲线显示的具体做法。详细的给出了完成此次设计的思路和具体做法。

有了正确的过程,便会得出结论,结论部分即是对此次设计结果的一个说明。本文总的来说是按照从抽象的概念描述到具体实现方法步骤的写作思路来完成的。

2Matlab实时串口数据采集概要

2.1 Matlab的serial类

串行接口(Serial Interface)简称串口,也称串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。串口的出现是在1980年前后,数据传输率是115kbps~230kbps。串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem及老式摄像头和写字板等设备。串口也可以应用于由于两台计算机(或设备)之间的互联及数据传输。

串行接口是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。由于串口(COM)不支持热插拔及传输速率较低目前部分新主板和大部分便携电脑已开始取消该接口,目前串口多用于工控和测量设备以及部分通信设备中。

自Matlab6.0版本起,Mathworks 公司在软件中增加了Instrument Control Toolbox,提供了对串口通信的正式支持。利用该工具箱的serial 及其相关函数,能可靠地进行串行通信。

仪器控制工具箱serial类的主要特点如下:

(1)支持基于GPIB 总线(IEEE-488、HPIB 标准)、VISA 总线、串行接口(RS-232、RS-422、RS-485)的通信标准;

(2)支持二进制和文本(ASCII)两种数据的通信,文本方式支持(standard commands for programmable instruments)语言;

(3)支持异步通信和同步通信;

(4)支持基于事件驱动的通信。

2.2 数据采集

数据(Data)也称观测值,是实验、测量、观察、等的结果,常以数量的形式给出。数据采集(Data Acquisition),又称数据获取,就是将被测对象(外部世界、现场)的各种参量(可以是量,也可以是化学量、生物量等)通过各种传感元件作适当转换后,再经信号调理、采样、量化、编码、传输等步骤,最后把系统需要的所有对象的原始数据收集、归类、整理、录入到系统当中去,是管理系统使用前的一个数据初始化过程。数据采集技术广泛应用在信号检测、信号处理、仪器仪表等领域,比如摄像头,麦克风,都是数据采集工具,随着数字化技术的不断发展,数据采集技术也呈现出速度更高、通道更多、数据量更大的发展态势。

被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。采集一般是采样方式,即隔一定的时间(称采样周期)对同一点数据重复采集。采集的数据大多是瞬时值,也可是某段时间内的一个特征值。准确的数据测量是数据采集的基础。数据测量方法有接触式和非接触式,检测元件多种多样。不论哪种方法和元件,都以不影响被测对象状态和测量为前提,以保证数据的正确性。数据采集含义很广,包括对连续物理量的采集。在计算机辅助制图、测图、设计中,对图形或图像数字化过程也可称为数据采集,此时被采集的是几何量数据。

数据采集系统是一种应用极为广泛的模拟量测量设备,其基本任务是把信号送入计算机或相应的信号处理系统,根据不同的需要进行相应的计算和处理。它将模拟量采集、转换成数字量后,再经过计算机处理得出所需的数据。同时,还可以用计算机将得到的数据进行储存、显示和打印,以实现对某些物理量的监视,其中一部分数据还将被用作生产过程中的反馈控制量。

在数据采集中,一般将待测对象的信号通过传感器和A/D转换器或其它专业测试仪器(如TDS3000系列数字式示波器),把数据传到计算机。编制计算机与测试仪器的接口程序可使用C++ Builder、VB等编程语言。数据采集到计算机后要进行各种处理。如FFT、各种方法的滤波、系统辨识、小波变换等,由于Matlab提供功能强大的各种计算,使用几个简单语句就能实现,因此采用Matlab编程语言非常适合。

Matlab自带的数据采集工具箱DAQ能更容易地将实验测得的数据进行分析和可视化操作,包括了三个模块,其中M-File 函数是Matlab中可直接调用的数据采集命令函数,通过M-file 函数传输数据、参数和命令给数据采集引擎,并可从数据采集引擎中查看数据采集设备对象的状态、参数和抽取数据,所有的实时数据采集任务都通

过这些函数的调用来实现。

数据采集引擎(Data Acquisition Engine) 是Matlab环境下进行实时数据采集的核心。它执行M-flie函数所规定的功能,并监视和控制数据采集设备对象的状态,以及存储和管理所采集的数据。一旦实时数据采集任务启动,它就类似于DOS环境下后台运行的监控程序,所有的数据采集任务就置于它的监控和管理之中。

硬件转接驱动程序(Hardware Driver Adaptors) 建立采集卡驱动软件(driver)与数据采集引擎之间的数据、命令和参数的传输通道,对于不同的板卡,需要不同的驱动程序,可以是动态链接库文件(*.DLL),也可以是Matlab下的共享库文件(*.MEX)。

它提供了以下主要的功能:

1. 以相同的指令操作模拟输入(AI)、模拟输出(AO)、数字输入输出(DIO)和同步模拟输入输出转换各式功能,不会因不同硬件而产生不同的指令。

2. 一个及时数据采集环境, 被测量的数据不需经由转换可直接进入MATLAB 直接进行分析。

3. 支持PC声卡和主要的数据采集卡的厂商, 如:凌华, Agilent, ComputerBoards 和National Instruments。

4. 支持事件驱动(Event-driven)的数据采集。

2.3曲线显示

Matlab具有强大的绘图功能,在Matlab中将采集到的数据实时显示出来,可以使用二维曲线绘图的方法。

Plot函数是Matlab中最常见的绘图函数,可以用来绘制单条或多条曲线,它是针对向量或矩阵的列来绘制曲线的。也就是说使用plot函数之前,必须首先定义好曲线上每一点的X及Y坐标,常用的格式有:

plot(x,y)

以向量x、y为轴,绘制曲线。其中x和y为坐标向量。

plot(x1,y1,x2,y2…)

绘制多条曲线(也可以用矩阵变量plot(x,y))。

plot(x,y1,x,y2,x,y3…)

其功能是以公共向量x为X轴,分别以y1,y2,y3…为Y轴,在同一幅图内绘制出多条曲线。

plot(x1,y1,LineSpec1,x2,y2,LineSpec2…)

将按顺序分别画出由三参数Xi,Yi,LineSpeci定义的线条。其中参数LineSpeci指明

了线条的类型,标记符号,和画线用的颜色。

xlabel (‘frequency (Hz)’);%X轴名称为frequency(Hz)

ylabel (‘magnitude (dB) ’);%Y轴名称为magnitude(dB)

3实时串口数据采集与曲线显示的设计方法

3.1实时串口通信的实现

Matlab7.0支持面向对象技术,用一个对象把计算机串口封装起来。创建串口对象后,对其的操作就是对串口操作,从而实现了对计算机串口操作的简化。因此,使用Matlab7.0平台,通过计算机串口实现对专业测试仪器的控制以及测试数据的实时采集、传输、处理和结果显示。是十分有效的实时数据采集与处理方法之一。

Matlab7.0封装的串口对象支持对串口的异步读写操作,计算机在读写串口时能同时进行其他处理工作,因而使计算机具有极高的执行效率。Matlab7.0用多线程技术实现这种异步操作,通过异步读写设置,计算机在执行读写串口函数时能立即退回,不必等待串口把数据传输完毕。当指定的数据传输结束时就触发事件,执行事件回调函数。可以在事件回调函数中编程,进行数据处理,这样就不会造成因等待串口传输数据引起的机时浪费。

Matlab 串行口对象属性。使用serial 函数创建串口对象后,通过对象句柄操作串口,非常方便。串口对象有很多属性,使用如下的命令可以查看串口所有属性set(s) %s 是serial 创建的COM1 串口对象的标识符

通过定义串口对象的属性,就能定义串口的通信模式,也可以了解串口的状态。几个比较重要的属性如下:

1. 串口名属性

Port 定义系统的串口名称(一般为‘COM1’到‘COM 7’)

2. 串口通信属性

BaudRate 定义传输波特率(缺省9600bps,可设为1200,2400,4800,19200bps 等等)

DataBits 定义数据帧的比特位数(一般为7 或8 位)

Parity 定义校验方式(可取值:none、odd、even、mark、space)

StopBits 定义数据帧停止位位数(一般为1、1.5 或2)

Terminator 定义结束字符(一般为‘LF’)

3. 串口读数据方式

ReadAsyncMode 定义异步读操作为连续或手工方式(continuous-连续方式(缺省),或定义为manual)

3.2数据采集的实现

数据采集工具箱集成于MATLAB中,所以在进行数据采集的同时,可以对采集的数据进行实时分析,或者存储后再进行处理,或者针对数据分析的需要对测试条件的设立进行不断的更新。应用数据采集工具箱提供的命令和函数可以控制任何类型的数据采集。DAQ是由一组M-File文件格式的函数和MEX-File 等动态链接库所组成的, 专门使用在数据采集方面的一组函数库。如图1所示,这些组成部分使得Matlab与数据采集硬件之间的信息传递成为可能。

图1:数据采集引擎与硬件驱动

Fig 1:Data Acquisition Engine and Hardware Driver

将被测物理量通过传感器连接到数据采集卡,通过采集函数命令启动数据采集任务,在数据采集引擎管理下,数据将从采集卡流入数据引擎,临时存储在内存中,以便于数据的重写,数据重写的速度依赖于内存的大小、数据采样的速率和采集通道数。存储在内存中被数据采集引擎管理的数据并不能自动进入Matlab工作空间,为了在Matlab工作空间使用这些数据,必须使用get-data函数从引擎中抽取。被抽取到Matlab 空间的数据,可以用Matlab中其他工具箱的函数进行进一步的分析和处理,也可以直接写入磁盘文件。

利用数据采集工具箱,在Matlab环境下实时数据采集的步骤如图2所示。首先利用命令函数analoginput创建设备对象,并将该设备对象赋予一个Matlab变量,以后对该设备对象的操作就转换为对该变量操作。当设备对象建立后,即可用ad-dchannel命

令给该设备按照需要添加数据采集通道。一旦采集通道添加完成,就可以用set命令为设备对象设置采集参数,不同的采集卡,具有不同的采集特性参数。当采集参数设定后,即可用start命令启动数据采集,这时采集卡的状态就置于数据采集引擎的管理中,数据采集引擎会自动按照设定的参数监管和响应采集卡,并将其所采集的数据输入数据引擎管理的内存区,通过相应的命令可以从Matlab中查看数据采集任务的状态和抽取数据到Matlab工作空间,并可对抽取到Matlab工作空间的数据进行处理分析。当采集到数据满足设定参数时,采集任务即告结束。这时必须利用delete和clear命令清除设备对象,否则,该设备将会一直处于采集引擎的监管之中,再次创建该设备对象时,系统将会报告一个错误。

图2:数据采集命令流程图

Fig 2: Command Flow Chart of Data Acquisition

3.3曲线显示GUI的实现

利用MATLAB软件中GUI模块可以方便地设计出基于对话框的图形用户界面,它提供了诸如编辑框、按钮、滚动条等图形对象,通过对这些图形对象的有机组合,再对相应的图形对象编写程序,就可以设计出界面友好、操作方便的系统软件。在Matlab的命令窗口输入:guide,就可以进入图形用户界面的设计向导,在向导控制面板中,鼠标单击左边用户界面控制对象面板中所需的按钮对象,分别把它们放在图形窗口中,并且可以通过拖动来改变其位置和大小。然后双击各个按钮对象,就可以打开其属性编辑器,拖动属性编辑器右边的滑块,改变各个按钮对象属性,这样就可以设计出对话框的外观。设计效果图如图3所示。

MALTAB的GUI主要有两个文件,当设置好GUIDE时点击保存,这时将在当前路径自动产生两个名字相同的文件,但扩展标识符不同,一个为.fig文件,一个为.m

文件,.fig主要是GUI图形文件,和GUIDE设计的图像相同,.m文件为程序文件,所有事件响应和计算功能都在这里实现。

MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符。在进行对话框设计时,要让对话框实现输入输出功能,就要通过其句柄值调用一些函数文件,而当句柄未知时,可以用标识标签‘Tag’属性和函数findobj确定。其方法是通过给期望的图形对象提供唯一的‘Tag’属性字符串,用findobj函数来查找带了期望的标识标签的句柄。

图3:GUI界面

Fig 3:GUI Interface

MATLAB的按钮以及各种控件事件响应是依靠一种叫做回调函数(Callback Function)来实现的。GUI可以包括两个方面:控件和回调函数(use interface components & callbacks);回调函数间数据的传递,也就是程序结构的问题。Matlab提供了两种方法构造控件:用uicontrol系列的函数,或者用guide直接添加。控件有回调函数callback 属性,这实际上是一个字符串,包括函数名和参数,它应该是可以在workspace里面执行的表达式或者M文件名。

考虑M文件形式的回调函数,因为它需要能够在workspace中执行,那么它的参

数就必须在workspace中存在,它执行的结果也在workspace中。这样所有需要的数据都必须是全局的,甚至比全局还要糟糕,它可能会与workspace中其他程序的数据冲突。matlab提供了一个巧妙的途径:把数据跟图形(.fig文件)联系起来。fig上的控件,是以句柄(handles)的形式存在的,handles=guihandles(fig)可以得到fig的所有句柄。matlab 是把图形的数据也作为fig的句柄保存起来。

4基于MATLAB的实时串口数据采集与曲线显示的具体做法

4.1 数据采集的一般流程

4.1.1 创建接口对象并设置属性

handles.S=serial(com);%创建串口对象

set(handles.S,BaudRate ,9600,StopBits ,1);%设置波特率缺省9600bit/s 和停止位

set(handles.S,Parity ,none,).%设置无奇偶校验

set(handles.S,FlowControl ,none );%无流控制

set(handles.S,DataBits ,8);%设置8位数据位

set(handles.S,InputBufferSize ,receivelen*10);%设置缓冲区大小

设置串口设置对象的属性也可以用一条指令完成,如:

set(handles.S,'COM3','BaudRate',3600,'Parity','none','DataBits',8,'StopBits',1)

创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态,若需要知道其全部的属性,可以用get(s)命令。

有些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,可以不用另行设置。

4.1.2 打开串口设备对象

fopen(handles.s);

4.1.3 读写串口操作

初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口的读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备的命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite。下面以文本方式读写串口为例:

读串口。A=fscanf(s,'%d',[10,100]); %从串口设备对象s中读入10*100个数据填充到数组A[10,100]中,并以整型的数据格式存放。

写串口。Fprintf(s,'%s','RS232','async'); %将字符串‘RS232?’以字符的数据格式写入到串口设备s,写操作以异步的方式进行。

4.1.4 关闭并清除设备对象

fclose(handles.s);%关闭串口设备对象

delete(handles.s); %删除内存中的串口设备对象

clear handles.s; %清除工作空间中的串口设备对象

当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建的串口对象对象清除,以免占用系统资源。

4.2基于Matlab中断方式的实时串行通信编程

在Matlab环境下,读取串口数据的方式可以分为两种—查询和中断。以查询的方式进行串行通信时,如下位单片机有大量的数据分时分批传送给PC机,就需要不停查询串行口的缓冲区,有数据就读取;虽然编程容易,但这样做不能对数据进行实时处理,系统实时性不高,而且会极大地占用系统的资源。以中断的方式对串口进行控制实现串行通信,就可以实时处理下位机传送的数据;但编程相对复杂一些,需要采用Matlab的事件和回调函数机制。

在Matlab环境下以中断的方式进行串行通信,实际上是采用事件驱动的方法实现的。Matlab提供了instrcallback (obj, event)回调函数,用户根据需要可以自行设置具体的串行通信事件。Matlab常用的串行口通信中断事件有:缓冲区有指定字节数目的数据可用事件(bytes-available event)、串口接收到的数据长时间处于非激活状态事件(break-interrupt event)、串行口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)等。当串口上有监视的事件发生时,Matlab会自动调用回调函数进行通信事件的处理。因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。Matlab端实时串行通信的程序流程如图4所示。以下是具体的编程步骤。

1.建立一个串行通信主程序:SerialPortCommunication.m文件,在主程序中进行串口设备初始化操作,并指定回调函数中串行通信的事件。

程序主要源代码如下(创建串口设备对象、设备串口设备属性及打开串口等初始化操作的代码与前述的查询方式下的初始化代码相同):

%设置串口事件回调

o_SerialPort.BytesAvailableFcnMode='byte' %中断触发事件为‘bytes Available Event’

o_SerialPort.BytesAvailableFcnCount=10 %接收缓冲区每收到10个字节时,触发回调函数

o_SerialPort.BytesAvailableFcn={@EveBytesAvailableFcn,handles}%得到回调函数句柄

2.修改instrcallback(obj,event)回调函数,对所发生的串口通信事件进行处理。

Matlab缺省的回调函数instrcallback (obj, event)存在于instrcallback.m文件中。该文件实际上是一个有待于用户修改的程序模块。其中只有一些最基本的程序代码,能够显示导致串口中断发生的是哪一类事件,中断事件所发生的时间以及导致事件发生的对象名等信息(修改回调函数文件时,注意要取消文件中相应信息后的分号,才能够在Matlab的命令窗口(command window)中将这些信息显示出来)。中断发生后的通信事件处理以及通信数据的分析处理任务,需要用户自行添加相应的服务程序代码。

4.3绘制采集数据的曲线波形与数据显示

在MATLAB的二维绘图指令中,最重要、最基本的指令是PLOT,其他许多特殊的绘图指令都是以它为基础而形成的。作为绘制线性坐标平面图形的函数PLOT,对于不同的输入参数,该函数用不同的形式可以实现不同的功能。

4.3.1绘制曲线波形

在GUI设计中,拖拽出Axes控件即可在界面上显示曲线坐标,再使用命令plot(x,y)将采集到的数据曲线波形显示出来。其中x,y是同维向量,那么plot将绘制出以x,y元素为横、纵坐标的曲线。

plot(handles.axes_main,1:length(number),number);%确立该图在界面上的位置并按照比例缩放显示

为了更好地观察曲线波形,可以使用grid on命令,该命令主要用于在坐标平面上加上网格,从而更有利于观察和分析。

grid on;%加坐标网格

4.3.2数据显示

在GUI界面设计中拖拽出TXT控件,然后修改其Tag属性为edit_ReceiveData,用以显示接收到的串口所发送过来的数据,String留空,并把MAX改为2.0,以便可以多行显示数据。

4.3.3 采集图像

实现串口通信需要借助COMTOOLS工具向做好的SerialPortCommunication程序发送数据,此工具可以将发送的数据记录在指定的文件目录。其界面如图4所示,此时已打开COM4,输入了要发送的数据。

图4:串口助手

Fig 4: Comtools

打开SerialPortCommunication的COM3串口,即可显示COMTOOLS发送过来的数据的曲线波形,如图5。

如果要实现实时串口数据采集,则使用COMTOOLS工具里面的“定时发送”-“循环发送”功能即可实现。效果图如图6所示。

图5:接收的曲线波形和数据

Fig 5:Received waveform and the data curve

图6:实时串口数据曲线波形和数据显示

Fig 6:Real-time serial data waveforms and data curve

基于MATLAB实时串口数据采集与曲线显示

全日制普通本科生毕业设计 基于MATLAB实时串口数据采集与曲线显示REAL-TIME SERIAL DATA ACQUISITION AND FIGURE SHOW BASED ON MATLAB 学生姓名: 学号: 年级专业及班级: 指导老师及职称: 学院: 提交日期:2011年5月

全日制普通本科生毕业论文(设计) 诚信声明 本人郑重声明:所呈交的本科毕业论文(设计)是本人在指导老师的指导下,进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体在文中均作了明确的说明并表示了谢意。本人完全意识到本声明的法律结果由本人承担。 毕业论文(设计)作者签名: 年月日

目录 摘要 (1) 关键词 (1) 1前言 (2) 1.1 Matlab实时串口数据采集研究现状及发展趋势 (2) 1.2研究的目的和意义 (4) 1.3论文的组织结构 (5) 2Matlab下实时串口数据采集概要 (5) 2.1 Matlab的Serial类 (5) 2.2 数据采集 (6) 2.3曲线显示 (7) 3实时串口数据采集与曲线显示的实现 (8) 3.1实时串口通信的实现 (8) 3.2数据采集的实现 (9) 3.3曲线显示GUI的实现 (10) 4基于MATLAB的实时串口数据采集与曲线显示的具体做法 (12) 4.1数据采集的一般流程 (12) 4.1.1创建接口对象并设置属性 (12) 4.1.2打开串口设备对象 (12) 4.1.3读写串口操作 (13) 4.1.4关闭并清除设备对象 (13) 4.2基于Matlab中断方式的实时串行通信编程 (13) 4.3绘制采集数据的曲线波形和数据显示 (14) 4.3.1绘制曲线波形 (14)

Matlab与51单片机的串口通信

数字信号处理2012电子信息工程专业答辩报告

Matlab与51单片机的串口通信 一、简介 从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口(九针串口)通信正式支持(本实验采用USB转串口)利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。Matlab支持面向对象技术,用一个对象将计算机串口封装起来,只要创建串口对象,对串口对象操作就是对串口操作,非常方便。使用serial函数就可创建串口对象,通过定义串口对象的属性,能定义串口的通信模式,从串口对象属性也能了解串口的状态,即可以通过MATLAB的串口通讯函数读写数据。 二、 Matlab串口函数 serial 创建一个串口对象,格式:s = serial('coml' ) fopen 打开串口对象,格式:fopen(s) fwrite 其他程序能对该串口进行读写操作fwrite(s,’’) fread 读取串口数据,格式: fread(s) fclose 关闭串口对象,格式:fclose(s) free 解除Matlab对串口对象的控制,使 delete 删除对象s,格式:delete(s) clear 从工作空间中删除对象s,格式:clear(s) 三、实现功能 利用MATLAB串口通信函数,读写51单片机(STC89C52R+)数据,运用keil编写时钟程序,烧录到单片机中,时钟程序实现的功能是实现时钟的显示,并且能用开发板上的三个按钮进行时钟的修改,一个按钮进入修改模式(复位),另两个实现时间的增减。编辑MATLAB程序,实现对单片机的控制。读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备命令分别是fread、fwrite。

matlab串口实时波形显示

作者:GG 功能:实现matalb与PC外设通讯 本例:串口232与外设单片机51通讯。实时监控51数据并且实时图形显示 时间:2011—9—16 简介:实现该功能使用M脚本文件和函数文件。 第一个文件连接串口和打开串口,设置了串口的一些参数和触发事件。连接串口COM5。有关该方面的知识请自行百度I/O文字流。 第二个文件是时间回调函数,相当于其他语言中例如C语言的中断函数 第三文件是关闭串口和清除列连接。并且清除中间TXT中介文件内容 下面是源文件 第一个: clear all s=serial('COM5');%打开串口 s.BytesAvailableFcnMode='byte';%设置事件触发为接受触发 s.InputBufferSize=5000;%设置接受缓冲区大小为5000个字节 s.BytesAvailableFcnCount=10;%每次接受到50个数据时候触发事件 s.BaudRate=19200;%设置通讯波特率 s.BytesAvailableFcn=@my_callback;%指向触发事件函数 fopen(s);%打开串口 第二个 function my_callback(obj,event) out=fread(obj,10,'uint8');%串口处读出50个数据 fid=fopen('G1.txt','a+');%打开文件并且追加 fprintf(fid,'%3d',out); fclose(fid); speed=textread('G1.txt','%u'); plot(speed); disp('save ok!'); end 第三个 fclose(s);%关闭串口 delete(s);%删除串口变量 clear all; fid=fopen('G1.txt','w');%清除中间文件txt a=[]; fprintf(fid,'%s',a); fclose(fid); clear all;%清除所以变量

matlab串口通信

摘要:结合单片机和Matlab两者优点,基于事件驱动中断通信机制,提出一种Matlab环境下PC机与单片机实时串行通信及数据处理方法;完成单片机数据采集系统与PC机RS-232/RS-485串行通信及其通信数据分析处理、文件存储、FIR滤波及图形显示;简化系统开发流程,提高开发效率。该方法已成功应用于一个PIC16F876单片机应用系统实例之中。 关键词:PIC16F876 Matlab 串口通信 RS-232 事件驱动回调函数 引言 Matlab是由美国Mathworks公司开发面向理论分析研究、工程计算数据处理和缓图一套具有强大功能软件系统。其中Matlab语言是一种以矩阵为基本运算单元解释执行高级语言,编程简例,只要几条语句就能实现诸如FFT变换、FIR/IIR滤波等数据分析处理,易于掌握。从Matlab6.0版本开始,Mathworks 公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口通信正式支持。利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。为此,笔者充分结合单片机和Matlab优点,基于事件驱动中断通信机制,提出了一种Matlab环境下PC机与单片机实时串行通信数据处理方法,极大地简化开发流程,提高了系统开发效率。另外,与目前普遍采用基于Matlab查询方式下非实时串行通信技术相比,这种方法实用性也大大增强了。 https://www.sodocs.net/doc/0a2850347.html,提示请看下图: 1 系统总体设计简介 下面以Mircochip公司PIC16F876单片机为下位机,PC机为上位机组成实时数据采集处理系统为例,介绍基于Matlab环境下PC机与单片机串行通信实时数据处理方法实现。数据采集系统结构框图如图1所示。PC机串口与单片机USART 口通过MAX232电平转换芯片相连,系统工作时,Matlab通过调用设备控制工具箱中serial类及相关函数。来创建串口设备对象,得到设备文件句柄,从而以操作文件方式实现对PC机串行口读写操作。因而PC机可以通过Matlab向串行

MATLAB串口通信

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%本程序主要实现串口控制三轴转台进行自动标定,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%查找串口对象,若串口一开始被占用,需要加上这段程序释放串口,若串口没有被占用,则不需要这段程序 scoms=instrfind; %%尝试停止、关闭删除串口对象 stopasync(scoms); fclose(scoms);%关闭串口 delete(scoms);%释放串口%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% clear all;clc; %%%%%串口配置通道1 global s; s=serial('COM13');%设置串口号 s.baudrate=57600;%设置波特率 s.parity='none';%校验位 s.stopbits=1;%停止位 s.databits=7;%数据位 s.timeout=2;%一次读/写的时间最长为0.5s s.InputBufferSize=1024;%输入缓冲区 s.OutputBufferSize=1024;%输出缓冲区 %s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s);%%%%打开串口 fclose(s); %%%%%串口配置通道2 global s2; s2=serial('COM15');%设置串口号 s2.baudrate=460800;%设置波特率 s2.parity='none';%校验位 s2.stopbits=1;%停止位 s2.databits=8;%数据位 s2.timeout=2;%一次读/写的时间最长为0.5s s2.InputBufferSize=1024;%输入缓冲区 s2.OutputBufferSize=1024;%输出缓冲区 %s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s2);%%%%打开串口 fclose(s2); %InitPos(1)=InitPos(1)+0.3 %Pos1=num2str(InitPos(1)'); %Pos1=['Q010',Pos1(1,:),'$']; %A=[00000000000]; %fwrite(s2,A,'uint8') %AA=fread(s2,11,'uint8')

在MATLAB中使用串口

在MATLAB中使用串口 3.2.1 MATLAB对RS232 的串口通信设计 MATLAB是一个跨平台软件,而此处使用的是自主设计的数据采集卡,因此不具备直接访问的能力。但MATLAB的面向对象技术,已用一个对象把计算机串口封装起来,只要用Serial函数创建串口对象即可[6]。关键语句为:s=ser ial(‘COM1’,‘BaudRate’,9600)。MATLAB封装的串口对象支持对串口的异步读写操作,通过对异步读写设置,PC在执行读写串口函数时能立即返回,不必等待串口把数据串输完毕。当指定数据传输结束时就触发事件,执行事件回调函数,对事件回调函数编程,进行数据处理,这样可以大大提高数据处理的效率。MEX是MATLAB的可执行程序,是MATLAB调用其它语言编写的程序或算法的接口,在Windows环境下是扩展名为DLL的动态链接库。对MEX 编译器进行配置的方法是:在MATLAB命令窗口中运行mex-setup,选择VC6.0++作为编译器。用C语言编写端口读、写的操作程序,程序包含有头文件mex.h和m exFunction函数,mexFunction函数中nelhs表示输出变量的个数,plhs包含指向输出变量指针的数组,nrhs表示输入变量的个数,prhs包含指向输入变量指针的数组。接口编形成的MEX文件与参考文献[7][8]类似,在此不再累述。 3.2.2 数据采集与分析 (1)数据读取的MATLAB实现 主要代码为: %读取通道数及总数据量 fid=fopen(‘cardiogram.add’,‘r’); Status=fseek(fid,56,‘bof’); nDataChNum=fread(fid,1,‘long’); status=fseek(fid,204, ‘bof’); nAllDataLength=fre ad(fid,1, ‘long’); %按通道数循环读出各通道起始地址 status=fseek(fid,76, ‘bof’);% for i="1:" nDataChNum pChannelAdr(i)=fread(fid,1, ‘long’) end %按通道数循环读出各通道数据 for i="1:nDataChNum" status=fseek(fid,pChannelAdr(i)+360, ‘bof’) nSegNum=fread(fid,1, ‘log’) status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024, ‘bof’); data=fread(fid,nAllDataLength, ‘short’); end sta=fclose(fid);

matlab串口编程

在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。 之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。检索对自己有用的信息也是一种能力。 在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。 1,simulink工具箱仿真 2,Instrument control toolbox 3,使用MATLAB变成语言,编写自己的程序控制 在Instrument control toolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。在工具箱中,可以将你进行的操作实时的转换成m 文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。 simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。(可能说的太主观,至少我是这样)没什么比编写自己的程序更加能了解自己控制的设备了,其上的两种方式都是在这个方式的基础上实现的,最终控制原理都是一样的,都是通过MATLAB提供的一系列API函数对串口进行操作。1和2我都尝试过,但是最后还是觉得之间编程比较清晰,当然这只是一个过程,不同的情况使用不同的工具才是正确的。以上纯属个人观点和理解,仅供参考,有什么好的想法还请不吝赐教,大家一起学习。下面是我对MATLAB环境下对串口操作的一些理解和操作。 在MATLAB中,串口被抽象成一个结构体,所有的操作均同归相关函数对结构体操作完成,通过serial函数新建一个串口对象,该函数至少需要一个参数,即串口号,其他的可选参数为设置该串口相关参数,可以在新建对象的时候指定也可以在以后用set函数设置。相对而言,get函数可以得到串口对象的相关参数值或者状态。

MATLAB串口通信技术

一.MATLAB串口通信技术 对于WINDOWS系统而言,硬件系统的驱动程序有着十分严格的规范,可以用C或汇编语言进行开发,而MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力。即使安装了驱动程序并能正常工作的硬件设备,MATLAB也没有统一的形式对其进行访问。对于系统的串口,在MATLAB6.X中以类(SERIAL)的形式提供了支持。当用指令建立了一个串口对象(句柄)以后,对串口的硬件操作可以文件操作的软件形式来完成,方法比较简单。常用的串口操作命令及其含义如下表(1)所示,这些命令既可在MATLAB命令窗口实现,也可以M文件的形式出现,使用起来十分方便。 表1MATLAB串口操作命令表 二.数据采集系统与PC机通信的硬件电路 为了简化系统的硬件设计,数据采集系统的微转换器选用AD公司的全集成芯片ADu C812,该芯片包含有12位高性能的自校准8通道ADC,两个12位的DAC,与8051兼容的内核使用户无须学习新的指令系统。片内8K闪速/电摖除程序存储器使数据采集系统具有在线下载编程能力,利用AD公司提供的免费SERIAL WINDOW DOWNLOAD就可以将H EX文件下载到ADuC812内,对于不同的应用场所可以方便的修改系统的参数,既不需要昂贵的编程器,也不需打开机壳插拨芯片,只需将一条电缆连接到计算机的COM1或COM 2即可。另外该转换器还支持看门狗定时器、电源监视器及ADC的DMA等功能,可编程的I/O口具有三种类型的串口UART、SPI、I2C,价格也比较便宜,是一种理想的转换器。系统的硬件组成如下图(1)所示。

图1ADUC812与PC机串口通信的硬件电路图 其中ADM202及P3.0\P3.1构成了与计算机通信的RS232接口,它有两个功能,一是实现计算机与数据采集系统的数据通信。另一功能是与JP1配合使用,完成将程序从计算机下载到ADuC812片内的闪速/电摖除程序存储器中。当下载程序时,需将单片机系统的电源关掉,用屏蔽帽屏蔽JP1,单片机系统再上电,ADuC812进入程序下载状态,运行SERIAL W INDOW DOWNLOAD可以将HEX文件下载到芯片内。ADM812组成了系统的复位电路。 三.应用程序的软件流程图 PC机与单片机的串口通信技术可以说已经比较成熟,但在工程实际中应用较多的是V C、VB通信控件,一般人员开发具有一定的困难。本文的PC机应用程序是运用MATLAB 的类(SERIAL)和M语言开发,辅以MATLAB的GUIDE工具箱,程序开发相对简单。单片机的程序应用MCS—51汇编,只需在程序的第一行加$MOD812标识符即可。整个传输过程是:由单片机发送握手信号,PC机接到握手信号后发应答信号,并准备接收信号,单片机接收到应答信号后准备发送数据,并说明通信过程挂钩成功,总的测量次数和键值作为第0组发送,发送完毕累加校验和,发现传输错误时重发,程序的流程图如图2所示

matlab之串口通信

matlab之串口通信 串口通信,一般是指RS232、RS422之间的通信。matlab中有专门的serial函数来创建串口对象。设串口ID号为COM1,则创建方法为: 复制内容到剪贴板 代码: >>scom= serial('com1'); 创建完串口对象后,一般需要设置串口对象的属性,否则,串口不会相互通信。 复制内容到剪贴板 代码: >> get(scom) ByteOrder = littleEndian BytesAvailable = 0 BytesAvailableFcn = BytesAvailableFcnCount = 48 BytesAvailableFcnMode = terminator BytesToOutput = 0 ErrorFcn = InputBufferSize = 512 Name= Serial-COM1 ObjectVisibility = on OutputBufferSize = 512 OutputEmptyFcn = RecordDetail = compact RecordMode = overwrite RecordName = record.txt RecordStatus = off Status = closed Tag= Timeout = 10 TimerFcn = TimerPeriod = 1 TransferStatus = idle Type= serial UserData = [] ValuesReceived = 0 ValuesSent = 0 SERIAL specific properties: BaudRate= 9600 BreakInterruptFcn = DataBits = 8 DataTerminalReady = on FlowControl = none Parity = none PinStatus = [1x1 struct]

MATLAB 串口通信技术

一. MATLAB串口通信技术 对于WINDOWS系统而言,硬件系统的驱动程序有着十分严格的规范,可以用C或汇编语言进行开发,而MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力。即使安装了驱动程序并能正常工作的硬件设备,MATLAB也没有统一的形式对其进行访问。对于系统的串口,在MATLAB6.X中以类(SERIAL)的形式提供了支持。 当用指令建立了一个串口对象(句柄)以后,对串口的硬件操作可以文件操作的软件形式来完成,方法比较简单。 常用的串口操作命令及其含义如下表(1)所示,这些命令既可在MATLAB命令窗口实现,也可以M文件的形式出现,使用起来十分方便。 表1 MATLAB串口操作命令表 二. 数据采集系统与PC机通信的硬件电路 为了简化系统的硬件设计,数据采集系统的微转换器选用AD公司的全集成芯片ADu C812,该芯片包含有12位高性能的自校准8通道ADC,两个12位的DAC,与8051兼容的内核使用户无须学习新的指令系统。片内8K闪速/电摖除程序存储器使数据采集系统具有在线下载编程能力,利用AD公司提供的免费SERIAL WINDOW DOWNLOAD就可以将H EX文件下载到ADuC812内,对于不同的应用场所可以方便的修改系统的参数,既不需要昂贵的编程器,也不需打开机壳插拨芯片,只需将一条电缆连接到计算机的COM1或COM 2即可。另外该转换器还支持看门狗定时器、电源监视器及ADC的DMA等功能,可编程的I/O口具有三种类型的串口UART、SPI、I2C,价格也比较便宜,是一种理想的转换器。系统的硬件组成如下图(1)所示。

图1 ADUC812与PC机串口通信的硬件电路图 其中ADM202及P3.0\P3.1构成了与计算机通信的RS232接口,它有两个功能,一是实现计算机与数据采集系统的数据通信。另一功能是与JP1配合使用,完成将程序从计算机下载到ADuC812片内的闪速/电摖除程序存储器中。当下载程序时,需将单片机系统的电源关掉,用屏蔽帽屏蔽JP1,单片机系统再上电,ADuC812进入程序下载状态,运行SERIAL W INDOW DOWNLOAD可以将HEX文件下载到芯片内。ADM812组成了系统的复位电路。 三. 应用程序的软件流程图 PC机与单片机的串口通信技术可以说已经比较成熟,但在工程实际中应用较多的是V C、VB通信控件,一般人员开发具有一定的困难。本文的PC机应用程序是运用MATLAB 的类(SERIAL)和M语言开发,辅以MATLAB的GUIDE工具箱,程序开发相对简单。单片机的程序应用MCS—51汇编,只需在程序的第一行加$MOD812标识符即可。整个传输过程是:由单片机发送握手信号,PC机接到握手信号后发应答信号,并准备接收信号,单片机接收到应答信号后准备发送数据,并说明通信过程挂钩成功,总的测量次数和键值作为第0组发送,发送完毕累加校验和,发现传输错误时重发,程序的流程图如图2所示

matlab串口通信基础讲义

matlab串口通信基础讲义 ①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信; ②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言; ③支持异步通信和同步通信; ④支持基于事件驱动的通信。 从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。 3.1 Matlab对串行口控制的基础知识 Matlab对串行口的编程控制主要分为四个步骤。 ①创建串口设备对象并设置其属性。 scom=serial('com1');%创建串口1的设备对象scom scom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符) scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B scom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512B scom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10s s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中. 注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。 另外,设置串口设置对象的属性也可以用一条指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部的属性,可以用get(scom)命令。

matlab串口数据采集

(一)matlab接口编程基础(通过串口与单片机通讯) (1)Matlab对串行口的编程控制主要分为四个步骤。 ①创建串口设备对象并设置其属性。 scom=serial('com1');%创建串口1的设备对象scom scom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符) scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B scom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10s s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中. 这里,串口还有很多其他属性可以设置,不一一列举。 ②打开串口设备对象。fopen(scom); ③读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口的读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备的命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite。我们这里使用fread,可以一次性把数据读进来。 ④关闭并清除设备对象。 fclose(scom);%关闭串口设备对象 delete(scom);%删除内存中的串口设备对象 clear scom;%清除工作空间中的串口设备对象 当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建的串口对象对象清除,以免占用系统资源。 (2)基于Matlab中断方式的实时串行通信编程 在Matlab环境下以中断的方式进行串行通信,实际上是采用事件驱动的方法实现的。Matlab 提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体的串行通信事件。其编程步骤如下: ①建立一个串行通信主程序:serial.m文件,在主程序中进行串口设备初始化操作,并指定回调函数中串行通信的事件。设置回调函数触发事件—当串口缓冲区中有n字节的数据时,触发中断事件,此后主程序自动调用instrcallback(obj,event)回调函数

(完整版)MATLAB串口通信设计源码

function varargout = PJSerialCOM(varargin) % PJSERIALCOM M-file for PJSerialCOM.fig % PJSERIALCOM, by itself, creates a new PJSERIALCOM or raises the existing % singleton*. % % H = PJSERIALCOM returns the handle to a new PJSERIALCOM or the handle to % the existing singleton*. % % PJSERIALCOM('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in PJSERIALCOM.M with the given input arguments. % % PJSERIALCOM('Property','Value',...) creates a new PJSERIALCOM or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before PJSerialCOM_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to PJSerialCOM_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help PJSerialCOM % Last Modified by GUIDE v2.5 26-May-2012 18:45:14 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct( 'gui_Name' 'gui_Singleton' 'gui_OpeningFcn' 'gui_OutputFcn' 'gui_LayoutFcn' 'gui_Callback' if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before PJSerialCOM is made visible. function PJSerialCOM_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB mfilename, ... gui_Singleton, ... , @PJSerialCOM_OpeningFcn, @PJSerialCOM_OutputFcn, [] , ... []);

MATLAB串行通信的实现方法

MATLAB串行通信的实现方法 摘要本文介绍MATLAB环境下上位机与下位机通过RS232接口进行串行通信的实现方法;详细叙述了在MATLAB环境下使用其自带的控制工具箱中的串 口事件回调函数,实时接收下位机输出串行信号的实现过程。 关键词 MATLAB7.0,串口通信,回调函数 MATLAB是由美国MATHWORKS公司开发的面向理论分析研究和工程设计处理的一套具有强大功能的软件系统。在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具。其编程语法规则与一般的结构化编程语言大同小异,而且使用更方便,具有一般编程基础的用户都可以很快熟练掌握。MATLAB内置大量的数学算法函数,只要几个语句就能实现诸如矩阵/行列式运算、FIR/IIR滤波等数据分析处理、复杂的图形显示等。在实际应用中常常要通过各种方式将数据传入计算机,进而借助MATLAB的强大分析处理能力对数据进行分析、处理和图形显示。 本文提出在上位机MATLAB 7.0环境下,使用RS232串行接口实时接收。该方法较之使用VC/VB高级语言编程,极大地缩减了开发时间,提高了开发效率。 一、总体框图 本设计的总体原理框图可见图1, 系统主要由上位机(PC机)和下位机(PC104)部分。上位机和下位机通过RS232进行通讯。上位机负责数据处理和图形化显示,它是在MATLAB7.0环境下进行的,应用了仪器控制工具箱中关于串行通信的函数,通过程序控制整个系统的工作并进行数据处理。下位机负责数据采集和响应主机的控制处理信号。 二、通信原理 在MATLAB7.0中的设备控制工具条(INSTRUMENT CONTROL TOOLBOX)用来负责上、下位机之间的通信。该设备控制工具箱的特色如下:INSTRUMENT CONTROL TOOLBOX包括两大部件:M文件函数和接口驱动适配器。这两部件提供了MATLAB 与外设的通讯功能如图1所示。

基于MATLAB GUI界面的MCU串口实时绘图设计

基于MATLAB GUI界面的MCU串口实时绘图设计 摘要:介绍了基于MATLAB的GUI界面与单片机的串口实时通信并绘图的实现方法。通信系统主要由PC机、RS232C电平转换器、51单片机以及通信程序构成,单片机通信程序用C语言设计,PC机通信程序则是用MATLAB的GUI 界面的事件和回调函数来实现。 关键词:MATLABGUI 51单片机串行通信绘图 1引言 在控制工程中, 使用大量的数据采集系统, 该类系统通常是微处理器(单片机)系统,其处理、分析数据的能力相对较低, 一般是将这些数据传送到PC机, 由相应的应用软件系统进行处理、分析和形成图表、打印, 因此, 两类系统必须要实现通信。MATLAB以其强大的科学计算与可视化功能、简单易用、开放式可扩展环境, 特别是诸多的面向不同应用领域的工具箱支持, 使其在信号处理、自动控制等许多领域获得广泛的应用, 成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台[1,2][参考文献 [1] 吴晓燕,张双选. MATLAB在自动控制中的应用[M]. 西安:西安电子科技大学出版社,2006.9. [2] 李国勇,谢克明,杨丽娟. 计算机仿真技术与CAD:基于MATLAB 的控制系统[M]. 北京:电子工业出版社(第2版),2008. [3] 应亮. Matlab的图形用户界面的应用[J]. 电脑知识与技术,2005,(11):75-76. [4] 张道明,郝继飞. 基于MATLAB的MCU串行通信[J]. 网络与通信,2004,(5):1-3. [5] 兰红莉,罗文广. 基于MATLAB的PC机与单片机串行通信实现[J]. 计算机应用与软件,2006,23(6):74-76.]。GUI为图形化界面,应用简单,不需要对MATLAB理解就可以应用[3][ [6] 汪文,陈林. 单片机原理与应用[M]. 武汉:华中科技大学出版社,2008. 75-101.]。本文讨论应用MATLAB的GUI界面实现PC机与51单片机串行通信并实时绘制51单片机发送数据的图形,对于实时观察控制系统的运行状态和调节PID系数有着重要的应用。 2总体设计原理 PC 机配置的RS232标准串行接口COM和单片机的串口连接,使用三线制( 收、发、地) 实现数据传递, 用MAX232作为单片机与PC机间的电平转化芯片。串行通信总体设计原理图如图1所示。

matlab串口编程

matlab串口编程 在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。 之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB 数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。检索对自己有用的信息也是一种能力。 在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。 1,simulink工具箱仿真 2,Instrument control toolbox 3,使用MATLAB变成语言,编写自己的程序控制

在Instrument control toolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。在工具箱中,可以将你进行的操作实时的转换成m文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。 simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。(可能说的太主观,至少我是这样)没什么比编写自己的程序更加能了解自己控制的设备了,其上的两种方式都是在这个方式的基础上实现的,最终控制原理都是一样的,都是通过MATLAB提供的一系列API函数对串口进行操作。1和2我都尝试过,但是最后还是觉得之间编程比较清晰,当然这只是一个过程,不同的情况使用不同的工具才是正确的。以上纯属个人观点和理解,仅供参考,有什么好的想法还请不吝赐教,大家一起学习。下面是我对MATLAB环境下对串口操作的一些理解和操作。 在MATLAB中,串口被抽象成一个结构体,所有的操作均同归相关函数对结构体操作完成,通过serial函数新建一个串口对象,该函数至少需要一个参数,即串口号,其他的可选参数为设置该串口相关参数,可以在新建对象的时候指定也可以在以后用set函数设置。相对而言,get函数可以得到串口对象的相关参数值或者状态。串口对象参数如下: Communications Properties

MATLAB 串口通信资料

为了将模拟信号采集到,并对其经AD变换后的数字信号进行保存并处理,包括一些简单的如数字滤波和傅里叶变换等,或者之后可能用到现代的信号处理方法,于是考虑使用stm32负责信号的采集,将数据经232串口送入PC进行处理。在PC端进行数据接收的方法也很多,典型的应该是用VC++吧?但考虑到MATLAB在信号处理方面比较适合,于是用了MATLAB 的串口通信。 单片机方面,stm32f103rb的工作包括时钟、中断、IO口、串口及AD的初始化,然后启动转换,便可以向串口发数据。需要注意的是,当向串口发送连续两个数据时(比如16位的高低8位),在等待第一个数据发送完成的方式选择上,不能查询发送完成标志位(TC)。若采用了查询发送完成标志位,第二个数据将覆盖第一个数据。解决办法是采用查询发送数据寄存器空标志位(TXE)。这次的主要工作放在了MATLAB上,因为之前对MATLAB的串口通信不熟,所以是边学边做的,然后顺便又利用GUIDE做了个简单的界面,基本达到要求,等具体用到的时候再去完善吧。 要使用MATLAB接收串口数据,首先需要新建一个串口对象,并初始化,包括波特率,停止位,有无校验,输入输出缓冲区大小等。 scom=serial('COM1'); %串口com1 scom.BaudRate = 9600; %波特率 scom.InputBufferSize = 1024; %输入缓冲区 scom.OutputBufferSize = 1024; %输出缓冲区 scom.ReadAsyncMode = 'continuous'; %异步通信时,连续读串口数据 scom.BytesAvailableFcnMode = 'byte'; %中断触发事件 scom.BytesAvailableFcnCount = 100; %当缓冲区数据 scom.BytesAvailableFcn = @instrcallback; %调用回调函数 以上是串口的部分属性及相应的修改,若要查看全部属性,可使用语句get(scom),并根据需要自己的修改相关属性。特别要注意的是上面最后一句(scom.BytesAvailableFcn = @instrcallback;),这个烦了我很久。意思是当缓冲区中的数据达到100 bytes时调用instrcallback回调函数。MATLAB接收串口数据有两种方式,包括查询和调用回调函数。查询就比较简单,但是会很忙。调用回调函数就类似中断,当用户具体的串口通信事件发生时,执行中断处理。instrcallback.m在MATLAB7\toolbox\matlab\iofun\@instrument目录下面,尽量不要改动原来的内容,在末尾添加当缓冲区有指定量的数据时需要MATLAB做的工作,比如绘图,数据保存之类的。我在回调函数中做的工作暂时比较简单一点,包括将连续两个8位数据拼成16位,并存入一个二进制文件中。部分代码如下: data=zeros(100,1); data=fread(obj,100,'uint8'); dataout=zeros(50,1); for i=1:50 dataout(i)=256*data(2*i)+data(2*i-1);

相关主题