1073

Переменная Shared Variable в LabVIEW 8

Лабораторная работа

Информатика, кибернетика и программирование

Освоить переменную Shared Variable, впервые представленную в LabVIEW 8, которая призвана облегчить жизнь разработчикам при создании межпрограммного обмена данными. Отдельный процесс для обмена данными через сеть.

Русский

2013-01-06

556.5 KB

40 чел.

Цель работы:

Освоить переменную Shared Variable, впервые представленную в LabVIEW 8,которая  призвана облегчить    жизнь разработчикам при создании межпрограммного обмена данными. Используя Shared Variable, мы можем     "распределять" данные между отдельными циклами, входящими в одну программу, между независимыми         программами или же между программами, запущенными на отдельных РС.

Нам доступны три типа Shared Variable - для отдельного процесса, для обмена через сеть и Shared Variable с временным триггером. Предлагается на этом уроке создать Shared Variable для отдельного             процесса и для обмена через сеть.

Ход работы:

Создайте новый проект (Project), далее нажмите правой кнопкой мыши

на компьютерном устройстве, таком как My Computer либо устройстве Real-Time в окне проекта, и выберите пункт меню New»Vari- able. Если Вы сделали все верно, откроется окно Shared Variable Properties. В настройках

Вы можете задать имя переменной, изменить тип данных и тип самой переменной.

Если c именем переменной все понятно, то с типом данных есть маленькие нюансы. Вы можете выбрать из   большого количества стандартных типов данных необходимый тип для новой Shared Variable  

Дополнительно к перечню стандартных типов существует возможность установить свой собственный, выбрав пункт меню Custom из выпадающего меню Data Type. Впрочем, использование своего собственного типа данных исключает возможность работы с модулем Real-Time FIFO. А кроме того, если у Вас установлен модуль LabVIEW DSC (Datalogging and Supervisory Control), т.е. SCADA-модуль, не будет полностью функционировать аварийная сигнализация Alarm.

Тип переменной определяет ее функциональные возможности. Single-Process Shared Variable (распределенная переменная для отдельного процесса) обеспечивает обмен данными в пределах компьютера. Network- Published Shared Variable (распределенная переменная для сети) позволяет обмениваться информацией по сети. Выберите Single-Process Shared Variable и установив все необходимые опции нажимайте клавишу ОК. Теперь Ваша переменная добавлена в проект в библиотечной секции Library. Приведенное окно Shared Variable Properties применяется к одиночному процессу. А при использовании модулей Rеal-Time или DSC поддерживаются дополнительные функции.

Для начала работы с переменной перетяните ее из проекта на Block Diagram. В зависимости от последующего применения установите переменную на считывание или на запись. Для этого нажмите правой клавишей мышки на переменной и выберите пункт Change to Read (изменить на чтение) или Change to Write (изменить на запись). По умолчанию Ваша переменная устанавливается на чтение.

Обратите внимание на то, что если Вы используете буфер для переменной, то Timestamp возвращает время записи этой переменной в буфер, а не время последнего обновления буфера.

Если Вы захотите изменить свойства переменной, просто щелкните по ней правой клавишей мыши в окне проекта. Любые внесенные изменения будут применены ко всем узлам распределенной переменной, находящихся в памяти. При сохранении библиотеки все изменения будут сохранены на диске.

Использование Shared Variable Single-Process похоже на использование глобальной переменной Global variable. Главное преимущество Shared Variable для отдельного процесса (Single process) по сравнению с Глобальной Переменной - это возможность преобразовать Shared Variable для отдельного процесса в Shared Variable для передачи через сеть.

Но это еще не все. Вся мощь новой переменной раскрывается в Network-Published Shared Variable. Используя Shared Variable для передачи данных по сети, Вы можете записывать и считывать данные через Ethernet. При этом сетевая реализация полностью управляется через сеть и открываются дополнительные опции, которые отсутствовали для одиночного процесса.

В сетевой версии Shared Variable используется протокол NI-PSP(NIPublish-Subscribe Protocol) для передачи данных. NI-PSP протокол является надстройкой UDP, который предназначен для отслеживания состояния сети. В отличие от UDP, NI-PSP гарантирует доставку данных, поскольку имеет дополнительную программную надстройку. NI-PSP более эффективно использует сетевое соединение, чем TCP/IP.

Передача данных по сети обеспечивается "движком" SVE (Shared-Variable Engine). SVE запускается вместе с LabVIEW и принцип его работы прост: LabVIEW посылает данные в SVE, а он в свою очередь отправляет данные адресату.

В данном случае используется клиент-серверная технология, причем SVE является сервером, а все остальные - клиентами, т. е. в каждый узел переменной встроен SVE клиент. Network-Published Shared Variable предоставляет возможность для работы с буфером. Давайте посмотрим, в каких случаях необходимо включать буфер. Применяя буферрование нет необходимости учитывать разность скорости записи и считывания Shared Variable. Дело в том, что чтение иногда осуществляется медленнее, чем запись, и часть данных может быть потеряна. Если такая ситуация не критична, т. е. Ваше приложение может терять часть данных, то буфер можно и не использовать. Но если в программе необходимо считывать все поступившие данные, то Вы обязательно должны включить буферирова- ние. Для работы в сети можно использовать буфер Shared Variable, размер которого устанавливается в диалоговом окне Shared Variable Properties:

LabVIEW использует указанный размер для двух внутренних буферов: один находится в "движке" SVE, а другой - в клиенте, именно из этого буфера Вы считываете информацию.

В отличие от остальных режимов, таких как RealTime, FIFO-enabled и Single-process variable, где используется всего один буфер для всех "отправителей" и "получателей", в Network-published для каждого "получателя" создается свой собственный буфер.

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

Итак, LabVIEW создает сетевые буферы, инициированные для чтения или записи, в зависимости от их местонахождения. Буферы, находящиеся на стороне сервера, создаются тогда, когда "отправитель" делает первую запись

в Shared Variable. Буферы, находящиеся на стороне клиента, создаются тогда, когда клиент читает значение из Shared Variable в первый раз. Если "отправитель" записывает данные в Shared Variable до того, как "получатель" в первый раз прочитает Shared Variable, инициированные данные "получателю" доступны не будут. Почему? Правильный ответ - потому, что он еще не создал свой буфер.

В режиме Network-published переполнение буфера не отображается в сетевом буфере. Как было определено выше, все Shared Variables являются частью проектной библиотеки. SVE регистрирует проектные библиотеки и хранящиеся в них Shared Variables. После выключения VI или перезагрузки машины Shared Variable будет также доступна для сети. Удалить переменную из сети можно в окне Tools>>Shared Variable>>Variable Manager.

Дополнительная особенность, доступная лишь для режима Network-published - создание управляющего элемента привязки. Для создания элемента управления для Вашей переменной перетяните Shared Variable из окна Project Explorer на переднюю панель программы. При запуске программы и активном SVE о нормальной работе переменной Вас будет оповещать зеленый индикатор на передней панели. Вы можете поменять привязку любого элемента управления или индикатора в закладке Data Binding в диалоговом окне Properties.

Как видите, при переходе к сетевому типу переменной пользователю предоставляется возможность включения буфера. Опцией Bind to Source (Привязка к источнику) указывается расположение распределенной переменной на втором компьютере, а также режим работы переменной на Вашей машине.

Существуют три режима: Only read (Только чтение), Only write (Только запись), read/write (чтение/запись). Определившись с работой Shared Variable, выберем переменную в сети. Нажмите кнопочку Browse, в

появившемся окне выберите компьютер, на котором находится переменная, библиотеку и саму переменную. Результат должен выглядеть так: \commell7\Library2\Variable2

менная, библиотеку и саму переменную. Результат должен выглядеть так: \commell7\Library2\Variable2

На втором компьютере проделайте те же операции, кроме Bind to Source, ее включать не нужно. А теперь создайте как показано ниже Front Panel и Block Diagram, и в Вашем расположении - простой сетевой пейджер. Можете общаться: 

И, наконец, рассмотрим "теоретически" Real-Time FIFO буфер. Практически пощупать что это такое и "с чем его едят" можно в случае установки модуля LabVIEW Real-Time, а его у Вас нет. Это коммерческий продукт. Но, пусть и заочно, все же есть смысл получить представление о возможностях тандема Shared Variable и Real-Time FIFO.

National Instruments рекомендует использовать RealTime FIFO для передачи данных между циклом с приоритетом time-critical и циклом с самым низким приоритетом. Для избежаниия низкоуровненого программирования следует включить Real-Time FIFO для переменной. Буфер Real-Time FIFO создается при первом чтении или записи. В результате при первом считывании/записи будет происходить задержка, когда каждая Shared Variable подготавливается для дальнейшего использования. Если приложение требует очень точной временной "разметки", то нужно каждую Shared Variable прочитать один раз до выполнения основного цикла программы.

LabVIEW создает отдельный буфер Real-Time FIFO для каждого процесса, даже если используется несколько узлов чтения или записи. Для обеспечения целостности данных, при наличии нескольких "отправителей" на одну переменную, каждый "отправитель" блокирует друг друга до тех пор, пока "получатели" не прочтут      данные.

При организации Real-Time FIFO следует выбрать один из двух типов буферов FIFO - буфер из одного элемента или буфер из нескольких элементов. Первое отличие между буферами - одноэлементный FIFO не выдает предупреждения о переполнении. Второе отличие - само значение, которое возвращает LabVIEW, когда несколько "получателей" читают пустой буфер. "Читатели" одноэлементного FIFO будут считывать одно и тоже значение до тех пор, пока "отправитель" Два узла делят мелзду собой не обновит данные в буфере. "Читатали " многоэлементного FIFO получают последнее значение, которое было помещено в буфер

Network-Published Shared Variable так же предоставляет возможность для работы с буфером Real-Time FIFO. При одновременном использовании сетевого буфериро- вания и Real-Time FIFO будут созданы два буфера. При этом следует заметить, что у каждого пользователя будет свой собственный буфер Real-Time FIFO, и в таком случае"отправители" и "получатели" блокировать друг друга не будут. Размеры этих двух буферов устанавливаются отдельно, однако National Instruments рекомендует устанавливать для них одинаковий размер. В отличие от режима Network-published, Real-Time FIFO каждый раз при переполнении буфера возвращает Вам ошибку.

Вроде как с Shared Variable пока все. Однако урок еще не закончен. Эта Shared Variable, конечно, несколько нарушила планы уроков, но не познакомить с ней было нельзя. Это достойное нововведение.

Поехали далее. Пора приступать к нерассмотренным ранее функциональным элементам LabVIEW. Их очень много. Поэтому для начала давайте попробуем сделать этакую классификацию всех функций LabVIEW. Разобьем все на 4 "кучки":

  •  базовые функции;
  •  функции генерации, ввода и обработки;
  •  функции интерфейса VI и приложений;
  •  функции плат и стандартных интерфейсов ввода/вывода.

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

  •  числовые функции;
  •  логические функции;
  •  строковые функции;
  •  функции сравнения;
  •  функции работы с массивами и кластерами;
  •  функции времени и диалогов;
  •  функции и VI ввода/вывода файлов.

Вторая "кучка" еще более многочисленная и, без сомнений, самая интересная. Представим ее пока тремя подгруппами:

  •  функции генерации и обработки сигналов;
  •  математические функции;
  •  дополнительные функции.

Взаимодействие VI между собой и с другими приложениями обеспечивается широким набором функций из двух палитр Application Control и Communication. Это и есть третья "кучка":

  •  функции управления приложением;
  •  функции коммуникации LabVIEW ( технология и функции ActiveX и .NET, технология передачи данных и функции DataSocket, функции электронной почты, функции протоколов TCP/IP и UDP).

На работу с "железом" (платы и внешние модули аналогового и дискретного В/В и стандартных интерфейсов) ориентированы функции четвертой "кучки":

  •  функции формирования и обработки осциллограмм;
  •  функции сбора данных DAQmx;
  •  функции интерфейса IEE488, он же GPIB, он же КОП (канал общего пользования);

• функции последовательной коммуникации.

Такое упорядочение функций - это еще только первый уровень классификации. Вас можно понять - хочется уже кнопочки понажимать. Но до самих функций еще "как до неба", далеко. Давайте углубимся во вторую группу. Подгруппа функций генерации и обработки сигналов включает еще подгруппы более нижнего уровня, а

именно:

  •  функции генерации сигналов и шумов;
  •  функции обработки сигналов во временной области;
  •  функции обработки сигналов в частотной области;
  •  функции фильтров;
  •  функции обработки весовыми окнами;
  •  создание осциллограмм;
  •  

согласование осциллограмм;

  •  обработка осциллограмм;
  •  преобразования осциллограмм;

Углубляемся дальше, а что еще остается? Смотрим, что же там внутри, например, в подгруппе функций для частотного анализа сигналов. А там:

  •  тектр мощности (Auto power spectrum и Power spectrum); взаимный спектр мощности (Cross power spectrum);
  •  спектр сигнала с неравномерными отсчетами (Unevenly sampled signal spectrum) • амплитудный и фазовый

спектр (Amplitude and phase spectrum);

  •  преобразования единиц спектра (Spectrum unit conversion);
  •  спектрограмма STFT (STFT spectrogram);
  •  спектрограмма WVD (WVD spectrogram);
  •  оценка мощности и частоты (Power & frequency estimate);
  •  оценка частоты колебания (Buneman frequency estimate) и много др

Т.е. это наборы функций для выполнения прямого и

обратного преобразования Фурье и Гильберта, Хартли и Уолша-Адама- ра, Лапласа и вейвлет-преоб- разования... В этой же подгруппе на основе классического преобразования Фурье представлены также VI для оценки импульсной и частотной передаточных характеристик, функции когерентности, гармонических искажений.

У кого-то реакция на внушительный инструментарий будет типа "Ого!", а кто-то тихо скажет "Ой, куда я попал". Тогда давайте усилим ощущения обоих и посмотрим, что внутри подгруппы функций фильтрации:

  •  фильтр Баттерворта (Butterworth filter);
  •  фильтр Чебышева (Chebyshev filter);
  •  инверсный фильтр Чебышева (Inverse Chebyshev filter);
  •  эллиптический фильтр (Elliptic filter);
  •  фильтр Бесселя (Bessel filter);
  •  

фильтр нижних частот с равномерными пульсациями (Equi-Ripple lowpass);

  •  

  •  фильтр верхних частот с равномерными пульсациями (Equi-Ripple highpass);
  •  полосовой фильтр с равномерными пульсациями (Equi-Ripple bandpass);
  •  режекторный фильтр с равномерными пульсациями (Equi-Ripple bandstop);
  •  оконный КИХ - фильтр (FIR windowed filter);
  •  медианный фильтр (Median filter);
  •  +1/f фильтр (Inverse f filter);
  •  новинка 8-й версии - Zero phase filter.

Перечень этих фильтров находится в палитре Filters, но там же Вы обнаружите еще две подпалитры - Advanced IIR Filtering и Advanced FIR Filtering, которые содержат дополнительные функции БИХ и КИХ - фильтрации соответственно. Это прежде всего VI, входящие в состав фильтров Баттерворта, Чебышева, Бесселя, эллиптического фильтра и др., для расчета коэффициентов этих фильтров и их конфигурирования:

  •  коэффициенты фильтра Баттерворта;
  •  коэффициенты фильтра Чебышева;
  •  коэффициенты инверсного фильтра Чебышева;
  •  коэффициенты эллиптического фильтра;
  •  коэффициенты сглаживающего фильтра;
  •  коэффициенты +1/f фильтра;
  •  каскадный БИХ-фильтр (IIR cascade filter)
  •  каскадный БИХ-фильтр с начальными условиями (IIR cascade filter with I.C)
  •  БИХ-фильтр (IIR filter)
  •  БИХ-фильтр с начальными условиями (IIR filter with I.C)
  •  коэффициенты оконного КИХ-фильтра;
  •  VI, реализующий алгоритм Паркса-Мак-Клеллана для расчета коэффициентов многополюсного КИХ-фильт- ра (Park-McClellan);
  •  

узкополосный КИХ-фильтр (FIR narrowband filter);

Вывод: В данной лабораторной работе освоили 2 типа переменной Shared Variable - для отдельного процесса и для  обмена данными через сеть. Освоили межпрограммный обмен данными на одной или нескольких машинах.


 

А также другие работы, которые могут Вас заинтересовать

56527. Розв’язування тригонометричних рівнянь 2.9 MB
  Розглянемо такі тригонометричні рівняння. Рівняння які зводяться до квадратних відносно тригонометричної функції. Рівняння які розвязуються за допомогою рівності однойменних тригонометричних функцій. Лінійні рівняння відносно синуса і косинуса.
56528. Тригонометричні функції гострого кута прямокутного трикутника 83 KB
  Мета: формування поняття тригонометричних функцій гострого кута прямокутного трикутника дослідницько-евристичним методом; розвивати уміння учнів узагальнювати результати досліджень, спостережливість, прийоми аналізу і синтезу...
56529. Розв’язування прямокутних трикутників 519 KB
  Продовжте речення: Синус кута дорівнює відношенню протилежного катета до. гіпотенузи; cos 30o = ; Сума квадратів катетів дорівнює квадрату гіпотенузи; Прилеглий катет дорівнює добутку гіпотенузи на косинус кута...
56530. Трикутники. Сторони. Кути. Основа. Висота. Розпізнавання та креслення трикутників 276.5 KB
  Розпізнавання та креслення трикутників. Наочність: таблиця Трикутники малюнки трикутників Тип уроку: формування нових знань умінь і навичок Перебіг уроку. Види трикутників за кутами. Відшукування видів трикутників за допомогою косинця.
56531. Розв’язування трикутників 685 KB
  Мета уроку: формувати навички і вміння з розвязування трикутників. Час виконання 1 Організаційний момент 7хв 2 Актуалізація опорних знань 7хв 3 Розвязування вправ 16хв 4 Самостійна робота 10хв 5 Підсумок уроку 5хв...
56532. Сума кутів трикутника 197.5 KB
  Мета: Навчальна: Поглибити знання учнів про властивості трикутників Формувати уміння застосовувати вивчені властивості при розв’язуванні задач Провести діагностику засвоєння системи знань та умінь і її застосування для...
56533. ОЗНАКИ РІВНОСТІ ТРИКУТНИКІВ 743.5 KB
  У даній роботі представлена методична розробка уроків теми «Ознаки рівності трикутників», яка складається з 8-ми уроків та різнорівневої контрольної роботи. Розробка дає змогу подивитися на тему під іншим кутом зору.
56534. Трикутник. Перша і друга ознаки рівності трикутників 8.2 MB
  Перевірка домашнього завдання Після чого обирається по одному учневі з кожного ряду які отримують по 1 листку з 10ма твердженнями інша частина учнів виконують на місцях аналогічне завдання. Ні слайд 2 На домашнє завдання учням було задано вправи на знаходження градусних мір...
56535. Трикутники 1.02 MB
  Мета: Систематизувати основні теоретичні положення з теми «Трикутники». Ліквідувати прогалини в знаннях, уміннях і навичках учнів; виховання активності, самостійності учнів, творчого підходу до оволодіння знаннями.