基于Matlab串口中断通信的温度监测系统
- 格式:pdf
- 大小:174.18 KB
- 文档页数:11
目录第1章绪论 (3)1.1 研究课题的背景和意义 (3)1.2 过程控制的发展历史和现状 (4)1.3 设计的内容 (4)第2章锅炉过热蒸汽系统的介绍 (6)2.1 过热蒸汽系统设备简介 (6)2.2 锅炉的三种能量转换过程 (7)2.3 影响过热蒸汽温度的因素 (7)2.4 对过热蒸汽温度的控制 (8)2.5 本章小结 (8)第3章课题设计方案的选择 (9)3.1 过热蒸汽温度控制系统功能概述 (9)3.2 生产过程控制模块的选择 (10)3.3 控制方案选择 (11)3.3.1 过程控制概述 (11)3.3.2 过程控制方案的选择 (11)3.3.3 串级调节系统概述 (12)3.3.4 串级调节调节器的选型和整定方法 (12)3.4 本章小结 (13)第4章组态王的设计过程 (14)4.1 组态画面的设计 (15)4.1.1 过热蒸汽温度监控画面的设计 (15)4.1.2 动画连接 (17)4.1.3 画面命令语言的编写 (17)4.1.4 系统调试 (18)4.1.5 VIEW调试 (18)4.2本章小结 (18)第5章 MATLAB的设计过程 (19)5.1 MATLAB的设计过程 (19)5.2 本章小结 (23)第6章结论与展望 (24)6.1 结论 (24)6.2 展望 (24)参考文献 (25)致谢 ................................................... 错误!未定义书签。
附录 ................................................... 错误!未定义书签。
附录A 外文翻译...................................... 错误!未定义书签。
A.1 英文文献 ...................................... 错误!未定义书签。
A.2 中文文献 ...................................... 错误!未定义书签。
第二章 被控对象及控制策略控制系统意味着通过它可以按照所希望的方式保持和改变机器、结构或其他设备内任何感兴趣或可变化的量。
控制系统同时是为了使被控制对象达到预定的理想状态而实施的。
控制系统使被控制对象趋于某种需要的稳定状态。
2.1被控对象本文的被控对象电烤箱或者电炉的温度。
设计目的是要对它的温度进行控制,达到调节时间短、超调量为零且稳态误差在±1℃内的技术要求。
在工业生产过程中,控制对象各种各样。
理论分析和实验结果表明:电加热装置是一个具有自平衡能力的对象,可用二阶系统纯滞后环节来描述。
然而,对于二阶不振荡系统,通过参数辨识可以降为一阶模型。
因而一般可用一阶惯性滞后环节来描述温控对象的数学模型。
所以, 电烤箱模型的传递函数为:1)(+•=-TS e K S G s τ(2-1)式(2-1)中 K-对象的静态增益T-对象的时间常数τ-对象的纯滞后时间目前工程上常用的方法是对过程对象施加阶跃输入信号,测取过程对象的阶跃响应,然后由阶跃响应曲线确定过程的近似传递函数。
由于本文是对温度控制系统的控制方式(采用什么样的控制器)优劣的探究,所以对于控制对象不是主要的研究对象,这里取三组控制温度控制对象的模型)(S G 如下:1220)(5.01+=-S e S G s se 5.0-1420)(5.02+=-S e S G s)14)(12(20)(5.03++=-S S e S G s2.2 控制策略分别设计PID 和Fuzzy 控制器,并做多层次不同比较各自性能,得出最优控制方法。
其中Yd=1, 1)()2)0.1t d ξ⎧=⎨=⎩白噪声 方差0.0001确定干扰,采样周期为0.1s.2.3 控制器的模型2.3.1 PID 控制器的模型与设计)(11)(s E S T S T K s U d i p ⎥⎦⎤⎢⎣⎡++=或写成传递函数形式:)11()()()(S T ST K S E S U S G d i p p ++==公式中U(s)和E (s )分别是u (t )和e (t )的拉氏变换,其中p K 、i T 、d T 分别控制器的比例系数、积分时间常数、微分时间常数。
基于Matlab的小型温度检测系统设计]温度是表征环境的一个重要的参数。
在工程领域,尤其像工程热力学等,温度检测非常普遍,对温度精确测量以便实时控制也显得尤为重要。
1 前言温度是表征环境的一个重要的参数。
在工程领域,尤其像工程热力学等,温度检测非常普遍,对温度精确测量以便实时控制也显得尤为重要。
在控制系统中,上位机与下位机之间实现通信的方法和应用平台很多。
目前,以VB和VC开发的通信软件较多,然而,这类软件虽然功能完善,但是数据采集到计算机后要进行各种处理(例如滤波,系统辨识,曲线拟合等)就显得不方便,编程比较复杂。
Matlab具有强大的数据处理能力及功能丰富的工具箱,被广泛的应用于信号处理、自动控制等领域[1]。
它编程语言简单易学,利用简单的命令就可以代替复杂的代码,极大地提高了开发效率。
本实验基于Matlab环境下设计了一个小型温度检测系统,下位机使用AT89S51单片机和DS18B20完成温度数据采集,上位机在Matlab环境下,调用设备控制箱serial类操作RS-232串口,用串行通信方式交换数据,进而借助Matlab对数据进行分析和处理,得到了温度随时间变化的函数解析式,同时介绍了基于Matlab环境下PC机与单片机串行通信的实时数据处理的实现方法。
2 系统总体设计图1 系统结构图温度检测系统的整体结构如图1所示。
PC机串口与单片机USART口通过MAX232电平转换芯片相连,构成一个主从式通信系统。
系统工作时,单片机对串口和DS18B20初始化,在读取温度的同时等待中断。
PC机通过调用Matlab设备控制工具箱中的serial类及相关函数来创建串口设备对象,并以读写文件的方式实现对PC机串行口的访问,PC机通过Matlab向串行口发送特殊指令从而触发单片机中断系统,单片机调用中断服务例程,读取即使温度并将采集的数据通过串行口回送给PC机。
此时,Matlab通过查询的方式,实时接收单片机发送的数据,并完成对数据的分析处理及图形显示。
无线传感网络技术课程实训温度传感器数据采集及界面开发院(系)名称电子与信息工程学院专业班级物联网121班学号120402007学生姓名薛红见指导教师贾旭副教授起止时间:2015.6.29—2015.7.17课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:物联网工程本科生课程设计(论文)目录第1章绪论 (1)1.1 温度传感器技术应用概况 (1)1.2本文研究内容 (2)第2章温度传感器数据采集总体设计方案 (3)2.1 传感器信息采集设计方案 (3)2.2总体设计方案框图及分析 (4)第3章基于MATLAB温度传感器的设计 (6)3.1温度传感器的设计理念 (6)3.1.1 温度传感器的定义 (6)3.1.2传感器的原理 (6)3.2 传感器GUI布局 (7)第4章温度传感器程序软件及调试 (11)4.1 编写回调函数 (11)4. 2附各按键的程序源代码 (13)第5章串口调制及界面运行 (14)5.1界面串口选择 (14)5.2打开串口查看结果 (14)参考文献 (17)第1章绪论1.1 温度传感器技术应用概况随着现代人们生活水平的提高以及我国网络技术应用的普及,我国的网络技术的开发水平已经达到了一定的层次。
人们日常生活中对网络的需求也是日益增多,故此,我们在生活的各个方面对传感器网络技术传感器网络技术的开发及应用也被人们所普遍接受,并得到广泛的应用。
传感器网络是信息感知和采集的一场革命,也被认为是21世纪最重要的技术之一。
它将会对人类未来的生活方式长生深远的影响,通过对传感器信息的采集程序的设计思路,传感器将外界的温度等模拟量转变为数字信号,再将收集到的信号通过计算机进一步给予显示、处理、传输与记录,对收集到的自然数据的传达给人类。
本次的温度传感器系统设计对温度信息的收集是由温度传感器网络系统来完成的。
温度传感器网络是在监测区域内合理的布置大量的传感器节点,并且节点之间通过自组织方式构成网络。
基于组态王和MATLAB 的温度控制系统姓名:班级:学号:一、系统简介组态王是运行在Windows98/NT/2000上的一种工业组态软件,提供了多种I/0驱动程序,可以直接使用变量名读写I/O设备⋯,把下位机的信息实时地传送到上位机中。
但是,在许多工业监控系统中,上位机不仅要实现人机交互的功能,还需要执行控制算法,实现对下位机的实时控制。
组态王的命令语言是一段类似C语言的程序,其编程环境较弱,很难实现复杂的控制算法,因此有必要借助其他软件环境实现系统的控制算法。
MATLAB语言是目前工程界流行最广的一种科学计算语言。
利用MATLAB可以设计先进、复杂的控制算法,将人们从繁琐、复杂的底层编程中解放出来,从而提高编程效率。
本研究在锅炉水温监控系统中采用组态王构成系统的软件平台,完成数据的实时采集和处理,实现人机对话和以动画的方式显示控制设备的运行状态等监控功能。
同时,采用MATLAB语言作为后台程序扩充组态王的编程功能,实现系统的模糊控制算法。
二、监控系统的组成2.1监控系统的硬件组成锅炉水温监控系统结构如图1所示,其系统的工作过程如下:(1)温度传感器PTl00检测出锅炉水的温度信号,经温度变送器将温度信号转换为相应1—5V的模拟量信号,该量经A/D板卡PCL812PG 转换成对应的数字量信号送上位机显示和处理。
(2)在上位机中将检测的温度信号与上位机中设定的温度值进行比较,产生控制器的输人变量(如温度偏差和温度偏差变化率),由控制器计算后输出控制量信号u。
(3)控制量U经过数字量输出板卡PCL726转换为对应的4~20mA 的模拟量信号,送控制装置中SCR可控硅模块执行,SCR模块通过控制可控硅来调节电阻丝两端的电压,对系统的温度进行控制,最终使锅炉温度达到设定值。
图1锅炉水温控制系统结构框图2.2监控系统的软件组成监控系统的软件结构由两个模块组成:前台运行的监控界面模块由组态王开发,以模拟控制系统动态运行为主,生动直观地显示各个变量的各种信息,并实现数据实时采集、人机对话和数据记录等功能;后台运行的数据处理模块以MATLAB语言为开发环境,实现系统的控制算法,产生系统执行机构的控制变量。
基于Matlab的PID温控系统的设计与仿真摘要在Matlab6.5环境下,通过Matlab/Simulink提供的模块,对温度控制系统的PID控制器进行设计和仿真。
结果表明,基于Matlab的仿真研究,能够直观、简便、快捷地设计出性能优良的交流电弧炉温度系统控制器。
关键词温度系统数学模型;参数整定;传递函数在钢铁冶炼过程中,越来越多地使用交流电弧炉设备,温控系统的控制性能直接影响到钢铁的质量,所以炉温控制占据重要的位置。
PID控制是温控系统中一种典型的控制方式,是在温度控制中应用最广泛、最基本的一种控制方式。
随着科学发展,各行各业对温控精度要求越来越高,经典PID控制在某些场合已不能满足要求,因而智能PID控制的引入是精密温控系统的发展趋势。
为了改善电弧炉系统恒温控制质量差的现状,研制具有快速相应的、经济性好的、适合国情的恒温控制装置具有十分重要的意义。
1温控系统模型的建立在Matlab6.5环境下,通过Simulink提供的模块,对电弧炉温控系统的PID控制器进行设计和仿真。
由于常规PID控制器结构简单、鲁棒性强,被广泛应用于过程控制中。
开展数字PID控制的电弧炉控制系统模型使应用于生产实际的系统稳定性和安全性得到迅速改善。
1.1温控系统阶越响应曲线的获得在高校微机控制技术实验仪器上按以下步骤测得温度系统阶越响应曲线:1)给温度控制系统75%的控制量,即每个控制周期通过X0=255×75%=191个周波数,温度系统处于开环状态。
2)ATMEGA32L内部A/D每隔0.8s采样一次温度传感器输出的电压值,换算成实际温度值,再通过串口通讯将温度值送到电脑上保存。
使用通用串口调试助手“大傻串口调试软件-3.0AD”作为上位机接收数据并保存到文件“S曲线采集.txt”中。
3)在采集数据过程中,不时的将已经得到的数据通过“MicrosoftExcel”文档画图,查看温度曲线是否已经进入了稳态区;根据若曲线在一个较长时间里基本稳定在一个小范围值内即表明进入稳态区了,此时关闭系统。
基于Matlab的温度测控系统课程名称:计算机仿真(MATLAB语言)院系:班级:指导教师:设计者:设计时间:2014年12月15日一、任务分工说明如下表所示,填写本组成员名字及任务安排。
二.题目内容要求:1、选题背景概述经过了几周对MATLAB的学习,初步掌握了一些MATLAB的基础知识,并针对老师课上所讲的内容通过实践运用,真正达到会用MATLAB的仿真。
2、课题的功能简介(目标结果定义)本小组所选的课题为基于MATLAB的温度测控系统。
通过老师课上所讲的知识,制作一个可进行温控测控系统。
下位机做温度的采集和数据的发送,上位机以MATLAB GUI设计人机交互界面,包括对温度数据的接收,滤波,以及其他的处理.3、课题涉及的背景知识本课题涉及的MATLAB知识点较为简单,其中用到MATLAB的GUI图形设计,通过串口读取数据,接收下位机送的数据,在GUI界面上进行显示以及绘制实时曲线,数据滤波处理,提取对客户有用的参数.三,部分代码如下1,串口设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%% 设置串口 %%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%tryhandles.s=serial('COM3','BaudRate',9600,'Parity','none','DataBits',8,'StopBi ts',1);%建立串口对象set(handles.s,'OutputBufferSize',512);%设置输出缓冲区大小set(handles.s,'InputBufferSize',1024);%设置输出缓冲区大小set(handles.s,'BytesAvailableFcnMode','byte'); %设置串口BytesAvailableFcnMode属性set(handles.s,'BytesAvailableFcnCount',1);set(handles.s,'BytesAvailableFcn',{@mycallback,handles});%定义Bytes-Available事件回调函数fopen(handles.s); %打开串口catch%进行出错处理errmsg = lasterr;errordlg(['不能打开串口',char(10),'请检查串口连接或该串口已打开'],'串口打开错误'); rethrow(lasterror);end2,数据接收与处理%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%% 接收事件回调函数 %%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function mycallback(obj,event,handles)%接收事件回调函数global val;global a 128;global val1;global val2;global cont;global min;global max;global p1;global p2;global p3;global q1;global q2;global q4;global q6;global q7;global x1;x1=0;global X1;X1=0;global y1;y1=0;global Y1;Y1=0;if handles.s.BytesAvailable>0out=fread(handles.s,1); %数据的读取读取10进制数据if(((out-Y1>3)||(Y1-out>3))&&(cont>2)) % 限幅滤波out=Y1;endout=(255-a)*out+a*Y1;%滤波系数越小,滤波结果越平稳,但是灵敏度越低;滤波系数越大,灵敏度越高,但滤波结果也越不稳定 out=out/255;out1=dec2hex(out); %将读取的数据转换为16进制set(q1,'string',out1); %显示数据set(q2,'string',out);f(cont)=out;set(q4,'string',f);if min>out %判断温度上下限min=out;endif max<outmax=out;endset(q6,'string',min);set(q7,'string',max);tx=cont; %绘制实时曲线x1=cont-1;X1=cont;Y1=out;% plot(p1,tx,out,'-O','LineWidth',5);plot(p1,[x1 X1],[y1 Y1],'LineWidth',5);y1=out;if out<=30 %上下限报警plot(p2,1,1,'-o','MarkerFaceColor','r','MarkerSize',32);plot(p3,1,1,'-o','MarkerFaceColor','g','MarkerSize',32);elseif out<32plot(p2,1,1,'-o','MarkerFaceColor','g','MarkerSize',32);plot(p3,1,1,'-o','MarkerFaceColor','g','MarkerSize',32);elseplot(p3,1,1,'-o','MarkerFaceColor','r','MarkerSize',32);plot(p2,1,1,'-o','MarkerFaceColor','g','MarkerSize',32);endif(cont>199) %上下限报警p=get(handles.axes1,'Children');delete(p);clear global out;clear tx;cont=0;min=65535;max=0;endcont=cont+1;end3,事件处理function pushbutton1_Callback(hObject, eventdata, handles)fclose(handles.s);%关闭串口设备function pushbutton2_Callback(hObject, eventdata, handles)fopen(handles.s);%打开串口function figure1_KeyPressFcn(hObject, eventdata, handles) %退出程序fclose(handles.s);%关闭串口连接delete(handles.s);%删除串口对象delete(handles.figure1);%关闭对话框四.GUI页面设计。
0 引言 在控制系统的通信有许多方法和应用平台,具有不同的特点。
其中,MATLAB 以其强大的数据处理能力和丰富的功能模块,在信号处理、自动控制等领域广泛应用。
它用简单的命令代替复杂的代码,编程语言简单易学,对研究和开发帮助很大。
它的Simulink 可以提供一个动态系统建模、仿真和综合分析的集成环境,线性系统、非线性系统、数字控制及数字信号处理的建模仿真中应用十分广泛。
本文讨论的控制室内温度的问题,通过预测控制方法可以有效地调节控制环境温度,从而达到需要的设定值或者实现预测控制的目的 [1]。
1 采集温度数据的方案1.1 数据采集板的原理及组成 采集模块采用单片机作为CPU,利用其外设资源进行端口的输出/输入和A/D 转换,利用USB 通信芯片与计算机进行数据交互[2]。
数据采集卡如图1所示,其组成介绍如下: (1)USB 传输:使用PHILIP 公司D12芯片; (2)CPU:ATmega16(AVR)单片机; (3)4路A/D:具有10位分辨率,输入电压范围0~4.096V,输入阻抗为可调47kΩ; (4)2路D/A:具有10位分辨率,电压输出范围为0~4.096V; (5)4路输入输出:LED 两路,按键两路; (6)工作电压:利用USB 的5V 电源,无需外接。
为提高抗干扰性,该采集卡设计了一阶低通滤波器。
设置信号3分贝,截止频率为4kHz,也可以在此基础上进行修改实现截止频率的设定。
为了适应跟多温度范围,AD 的通道中有两个通道决定运放放大倍数的电阻采用的是可调电阻,从而实现放大倍数的调节。
也可以通基于MATLAB 的温度采集系统设计孙 菁(河北省邯郸市建业工程质量检测有限公司,河北 邯郸056001)摘 要:介绍了一种利用温度传感器结合MATLAB 数据处理实现温度数据采集的装置。
利用数据采集板对室内温度进行采集,接着利用该采集板能直接支持Simulink 进行硬件在线仿真的特点,在Simulink 中进行建模仿真,同时可以将仿真后的温度数据在PC 界面上以曲线的方式显示,并对室内加热装置进行调控。
基于zigBee的温度监测系统设计与实现MainDisplay概要设计修改履历目录1 文档概述 (4)1.1 文档目的和范围 (4)1.2 术语/缩略语 (4)1.3 参考文档 (4)2 模块概述 (4)2.1 模块功能定义 (5)2.2 模块结构 (5)2.3 模块动作时序 (7)3 接口说明 (7)3.1 数据结构定义........................................................................................................ 错误!未定义书签。
3.2 函数 (7)3.2.1 模块间接口函数 (8)3.2.2 模块内接口函数 (12)1文档概述1.1 文档目的和范围该项目主要描述Main LCD显示模块,ZigBee无线数据传输模块,DHT11温湿度数据采集模块,ARM 数据处理模块的外部接口函数和内部实现函数,还有各模块之间的连接。
1.2 术语/缩略语1.3 参考文档列出所参考的式样或者文档等2模块概述项目的开发环境是Keil uVision4 ,采用的开发语言主要为C语言,还有部分汇编语言。
本设计主要分四部分,第一部分是以ARM Cortex-M0 系列的LPC1114为核心处理器;第二部分是以DHT11为温度传感器,用以采集节点处的温度;第三部分是以zigbee(CC2530)为路由器和协调器,路由器用以发送采集到后经过处理器处理后的数据到协调器,协调器再把数据传送到ARM主处理器上;第四部分为显示器模块。
2.1 模块功能定义2.2 模块结构画出模块间结构及模块内结构图。
对于模块内细分的小模块也最好列表说明各小模块的功能。
模块名称模块类型概要说明LCD_Init 接口液晶显示器初始化W25X16_Init 接口W25X16初始化LCD_Clear 接口全屏显示白色UART_init 接口初始化串口接口开启显示器LCD_DisplayOn接口关闭显示器LCD_DisplayOffLCD_XYRAM 接口设置显存区域LCD_SetC 接口设置TFT屏起始坐标LCD_Clear 内部模块清屏TFT内部模块显示字符串LCD_ShowStringLCD_Show_hz 内部模块显示16*16点阵中文delay 内部模块短暂延时内部模块给ILI9325的寄存器写数据LCD_WR_DATALCD_WR_REG 内部模块确定给哪个寄存器写数据LCD_RD_DAT内部模块读取ILI9325的寄存器里的数据A内部模块显示16*16点阵英文字符LCD_ShowChar内部模块显示字数LCD_ShowNum2.3 DHT11模块动作时序DHT11接收到开始信号触发一次温湿度采集,如果没有接受到主机发送开始信号,DHT11不会主动进行温湿度。
基于Matlab串口中断通信的温度监测系统[2009/05/0814:01|by root]摘要:基于某食品加工严格控制温度的需求,提出温度监测系统的总体设计方案,介绍在Matlab环境下串口中断通信的特点,详细描述基于事件驱动的串口中断通信的方法和步骤,最后给出具体的编程方法,并就如何修改回调函数提出几个需要关注的问题。
该方法实用可靠,已成功应用。
关键词:温度Matlab RS-232回调函数Temperature Monitoring System Based on MatlabSerial-interruption CommunicationAbstract:According to the requirements of controlling temperature strictly during some foodstuff machining,the paper puts forward the whole design project of the temperature monitoring system,introduces the features of serial-interruption communication under Matlab condition,explains the methods and process of serial-interruption communication based on event-driven in detail,and then provides available programming methods,puts forward several noticeable questions as to how to amend callback function.Successful application shows that this method is practical and credible.Keywords:temperature Matlab RS-232callback function1、引言某食品在初加工时需要严格控制温度在一定范围内并持续规定时间,温度过低达不到灭菌效果,温度过高食品容易腐烂,为此作者设计一套基于Matlab环境下的温度监测系统。
利用AVR单片机将采集到的温度数据传送至计算机的串口中,在Matlab环境下,基于事件驱动的中断通信机制,从计算机的RS-232串口中读取数据,运用Matlab的工程计算和图形处理等优点,对温度数据进行分析处理、文件存储、图形显示等,具备实时监测的功能。
Matlab是由美国Mathworks公司开发的面向工程计算和图形处理的功能强大的软件系统,其Matlab语言以矩阵为基本运算单元。
从Matlab6.0版本开始,增加了设备控制箱(instrument control toolbox),正式提供了对RS-232/RS-485通信标准的串口通信的支持;利用该工具箱的serial类及instrcallback()回调函数,能可靠地进行实时串行通信。
本文介绍在Matlab环境下,如何运用基于事件驱动的串口中断通信机制,将温度数据读至计算机中,利用Matlab进行数据存储、显示等。
2、系统总体设计简介假设食品加工时需要N个加热容器,在每个加热容器中放置一个温度传感器,用N个ATMEL公司生产的AVR单片机ATmega48做为温度采集单元对温度数据进行采集,经RS-485总线将数据上传至数据采集板,数据采集板采用AVR单片机ATmega16,完成N个加热容器温度的读取、校验,通过RS-232串口发送至计算机中,利用Matlab的串口中断通信机制接收数据,然后对数据进行分析、存储、绘图和打印等。
图1为系统总体设计框图。
图1:系统总体设计框图数据采集板循环读取各个温度采集单元的数据,每次循环后将各单元数据按一定格式通过串口发送至计算机。
数据采集板到计算机的数据格式如下:起始温度点数温度1整数温度1小数???温度N整数温度N小数校验和0xff N0xnn0xnn???0xnn0xnn0xcc校验和=温度点数(N)+2N个温度数据(取8位)。
计算机利用Matlab的串口中断通信机制接收数据,并且以曲线的形式在计算机上显示,同时对数据进行存储以备打印。
3、Matlab环境下PC计算机与单片机的通信在Matlab6.0以上版本中新增的设备控制工具条(instrument control toolbox)具备支持计算机与其它具有串口的外部设备之间的通信的功能。
其特点如下:a、支持基于串行接口(RS-232、RS-422、RS-485)的通信;b、通信数据支持二进制和文本(ASCII)两种方式;c、支持异步通信和同步通信;d、支持基于事件驱动的通信(亦称中断方式)。
据此可知,Matlab可以满足串行通信的要求。
3.1Matlab对串口控制的方法与步骤Matlab对串口的控制是通过serial()类以及相应的控制函数的方法实现的,主要分为四个步骤:⑴创建串口设备对象并设置其属性s=serial('com1');%创建串口1的设备对象s。
s.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B。
s.Timeout=2;%设置一次读或写操作的最大完成时间为2s,缺省值为10s。
s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,采用连续(continuous)模式(缺省方式)读取串口数据,而且数据会自动地存入输入缓冲区中。
某些属性只有在对象没有被打开前才能改变其值,如InputBufferSize 等。
需要注意的是串口设备对象属性的缺省值为波特率9600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位,如果数据采集板的RS-232工作参数与此相同,则无需修改属性值。
另外,用get(s)命令可知道其全部属性,用set(s)命令可知道其基本属性和当前的属性值。
⑵打开串口设备对象在读写数据采集板的温度数据之前,必须用fopen()命令打开串口设备对象,或者说将计算机与数据采集板通过RS-232连接起来,具体命令格式是:fopen(s);打开串口设备对象之前,查看属性s.Status的值为close,打开以后再查看,其值为open,说明计算机可以读取数据采集板的温度数据。
⑶读取串口数据串口的读写操作支持二进制和文本(ASCII)两种方式。
当Matlab通信数据采用文本(ASCII)方式时,读写串口设备的命令分别是fscanf(以及fgetl,fgets)、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite。
本文以文本方式读取串口数据,故只介绍fscanf的用法,其它命令请参考相应文献。
fscanf的命令格式为:A=fscanf(s,'format',size);其中,format是c语言的数据转换标准,缺省值为%c。
Size是读取数据字节数,如果Size为[m,n]格式,则A是矩阵;如果Size为n格式,则A是数组。
⑷关闭串口设备对象使用fclose(s)命令关闭串口设备对象。
如果不再使用该串口设备对象,为节省系统资源,用delete(s)命令删除内存中的串口设备对象;用clear s命令清除Matlab工作空间中的串口设备对象。
3.2在Matlab环境下实现串行通信的软件设计在Matlab环境下,读取串口数据的方法可以分为查询和中断两种。
以查询的方式进行串行通信时,需要实时查询串口缓冲区,编程容易,但计算机大量时间用于查询,所以很少使用;以中断方式对串口进行控制实现串行通信,可以实时处理传送的数据,但编程相对复杂。
在Matlab环境下以中断方式进行串行通信,实际上是采用事件驱动的方法实现的。
Matlab提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体的串口中断触发事件。
Matlab有四种常用的串口中断触发事件:缓冲区有指定字节数目的可用数据事件(bytes-available event)、串口接收到的数据长时间处于非激活状态事件(break-interrupt event)、串口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)。
当串口上有监视的事件发生时,Matlab会自动调用回调函数进行通信事件的处理。
因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。
本文选择bytes-available event中断触发事件读取数据采集板传送的温度数据,下面介绍编程方法。
⑴建立主程序,串口设备初始化操作,指定串口中断触发事件和回调函数创建串口设备对象、连接串口设备对象、初始化操作的代码与前述代码相同,不再赘述。
当串口缓冲区中有n字节的数据时,触发中断事件,自动调用instrcallback(obj,event)回调函数。
具体设置如下:s.BytesAvaibleFcnMode='byte';%中断触发事件为‘bytes-available Event’。
s.BytesAvailableFcnCount=n;%接收缓冲区每收到n个字节时,触发回调函数。
s.BytesAvailableFcn=@instrcallback;%得到回调函数句柄,指定回调函数。
⑵修改instrcallback(obj,event)回调函数,处理串口中断触发事件Matlab缺省的回调函数instrcallback(obj,event)存在于toolbox\matlab\iofun\@instrument目录中。
它实际上是一个有待于用户修改的程序模块,Mathworks公司只给出一些最基本的程序代码,能够在Matlab的命令窗口(command window)中显示串口触发中断事件的类型,中断事件所发生的日期、时间以及导致事件发生的对象名等信息,如果在相应的语句后加上分号,则取消显示。
中断发生后的通信事件处理以及数据的分析处理任务,需要用户自行添加相应的服务程序代码。
编写主程序和回调函数时,需要注意一下几个问题:a、在对instrcallback.m文件添加代码之前,最好对其做一个备份,且不要修改Mathworks公司给出的基本程序代码,以免出现错误。
b、回调函数instrcallback(obj,event)尽量只完成数据接收工作,其余的数据分析、显示、存储等工作放在主程序中进行。