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

конспект Гугнин

.pdf
Скачиваний:
83
Добавлен:
10.02.2016
Размер:
3.18 Mб
Скачать
6
5
Рис. 13.7. Составные части таблицы

Элемент управления Table (Таблица), расположен на палитре Controls Modern List, Table & Tree и предназначен для создания таблиц на лицевой панели. Каждая ячейка находится в 1 2 3 строке и столбце таблицы. Поэтому

4таблица представляет собой двумерный массив строк. На рис. 13.7 показана таблица и ее составные части:

1 – индексы по горизонтали и вертикали; 2 – метра таблицы;

3 – заголовок столбца;

4 – вертикальная полоса прокрутки;

5 – горизонтальная полоса прокрутки; 6 – заголовок строки.

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

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

Обработаем таблицу в ВП таким образом, чтобы имелась возможность сортировать различные столбцы таблицы по возрастанию. Саму сортировку осуществим с помощью функции которая находится на палитре Functions Programming Array Sort 1D Array. Напомним, что эта функция сортирует элементы одномерного массива в порядке возрастания. Если массив состоит из кластеров, функция сортирует массив по первым элементам кластеров. В связи с этим таблицу следует преобразовать в массив таким образом, чтобы интересующий пользователя столбец стал первым. И потом сформировать из полученного массива кластер, который мы и будем сортировать.

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

Создадим таблицу и целочисленный элемент управления, который будет указывать столбец для сортировки. Заполним таблицу какими-либо данными, например как это указано на рис. 13.8.

По умолчанию заголовки столбцов и строк не видны. Чтобы заголовки столбцов стали видны в свойствах таблицы (диалоговое окно свойств вызывается из контекстного меню пунктом Properties) поставим флажок напротив Show Column Headers. Кроме этого, чтобы появилась возможность редактировать заголовки, включите в контекстном меню таблицы опцию Editable Headers. Теперь можно заполнить таблицу данными (рис. 13.8).

Для того чтобы осуществить сдвиг столбца, по которому будет проводиться сортировка, используем функцию Rotate 1D Array (палитра Functions

Programming Array).

117

Одномерный массив, который подается на вход функции Rotate ID Array, представляет собой строки нашей таблицы. Каждую строку получим с помощью цикла For Loop.

Рис. 13.8. ВП сортировки таблицы

Если для каждой строки в отдельности поменять элементы местами, то в целом в таблице местами поменяются столбцы. Допустим, как и на рис. 13.8, необходимо сортировать таблицу по третьему столбцу (отсчет начинается с нуля). Иначе говоря, столбец с отчествами надо поместить на первое место. Функция Rotate ID Array перемещает n элементов из начала в конец, если n > 0. И наоборот перемещает n элементов из конца в начало, если n < 0. Если на вход n подан 0, функция строку не изменяет. Столбцы таблицы надо сдвинуть на 2 столбца влево до сортировки, и на 2 столбца вправо после.

Поэтому до использования функции сортировки необходимо подать – 2 на вход n функции Rotate 1D Array, а после +2.

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

118

пункт Cluster Size… контекстного меню функции. В нашем случае размер кластера равен 4.

Итак, вы разбили таблицу на отдельные строки. В каждой строке в цикле For Loop поменяли местами столбцы. Сформировали из элементов строки кластер. На выходе из цикла For Loop собрали из кластеров массив. Отсортировали массив кластеров по первому элементу в кластере. Опять использовали цикл For Loop, в котором из каждого элемента массива кластеров получили одномерный массив. Поменяли местами столбцы обратно. На выходе цикла For собрали отсортированные строки в таблицу. Остается вывести этот результат в ту же таблицу. Вариант с новой таблицей на лицевой панели в виде элемента индикации, безусловно, возможен. Однако такой способ отображения информации при работе с таблицами по вполне понятным причинам не является общепринятым (рис.13.8) Необходимо, чтобы отсортированная таблица отображалась в исходной таблице. В таких случаях удобно использовать локальные переменные. Локальную переменную для любого элемента управления или индикации можно создать из контекстного меню элемента, выбрав пункт

Create Local Variable. Этот пункт контекстного меню доступен как на лицевой панели, так и на блок-диаграмме. После того, как вы создали локальную переменную, её следует расположить в нужном месте на блок-диаграмме

(рис. 13.9).

Рис. 13.9. ВП сортировки таблицы с локальной переменной

Локальную переменную можно использовать в любом месте блокдиаграммы (если это не противоречит логике выполнения программы). Ее можно использовать как для чтения данных, так и для записи. В качестве последнего мы и используем локальную переменную, соединив ее с полученной отсортированной таблицей. ВП готов. Окончательная блок-диаграмма показана на рис. 13.9. Перейдём на лицевую панель и испытаем программу.

119

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

ляться с лицевой панели ВП. Подсказка: посмотрите описание элемента

Combo Box и функции Reverse 1D Array.

Какой самый большой недостаток только что разработанного ВП? А этот недостаток заключается в том, что после выключения ВП все данные, занесённые в таблицу, обнуляются. Поэтому следующее, что мы должны изучить – это возможности LabVIEW по сохранению данных в файл, а также считыванию их из файла.

Вопросы для самопроверки к четырнадцатой лекции:

1.Что такое строки в LabVIEW??

2.При решении каких задач используются строки?

3.В каком виде появляются строки на лицевой панели?

4.На какой палитре расположенны строковые элементы управления и индикации?

5.Какие типы отображения строкового объекта есть в LabVIEW?

6.Для чего используется функция String Length?

7.Для чего используется функция Concatenate Strings?

8.Для чего используется функция Match Pattern?

9.Как можно осуществить преобразование числа в строку?

10.Как можно осуществить преобразование строк в числовые данные?

11.Что такое таблица в LabVIEW?

12.Какие составные части есть у таблицы?

13.Как заполнить таблицу данными?

14.Какие функции можно использовать для сортировки таблицы?

15.Зачем использовать локальную переменную при сортировке таблицы? Литература для дополнительного обучения: [1, с.265276; 2, с.77 – 103;

3, с.114 – 120].

Лекция 15 Цель лекции – приобрести навыки сохранения данных в файл и считыва-

ния их из файла в LabVIEW.

14. ФУНКЦИИ РАБОТЫ ФАЙЛАМИ

Функции файлового ввода/вывода производят операции с файлами записи и считывания данных. Функции файлового ввода/вывода расположены на па-

литре Functions Programming File I/O и предназначены для:

Открытия и закрытия файла.

Считывания и записи из файла и записи данных в файл.

Считывания и записи данных в виде таблицы символов.

Перемещения и переименования файлов и каталогов.

Изменения характеристик файла.

Создания, изменения и считывания файлов конфигурации.

120

Рис. 14.1 Функции файлового ввода/вывода

Палитра функций файлового ввода вывода, показанная на рис. 14.1, разделена на четыре части: функции высокого уровня (High Level File I/O), функции низкого уровня (Low Level File I/O), подпалитра функций расширенных возможностей (Advanced File I/O) и экспресс функции.

14.1. Основы файлового ввода/вывода

Стандартные операции ввода/вывода данных в файл из файла состоят из следующей последовательности действий:

1.Создание или открытие файла. Указание месторасположения существующего файла или пути для создания нового файла с помощью диалогового окна LabVIEW. После открытия файла LabVIEW создает ссылку (reftium) на него.

2.Произведение операций считывания или записи данных.

3.Закрытие файла.

4.Обработка ошибок.

14.2. Функции файлового ввода/вывода низкого уровня

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

Для осуществления основных операций файлового ввода/вывода используются приведенные ниже ВП и функции.

Функция Open/Create/Replace File

открывает существующий файл, создает новый файл или заменяет существующий файл, программно или интерактивно ис-

пользуя файловое диалоговое окно.

Пользователь может дополнительно определить подсказку диалога operation (prompt). Эта функция используется совместно с функциями

записи и считывания файлов.

Вход подсказка (prompt) представляет сообщение, которое появляется в заголовке файлового диалогового окна. По умолчанию это пустая строка.

Вход путь к файлу (использовать диалог) (file path (use dialog)) содержит абсолютный путь к файлу. Если путь к файлу пустой (по умолчанию) или принимает значение <Не путь> (<Not A Path>), функция выводит диалоговое окно, которое позволяет выбрать файл. Если не определить путь к файлу или определить пустой или относительный путь, то функция вернет ошибку.

121

Вход операция (operation(0:open)) определяет выполняемую операцию и имеет следующие варианты:

0 – открыть (open) – открывает существующий файл (по умолчанию), если файл не может быть найден, происходит ошибка 7;

1 – заменить (replace) – заменяет существующий файл путем его открытия и установки нулевого значения для конца файла;

2 – создать (create) – создает новый файл. Если файл уже существует, то происходит ошибка 10;

3 – открыть или создать (open or create) – открывает существующий файл или создает новый, если таковой не существует;

4 – заменить или создать (replace or create) – создает новый файл или заменяет файл, если он существует, эта функция заменяет файл путем его открытия и установки нулевого значения для конца файла;

5 – заменить или создать с подтверждением (replace or create with confirmation) – создает новый файл или заменяет существующий файл при наличии прав доступа, замена файла производится так же, как и в предыдущих операциях.

Выход ссылки (refnum out) отображает ссылку на открытый файл. Если файл не может быть открыт, на выход выводится значение Не ссылка (Not A

Refnum).

Выход отменен (cancelled) отображает значение ИСТИНА, если пользователь отменил отображение файлового диалогового окна или не выбрал замену в предупреждающем диалоговом окне.

Функция Read from Text File

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

текстового файла. Считывание заданного количества символов, начиная с первого, производится с помощью входа подсчет (count). При установке отметки в строке Считать строки (Read Lines) контекстного меню функции вход подсчет определяет количество считываемых строк. Установка значения –1 на этом входе определяет считывание всех символов в строке или всех строк текстового файла.

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

Функция Write to Text File за-

писывает строку символов (string of characters) или массив строк в файл.

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

122

то запись начинается с текущей позиции файла. Для того чтобы произвести дозапись к существующему файлу, необходимо установить позицию файла в его конец с помощью функции Установить позицию файла (Set File Position). Эту же функцию можно использовать для организации произвольного доступа.

Вход подсказка (выбрать или ввести путь к файлу) (prompt (Choose or enter file path)) представляет сообщение, которое появляется в заголовке файлового диалогового окна. По умолчанию это пустая строка.

Вход файл (использовать диалог) (file (use dialog)) может содержать ссылку или абсолютный путь к файлу. Если на вход файл подается путь, то функция открывает файл, заданный этим путем.

ФункцияClose File закрывает открытый файл, определяемый ссылкой (refnum), и возвращает путь (path) к файлу, соответствующий ссылке. Ошибка

ввода/вывода формируется только в этой функции, которая закрывает файл, несмотря на ошибки в предыдущих операциях. Это гарантирует корректное закрытие файлов

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

например функция Simple Error Handler VI.

Функция Simple Error Handler VI (ВП Простой обработчик ошибок), расположенный на палитре

Functions Programming Dialog & User Interface. Поля ввода error in

и вывода error out информации об ошибках используются в каждом ВП для обмена информацией об ошибках между ВП.

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

14.3. Сохранение данных в новом или уже существующем файле

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

Доступ к файлу можно осуществить программным путем или с использованием диалогового окна. Для доступа к файлу с помощью диалогового окна на поле ввода file path подпрограммы ВП Open/Create/Replace File VI не следует подавать данные.

На рис. 14.2 показано, как записать строку данных в файл при программном указании пути и имени файла. Если файл уже существует, то он перезапи-

123

Рис.14.2. ВП записи строки в файл

сывается, если нет, то создается новый файл, имя которого нужно вписать окошко «Имя файла» стандартного окна открытия файлов Windows.

Подпрограмма ВП Open/ Create/ Replace File VI открывает файл «За-

пись.txt», создает ссылку на файл и кластер ошибок.

Ссылка (refiium) является уникальным идентификатором для таких объектов как файл, прибор, сетевое соединение и т.п. При открытии файла, устройства или сетевого соединения

Lab VIEW создает ссылку на объект. Все операции с открытыми объектами выполняются с использованием ссылок.

Кластер ошибок и ссылка на файл последовательно передаются от узла к узлу. Поскольку узел не может выполниться, пока не определены все его входные поля данных, эти два параметра заставляют узлы работать в определенном порядке. Подпрограмма ВП Open/Create/Replace File VI передает ссылку на файл и кластер ошибок функции Write to Text File, которая производит запись файла на диск. Функция Close File закрывает файл после получения кластера ошибок и ссылки на файл из функции Write to Text File.

Подпрограмма ВП Simple Error Handler VI проверяет наличие ошибок и выводит информацию о них в диалоговом окне. Если в одном из узлов допущена ошибка, последующие узлы не выполняются, и кластер ошибок передается в подпрограмму ВП Simple Error Handler VI.Расмотрим еще один пример записи строк в файл.

Пример одновременного чтения и записи строк в файл представлен на рис. 14.3. Для открытия файла для чтения и записи используем элемент ControlsModern String & Path File Path Control. Заранее созданный файл откро-

ем с помощью стандартного окна Windows щелкнув ЛКМ по значку открытой папки правее элемента Path. Файл можно заранее не создавать, а просто вписать его имя и полный к нему путь в окошечко элемента File Path Control, тогда этот файл будет создан в указанном месте, однако это произойдёт только в том случае, если в свойствах элемента File Path Control на вкладке Browse Option рядом с запросом New or existing будет поставлена отметка. Все изменения в окошке «Запись текста» будут после запуска программы отображаться в окошке «Чтение текста».

14.4. Форматирование строк таблицы символов

Для того чтобы записать данные в файл формата электронной таблицы, необходимо переформатировать строковые данные в строку таблицы, содержащую разделители, такие как символ табуляции. Во многих приложениях символ табуляции разделяет столбцы, а символ end of line (конец строки) разделяет строки. Для обеспечения совместимости между различными платформами следует использовать константу End of Line Constant, расположенную на

124

палитре Functions Programming String. Константа осуществляет перевод строки.

Рис. 14.3. ВП одновременной записи и чтения строк в файл

Функция Format Into File пред-

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

Часто эта функция используется вместо двух операций – форматирования строки с помощью функции Format Into String или ВП Build Text Express VI и

записи результата с помощью функций Write to Text File.

Функция Format Into File предназначена для определения порядка, в котором данные записываются в файл. Однако ее нельзя применять для добавления данных в файл или перезаписи существующего файла. Для этих операций используется функция Format Into String совместно с функцией Write to Text File. Путь к файлу или ссылку на него можно подать на поле input file или оставить это поле без соединения, чтобы указать имя файла в диалоговом окне.

На рис 14.4. представлена блок-диаграмма, на которой подпрограмма ВП

Open/Create/Replace File VI открывает файл. Цикл For Loop выполняется пять раз. Функция Format Into String преобразует значения счетчика итераций и случайное число в строку. Также указываются символы Tab Constant (табуляции) и End of Line Constant (конца строки) для создания двух столбцов и одной строки таблицы символов. По окончании пяти итераций цикла массив данных записывается в файл, файл закрывается, данные из файла считываются элемент «text» и ВП проверяет наличие ошибок.

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

ния на экране таблицы:

00,361712

10,231892

20,269716

30,037238

40,411002

125

Рис. 14.4. ВП для заполнения, просмотра и сохранения таблицы

14.5. Функции файлового ввода/вывода высокого уровня

Функции файлового ввода/вывода высокого уровня расположены на палитре Functions Programming File I/O. Они предназначены для выполнения основных операций по вводу/выводу данных.

Использование функций файлового ввода/вывода высокого уровня позволяет сократить время и усилия программистов при записи и считывании данных в/из файл(а). Функции файлового ввода/вывода высокого уровня выполняют запись и считывание данных и операции закрытия и открытия файла. При наличии ошибок файловые функции высокого уровня отображают диалоговое окно с описанием ошибок, в котором пользователю предлагается продолжить выполнение программы или остановить ее. Однако из-за того, что функции данного класса объединяют весь процесс работы с файлами в один ВП, переделать их под определенную задачу бывает трудно. Для специфических задач следует использовать функции файлового ввода/вывода низкого уровня.

Некоторые функции файлового ввода/вывода высокого уровня описаны

ниже.

ВП Write to Spreadsheet File.VI

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

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

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

126