Работа с VXI и интерфейсами PXI

Понимание VISA-VXI

Интерфейс VXI сопоставлен с контроллером VXI, который вы устанавливаете в слоте 0 шасси VXI. Этот интерфейс, наряду с другой соответствующей аппаратной, показывают ниже.

Интерфейс VXI поддерживается через объект VISA-VXI. Многие функции, сопоставленные с объектом VISA-VXI, подобны функциям, сопоставленным с другими инструментальными объектами. Поэтому только функции и свойства, которые уникальны для интерфейса VXI ВИЗЫ, обсуждены в этом разделе.

Обратитесь к Обзору GPIB, чтобы узнать об общих возможностях тулбокса, таких как запись и чтение текста и двоичных данных, использование событий и коллбэков, и так далее.

Понимание VISA-PXI

Интерфейс PXI поддерживается через объект VISA-PXI. Функции, сопоставленные с объектом VISA-PXI, идентичны функциям, сопоставленным с объектом VISA-VXI. Информация предусмотрела работу с VISA-VXI в этом разделе, также работает на VISA-PXI.

Устройства PXI могут поддерживаться другими тулбоксами или идти с высокоуровневыми драйверами, которые легче взаимодействовать с, чем необработанный интерфейс PXI.

Создание объекта VISA-VXI

Вы создаете объект VISA-VXI с функцией visa. Каждый объект сопоставлен с

  • Шасси VXI

  • Контроллер VXI в слоте 0 шасси VXI

  • Инструмент установлен в шасси VXI

visa требует имени поставщика и имени ресурса как входные параметры. Именем поставщика является или keysight или ni. Имя ресурса состоит из индекса шасси VXI и инструмента логический адрес. Можно найти имя ресурса VISA-VXI для данного инструмента с инструментом конфигурирования обеспеченным поставщиком, или с функцией instrhwinfo. (Вместо имени ресурса можно использовать псевдоним, как задано с инструментом конфигурирования поставщика VISA.), Как описано в Соединении с Инструментом, можно также сконфигурировать значения свойств во время создания объекта.

Прежде чем вы создадите объект VISA, необходимо найти инструмент в соответствующем поставщике проводником VISA. Когда вы находите, что сконфигурированный инструмент, отмечает, что ресурс представляет в виде строки и создает объект с помощью той информации. Например, создать объект VISA-VXI сопоставило с шасси VXI с индексом 0 и Keysight™ E1432A цифровой преобразователь с 16 каналами с логическим адресом 32,

vv = visa('keysight','VXI0::32::INSTR');

Объект VISA-VXI vv теперь существует в рабочей области MATLAB®.

Чтобы открыть связь с инструментом, введите:

fopen (vv);

Можно затем отобразить класс vv с командой whos.

whos vv
  Name      Size         Bytes  Class

  vv        1x1            882  visa object

Grand total is 15 elements using 882 bytes

После того, как вы создадите объект VISA-VXI, следующие свойства являются автоматически присвоенными значениями. Эти свойства предоставляют информацию об основанном на объектах на ее типе класса и информации об адресах.

VISA-VXI описательные свойства

PropertyName

Описание

Name

Задайте описательное имя для объекта VISA-VXI.

RsrcName

Укажите на имя ресурса для инструмента VISA.

Type

Укажите на тип объекта.

Можно отобразить значения этих свойств для vv.

vg.Name
ans =

'VISA-VXI0-32' 
vg.RsrcName
ans =

'VXI0::32::INSTR'
vg.Type
ans =

'visa-vxi'

VISA-VXI Отображение объектов

Объект VISA-VXI предоставляет вам удобное отображение, которое обобщает важный адрес и информацию состояния. Можно вызвать сводные данные отображения эти три пути:

  • Введите объект VISA-VXI в командной строке.

  • Исключите точку с запятой при создании объекта VISA-VXI.

  • Исключите точку с запятой при конфигурировании свойств с помощью записи через точку.

Можно также отобразить итоговую информацию через браузер Рабочей области путем щелчка правой кнопкой по инструментальному объекту и выбора Display Summary из контекстного меню.

Сводные данные отображения для объекта VISA-VXI vv приведены ниже.

VISA-VXI Object Using AGILENT Adaptor : VISA-VXI0-32

Communication Address 
   ChassisIndex:       0
   LogicalAddress:     32

Communication State 
   Status:             closed
   RecordStatus:       off

Read/Write State  
   TransferStatus:     idle
   BytesAvailable:     0
   ValuesReceived:     0
   ValuesSent:         0

Адрес VISA-VXI

Адрес VISA-VXI состоит из:

  • Индекс шасси шасси VXI

  • Логический адрес инструмента установлен в шасси VXI

Необходимо задать логическое значение адреса через имя ресурса во время создания объекта VISA-VXI. Кроме того, необходимо включать индексное значение шасси как часть имени ресурса, если это отличается от значения по умолчанию 0. Свойства, сопоставленные с адресом шасси и инструмента, следующие.

Свойства адреса VISA-VXI

PropertyName

Описание

ChassisIndex

Укажите на индекс шасси VXI.

LogicalAddress

Задайте логический адрес инструмента VXI.

Slot

Укажите на местоположение слота инструмента VXI.

Свойства ChassisIndex и LogicalAddress автоматически обновляются с заданными значениями имени ресурса, когда вы создаете объект VISA-VXI. Свойство Slot автоматически обновляется после того, как объект соединяется с инструментом с функцией fopen.

Можно отобразить значения свойств адреса для объекта VISA-VXI vv, созданный в Создании Объекта VISA-VXI.

fopen(vv)
vv.ChassisIndex 
ans = 


0
vv.LogicalAddress
ans =

32
vv.Slot
ans =

2

Основанная на регистре коммуникация

Инструменты VXI или основаны на сообщении или основаны на регистре. Обычно это принято, что основанные на сообщении инструменты легче использовать, в то время как основанные на регистре инструменты быстрее. Основанный на сообщении инструмент имеет свой собственный процессор, который позволяет ему интерпретировать высокоуровневые команды, такие как команда SCPI. Поэтому, чтобы связаться с основанным на сообщении инструментом, можно использовать чтение и записать функциям fscanf, fread, fprintf и fwrite. Для получения дальнейшей информации об этих функциях, обратитесь к Связи со Своим Инструментом.

Если основанный на сообщении инструмент также содержит общую память, то можно получить доступ к общей памяти посредством основанных на регистре операций чтения и операций записи. Основанный на регистре инструмент обычно не имеет своего собственного процессора, чтобы интерпретировать высокоуровневые команды. Поэтому, чтобы связаться с основанным на регистре инструментом, необходимо использовать чтение и функции записи тот доступ регистр.

Существует два типа основанной на регистре записи и читают функции: низкоуровневый и высокий уровень. Основным преимуществом высокоуровневых функций является простота использования. Обратитесь к Использованию Высокоуровневых Функций Памяти для получения дополнительной информации. Основным преимуществом низкоуровневых функций является скорость. Обратитесь к Использованию Низкоуровневых Функций Памяти для получения дополнительной информации.

Функции, сопоставленные с основанной на регистре записью и операциями чтения, следующие.

VISA-VXI основанные на регистре функции записи и чтения

FunctionName

Описание

memmap

Сопоставьте память для низкоуровневых операций чтения памяти и операций записи.

mempeek

Низкоуровневая память считана из регистра VXI.

mempoke

Низкоуровневая запись памяти к регистру VXI.

memread

Высокоуровневая память считана из регистра VXI.

memunmap

Не сопоставьте память для низкоуровневых операций чтения памяти и операций записи.

memwrite

Высокоуровневая запись памяти к регистру VXI.

Свойства, сопоставленные с основанной на регистре записью и операциями чтения, приведены ниже.

VISA-VXI основанные на регистре свойства записи и чтения

PropertyName

Описание

MappedMemoryBase

Укажите на базовый адрес памяти расширенной памяти.

MappedMemorySize

Укажите на размер расширенной памяти для низкоуровневых операций чтения и операций записи.

MemoryBase

Укажите на базовый адрес A24 или пробела A32.

MemoryIncrement

Задайте, передается ли шаг смещения регистра VXI после данных.

MemorySize

Укажите на размер памяти, которую требуют в A24 или адресном пространстве A32.

MemorySpace

Задайте адресное пространство, используемое инструментом.

Понимание характеристик регистра инструмента

Этот пример исследует характеристики регистра для Keysight E1432A 51,2 kSa/s цифровых преобразователя с 16 каналами с модулем DSP.

Все инструменты VXI имеют пространство памяти A16, состоящее из 64 байтов. Это известно как пробел A16, потому что адреса 16 битов шириной. Основанные на регистре инструменты предоставляют карту распределения памяти адресного пространства, которое описывает информацию, содержавшую в пробеле A16. Некоторые инструменты VXI также имеют A24 или пробел A32, если 64 байтов, обеспеченных пробелом A16, недостаточно, чтобы выполнить необходимые задачи. Инструмент VXI не может использовать и A24 и пробел A32:

  1. Создайте инструментальный объект — Создают объект VISA-VXI vv, сопоставленный с шасси VXI с индексом 0 и цифровым преобразователем Keysight E1432A с логическим адресом 130.

    vv = visa('keysight','VXI0::130::INSTR');
  2. Соединитесь с инструментом — Подключение vv к инструменту.

    fopen(vv)
    

    Свойство MemorySpace указывает на тип пространства памяти инструментальные поддержки. По умолчанию все инструменты поддерживают пространство памяти A16. Однако это свойство может быть A16/A24 или A16/A32, если инструмент также поддерживает A24 или пространство памяти A32, соответственно.

    vv.MemorySpace
    ans =
    A16/A24

    Если объект VISA-VXI не соединяется с инструментом, MemorySpace всегда возвращает значение по умолчанию A16.

    Свойство MemoryBase указывает на базовый адрес A24 или пробела A32, и задано как шестнадцатеричная строка. Свойство MemorySize указывает на размер A24 или пробела A32. Если инструмент VXI поддерживает только пространство памяти A16, значения по умолчанию MemoryBase к 0H и значения по умолчанию MemorySize к 0.

    vv.MemoryBase
    ans = 
        200000H    
    vv.MemorySize
    ans = 
        262144
  3. Разъединитесь и вымойтесь — Когда вам больше не нужен vv, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(vv)
    delete(vv)
    clear vv

Используя высокоуровневые функции памяти

Этот пример использует высокоуровневые функции памяти, memread и memwrite, к информации о регистре доступа для Keysight E1432A 51,2 kSa/s цифровых преобразователя с 16 каналами с модулем DSP. Основным преимуществом этих высокоуровневых функций является простота использования — можно получить доступ к нескольким регистрам с одним вызовом функции, и память, к которой нужно получить доступ, автоматически сопоставлена для вас. Основной недостаток является отсутствием скорости — они медленнее, чем низкоуровневые функции памяти.

Каждый регистр содержит 16 битов и сопоставлен со значением смещения, которое вы предоставляете к memread или memwrite. К первым четырем регистрам цифрового преобразователя получают доступ в этом примере и описывают ниже.

Keysight (раньше Agilent) информация о регистре E1432A

Регистр

Смещение

Описание

ID

0

Этот регистр обеспечивает инструментальную конфигурационную информацию и всегда задается как CFFF. Биты 15 и 14 равняются 1, указывая, что инструмент основан на регистре. Биты 13 и 12 0, указывая, что инструмент поддерживает пространство памяти A24. Остающиеся биты являются всем 1, указывая на ID устройства.

Тип устройства

2

Этот регистр обеспечивает инструментальную конфигурационную информацию. Биты 15-12 указывают на память, требуемую пробелом A24. Остающиеся биты указывают на типовой кодекс для инструмента.

Состояние

4

Этот регистр обеспечивает инструментальную информацию о статусе. Например, бит 15 указывает, можно ли получить доступ к регистрам A24, и бит 6 указывает, произошла ли ошибка связи DSP.

Смещение

6

Этот регистр задает базовый адрес регистров A24 инструмента. Биты карта 15-12 строки адреса ШИНЫ VME A23-A20 для A24 указывают доступ. Остающиеся биты являются всем 0.

Для более подробной информации об этих регистрах обратитесь к HP E1432A User's Guide.

  1. Создайте инструментальный объект — Создают объект VISA-VXI vv, сопоставленный с шасси VXI с индексом 0, и цифровой преобразователь Keysight E1432A с логическим адресом равняется 130.

    vv = visa('keysight','VXI0::130::INSTR');
  2. Соединитесь с инструментом — Подключение vv к инструменту.

    fopen(vv)
  3. Запишите и считайте данные — следующая команда выполняет высокоуровневое чтение Регистра ID, который имеет смещение 0.

    reg1 = memread(vv,0,'uint16','A16')
    reg1 =
           53247

    Преобразуйте reg1 в шестнадцатеричное значение и двоичную строку. Обратите внимание на то, что шестнадцатеричное значение является CFFF, и младшие значащие 12 битов являются всем 1, как ожидалось.

    dec2hex(reg1)
    ans =
    CFFF
    dec2bin(reg1)
    ans =
    1100111111111111

    Можно считать несколько регистров с memread. Следующая команда читает следующие три регистра. Смещение 2 указывает, что операция чтения начинается с Регистра Типа устройства.

    reg24 = memread(vv,2,'uint16','A16',3)
    reg24 =
           20993
           50012
           40960

    Следующие команды пишут в Регистр Смещения и затем читают значение назад. Обратите внимание на то, что, если вы измените значение этого регистра, вы не сможете получить доступ к пробелу A24.

    memwrite(vv,45056,6,'uint16','A16'); 
    reg4 = memread(vv,6,'uint16','A16')
    reg4 =
          45056

    Обратите внимание на то, что младшие значащие 12 битов являются всем 0, как ожидалось.

    dec2bin(reg4,16)
    ans =
    1011000000000000

    Восстановите исходное значение регистра, которое хранится в переменной reg24.

    memwrite(vv,reg24(3),6,'uint16','A16');
  4. Разъединитесь и вымойтесь — Когда вам больше не нужен vv, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(vv)
    delete(vv)
    clear vv

Используя низкоуровневые функции памяти

Этот пример использует низкоуровневые функции памяти mempeek и mempoke, чтобы получить доступ к информации о регистре для Keysight E1432A 51,2 kSa/s цифровых преобразователя с 16 каналами с модулем DSP. Основным преимуществом этих низкоуровневых функций является скорость — они быстрее, чем высокоуровневые функции памяти. Основные недостатки включают неспособность получить доступ к нескольким регистрам с одним вызовом функции, об ошибках не сообщают, и необходимо сопоставить память, к которой нужно получить доступ.

Для получения информации о регистрах цифрового преобразователя, к которым получают доступ в этом примере, обратитесь к Использованию Высокоуровневых Функций Памяти:

  1. Создайте инструментальный объект — Создают объект VISA-VXI vv, сопоставленный с шасси VXI с индексом 0 и цифровым преобразователем Keysight E1432A с логическим адресом 130.

    vv = visa('keysight','VXI0::130::INSTR');
  2. Соединитесь с инструментом — Подключение vv к инструменту.

    fopen(vv)
  3. Запишите и считайте данные — Прежде чем можно будет использовать низкоуровневые функции памяти, необходимо сначала сопоставить пространство памяти с функцией memmap. Если память, которую требует memmap, не существует, ошибка возвращена. Следующая команда сопоставляет первые 16 регистров пространства памяти A16.

    memmap(vv,'A16',0,16);

    Свойства MappedMemoryBase и MappedMemorySize указывают, была ли память сопоставлена. MappedMemoryBase является базовым адресом расширенной памяти и задан как шестнадцатеричная строка. MappedMemorySize является размером расширенной памяти. Эти свойства подобны свойствам MemoryBase и MemorySize, которые описывают A24 или пространство памяти A32.

    vv.MappedMemoryBase
    ans =
        16737610H
    vv.MappedMemorySize
    ans =
        16

    Следующая команда выполняет низкоуровневое чтение Регистра ID, который имеет смещение 0.

    reg1 = mempeek(vv,0,'uint16')
    reg1 =
          53247

    Следующая команда выполняет низкоуровневое чтение Регистра Смещения, который имеет смещение 6.

    reg4 = mempeek(vv,6,'uint16')
    reg4 =
          40960

    Следующие команды пишут в Регистр Смещения и затем читают значение назад. Обратите внимание на то, что, если вы измените значение этого регистра, вы не сможете получить доступ к пробелу A24.

    mempoke(vv,45056,6,'uint16');
    mempeek(vv,6,'uint16')
    ans =
         45056

    Восстановите исходное значение регистра.

    mempoke(vv,reg4,6,'uint16');

    Когда вы закончили получать доступ к регистрам, необходимо не сопоставить память с функцией memunmap.

    memunmap(vv)
    vv.MappedMemoryBase
    ans =
        0H
    vv.MappedMemorySize
    ans =
        0

    Если память все еще сопоставлена, когда объект отключается от инструмента, память автоматически не сопоставлена для вас.

  4. Разъединитесь и вымойтесь — Когда вам больше не нужен vv, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(vv)
    delete(vv)
    clear vv
Для просмотра документации необходимо авторизоваться на сайте