Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASVT Материалы / основы_labview_1

.pdf
Скачиваний:
233
Добавлен:
29.03.2016
Размер:
5.26 Mб
Скачать

Лекция 3. Поиск ошибок и отладка VI

Когда вы устанавливаете контрольную точку на проводник, выполнение VI приостанавливается после того, как данные прошли через проводник и кнопка Pause стала красного цвета. Установите контрольную точку на поле блок-диаграммы, чтобы пауза возникла после выполнения всех узлов блокдиаграммы. Рамка блок-диаграммы при этом окрашивается в красный цвет и начинает мерцать, указывая на положение контрольной точки.

При остановке VI в контрольной точке LabVIEW выносит блок-диаграмму на передний план и выделяет узел, проводник или строку скрипта, которые содержат контрольную точку. Если курсор перемещать над имеющейся контрольной точкой, черная область инструмента Breakpoint становится белого цвета.

При достижении контрольной точки VI приостанавливает выполнение, а кнопка Pause становится красного цвета. В этот момент вы можете предпринять следующие действия:

Продолжить выполнение VI в пошаговом режиме с помощью соответствующих кнопок.

Проконтролировать пробником промежуточные значения данных в проводниках.

Изменить значения элементов управления на лицевой панели.

Щелкнуть по кнопке Pause, чтобы продолжить выполнение VI до следующей контрольной точки или до тех пор, пока VI не завершит работу.

Приостановка выполнения

Выполнение subVI приостанавливают, чтобы отредактировать значения элементов управления и индикаторов, настроить количество запусков subVI перед возвратом в точку вызова, или вернуться к началу выполнения subVI. Вы можете настроить LabVIEW так, чтобы пауза возникала перед всеми или определенными вызовами subVI.

Чтобы приостановка происходила при всех вызовах subVI, откройте этот subVI и выберите команду меню Operate»Suspend when Called. В этом случае subVI автоматически приостанавливается, когда его вызывает другой VI. Если вы выберите упомянутый пункт меню в режиме пошаговой отладки, приостановка subVI произойдет не сразу, а только при его вызове.

Чтобы приостановить subVI при определенном вызове, щелкните правой кнопкой мыши по узлу subVI на блок-диаграмме и из контекстного меню выберите команду SubVI Node Setup. Чтобы приостановить выполнение только для данной копии subVI, установите в контекстном меню флажок

Suspend when called.

В окне VI Hierarchy, которое выводится на экран с помощью команды меню View»VI Hierarchy, показывается, приостановлен ли VI при вызове subVI или на контрольной точке. Стрелка показывает, работает ли VI в обычном или в пошаговом режиме.

Основы LabVIEW 1. Учебное пособие

91

ni.com

Лекция 3. Поиск ошибок и отладка VI

Символ паузы показывает, что VI приостановлен при вызове или на контрольной точке.

Зеленый символ паузы, или пустой черно-белый символ показывает, что VI приостановлен при вызове. Красный символ паузы, или сплошной чернобелый символ показывает, что в настоящий момент VI приостановлен на контрольной точке. Символ «восклицательный знак» показывает, что subVI приостановлен.

VI может быть одновременно приостановлен при вызове и на контрольной точке.

Определение текущей копии subVI

Когда вы приостанавливаете работу subVI, выпадающее меню Call list на панели инструментов отображает цепочку вызовов, начиная с VI самого верхнего уровня до данного subVI. Этот список не совпадает со списком, который отображается при выборе команды Browse»This VI’s Callers, в котором приводятся все вызывающие VI независимо от того, работают ли они в настоящий момент. Если на блок-диаграмме содержится более одной копии subVI, воспользуйтесь меню Call list для определения текущей копии. Если выберете VI из меню Call list, откроется его блок-диаграмма и LabVIEW подсвечивает текущую копию subVI.

Просмотреть цепочку точек вызова от текущего VI до VI самого верхнего уровня можно также с помощью функции Call Chain.

D. Неопределенные или неожидаемые данные

Неопределенные данные, такие как NaN (не число) или Inf (бесконечность), не могут быть обработаны всеми последующими операциями. Эти символические значения, возвращаемые операциями над числами с плавающей точкой, являются признаком недопустимых вычислений или бессмысленных результатов:

NaN (не число) служит для представления результата выполнения недопустимой операции над числами, например, взятия квадратного корня из отрицательного числа.

Inf (бесконечность) служит для представления результата (в формате с плавающей точкой) выполнения допустимой операции над числами, например, деления числа на ноль.

LabVIEW не проверяет условия переполнения или потери значимости для целочисленных значений. Переполнение и потеря значимости для чисел с плавающей точкой соответствуют стандарту IEEE 754, Standard for Binary Floating Point Arithmetic.

Результаты выполнения операций с плавающей точкой наверняка могут принимать значения NaN и Inf. И если вы явно или неявно преобразуете

Основы LabVIEW 1. Учебное пособие

92

ni.com

Лекция 3. Поиск ошибок и отладка VI

NaN и Inf в целочисленные или булевские значения, эти значения становятся бессмысленными. Например, деление числа 1 на ноль дает Inf. Преобразование Inf в 16-разрядное целое дает число 32767, которое кажется вполне нормальным.

Перед тем, как приводить данные к целочисленным типам, с помощью инструмента Probe проверьте допустимость промежуточных значений с плавающей точкой с помощью функции сравнения Not A Number/Path/Refnum?.

Не стоит полагаться на то, что специальные значения, такие как NaN, Inf или пустые массивы, помогут выяснить, что VI выдает неопределенные данные. Наоборот, убедитесь в том, что VI генерирует определенные данные, сделав так, чтобы VI выдавал сообщение об ошибке, если имеет место ситуация, когда, вероятно, он порождает неопределенные данные.

Если, например, вы создаете VI, в котором входной массив используется для авто-индексации цикла For Loop, определитесь с тем, что, по-вашему, должен делать VI, если этот массив окажется пустым: выдавать код ошибки; заменять определенными данными, которые породил бы сам цикл; или применять структуру Case, которая не допустит выполнения цикла For Loop, если массив пустой.

E. Контроль и обработка ошибок

Как бы хорошо вы не были уверены в созданном VI, вы не можете предугадать все проблемы, с которыми может столкнуться пользователь.

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

Автоматическая обработка ошибок

У каждой ошибки есть свой числовой код и соответствующее сообщение об ошибке.

По умолчанию LabVIEW автоматически обрабатывает любую ошибку, когда VI работает с приостановкой, высвечивая subVI или функцию, в которых возникла ошибка, и выводит на экран диалоговое окно с сообщением об ошибке.

Чтобы запретить автоматическую обработку ошибок для текущего VI, выберите команду меню File»VI Properties и выберите пункт Execution из выпадающего списка Category. Чтобы запретить автоматическую обработку ошибок для любого вновь создаваемого, пустого VI, выберите команду меню Tools»Options и выберите в списке Category пункт Block Diagram.

Чтобы запретить автоматическую обработку ошибок для subVI или функции внутри VI, соедините их выход error out со входом error in другого subVI или функции или индикатором error out.

Основы LabVIEW 1. Учебное пособие

93

ni.com

Лекция 3. Поиск ошибок и отладка VI

Обработка ошибок вручную

Вы можете выбрать другие методы обработки ошибок. Если, например, у VI ввода-вывода на блок-диаграмме истекает таймаут, то, возможно, вам не захочется останавливать работу всего приложения и выводить на экран диалоговое окно с сообщением об ошибке. Также, вероятно, вы пожелаете, чтобы VI делал повторные попытки ввода-вывода через определенный интервал времени. В LabVIEW можно выполнять такую обработку ошибок на блок-диаграмме VI.

Для обработки ошибок следует использовать VI и функции из палитры

Dialog & User Interface, а также терминалы error in и error out, которые есть у большинства VI и функций. Если, например, в LabVIEW возникает ошибка, вы можете вывести сообщение об ошибке в диалоговых окнах различных видов. Для обнаружения и обработки ошибок применяйте механизмы обработки ошибок вместе с отладочными средствами.

VI и функции возвращают ошибки одним из двух способов: с помощью числовых кодов ошибок или с помощью кластера ошибок. Как правило, в функциях используются коды ошибок, а в VI кластер ошибок, обычно для входов и выходов ошибок. Кластеры ошибок обеспечивают такую же функциональность, как и стандартные error in и error out.

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

Для работы с ошибками используйте VI, функции и параметры обработки ошибок в LabVIEW. Если, например, в LabVIEW возникает ошибка, вы можете вывести в диалоговое окно сообщение об ошибке или зафиксировать ошибку программным путем, а затем удалить ее, соединив выход error out subVI или функции со входом error in VI Clear Errors. Механизмы обработки ошибки следует использовать совместно с отладочными средствами, чтобы обнаруживать и исправлять ошибки. Компания National Instruments настоятельно рекомендует применять механизмы обработки ошибок.

Кластеры ошибок

Чтобы создавать входы и выходы ошибок в subVI, используйте элементы управления и индикаторы кластеров ошибок.

Кластеры error in и error out состоят из следующих элементов информации:

status булевская переменная, которая выдает значение TRUE при обнаружении ошибки.

Основы LabVIEW 1. Учебное пособие

94

ni.com

Лекция 3. Поиск ошибок и отладка VI

code 32-разрядное целое число со знаком, которое является числовым идентификатором ошибки. Ненулевой код ошибки в сочетании со значением FALSE элемента status оповещает скорее о предупреждении, чем об ошибке.

source строка, в которой указывается место возникновения ошибки.

Обработка ошибки в LabVIEW соответствует потоковой модели данных. Информация об ошибке может проходить через VI точно так же, как и поток данных. Передавайте с помощью проводников информацию об ошибке от начала VI до его конца. В конце проектируемого VI включите VI обработки ошибок, чтобы выяснить, работает ли VI без ошибок. Используйте кластеры error in и error out в каждом используемом VI или проектируйте VI так, чтобы информация об ошибках проходила через него насквозь.

В процессе выполнения VI LabVIEW проверяет наличие ошибок в каждом исполняемом узле. Если LabVIEW не обнаруживаетошибок, узел работает нормально. Если LabVIEW обнаруживает ошибку, узел передает ее следующему узлу, не выполняя ту часть кода, что содержит ошибку. Следующий узел делает то же самое и т.д. В конце выполнения всей этой цепочки LabVIEW выдает сообщение об ошибке.

Объяснение ошибок

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

К диалоговому окну Explain Error можно также получить доступ из меню

Help»Explain Error.

Основы LabVIEW 1. Учебное пособие

95

ni.com

Лекция 3. Поиск ошибок и отладка VI

Самопроверка: короткий тест

1.Как запретить автоматическую обработку ошибок?

a.Разрешить выполнение с подсветкой.

b.Соединить кластер error out одного subVI с кластером error in другого subVI.

c.Установить флажок Show Warnings в окне Error List.

2.Какие из следующих компонентов содержатся в кластере ошибок?

a.Status: Boolean

b.Error: String

c.Code: 32-bit integer

d.Source: String

Основы LabVIEW 1. Учебное пособие

96

ni.com

Лекция 3. Поиск ошибок и отладка VI

Самопроверка: ответы

1.Как запретить автоматическую обработку ошибок?

a.Разрешить выполнение с подсветкой.

b.Соединить кластер error out одного subVI с кластером error in другого subVI.

c.Установить флажок Show Warnings в окне Error List.

2.Какие из нижеследующих компонентов содержатся в кластере ошибок?

a.Status: Boolean

b.Error: String

c.Code: 32-bit integer

d.Source: String

Основы LabVIEW 1. Учебное пособие

97

ni.com

Лекция 3. Поиск ошибок и отладка VI

Заметки

Основы LabVIEW 1. Учебное пособие

98

ni.com

4

4. Реализация VI

На этом занятии вы научитесь программировать в LabVIEW. Навыки по программированию в LabVIEW включают в себя проектирование пользовательского интерфейса, выбор типов данных, документирование программного кода, применение циклических структур, таких, как While Loop и For Loop, добавление программных задержек, отображение данных в виде графика, а также принятие решения в программном коде с помощью Case-структуры.

План занятия

A.Проектирование лицевой панели

B.Типы данных в LabVIEW

C.Документирование программного кода

D.Циклы While

E.Циклы For

F.Задание времени выполнения VI

G.Передача данных от итерации к итерации

H.Вывод данных на графики

I.Case-структуры

© National Instruments Corporation

99

Основы LabVIEW 1. Учебное пособие

Глава 4. Реализация VI

А. Проектирование лицевой панели

На этапе проектирования программного обеспечения вы определяете входы и выходы задачи, что является непосредственным началом проектирования лицевой панели.

Исходные данные для задачи можно получить следующими способами:

в процессе, например, измерения с помощью устройства сбора данных или мультиметра

чтение данных непосредственно из файла манипулирование органами управления

Выходные данные задачи вы можете вывести на графические индикаторы (Graph или Chart), на светодиодные индикаторы (LED) или записать выходные данные в файл. Кроме того, данные можно вывести в некоторое устройство путем генерации сигнала. Позднее в нашем курсе будут занятия по сбору данных, генерации сигнала и записи в файл.

Проектирование органов управления и индикаторов

Выбирая элементы управления и индикации, удостоверьтесь в том, что они соответствуют решаемой задаче. Если, например, вы хотите задавать частоту синусоидального сигнала, то выбирайте элемент управления типа «лимб» (Dial), а если хотите отображать значения температуры, то нужно выбрать индикатор типа «термометр» (Thermometer).

Метки и заголовки

Удостоверьтесь в том, что элементы управления и индикации снабжены понятными метками. Эти метки помогают пользователям определять назначение каждого элемента управления и индикатора. Кроме того, понятные обозначения помогают документировать программный код блокдиаграммы. Метки элементов управления и индикаторов соответствуют именам терминалов на блок-диаграмме.

С помощью заголовков создается описание элемента управления на лицевой панели. Заголовки на блок-диаграмме не появляются, но их использование позволяет документировать пользовательский интерфейс, не загромождая блок-диаграмму дополнительным текстом. Пусть, например, на метеостанции вам необходимо задать верхнюю границу температуры. Если температура превышает это значение, метеостанция выдает предупреждение о тепловом ударе. В этом случае элемент управления можно назвать Upper Temperature Limit (Celsius). Однако такая метка займет лишнее место на блок-диаграмме. Вместо этого используйте заголовок элемента управления Upper Temperature Limit (Celsius), а на блок-

диаграмме создайте короткую метку, например, Upper Temp.

Основы LabVIEW 1. Учебное пособие

100

ni.com