编辑: 戴静菡 | 2016-03-20 |
232、RS-
422、RS-485)、GPIB总线(IEEE
2488、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)命令. ②打开串口设备对象. fopen(scom);
③读写串口操作.初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口的读写操作支持二进制和文本(ASCII)两种方式.当Matlab通信数据采用西方(ASCII)方式时,读写串口设备的命令分别是fscanf、fpritf;
当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite.下面以文本方式读写串口为例: a.读串口.A=fscanf(scom,'%d',[10,100];
%从串口设备对象scom中读入10*100个数据填充到数组A[10,100]中,并以整型的数据格式存放. h.写串口.Fprintf(scom,'%s','RS232','async');
%将字符串'RS232?'以字符的数据格式写入到串口设备scom,写操作以异步的方式进行. ④关闭并清除设备对象. fclose(scom);
%关闭串口设备对象 delete(scom);
%删除内存中的串口设备对象 clear scom;
%清除工作空间中的串口设备对象 当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建的串口对象对象清除,以免占用系统资源. 可以看出,在Matlab中进行串行通信是十分方便的,编程较为简单.而且,在Matlab中串行通信的失误率很低,通信较为可靠,也可以采用增加握手信号以及数据校验等的方式进一步增加通信的可靠性. 3.2 Matlab实现串行通信的软件设计 在Matlab环境下,读取串口数据的方式可以分为两种―查询和中断.以查询的方式进行串行通信时,如下位单片机有大量的数据分时分批传送给PC机,就需要不停查询串行口的缓冲区,有数据就读取;