主要内容

从会话DataAcquisition接口转换代码

这个话题可以帮助你过渡DataAcquisition代码从会话接口界面。

过渡通用工作流的命令

此表列出了会话接口命令通用工作流及其对应的DataAcquisition接口命令。

要做到这一点 会话的命令 DataAcquisition命令
找到你的系金宝app统支持硬件可用
daq.getDevices
工具箱重置为初始状态
daqreset
创建接口对象
s = daq.createSession (“倪”)
d =数据收集(倪);
添加模拟输入通道
addAnalogInputChannel(年代,“Dev1”,1“电压”)
addinput(d,“Dev1”、“ai1”、“电压”)
添加模拟输出通道
addAnalogOutputChannel(年代,“Dev1”0,“当前”)
addoutput(d,“Dev1”、“ao1”,“当前”)
添加数字输入行
addDigitalChannel(年代,“Dev1”,“Port0 / Line0:1”,“InputOnly”)
addinput (d,“Dev1”,“port0 / line1”,“数字”);
添加计数器输入通道
addCounterInputChannel(年代,“Dev1”,“ctr0”,“EdgeCount”)
addinput (d,“Dev1”,“ctr0”,“EdgeCount”);
集数据扫描速率
年代。率= 48000
d。率= 48000;
队列的数据输出
outputSignal queueOutputData(年代)

必要的后台操作。

预加载(outputSignal d)
开始同步前台操作块MATLAB®

获得输入信号。

年代。DurationInSeconds = 5;inData = startForeground(年代);
时间是一个输入参数函数。
inData =(d,秒(5));

产生输出信号。

queueOutputData(年代,outputSignal);startForeground(年代);
输出数据是直接提供的函数。
(signalData d)

同时生成并获得信号。

queueOutputData(年代,outputSignal);inData = startForeground(年代);

使用读写同时输入和输出。

inData =读写(d, outputSignal);
开始运行的异步读操作背景没有阻止MATLAB
年代。DurationInSeconds = 5;startBackground (s)
开始(d,“持续时间”秒(5))⋮inData =阅读(d,“所有”)
开始异步写操作背景没有阻止MATLAB运行
queueOutputData(年代,outputSignal);startBackground(年代);
预加载(d, outputSignal);开始(d)
开始连续的后台操作
年代。毕竟= true;inData = startBackground(年代);
连续操作的指定开始函数。
开始(d,“连续”)
开始连续背景写操作
lh = addlistener(年代,“DataRequired”,@queueMoreData);年代。毕竟= true;queueOutputData(年代,outputSignal);startBackground(年代);

如果数据被加载,一代开始开始函数。

d。ScansRequiredFcn = @writeMoreData;预加载(d, outputSignal);⋮开始(d,“连续”)

如果数据没有加载,一代开始的函数。

d。ScansRequiredFcn = @writeMoreData;开始⋮(d,“连续”)(outputSignal d)
配置回调
listenDA = addlistener(年代,“DataAvailable”,@logData);listenDR = addlistener(年代,“DataRequired”,@queueMoreData);listenEO = addlistener(年代,“ErrorOccurred”,@handleError);
d。ScansAvailableFcn = @logData;d。ScansRequiredFcn = @writeMoreData;d。ErrorOccurredFcn = @handleError;
指定外部触发
addTriggerConnection(年代,“外部”,“Dev3 / PFI0”,“StartTrigger”);
addtrigger(d、“数字”、“StartTrigger”,“外部”、“Dev3 / PFI0”);
指定输入信号范围
ch = addAnalogInputChannel(年代,“Dev1”,1“电压”);ch.Range = 5 [5];
ch = addinput (d,“Dev1”,“爱啊”,“电压”);ch.Range = 5 [5];

获得模拟数据

会话界面

使用会话界面,您可以创建一个供应商会议,并将频道添加到会话。您可以使用任何设备或底盘从同一供应商提供给您的系统和可以添加模拟、数字和计数器输入和输出通道。所有的渠道运作在一起当你开始会话。

  1. 找到你的系统可用的硬件。

    d = daq.getDevices
  2. 为国家仪器™设备创建一个会话。

    s = daq.createSession (“倪”);
  3. 设置会话扫描率为8000。

    年代。率= 8000
  4. 添加一个模拟输入通道的设备ID Dev1电压测量,然后开始收购。

    addAnalogInputChannel(年代,“Dev1”,1“电压”);startForeground(年代);

DataAcquisition接口

  1. 找到你的系统可用的硬件。

    开发者= daqlist
  2. 为国家创建一个DataAcquisition仪器设备。

    d =采集(“倪”);
  3. 设置DataAcquisition扫描率到8000年。

    d。率= 8000
  4. 添加一个模拟输入通道的设备IDDev1电压测量,然后开始收购。

    addinput (d,“Dev1”,“ai1”,“电压”);data =阅读(d, 4000);

    扫描结果返回给时间表数据

使用触发器

获得使用硬件触发模拟数据。

会话界面

您可以指定一个外部事件触发数据采集使用会话接口。

  1. 创建一个会话,并添加两个模拟输入通道。

    s = daq.createSession (“倪”);ch = addAnalogInputChannel(年代,“Dev1”0:1,“电压”);
  2. 配置终端和渠道的会话范围。

    ch (1)。TerminalConfig =“SingleEnded”;ch (1)。范围= (-10.0 - 10.0);ch (2)。TerminalConfig =“SingleEnded”;ch (2)。范围= (-10.0 - 10.0);
  3. 创建一个外部触发连接和设置触发器运行一次。

    addTriggerConnection(年代,“外部”,“Dev1 / PFI0”,“StartTrigger”);s.Connections (1)。TriggerCondition =“RisingEdge”;年代。TriggersPerRun = 1;
  4. 设置率和收购的持续时间。

    年代。率= 50000;年代。DurationInSeconds = 0.01;
  5. 获得数据在前台和画出数据。

    (数据、时间戳)= startForeground(年代);情节(时间戳,数据)

DataAcquisition接口

  1. 创建一个DataAcquisition和添加两个模拟输入通道。

    d =采集(“倪”);ch = addinput (d,“Dev1”0:1,“电压”);
  2. 配置的终端配置和范围DataAcquisition渠道。

    ch (1)。TerminalConfig =“SingleEnded”;ch (1)。范围= (-10.0 - 10.0);ch (2)。TerminalConfig =“SingleEnded”;ch (2)。范围= (-10.0 - 10.0);
  3. 创建一个外部触发连接和设置触发器运行一次。

    addtrigger (d,“数字”,“StartTrigger”,“Dev1 / PFI0”,“外部”);d.DigitalTriggers (1)。条件=“RisingEdge”;d。NumDigitalTriggersPerRun = 1;
  4. 设置扫描速率的收购。

    d。率= 50000;
  5. 获得的数据在前台0.01秒和情节的数据通道。

    data =阅读(d,秒(0.01));(数据。时间,data.Variables)

启动一个操作当扫描数量超过指定值

你可以指定收购观看指定数量的扫描,然后启动一些操作发生。

会话界面

会话接口使用监听器和事件触发某些操作。的NotifyWhenDataAvailableExceeds财产可以火DataAvailable事件。一个侦听器定义要执行的操作。

  1. 创建一个采购会议,添加一个模拟输入通道。

    s = daq.createSession (“倪”);addAnalogInputChannel(年代,“Dev1”,“ai0”,“电压”);
  2. 设置扫描速率为每秒800000扫描,自动设置DataAvailable通知自动火灾每秒10倍。

    年代。率= 800000;s.NotifyWhenDataAvailableExceeds
    ans = 80000
  3. 增加NotifyWhenDataAvailableExceeds到160000年。

    s.NotifyWhenDataAvailableExceeds= 160000;
  4. 添加一个侦听器来确定函数当事件发生时。

    L = addlistener(年代,“DataAvailable”,@ (src、事件)readAndLogData (src));

DataAcquisition接口

DataAcquisition接口使用回调函数,在出现执行由特定的属性决定的。的ScansAvailableFcnCount属性决定了何时启动定义的回调函数ScansAvailableFcn

  1. 创建一个DataAcquisition接口,并添加一个模拟输入通道。

    d =采集(“倪”);ch = addinput (d,“Dev1”,1“电压”);
  2. 设置扫描速率为每秒800000扫描,自动调整ScansAvailableFcnCount财产。

    d。率= 800000;d.ScansAvailableFcnCount
    80000年
  3. 增加ScansAvailableFcnCount到160000年。

    d.ScansAvailableFcnCount= 160000;
  4. 确定计数发生时一个回调函数。

    d。ScansAvailableFcn = @readAndLogData;

模拟输出代码生成器

比较会话接口代码和DataAcquisition接口代码可以使用生成的代码模拟输出发电机在MATLAB版本R2019b和R2020a。在这两个例子中,生成器创建了一个10 Hz测试信号正弦波为1秒国家仪器的单通道usb - 6211。

% %自动生成的数据采集工具箱在MATLAB R2020a模拟输出信号发生器。% %创建DataAcquisition对象%创建DataAcquisition对象指定供应商。d =采集(“倪”);% %添加频道%添加通道,通道属性,如果任何。addoutput (d,“Dev1”,“ao0”,“电压”);% %设置DataAcquisition率%设置扫描速率。d。率= 250000;% %定义测试信号%创建一个测试指定峰振幅的正弦波信号%的通道。amplitudePeakToPeak_ch1 = 20;sineFrequency = 10;% 10赫兹totalDuration = 1;% 1秒outputSignal = [];outputSignal (: 1) = createSine (amplitudePeakToPeak_ch1/2,sineFrequency d.Rate,“双相”,totalDuration);outputSignal (+ 1,:) = 0;% %产生信号%写信号数据。写(d, outputSignal);% %清理%清除所有DataAcquisition和通道对象。清晰的doutputSignal% %创建测试信号% Helper函数用于创建测试正弦波信号。函数正弦= createSine (A、f sampleRate、类型、时间)numSamplesPerCycle =地板(sampleRate / f);T = 1 / f;步伐= T / numSamplesPerCycle;t =(0:步伐:T-timestep) ';如果类型= =“双相”y = A * sin(2 *π* f * t);elseif类型= =“单极”y = A * sin(2 *π* f * t) +一个;结束numCycles =圆(f *时间);正弦= repmat (y numCycles 1);结束
% %自动生成的数据采集工具箱在MATLAB R2019b模拟输出信号发生器% %创建数据采集会话%为指定的供应商创建一个会话。s = daq.createSession (“倪”);% %设置会话属性%设置属性,不使用默认值。年代。率= 250000;% %通道添加到会话%添加通道,通道属性。addAnalogOutputChannel(年代,“Dev1”,“ao0”,“电压”);% %定义测试信号%创建一个测试指定峰振幅的正弦波信号%的通道。amplitudePeakToPeak_ch1 = 20;sineFrequency = 10;% 10赫兹totalDuration = 1;% 1秒outputSignal (: 1) = createSine (amplitudePeakToPeak_ch1/2,sineFrequency s.Rate,“双相”,totalDuration);outputSignal (+ 1,:) = 0;% %队列信号数据%让一代信号数据会话。queueOutputData(年代,outputSignal);% %产生信号%开始前台代startForeground(年代);% %清理%的会话和渠道。清晰的年代outputSignal% %创建测试信号% Helper函数用于创建测试正弦波信号。函数正弦= createSine(振幅、频率、sampleRate、类型、持续时间)sampleRatePerCycle =地板(sampleRate /频率);时间= 1 /频率;s =时间/ sampleRatePerCycle;t = (0: s: period-s)”;如果strcmpi(类型,“双相”)y =振幅*罪(2 *π*频率* t);elseifstrcmpi(类型,“单极”)y =振幅* sin(2 *π*频率* t) +振幅;结束numCycles =圆(频率*时间);正弦= repmat (y numCycles 1);结束

以前的界面帮助

在R2020a后来DataAcquisition接口支持。金宝app如果您使用的是较早的版本,使用会话接口。会话接口的更多信息和示例,明白了数据采集工具箱文档(R2019b)