允许使用能唯一识别属性名的字母来指定属性名,也就是说对于大多数的属性名,可使用缩写名来指定属性名。例如,在配置SampleRate属性时,用户可以使用下列任何一种方式来指定属性名:
set(ai,’SampleRate’,44100);
set(ai,’samplerate’,44100); set(ai,’sampler’,44100);
但是,当需要在M文件中包含属性名时,应使用属性名的全称,从而避免今后数据采集工具箱扩充时,新增属性名而造成属性名的不唯一性。 ⑸默认属性值
当不明确为一个属性定义一个怎样的值时,可以使用属性的默认值。所有的可配置属性都有默认属性。但是,对于不同的硬件,给定属性的默认值可能不一致。此外,某些默认属性值有引擎计算而来并且与其他的属性设置有关。如果硬件驱动适配器为一属性指定了一个默认值,则该值将比工具箱本身提供的默认值优先级高。
如果某个属性具有有限长度的字符串属性值,那么该属性的默认值将用“{}”括起来。 例9 LoggingMode属性默认值是Memory: >>set(ai,’ LoggingMode’)
[ Disk | {Memory} | Disk&Memory ]
可以使用propinfo函数来查看任何属性的默认值。例如: >>out=propinfo(ai,'LoggingMode') out =
Type: 'string' Constraint: 'enum'
ConstraintValue: {'Disk' 'Memory' 'Disk&Memory'} DefaultValue: 'Memory' ReadOnly: 'whileRunning' DeviceSpecific: 0
16
2.4 获取或输出数据
配置好设备对象后,就可以获取或输出数据了。获取或输出数据包括如下步骤: ⑴启动设备对象。 ⑵记录或发送数据。 ⑶停止设备对象。
由于数据是在MATLAB和硬件之间传输的,所以可以把设备对象看出工作于某种特定的状态。在数据采集工具箱中定义了两种工作状态: ? 运行状态:
对于模拟量输入对象,运行状态是指从模拟量输入子系统中获取数据的状态,但是获取的数据并不一定要存入内存和磁盘文件中。对于模拟量输出对象,运行状态是指数据引擎中的数据队列已准备好输出到模拟量输出子系统中。
对于模拟量输入、输出对象,运行状态均由Running属性来标识,Running属性的取值为On或Off。 ? 记录或发送状态:
对于模拟量输入对象,记录状态是指从模拟量输入子系统中获取的数据存储到引擎或磁盘文件中,记录状态由Logging属性来标识,Logging属性取值为On或Off;对于模拟量输出对象,发送状态是指数据引擎中的数据队列被输出到模拟量输出子系统中,发送状态由Sending属性标识,Sending属性的取值为On或Off。
Running、Logging和Sending属性都是只读属性,由数据引擎自动赋值On或Off。当Running属性为Off时,Logging和Sending属性必定为Off,当Running属性为On时,Logging和Sending属性只在触发时设置为On。
注意:数字量I/O对象也具有运行状态。但是,由于数字量I/O对象不用在数据引擎中存储数据,所以只反映记录和发送状态。 ⑴启动设备对象
可以使用start函数来启动一个设备对象。 例10 启动模拟量输入对象ai。
ai=analoginput(‘winsound’); addchannel(ai,1:2); start(ai)
当执行start函数后,Runningsx的属性值被自动设置为On,并且设备对象和硬件设备
17
在此时会根据所配置或默认的属性值运行。
在使用模拟量输入对象进行数据采集的过程中,可以使用peekdata函数来预览数据。peckdata函数返回的仅是最新数据的映射,而不会讲数据从数据引擎中移除。 例11 要预览模拟量输入对象ai中每个通道所获取的最近499个采样样本,代码如下。
data=peekdata(ai,499);
因为预览数据通常是一个优先级的任务,所以peekdata函数不能确保返回所有期望的数据。在设备对象运行的任何时刻均可以预览数据。 ⑵记录或发送数据
在设备对象运行的过程中,可以:
? 将从模拟输入子系统中获取的数据记录到数据引擎(内存)或磁盘文件中。 ? 将数据引擎中的数据队列输出到模拟量输出子系统中。
但是,在记录或发送数据之前,必须有触发发生。配置模拟量输入、输出触发要用到TriggerType属性。在本章中所有示例其TriggerType属性值采用的都是默认值Immediate,表示在start函数开始运行时触发立即开始。 ⑶提取记录数据
当模拟量输入对象的触发发生时,Logging属性自动被设置为On,同时由硬件获取的数据被记录到数据引擎或磁盘文件中。可以使用getdata函数来提取记录到引擎中的数据。例如,从ai的每个通道提取499个样本的代码如下:
data=getdata(ai,499)
getdata函数将锁定MATLAB命令行,直至所有需要的数据返回到MATLAB工作空间为止。在触发执行后的任何时刻均可以提前数据。 ⑷发送数据队列
对于模拟量输出对象,在数据输出到硬件之前,必须使用putdata函数在数据引擎中对数据进行排列。
例12 在数据中为模拟量输出对象ao的每个通道排列8000个样本: ao=analogoutput(‘winsound’); addchannel(ao,1:2);
data=cos(linspace(0,2*pi*500,8000))’; putdata(ao,[data data])
start(ao) %在数据队列可以输出之前,应运行模拟量输出对象
18
当触发发生时,Sending属性自动被设置为On,同时数据队列被发送到硬件中。 ⑸停止设备对象
在下列条件中的任何一个条件下均可停止模拟量输入、输出对象: ? 执行stop函数
? 所需数量的样本已被获取或发送。 ? 发生了硬件run-time错误。 ? 超时错误
当设备对象停止时,属性Running、Logging和Sending自动被设置为Off。这时,可以对设备对象进行重新配置,或者使用当前配置来再次运行设备对象。 ⑹清除
当不再需要设备对象的时候,应该将其从数据引擎(内存)以及MATLAB工作空间中清除。这时结束数据采集过程的最后步骤。
可以使用delete函数将设备对象从内存中清除。例如,要清除前文中创建的模拟量输入对象ai:
delete(ai)
被从数据引擎(内存)删除的设备对象将不再可用(即不再与硬件连接),所以应该使用clear命令将对象从MATLAB工作空间中清除。
clear ai
如果使用clear命令来删除一个与硬件保持连接的设备对象,该对象将从工作空间中移除但还保持与硬件的连接。可以使用deqfind函数将已删除的sbdx恢复到MATLAB工作空间。 例13 本示例展示了如何配置声卡的音频信号采集。采集频率设置为44.1KHz,采集的数据满足大于或等于0.2V并且具有上升沿时,该数据就被存储在数据引擎中,最后从数据引擎中提取一部分数据。代码如下:
%为声卡创建一个模拟量输入对象AIVoice AIVoice= analoginput(‘winsound); %VIVoice=analoginput(‘nidaq’,1); % VIVoice=analoginput(‘mcc’,1); %为AIVoice添加一个硬件通道 ch=addchannel(AIVoice,1);
% ch=addchannel(AIVoice,0);%For NI and MCC
19
%定义一个2秒的采样,采用软件触发。触发源为ch并且当有幅值至少为0.2V的上升 %沿跳变时执行触发
duration=2;%two second acquisition set(AIVoice,’SampleRate’,44100); ActualRate=get(AIVoice,’SampleRate’);
set(AIVoice,’SamplePerTrigger’,ActualRate*duration) set(AIVoice,’TriggerChannel’,ch) set(AIVoice,’TriggerType’,’Software’) set(AIVoice,’TriggerCondition’,’Rising’) set(AIVoice,’TriggerConditionValue’,0.2)
%执行AIVoice,获取指定数量的采样样本,并从数据引擎中提取1000个样本。 %用图形显示引擎中剩余的样本 start(AIVoice)
[data,time]=getdata(AIVoice,1000); remsamp=num2str(AIVoice.SamplesAvailable);
disp([‘Number of samples remaining in engine:’remsamp]) plot all extracted data. plot(time,data) drawnow
xlabel(‘Time(sec.)’);
ylabel(‘Signal Level(Volts)’); grid on
注意:当使用软件触发时,必须在指定属性TriggerCondition的值之前,指定属性TriggerType。
例14 由MATLAB产生的余弦波数据通过声卡的D/A转换器输出到扬声器。代码如下:
%为声卡创建一个模拟量输出对象ao ao=analogoutput(‘winsound’); %为ao添加一个通道 ch=addchannel(ao,1);
%定义输出时间4s,为基本安装属性分配值,排列产生的数据
20