В этом примере показано, как сгенерировать команды неблокирования использования данных об аналоговом выходе. Это позволяет вам продолжать работать в окне команды MATLAB во время генерации. Это называется фоновой генерацией. Используйте приоритетную генерацию, чтобы заставить MATLAB ожидать целой генерации данных, чтобы завершиться, прежде чем можно будет выполнить следующую команду.
Используйте daq
создать DataAcquisition. Этот пример использует модуль NI 9263 в Национальном Instruments® CompactDAQ Chassis NI cDAQ-9178. Это - модуль 2 в шасси. Выходные данные на трех каналах на уровне 10 000 сканов в секунду.
dq = daq("ni"); dq.Rate = 10000; addoutput(dq, "cDAQ1Mod2", 0:2, "Voltage");
Сгенерируйте выходные сигналы путем создания шаблона данных, которые неоднократно пишутся в устройство вывода. Данные для каждого канала являются базирующимся столбцом, и выходные сигналы синхронизируются с общими часами.
Создайте 3 формы волны:
data0
: 1 цикл синусоиды
data1
: 1 цикл синусоиды с 45 задержками фазы степени
data2
: 10 циклов синусоиды
data0 = sin(linspace(0, 2*pi, 1001))'; data1 = sin(linspace(0, 2*pi, 1001) + pi/4)'; data2 = sin(linspace(0, 2*pi*10, 1001))';
Вышеупомянутая форма волны содержит sin (0) и sin (2*pi). Чтобы повторить форму волны когерентно, не используйте конечную точку.
data0(end) = []; data1(end) = []; data2(end) = [];
На скорости генерации 10 000 сканов в секунду, можно ожидать наблюдать data0
и data1
как синусоиды на 10 Гц и data2
как синусоида на 100 Гц.
subplot(3,1,1) plot(data0) title('data0') grid on subplot(3,1,2) plot(data1) title('data1') grid on; subplot(3,1,3) plot(data2) title('data2') grid on;
Прежде, чем запустить непрерывную генерацию, preload
половина секунды данных. Используйте start
инициировать генерацию и возвратить управление в командную строку сразу, позволяя вам сделать другие операции в MATLAB, в то время как генерация запускается в фоновом режиме.
preload(dq,repmat([data0, data1, data2], 5, 1));
start(dq, "repeatoutput")
Используйте pause
в цикле, чтобы контролировать количество сканов, выведенных оборудованием на время генерации.
t = tic; while toc(t) < 1.0 pause(0.1) fprintf("While loop: scans output by hardware = %d\n", dq.NumScansOutputByHardware) end fprintf("Generation has terminated with %d scans output by hardware\n", dq.NumScansAcquired);
While loop: scans output by hardware = 1109 While loop: scans output by hardware = 2089 While loop: scans output by hardware = 3100 While loop: scans output by hardware = 4095 While loop: scans output by hardware = 5093 While loop: scans output by hardware = 6094 While loop: scans output by hardware = 7082 While loop: scans output by hardware = 8082 While loop: scans output by hardware = 9088 While loop: scans output by hardware = 10099 Generation has terminated with 0 scans output by hardware
Фоновая генерация запускается одновременно с другими операциями в MATLAB. Явным образом вызовите stop
закончить фоновую генерацию.
stop(dq)
Чтобы динамически сгенерировать выходные данные с помощью функции MATLAB, присвойте функцию ScansRequiredFcn
из DataAcquisition. Код ниже функционально эквивалентен 'repeatoutput'
dq.ScanRequiredFunction = (src,evt) write(src, repmat([data0, data1, data2], 5, 1));
start(dq, "continuous")