Прием и обработка данных от авиационного двигателя
ОПИСАНИЕ ПРОЕКТА
Нижеприведенный текст это опыт моего первого знакомства с Advanced Serial Data Logger и соответствующих модулей от AGG Software. Мой проект предназначен для обеспечения связи моего планшетного компьютера с электронным выводом устройства мониторинга малого авиационного двигателя, который позиционируется для применения в самодельных летательных аппаратах, которые соответствуют требованиям US FAA (Авиационной ассоциации США), что позволяет использовать оборудование, не применимое для сертифицированных летательных аппаратов. Инструмент контролирует большинство возможных параметров работы двигателя. Параметры включают температуру цилиндров и температуру сгорания для каждого цилиндра, давление и температуру масла, горючего и расход горючего, остаток горючего, температуру карбюратора, количество оборотов двигателя, время налета, и множество других параметров. Идея проекта заключается в контроле всех параметров двигателя, путем протоколирования его работы, на ранней стадии сборки и эксплуатации двигателя, для исключения появления больших проблем в будущем.
Устройство контроля имеет маленький встроенный экран, который в сокращенной форме отображает значение нескольких параметров и позволяет переключаться между ними. Размер экрана не больше чем у мобильного телефона и черно-белый. Пользователь может задать некоторые ограничения для значений, превышение которых вызывает сигнал тревоги. Это не слишком удобно и отвлекает внимание пилота от управления самолетом.
Пользователь также может через последовательный интерфейс подсоединить это устройство к портативному устройству и использовать "родную" программу для протоколирования значений, сохранять историю измерений с шагом 1 секунда в оперативной памяти компьютера. Затем собранные данные могут быть экспортированы в файл. Ограничения в оперативной памяти не дают возможности производить длительное диагностирование двигателя. Данная программа не имеет средств фильтрации данных, с тем, чтобы записывать их менее часто и исключать несущественные данные. Я же хочу собирать данные в файл меньшего размера в течение нескольких часов, что не представляется возможным с помощью оригинальной программы.
В будущем я хотел бы сделать цветной дисплей, где бы в графической форме отображались критические параметры и их лимиты. Большинство будет в виде маленьких графиков. При одном взгляде на экран можно будет оценить все параметры в совокупности. Это
практичнее, чем просто наблюдать отдельные параметры. Например, низкая температура масла существенно уменьшает допустимое количество оборотов в минуту, в тоже время, двигатель нагревает масло, и допустимое количество оборотов увеличивается. Простой взгляд на экран, на котором все графики находятся в "зеленой" зоне существенно облегчает восприятие и снижает нагрузку на пилота. Одна половина экрана переносного компьютера будет отображать параметры, а вторая часть будет использоваться для навигации.
В соответствии с моими требованиями мне необходимо передавать данные от двигателя в программу визуализации параметров. Advanced Serial Data Logger и его модули делают это для меня в очень удобной форме.
ПРЕОБРАЗОВАНИЕ ПОТОКА ДАННЫХ
Мой первый шаг заключался в изучении двоичных данных, которые выдает устройство контроля двигателя через последовательный интерфейс. К счастью, у меня была возможность получить описание потока данных, в виде полутора страничек текста. Ниже приведена малая часть описания, касающаяся интересующих меня параметров:
Последовательные данные
Все данные передаются на скорости 9600, один стоповый бит, без контроля четности. Первые 3 байта это заголовок пакета данных и является уникальным. Он не встречается в пакете данных.
Все данные, состоящие их двух байт, помечены "H" и "L", с соответствующим именем параметра. Для соединения двух байт в результирующее значение необходимо умножить значение H на 256 и добавить к произведению значение L.
Все данные беззнаковые, если не указано обратное.
$FE ; Заголовок #1 (Десятичное 254)
$FF ; Заголовок #2 (Десятичное 255)
$FE ; Заголовок #3 (Десятичное 254)
TACHH ; Тахометр - Разрешение датчика = 1
TACHL
CHT1H ; CHT и EGT ниже
CHT1L ; разрешение датчика 1 градус
CHT2H
CHT2L
Из примера выше можно увидеть формат потока данных. Большинство параметров состоит из двух байт. Также, большинство имеют разрешение в 1 градус, однако некоторые непоказанные параметры имеют разрешение 0.1. Это позволяет парсеру определить есть ли дробная часть у числа или нет. Поэтому десятичная точка не передается. Имеющаяся информация позволяет определить, что каждый пакет данных начинается с трех, указанных выше байт. Этот заголовок позволяет выделять пакеты данных из общего потока данных. Каждый пакет данных имеет фиксированный размер, который парсер должен контролировать для проверки достоверности данных, иначе можно получить "мусорные" значения с недостоверными данными.
Для захвата данных я активировал логгер от AGG Software и с удобством считал данные с устройства мониторинга на компьютер, а также получил их представление в виде ASCII символов. Во время запуска мониторинга на моем рабочем месте и отображения данных в виде ASCII кодов для каждого байта, я получил поток данных в виде букв и читаемых символов. Очень быстро поток данных стал повторяться, новые символы сразу появлялись на экране после их приема. Затем я остановил логгер и проанализировал поток данных. В моем случае десятичные байты 254 и 255 отображаются как символы, которые легко отличаются от других байт в пакете, и их легко обнаружить. Этот заголовок обозначает начало и окончание пакета данных на экране в непрерывном потоке данных.
В моем случае поток данных выглядел как:
<NUL><NUL><NUL><NUL>C<NUL>C и так далее с некоторыми изменениями для разных пакетов.
Для того чтобы перевести это в десятичный вид я использовал таблицу перекодировки ASCII. Я нашел одну из них на сайте в Internet: www.AsciiTable.com. Также есть множество других источников. Позднее, я обнаружил, что в программе есть встроенный перекодировщик, который делает это в реальном времени и можно обойтись без ручного декодирования.
Просматривая поток данных можно определить, что "NUL" соответствует 0. "C" - 67. Другие символы также имеют уникальное десятичное значение. ";" имеет код 59. Все вышеописанные десятичные значения от 0 до 255 укладываются в один байт данных. Таким образом, вы можете сопоставить значение на экране какому-либо десятичному коду. Если поток данных содержит числа или буквы, то его можно воспринимать без перекодировки.
Используя функцию "Копировать" Windows, я выбрал на экране из потока данных один пакет, начиная с заголовка и заканчивая последними символами, и вставил его в новый документ MS Word. Я вставил данные с переносом строк, чтобы они уместились на странице. Я использовал Word, поскольку я могу установить в нем шрифт и расстояние между строками, для добавления комментариев. Теперь весь пакет данных умещается на одной странице. Поскольку все символы были декодированы в десятичные код, то некоторые значения можно легко идентифицировать в пакете данных. В моем случае температура цилиндра состоит из младшего байта равного 67 или 68, и старшего байта равного "nul". Такое же значение ("nul") отображается, если датчик температуры не подключен, что можно трактовать как значение по умолчанию. Эти данные означают позицию в 12 байт от начала пакета данных. Напряжение батареи выводится также, и представляет собой другую "знакомую" метку. Медленно, но можно вычислить значения всех параметров. Если у вас есть образец данных, то работа существенно облегчается. Данные от другого такого же устройства также могут существенно помочь.
Программисты устройства мониторинга сделали работу по написанию парсера в очень короткие сроки. Они проявили изобретательность при кодировании некоторых значений в разных местах пакета данных. Поскольку программисты знали верхние и нижние лимиты для некоторых данных, то они могли добавлять и вычитать некоторое число, чтобы значение параметра укладывалось в один байт, и таким образом парсер при декодировании должен выполнять обратное преобразование. Это нужно учитывать при программировании вашего собственного парсера. Также двухбайтовые числа могут быть как отрицательными, так и положительными. Можно поискать в Google как работать с числами формата "2’s complement". Ваши данные, возможно, содержат более детальное описание. Возможно, что у вас будут использоваться другие приемы при формировании пакета данных неизвестные мне, но я рекомендую анализировать данные, до тех пор, пока проблема не будет решена. С устройством мониторинга есть возможность сопоставлять значение на экране со значениями в пакете данных.
Автор:
Jim Crowder
Примеры данных:
Исходные данные: AdvSerDatLog-COM5.log (двоичный лог файл, созданный с помощью Advanced Serial Data Logger)
Результат: Engine-Monitor (файл Excel)
Требования:
Advanced Serial Data Logger Professional или Enterprise
Модуль экспорта данных "Direct Excel Connection"
Парсер для логгера, разработанный специально для этой задачи "Universal data parser" (конфигурация парсера в формате XML) uniparser.engine.mon.xml
Сопутствующие статьи: Прием и обработка данных от авиационного двигателя