Первый урок посвящен вопросам обработки массивов (таблиц) данных.
Мы ознакомимся с возможностями блока Линеаризация, построим несколько кривых, научимся измерять физические величины.
Итак, создаём новый проект. В качестве целевой платформы указываем любую, например, виртуальное устройство.
Перетаскиваем на сцену блок Линеаризация и вызываем его свойства (F2 по выделенному).
В редакторе свойств блока можно выбрать количество выходов, типы данных входа и выходов, а так же перейти к непосредственному редактированию таблицы.
Пример 1. Преобразование уровня 0-10В в уровень 0-5В и 2-10В.
Предположим, в вашей прикладной программе существует устройство, выдающее управляющий сигнал 0-10В (с разрешением 10 бит) на исполнительный механизм.
Требуется преобразовать управляющее напряжение 0-10В в два напряжения: 0-5В и 2-10В.
Решение с использованием блока Линеаризация.
- По заданию, управляющее устройство формирует сигнал 0-10В, следовательно, выбираем тип данных входа Без знака, целый 2 байта.
- Разрешение ЦАП контроллеров Zentec - так же 10 бит. Минимальное напряжение на аналоговых выходах контроллера - 0В, а максимальное - 10В. Соответственно, минимальному напряжению будет соответствовать код ЦАП - "0", а максимальному - "1023". Так как отрицательные значения на аналоговом выходе контроллеров не предусмотрены конструкцией, будем использовать тип данных выхода Без знака, целый 2 байта.
- По заданию требуется получить два выходных напряжения: 0-5В и 2-10В, поэтому поставим 2 выхода блоку Линеаризация.
- Нажимаем OK. Блок будет иметь один вход и два выхода.
- После этого снова вызываем свойства блока и переходим к редактированию таблицы.Так как преобразование линейное, создадим всего две строки в таблице:- первая строка определяет нижний уровень напряжения;- вторая строка определяет верхний уровень напряжения.
- Определяем нижний уровень напряжения:- минимальное напряжение на входе блока "0", следовательно устанавливаем для выхода out значение "0" для напряжения 0-5В
- для выхода out1 устанавливаем значение "205" (2x1023/10=204,6; где 2 - требуемое напряжение на выходе ЦАП в Вольтах, 1023 - разрядность ЦАП (10бит), 10 - максимальное напряжение (10В)). - Определяем верхний уровень напряжения:- максимальное напряжение на входе блока "1023", следовательно устанавливаем на выходе out значение "512" (5x1023/10=511,5) для напряжения 0-5В
- на выходе out1 значение "1023" для напряжения 2-10В.
Пример 2. Преобразование кода АЦП в давление.
Допустим, ко входу Ain1 виртуального устройства подключен датчик давления жидкости с выходным сигналом 0-10В и диапазоном измерений от 0 до 4,2 Бар.
Требуется преобразовать код АЦП в давление.
Решение с использованием блока Линеаризация.
Блок Линеаризация требует много ресурсов контроллера.
Поэтому, что бы сэкономить на ресурсах, преобразуем значение верхнего диапазона датчика давления (4,2 Бар) в целое число. Так как измеряемая величина не отрицательна, можно использовать для выхода блока Линеаризация тип данных Без знака, целый 2 байта.
В этот тип данных можно записать число от 0 до 65 535.
В этот тип данных можно записать число от 0 до 65 535.
Воспользуемся этим и умножим 4,2 на 10 000. Получаем 42 000 при значении кода АЦП 1023.
- Тип данных входа блока Линеаризация используем Без знака, целый 2 байта.
- Тип данных выхода блока Линеаризация используем Без знака, целый 2 байта.
- Так как преобразование линейное, создадим две строки в таблице:- первая строка определяет нижнее значение давления;- вторая строка определяет верхнее значение давления.
- Определяем нижнее значение давления:
- давлению 0 Бар соответствует "0" на входе Ain1, следовательно устанавливаем для выхода out значение "0"
- давлению 4,2 Бар соответствует "1023" на входе Ain1,
следовательно устанавливаем для выхода out значение "42 000" (4,2x10 000=42 000).
Для дальнейшей обработки полученного результата можно использовать целочисленные или дробные значения.
Для получения дробных значений производим деление на 10 000 с типом данных Дробный 4 байта и получим результат с точностью 0,00410557 ед. изм. на один отсчёт.
Если необходимо, то округляем результат до заданного разряда блоком Округление.
Если необходимо, то округляем результат до заданного разряда блоком Округление.
Пример 3. Измерение температуры с помощью нелинейного датчика.
В предыдущих двух примерах мы производили линейные преобразования.
В примере №3 произведем измерение температуры с помощью нелинейного датчика NTC10k.
В примере №3 произведем измерение температуры с помощью нелинейного датчика NTC10k.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.