%并调用一次putdata函数将数据排列到对象ao duration=4;
set(ao,’SampleRate’,8000) set(ao,’ TriggerType’,’Manual’) ActualRate=get(ao,’SampleRate’); Len= ActualRate* duration
Data=cos(linspace(0,2*pi*500,len))’; putdata(ao,data);
%执行ao,触发触发器,等待设备对象停止运行 start(ao); trigger(ao); waittilstop(ao,5);
%不再需要ao时,应将它从内存和MATLAB工作空间中清除 delete(ao); clear ao;
21
三、保存和加载过程
3.1 保存和加载对象
可用下列两种格式来保存设备对象信息 ? 使用obj2mfile函数保存一个M文件 ? 使用保存命令保存一个MAT文件 ⑴保存设备文件到M文件
可以使用obj2mfile函数将设备对象编程到M文件。Obj2mfile函数提供了如下选择: ? 保存所有的属性值,或仅保存那些与默认值不同的属性值。
只读属性值不会被保存,因此在加载设备对象时,只读属性使用的是默认值。可以使用propinfo函数来确定某个属性是否为只读。 ? 使用set语法。圆点运算符或命名参考来保存属性值
例15 假定声卡创建了模拟输入对象ai,添加两个通道并配置几个相关的属性值。
ai=analoginput(‘winsound’);
addchannel(ai,1:2,{‘Temp1’;’Temp2’}); time=now
set(ai,’SampleRate’,11025,’TriggerRepeat’,4); set(ai,’TrggerFcn’,{@mycallback,time}); start(ai)
要将ai及其属性值保存到文件myqi.m中,代码如下。 obj2mfile(ai,’myai.m’);
要从M文件中加载设备对象到MARLAB空间中,可以直接在命令行中输入M文件名。 要从M文件myai.m中加载ai,代码如下: ai=myai;
注意:加载后只读属性如SampleAcquired 和SampleAvailable将被设置为默认值。 >>get(ai,{‘ SampleAcquired’,’SampleAvailable’}) Ans= [0] [0]
⑵保存设备对象到MAT文件
设备对象可以像普通的变量一样使用保存命令来保存到MAT文件中。
22
将模拟量输入对象ai和普通变量time保存到myail.mat文件的格式如下: save myail ai time
只读属性不会被保存,因此在导入设备对象时,只读属性使用默认属性。可以使用propinfo函数来查看某个属性是否为只读。
可以使用load命令将设备对象从MAT文件加载到MATLAB工作空间。从MAT文件myail.mat加载ai和time变量的代码如下:
load myail
3.2 记录信息
在模拟量输入对象运行时,可以将下列信息记录到磁盘中。 ? 已获取的数据 ? 事件信息
? 设备对象和通道信息 ? 硬件信息
在数据采集过程中,可以持续进行信息记录,此方式对数据采集应用调试非常方便。 与记录信息相关的属性如下:
? LogFileName:指定记录信息的磁盘文件名 ? Logging:表示是否数据正在被记录 ? LoggingMode:指定已获取数据的目标文件
? LogToDiskMode:指定数据、设备对象信息以及硬件信息是否被存储到一个磁盘文
件还是多个磁盘文件
可以将属性LoggingMode设置为Disk或Disk&Memory来启动信息记录。在每次执行start函数时都将创建一个新的记录,并且每个模拟量输入对象必须单独对应一个记录文件。
使用LogToDiskMode属性可以选择某个记录文件是否被覆盖,或者是否创建多个记录文件,如果LogToDiskMode为Overwrite则记录文件被覆盖;如果LogToDiskMode为Index,则将创建新的文件,所创建的新文件将在LogFileName属性值得基础上加上一个索引值名。 ⑴指定文件名
可以使用LogFileName属性来指定记录文件的文件名。属性LogFileName的值可以是操作系统所在的任何值(包括路径名)。此外,如果属性LogToDiskMode为Index,则记录文件名也遵循如下规则。
23
? 索引文件名由索引值来区分,索引值置于扩展文件名前,并且其增量为1. ? 如果第一个记录文件没有索引值,则此序列的第一个文件就是没有索引值的那个文
件。例如,如果LogFileName为myfile.daq,则myfile.daq就是第一个记录文件的文件名,myfile01.daq则是第二个记录文件,依次类推。 ? 在写记录文件后,属性LogFileName将被更新 ? 如果指定的记录文件名已经存在,则该文件将被覆盖。 ⑵返回记录信息
可以使用daqread函数来返回记录信息。调用daqread函数可以返回记录信息的任何部分,但是daqread函数一般用于如下用途:
? 返回数据和时间休息
? 返回事件、设备对象、通道及硬件信息
在记录文件中可以使用样本数和采样时间来标识记录的数据。
例16 本例展示了如何将信息记录到磁盘文件,以及如何使用daqread函数来返回记录信息。假定声卡被配置为立体声采集模式,数据同时被记录在磁盘文件和内存中,执行了4个触发,并且每次触发以8kHz的采样速率记录2秒钟的数据。
%为声卡创建一个模拟输入量对象ai ai=analoginput(‘winsound’); % ai=analoginput(‘nidaq’,1); % ai=analoginput(‘mcc’,1); %为ai添加两个硬件通道 ch=addchannel(ai,1:2);
% ch=addchannel(ai,0:1);%For NI and MCC %定义每次触发后2s的数据采集,触发重复3次,并且将 %信息记录到file00.daq文件中
Duration=2;%two second data for each trigger Set(ai,’SampleRate’,8000); ActualRate=get(ai,’SampleRate’);
Set(ai,’SamplePerTrigger’,duration*ActualRate); Set(ai,’TriggerRepeat’,3);
Set(ai,’LOgFileName’,’File00.daq’);
24
Set(ai,’LogMode’,’Disk&Memory’); %执行ai,等待ai停止 Start(ai);
%通过为daqread指定一定的参数可以查看事件、对象、通道和硬件信息 %例如,要返回所有时间休息,必须返回所有的记录数据 [data,time,abstime,events,info]=daqread(‘file00.daq’); %当不再需要ai时,应将其从MATLAB工作空间中清除 Delete(ai); Clear(ai);
执行完以上程序,再执行: >>{events.Type} 即输出为: Ans=
‘Start’ ‘Trigger’ Trigger’ Trigger’ Trigger’
25
Stop’ ‘