Модуль switch состоит из массива управляемых реле/коммутаторов, которые могут быть расположены и адресованы для обеспечения различных строений соединения. При использовании с соответствующим клеммным блоком может быть сконфигурирован модуль NI switch для использования определенной топологии коммутатора, такой как мультиплексор или матричная топология с одно- или многопроводными режимами переключения. Одним из распространенных применений является объединение одного или нескольких измерительных приборов с модулем переключателя для выполнения автоматических измерений на ряде устройств или контрольных тестовых точках схемы. Этот пример использует модуль NI-переключателя вместе с цифровым мультиметром NI (DMM) для измерения сопротивления 5 резистивных устройств в двухпроводном режиме измерения сопротивления.
Примечание.Модуль Switch и DMM, упомянутые ниже, сконфигурированы как моделируемые устройства в NI-MAX для публикации этого примера.
Модуль NI 2530 switch, используемый с матричным клеммным блоком и сконфигурированный в NI MAX, чтобы использовать 2-проводную матричную топологию 4x16.
Цифровой мультиметр NI 4065 (DMM), подключенный к строке матрицы коммутатора 'r0'.
Пять резисторов подключены к столбцам матрицы switch 'c0' к 'c4'.
Чтобы запустить этот пример, необходимо установить следующие пакеты аппаратной поддержки:
Для подключения к модулю switch используйте предварительно созданный драйвер прибора MATLAB ® 'niswitch.mdd', установленный с пакетом поддержки NI-SWITCH, и в качестве имени ресурса используйте имя устройства из NI MAX (например, 'PXI1Slot3'). MATLAB будет использовать драйвер NI-SWITCH для связи с прибором. По умолчанию в модулях NI-коммутаторов используется строение топологии, заданная в NI MAX (утилита, предоставляемая поставщиком).
mySwitch = icdevice('niswitch.mdd', 'PXI1Slot3'); connect(mySwitch);
Для подключения к прибору DMM используйте предварительно созданный драйвер прибора MATLAB 'nidmm.mdd', установленный с пакетом поддержки NI-DMM. Для имени ресурса используйте имя устройства из NI MAX (например, 'Dev1'). MATLAB будет использовать драйвер NI-DMM для связи с прибором.
myDMM = icdevice('nidmm.mdd', 'Dev1'); connect(myDMM);
Драйверы NI-Switch и NI-DMM используют предопределенные константы в качестве аргументов функции для настройки конкретных настроек и операций. Их значения перечислены в соответствующих файлах справки драйвера. Эти константы определены в файлах заголовков C, включенных в драйверы NI-SWITCH и NI-DMM:
'niswitch.h' и 'IviSwtch.h' в 'C :\Файлы программ\IVI Foundation\IVI\Include'
'nidmm.h' и 'IviDmm.h' в 'C :\Файлы программ\IVI Foundation\IVI\Include'
const.NISWITCH_VAL_BREAK_BEFORE_MAKE = 1; const.NISWITCH_VAL_SOFTWARE_TRIG = 3; const.NISWITCH_VAL_NONE = 0; const.NIDMM_VAL_2_WIRE_RES = 5; const.NIDMM_VAL_SOFTWARE_TRIG = 3; const.NIDMM_VAL_AUTO_RANGE_ON = -1; const.NIDMM_VAL_TIME_LIMIT_AUTO = -1;
Сбросьте переключатель в состояние подключения по умолчанию.
invoke(mySwitch.Utility, 'Reset');
Сконфигурируйте тип измерения DMM как двухпроводное измерение сопротивления. Сконфигурируйте DMM, чтобы выполнить операцию автообласти значений перед каждым измерением и укажите разрешение измерения.
invoke(myDMM.ConfigurationMeasurementOptions, 'ConfigurePowerLineFrequency', 60); MeasurementFunction = const.NIDMM_VAL_2_WIRE_RES; Range = const.NIDMM_VAL_AUTO_RANGE_ON; ResolutionDigits = 5.5; invoke(myDMM.Configuration, 'ConfigureMeasurementDigits', MeasurementFunction, Range, ResolutionDigits);
Соедините путь между тестируемым устройством (DUT) на переключателе матрицы столбцом 'c0' и измерительным прибором, в этом случае DMM на строке 'r0'.
invoke(mySwitch.Route, 'Connect', 'r0', 'c0'); MaximumTimeMs = 5000; invoke(mySwitch.Route, 'WaitForDebounce', MaximumTimeMs);
После установки переключателя приступите к измерению.
MaximumTime = const.NIDMM_VAL_TIME_LIMIT_AUTO; reading = invoke(myDMM.Acquisition, 'Read', MaximumTime); % Check if DMM reading was over-range IsOverRange = invoke(myDMM.Acquisition, 'IsOverRange', reading); disp(reading); disp(IsOverRange);
5.0002e+07 0
Отсоедините путь между клеммами 'r0' и 'c0'.
invoke(mySwitch.Route, 'disconnect', 'r0', 'c0');
Модуль switch может быть сконфигурирован для переключения между различными путями соединения путем сканирования, т.е. последовательного переключения и продвижения через список соединений, как определено в списке скана. Переключение соединения во время сканирования может быть синхронизировано с помощью измерительного прибора с помощью аппаратного запуска (аппаратное квитирование по времени) или может быть программно синхронизировано по команде программного триггера.
Чтобы сконфигурировать операцию сканирования, укажите список подключений в виде строки списка сканов. Здесь переключатель будет циклически соединяться между измерительным прибором (DMM) в строке матрицы 'r0' и тестируемыми устройствами в матричных столбцах 'c0' к 'c4'. Для получения дополнительной информации о синтаксисе списка скана см. документацию по драйверу NI-SWITCH.
NrConnections = 5; scanList = 'c0:4->r0;'; scanMode = const.NISWITCH_VAL_BREAK_BEFORE_MAKE; invoke(mySwitch.Scan, 'configureScanList', scanList, scanMode); % Set scan trigger input to software -- switching to the next connection in % the scan list will be done as a result of a SendSoftwareTrigger command. scanDelay = 0; triggerInput = const.NISWITCH_VAL_SOFTWARE_TRIG; scanAdvancedOutput = const.NISWITCH_VAL_NONE; invoke(mySwitch.Scan, 'ConfigureScanTrigger', scanDelay, triggerInput, scanAdvancedOutput); % Configure switch to cycle only once through the scan list by disabling % the continuous scan mode. invoke(mySwitch.Scan, 'SetContinuousScan', 0);
Инициируйте операцию скана коммутатора с помощью программного запуска.
invoke(mySwitch.Scan, 'InitiateScan'); for ii=1:NrConnections % Perform DMM measurement readings(ii) = invoke(myDMM.Acquisition, 'Read', const.NIDMM_VAL_TIME_LIMIT_AUTO); % Check if DMM reading is over-range IsOverRange = invoke(myDMM.Acquisition, 'IsOverRange', readings(ii)); if IsOverRange fprintf('Measurement %d is over range.\n', ii); end % Send trigger command to switch to advance to next connection invoke(mySwitch.Scan, 'SendSoftwareTrigger'); end
Отобразите результаты измерений.
figure; bar(readings); ylabel('Resistance (ohm)'); xlabel('Device #'); set(gca, 'XTick', [1:NrConnections]);
disconnect(mySwitch); delete(mySwitch); disconnect(myDMM); delete(myDMM);