Виртуальный прибор для измерения температуры
СОДЕРЖАНИЕ: Процесс моделирования виртуального прибора (измерительного канала) для измерения температуры, которая изменяется со временем. Формирование и запись кадра для дальнейшей передачи, хранения и обработки информации. Прибор для считывания данных из файла.Цель: Смоделировать виртуальный прибор для измерения температуры, которая изменяется со временем. Полученные значения от разных каналов записать в один кадр вместе со служебной информацией, для дальнейшей передачи, хранения и обработки данной информации. Кадры необходимо записать в текстовый файл Temp.txt. Затем считать кадры из файла и преобразовать в вид удобный для визуального восприятия.
Кадр системы
виртуальный прибор температура кадр
Кадр системы - это совокупность посылок (слов) во временной области об одном изменении всех входных сигналов телеизмерительной системы ТИС, вместе со служебной информацией, позволяющей потребителю информации независимо выделить информацию о любом сигнале системы.
Кадровый маркер
Кадр системы
Рис.1.1Структура простейшего кадра.
Обычно для обозначения начала кадра передается специальное слово (кадровый маркер), а для обозначения каждого слова, в начале слова, передается символ. Все слова кадра имеют одинаковое количество символов m , включая синхропризнак кадра – кадровый маркер.
Количество слов в таком кадре равно числу входных сигналов. В нашем случаи количество сигналов – три, а, следовательно, и слов в каждом кадре будет по три.
Наша система представляет собой три измерительных канала, информация в канал поступает от термопары (случайные числа от -100 до 100).
Структура измерительного канала
Измерительный канал представляет собой последовательность преобразования физических и числовых величин, в результате которых получаем числовой эквивалент измеряемой физической величины с заданной погрешностью (в единицах этой величины).
Последовательность преобразований при измерении температуры:
T R e U N NT TN ,
где Т – измеряемая величина; R – изменение значения сопротивления резистора; е – изменение значения напряжения на резисторе; U – изменение значения напряжения на входе АЦП; N – значение кода, соответствующее значению напряжения; NT – значение кода в единицах измеряемой величины; TN – числовой эквивалент измеряемой величины с заданной погрешностью.
Измерительный канал, при измерении температуры, представляет собой последовательность преобразователей: первичный преобразователь, нормирующее преобразование и аналого-цифровое преобразование. Обратное преобразование будем осуществлять после считывания информации из файла, так как хранить и передавать информацию в аналого-цифровом виде легче.
Первичный измерительный преобразователь – это термопара типа J, которая имеет функцию преобразования:
Температурная зависимость напряжения на выходе термопары является сильно нелинейной. Поэтому для нахождения температуры по измеренному значению напряжения необходимо использовать таблицу или нелинейную функцию, аппроксимирующую табличные данные.
Мы выбрали термопару данного типа, потому что она имеет широкий диапазон измеряемой температуры, в том числе отрицательной: от -210° до 760°.
Измерительный канал создадим как отдельный виртуальный прибор, так как далее нам их понадобится несколько. Блок – диаграмма виртуального прибора:
На входе виртуального прибора температура, случайное число. Преобразуем температуру в напряжения с помощью функциональной зависимости рассмотренной выше, с помощью узла ФОРМУЛА ( Formula Node ).
Далее осуществляем нормирующее и аналого-цифровое преобразование.
Нормирующее преобразование, от 0 до 10:
Uнор = k(U-Umin)
Tmin = -210° Umin = -8,09538 В.
k = 0,196.
Аналого-цифровое преобразование: выходная вылечена изменяется от 0 до 255, целочисленные значения.
Формирование и запись кадра
В блок-диаграмму помещаем три виртуальных прибора - измерительных канала, смоделированных ранее. На их вход подаем случайную величину от -100 до 100, реализуем ее с помощью функции RandomNumber. Данная функция генерирует случайное число в диапазоне от 0 до 1 с равномерным амплитудным распределением.
Кадр буду формировать в строки, так проще соединяться слова в кадры и отслеживать, чтобы все строки были одной длинны. Данные для удобства восприятия буду записывать в десятичной системе счисления, в случаи необходимости можно воспользоваться другой.
Сначала данные из измерительного канала преобразуем в строки заданного размера, с помощью функции Number To Decimal String (Число в строку десятичных цифр). Функция преобразует число (number) в строку десятичных цифр (decimal integer string) с шириной, равной или большей значения, установленного на входе ширина (width). Если число дробное, то оно округляется до ближайшего целого. Число может быть скаляром, массивом или кластером чисел, массивом кластеров чисел и т. д. В таблице показано влияние числовых параметров на входах число и ширина на выходную строку строка десятичных цифр. Здесь и далее символ _ обозначает пробел.
Далее формируем слово, в качестве служебной информации номер канала и время, когда информация была зафиксирована. То есть у нас получается три отдельные строки. Номер канала задаем строковой константой, а время с помощью виртуального прибора Format Date/Time String (Форматировать строку даты/времени).
Функция отображает значение времени или числовое значение как время в заданном пользователем формате. Коды формата времени включают следующие параметры: %H (часы, 24_часовой интервал), %I (часы, 12_часовой интервал), %M (минуты), %S (секунды), %p (флаг до полудня/после полудня), %d (дни месяца), %m (номер месяца в году),
%y (номер года в веке), %Y (номер года, включая век), %a (сокращенное название дня недели), % x (дата в локальной спецификации), %X (время в локальной спецификации),%c (дата/время в локальной спецификации) и цифра (дробная часть секунды с точностью, заданной значением цифра).
Вход строка формата времени (time format string) определяет формат выходной строки. Коды формата времени (начинающиеся с %) не воспринимаются функцией как код, точно возвращающий символ. По умолчанию установлен код %c, который соответствует представлению даты/времени в месте локализации компьютера. Если строка формата времени является пустой строкой, то функция использует значение по умолчанию. Вход отметка времени (time stamp) может быть значением времени или числом. В числовом представлении этот параметр представляет не зависящее от временного пояса число полных секунд, прошедших с 0:00 1 января 1904 года по Гринвичу. По умолчанию берется текущая дата и время. Выход строка даты/времени (date/time string) представляет отформатированную строку даты/времени. Данная функция формирует строку даты/времени путем копирования строки формата времени и замены каждого из кодов формата времени (time format codes) соответствующим значением.
Коды формата времени дополняются нулями, которые обеспечивают постоянную ширину поля.
Дополнительный модификатор # перед буквой кода формата удаляет начальные нули из следующих кодов формата:
%#d, %#H, %#I, %#j, %#m, %#M, %#s, %#S, %#U, %#w, %#W, %#X, %#y, %#Y
Модификатор # не изменяет поведение других кодов формата.
Строки с различной информацией (номером канала, «температурой» и временем) объединяем с помощью функции Concatenate Strings (Объединить строки), вначале добавляем маркер - 0. Функция объединяет входные строки и одномерные массивы строк в единственную выходную строку. Для массива строк в объединенную строку входит каждый элемент массива. Добавление/удаление входов функции производится с помощью строки Добавить вход/Удалить вход (Add Input/Remove Input) контекстного меню функции или путем изменения размера функции по вертикали с помощью инструмента Перемещение.
Далее объединяем получившиеся слова в кадр, в начале и в конце строки добавляем кадровый маркер, 18 нулей, для того, чтобы он был такой же длины, как и слова, слова у нас получились одинаковой длины по восемнадцать знаков. Получившийся кадр отображается на лицевой панели виртуального прибора.
Кадры, получающиеся в результате выполнения каждого цикла программы, записываем в файл с помощью Write to Text File (Записать в текстовый файл).
Функция записывает строку символов (string of characters) или массив строк в файл. Ко входу файл (file) подключен путь (path), то перед записью функция открывает файл и заменяет его предыдущее содержимое. В нашем случаи к этому входу подключена ссылка и запись начинается с текущей позиции файла. Для того чтобы произвести дозапись к существующему файлу, необходимо установить позицию файла в его конец с помощью функции Установить позицию файла (Set File Position). Эту же функцию можно использовать для организации произвольного доступа. Вход подсказка (выбрать или ввести путь к файлу) (prompt (Choose or enter file path)) представляет сообщение, которое появляется в заголовке файлового диалогового окна. По умолчанию это пустая строка. Вход файл (использовать диалог) (file (use dialog)) может содержать ссылку или абсолютный путь к файлу. Если на вход файл подается путь, то функция открывает файл, заданный этим путем.
Добавляем виртуальный экспресс-прибор Time Delay (Временная задержка), для того чтобы снимать показания каждые две секунды.
Экспресс ВП Временная задержка (Time Delay) вносит временную задержку в выполнение ВП. Величина задержки может задаваться с помощью элемента управления временная задержка (Time delay (seconds)) при конфигурировании ВП или с помощью элемента управления, подключаемого ко входу время задержки (с) (Delay Time (s)) иконки Экспресс ВП. Значение, подаваемое на данный вход, имеет больший приоритет по сравнению с тем, что устанавливается в диалоговом окне.
Этот Экспресс_ВП использует функциональность функций Ожидание (мс) (Wait (ms)) и Задержка до следующего кратного интервала мс (Wait Until Next ms Multiple). Всю блок-диаграмму помещаем в цикл Цикл по условию (While Loop) эквивалентна следующему псевдо коду: do {программа} while {условие}. Внутри структуры размещаются терминал счетчика итераций (iteration terminal) i и терминал условия выхода из цикла (conditional terminal). Код программы, размещенный в структуре, выполняется до подачи на терминал условия логической переменной ИСТИНА (TRUE) или ЛОЖЬ (FALSE). Цикл останавливается кнопкой с лицевой панели виртуального прибора.
Лицевая панель:
Temp.txt:
Данные из файла Temp.txtможно считать и перевести обратно в числовые значения и осуществить обратное преобразование, то есть преобразовать напряжение в температуру. Преобразование осуществляется с помощью полинома:
Блок – диаграмма виртуального прибора для обратного преобразования сигнала от АЦП в температуру:
Сначала осуществляем преобразование обратное аналого-цифровому, затем обратное нормирующему:
Uнорм =( x/255)*10 – обратное аналого цифровому;
U = Uнорм/0,196 – 8,09538 – обратное нормирующему.
Получаем напряжение и преобразуем в температуру.
Считывание информации
Блок – диаграмма виртуального прибора, который считывает информацию из файла и преобразует в удобный для визуального восприятия вид.
Первый элемент блок – диаграммы виртуальный прибор - ReadCharactersFromFile, который считывает текстовую информацию из файла.
Функция считывает определенное число символов или строк из файла, представляющего поток байтов. По умолчанию эта функция считывает все символы из текстового файла. Считывание заданного количества символов, начиная с первого, производится с помощью входа подсчет (count). При установке отметки в строке Считать строки (Read Lines) контекстного меню функции вход подсчет определяет количество считываемых строк. Установка значения –1 на этом входе определяет считывание всех символов в строке или всех строк текстового файла. Выход текст (text) содержит текст, считанный из файла. По умолчанию это строка, содержащая символы первой строки файла. Если подключить вход подсчет, то на этот
выход будет выводиться массив строк, считанных из файла. При удалении отметки. Считать строки на этот выход будут выводиться все символы, считываемые из файла. Функция преобразует все зависящие от платформы символы конца строки в аналогичные символы LabVIEW независимо от состояния строки Convert EOL контекстного меню функции.
Затем строка подается на String Subset (Выделение подстроки), для того, чтобы из полученных данных выделять отдельные кадры. С каждым циклом смещение увеличивается, с помощью счетчика итераций в структуре цикла, и виртуальный прибор считывает новый кадр, все кадры имеют одинаковое количество символов - 90.
Функция String Subset возвращает часть входной строки (string), начинающуюся со смещения (offset) и содержащую число символов, заданное на входе длина (length). Начальный адрес первого символа в строке равен 0. Выход подстрока (substring) является пустым, если смещение больше длины строки или если длина меньше или равна 0. Если длина больше или равна длине строки минус смещение, то на выходе подстрока выводится остаток строки, начинающийся со смещения.
Далее выделяем из кадра слова, с помощью тех же функций из кадра выделяем слова, которые имеют длину 18 символов:
Так, как нам известно количество слов в кадре, которое равно 3 и постоянно, мы используем цикл с заданным количеством итераций.
Структура Цикл с фиксированным числом итераций (For Loop) эквивалентна текстовому оператору for i = 0 to N_1 do ….
При помещении структуры на панель блок-диаграммы ее контур в виде прямоугольника должен быть растянут так, чтобы охватить существующий код программы, который должен выполняться циклически заданное число раз, или так, чтобы позволить разместить в нем новый код программы. Если помещаемая в структуру или перемещаемая внутри структуры функция пересекается с ее границей, то граница автоматически расширяется. Эта опция может быть отключена для данной структуры путем снятия отметки строки Auto Grow в контекстном меню структуры или для всего приложения путем снятия флажка Установить структуры с автоматическим расширением (Place structures with Auto Grow enabled) в окне категории Блок_диаграмма (Block Diagram) диалогового окна Опции (Options), вызываемого в меню Инструменты (Tools).
Количество циклов может задаваться с помощью константы или элемента управления, подключенных к терминалу числа итераций (count terminal) (прямоугольник в левом верхнем углу структуры с буквой N). Текущее число завершенных итераций цикла содержится в терминале счетчика итераций (iteration terminal).
Далее из слова выделяем информацию, используя функцию String Subset с разным значением сдвига и количеством считываемых символов. Номер канала и время измерения в виде строк выводим на лицевую панель, спомощью индикаторов. А сигнал от АЦП преобразуем обратно в числовое значение с помощью функции Decimal String To Number (Строку десятичных цифр в число).
Функция преобразует цифровые символы строки (string), начиная от смещения (offset), в целое десятичное число и передает его на выход число (number). Если указанный начальный элемент строки не цифра, то функция передает на выход число (number) значение по умолчанию (default). Если вход значение по умолчанию не подключен, то его состояние определяется как 0. Выход смещение после числа (offset past number) определяет индекс первого элемента строки, следующего за числом.
Таблица показывает, как числовые параметры на входах строка, смещение и по умолчанию влияют на выходное число.
Получившееся число падаем на вход виртуального прибора, смоделированного ранее, который делает обратное преобразование кода от АЦП в напряжение, а затем в температуру.
Лицевая панель прибора, считывания:
Вывод
В ходе выполнения работы я смоделировал виртуальный прибор для измерения температуры, которая изменяется со временем. Для этого смоделировал виртуальный прибор - измерительный канал. Полученные значения от разных каналов записал в один кадр вместе со служебной информацией, для дальнейшей передачи, хранения и обработки данной информации. Кадры записал в текстовый файл Temp.txt. Затем создал виртуальный прибор, который считывает кадры из файла, выделяет кадры и слова, преобразует их в вид удобный для визуального восприятия и отображает на лицевой панели.
С помощью этого виртуального прибора я на практике осуществил процесс формирование кадра, его запись и хранение. В результате исследования выяснилось, что если процесс будет менее динамичным, то мы будим записывать много излишней информации. Поэтому далее во время выполнения своей научно исследовательской работе я буду оптимизировать систему, улучшать пропускную способность, уменьшать энергетические затраты на передачу сообщений, улучшать помехоустойчивость, увеличиваться быстродействие с помощью применение субкоммутатора.