Программа обработки данных от БРЭО

 
1 2 3 4
+
-
edit
 

Xan

координатор

A.M.> Текстовый файл с табуляторами мне не нужен, лучше дамп.... и понятно что его проще выгрузить наружу не преобразовывая в текстовый файл.

Я говорил о файлах, которыми будут обмениваться люди, хвастаться друг перед другом. :)

Можно текстовый файл делать на компе программой, специфической для данного брэо.
А можно прямо из брэо выгружать в текстовом виде, МК с этим вполне справится.
Зато не нужно специфической программы.
 7.07.0

Serge77

модератор

Всё-таки специальная программа получается удобнее универсальной.
С моей программой так: запустил программу, подсоединил высотомер, сразу получаешь график с нулевой линией и обозначенной максимальной высотой.
А здесь нужно сначала чем-то скачать данные с МК, потом эти данные открыть программой, вручную выставлять нулевую линию и искать максимум.
RU Alexeev Max #11.06.2011 00:52  @Serge77#10.06.2011 23:38
+
-
edit
 

Alexeev Max

втянувшийся

Serge77> Всё-таки специальная программа получается удобнее универсальной.
Serge77> С моей программой так: запустил программу, подсоединил высотомер, сразу получаешь график с нулевой линией и обозначенной максимальной высотой.
Serge77> А здесь нужно сначала чем-то скачать данные с МК, потом эти данные открыть программой, вручную выставлять нулевую линию и искать максимум.

А если необходимо посмотреть сколько вольт выдает датчик в апогее, или каково давление кРа на на уровне земли. А если необходимо сверить результаты с предыдущими запускоми ??? Или произошли изменения схемы/прошивки контроллера и данные пишутся иначе, допустим с оцифровкой не 16 бит, а 10 или появился новый параметр(ы).

Сергей, это только первая версия.... ничего не мешает в будущем прикрутить эти функции получения данных от БРЭО напрямую - это не сложно. Причем насчет поиска нуля и максимума автоматически, судя по данным которые я имею, не так все очевидно.

По твоим словам, складывается такое ощущение что запуски идут каждую минуту и необходима такая высокая скорость получения результата (максимальной высоты), что если это займет чуть больше времени то уже это существенный недостаток перевешивающий все очевидные плюсы, при этом ты регулярно выкладываешь графики созданные в универсальном экселе.
 
RU SashaPro #11.06.2011 02:07  @Alexeev Max#11.06.2011 00:52
+
-
edit
 

SashaPro

аксакал

A.M.> ...при этом ты регулярно выкладываешь графики созданные в универсальном экселе.

Просто интересно.
А что так Excel не подходит для отображения графиков? Это очень удобный формат для отчётов. Туда можно скинуть таблицу значений и кучу графиков двумерных или трёхмерных. Оформить в красивом стиле. И этот формат универсален сам по себе. Очень многие его используют для этого. Формат регулярно обновляется вместе с офисом и обладает достаточным набором функций и средств для качественного отображения данных. А так получается цифры в текстовом файле, как в отчёте PROPEP, что очень неудобно, а график в отдельной картинке.
RU MartKot #11.06.2011 07:28  @Alexeev Max#10.06.2011 18:22
+
-
edit
 

MartKot

втянувшийся

A.M.> По колонкам что это за данные? Какими датчиками получены, какова частота записи и разрядность АЦП?
Память AT45DB161D (16Мбит), датчики (по порядку записи данных, по колонкам): MPXA4115A, MMA2201D, KMZ51, светодиодный. Частота записи в память (сумма 10 измерений, на один датчик) 1раз в 0,04сек. АЦП 10разрядов (ATmega16 8MHz).
Прикреплённые файлы:
 
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце? Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение! http://martkot.embedders.org  
RU Alexeev Max #11.06.2011 11:59  @SashaMaks#11.06.2011 02:07
+
-
edit
 

Alexeev Max

втянувшийся

A.M.>> ...при этом ты регулярно выкладываешь графики созданные в универсальном экселе.
SashaPro> Просто интересно.
SashaPro> А что так Excel не подходит для отображения графиков?

Никто не говорит, что он не подходит. Долго муторно и желательно неплохо владеть экселем... если нет ничего более подходящего, то эксель вполне подходит, так же подходит MathLab.
 
RU Alexeev Max #11.06.2011 12:24  @MartKot#11.06.2011 07:28
+
-
edit
 

Alexeev Max

втянувшийся

MartKot> Память AT45DB161D (16Мбит), датчики (по порядку записи данных, по колонкам): MPXA4115A, MMA2201D, KMZ51, светодиодный. Частота записи в память (сумма 10 измерений, на один датчик) 1раз в 0,04сек. АЦП 10разрядов (ATmega16 8MHz).

Смещения графиков не выйдет, с остальным получится... но это будет конфигурация и фунция преобразования значения АЦП в вольты исключительно под тебя, т.к. суммирование 10-битных значений по 10 значений не обработать универсальной функцией, было бы суммирование кратное степени двойки (8, 16, 32, 64) - была бы универсальная функция преобразования заложеная в моей программе.

Что показывает светодиодный датчик ?

У Serge суммирование 64 значения получаем результат 16 бит.
 
RU MartKot #11.06.2011 16:40  @Alexeev Max#11.06.2011 12:24
+
-
edit
 

MartKot

втянувшийся

Понятно, перепишу один вариант прошивки под "степень двойки".
Светодиодный и магнитный пока для экспериментов - оценить вращение ракеты.
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце? Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение! http://martkot.embedders.org  
+
-
edit
 

GOGI

координатор
★★★★
A.M.>но это будет конфигурация и фунция преобразования значения АЦП в вольты исключительно под тебя, т.к. суммирование 10-битных значений по 10 значений не обработать универсальной функцией
Если в программе не будет парсера произвольных формул, то она уже сильно будет проигрывать excel.
1  

Xan

координатор

GOGI> Если в программе не будет парсера произвольных формул, то она уже сильно будет проигрывать excel.

По-моему, необходимо и достаточно коэффициента и смещения.

y = a * x + b

А паскали в метры высоты уже по зашитой формуле считать.
А что там ещё может быть кривого?
 7.07.0
+
-
edit
 

Massaraksh

аксакал
★☆
GOGI> Если в программе не будет парсера произвольных формул, то она уже сильно будет проигрывать excel.
И ещё макросы... :)
+
-
edit
 

Massaraksh

аксакал
★☆
Xan> А паскали в метры высоты уже по зашитой формуле считать.
Для какого датчика? Для разных - разные формулы.
А ещё там не только высота.
+
-
edit
 

Xan

координатор

Xan>> А паскали в метры высоты уже по зашитой формуле считать.
Massaraksh> Для какого датчика? Для разных - разные формулы.
Massaraksh> А ещё там не только высота.

Ничего не понял.

Датчик преобразует физическую величину в напряжение.
АЦП преобразует напряжение в код.
Код АЦП в конце концов попадает в файл.
Обрабатывающая прога по формуле y = a * x + b из кода получает значение физической величины. Потому что подавляющее большинство датчикав - линейные, и к ним надо применять именно эту формулу.

В случае датчика давления, это получается давление. Давление — а не высота.
А высота считается через давление и температуру по формуле, независящией от датчика.
 7.07.0
+
-
edit
 

Massaraksh

аксакал
★☆
Xan> А высота считается через давление и температуру по формуле, независящией от датчика.

Каждый датчик имеет свой диапазон. Значение кодов 0 и, к примеру, 1023 могут соответствовать разным давлениям.
А мы имеем на выходе только код.
UPD: А, въехал. Рассчитывать для каждого датчика коэффициенты a и b, так?
Точнее, для каждой схемы.
Это сообщение редактировалось 11.06.2011 в 20:20
RU Alexeev Max #11.06.2011 21:31  @Massaraksh#11.06.2011 20:14
+
-
edit
 

Alexeev Max

втянувшийся

Xan>> А высота считается через давление и температуру по формуле, независящией от датчика.
Massaraksh> Каждый датчик имеет свой диапазон. Значение кодов 0 и, к примеру, 1023 могут соответствовать разным давлениям.
Massaraksh> А мы имеем на выходе только код.
Massaraksh> UPD: А, въехал. Рассчитывать для каждого датчика коэффициенты a и b, так?
Massaraksh> Точнее, для каждой схемы.

Во всех БРЭО используется 2-3 типа датчика давления.

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

по мере появления новых датчиков/схем/величин DLL будет пополняться новыми функциями.
 
RU Alexeev Max #11.06.2011 21:34  @MartKot#11.06.2011 16:40
+
-
edit
 

Alexeev Max

втянувшийся

MartKot> Светодиодный и магнитный пока для экспериментов - оценить вращение ракеты.

В по каким формулам считать и какие величины помимо напряжения.
 

GOGI

координатор
★★★★
Xan> По-моему, необходимо и достаточно коэффициента и смещения.
А ускорение мы будем интегрировать на бумажке и для направления с магнитного компаса будет синусы тоже как-то сами вычислять.
1  4.0.14.0.1

Xan

координатор

Xan>> По-моему, необходимо и достаточно коэффициента и смещения.
GOGI> А ускорение мы будем интегрировать на бумажке и для направления с магнитного компаса будет синусы тоже как-то сами вычислять.

Что-то я не понимаю, чего и где ты хочешь.
 7.07.0
RU MartKot #12.06.2011 00:23  @Alexeev Max#11.06.2011 21:34
+
-
edit
 

MartKot

втянувшийся

MartKot>> Светодиодный и магнитный пока для экспериментов - оценить вращение ракеты.
A.M.> В по каким формулам считать и какие величины помимо напряжения.
Для них пока только напряжения от 0В до 5В, средняя линия или "линия горизонта" условно 2,5В.
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце? Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение! http://martkot.embedders.org  
RU Massaraksh #12.06.2011 01:18  @Alexeev Max#11.06.2011 21:31
+
-
edit
 

Massaraksh

аксакал
★☆
Del
Это сообщение редактировалось 12.06.2011 в 01:27
RU Alexeev Max #14.06.2011 14:05
+
-
edit
 

Alexeev Max

втянувшийся

Файл конфигурации, он же описание данных и преобразований(функций) над ними. С помощью этого файла можно будет описать свои данные получаемые от БРЭО для визуального отображения.

В качестве примера условно взят кадр длиной 4 байта. Первые 2 байта значение датчика давления оцифровка 16 бит, вторые два байта - акселерометр оцифровка 10 бит.

;----------------------------------------------------------
;основная секция
;----------------------------------------------------------

[Main]
;частота кадров в сек
DataFreq=61
;длина кадра данных в байтах
DataFrameLen=4

;----------------------------------------------------------
;секции описания графиков
;----------------------------------------------------------

[Graph0]
;название графика
NameGraph = Датчик давления
;стартовый бит
StartBit = 0
;длина в битах
LenghtBit = 16
;разрядность ацп
DigitCap = 16
;значение нуля можно задать из настроек
;Zero = 52973
;список функций преобразования значений АЦП (название секций функций)
;ониже графики вольты, давление, высота и т.д.
Functions = Func_Volt, Func_Bar, Func_Height

[Graph1]
NameGraph = Акселерометр
StartBit = 16
LenghtBit = 16
DigitCap = 10
Zero = 512
Functions = Func_Volt, Func_Accel

;----------------------------------------------------------
;секции описания функций DLL
;----------------------------------------------------------

[Func_Volt]
;отображаемое название графика функции
NameFunc=Напряжение
;имя функции во внешней DLL
DLLFunc=ADC_To_Volt
;ед. измерения для отображения результатов
FormatRes=V

[Func_Bar]
NameFunc=Давление
DLLFunc=ADC_To_kPa
FormatRes=kPa

[Func_Height]
NameFunc=Высота
DLLFunc=ADC_To_Height
FormatRes=m

[Func_Accel]
NameFunc=Ускорение
DLLFunc=ADC_To_Accel
FormatRes=g
 


Три вида секций
Main - сновные данные по кадрам
Graph - описание графика
Func - описание функции из DLL для преобразования исходных данных

Параметров еще добавится, типа цвет графика... но основные обозначил.
 
Это сообщение редактировалось 14.06.2011 в 14:15
+
-
edit
 

ST

втянувшийся

A.M.> Файл конфигурации, он же описание данных и преобразований(функций) над ними. С помощью этого файла можно будет описать свои данные получаемые от БРЭО для визуального отображения.
В память БРЭО пишу пока только один параметр--сумму накоплений АЦП, для перевода в высоту использую коэффициент, полученный опытным путем (на лифте). Есть возможность в программе ввести такой коэффициент?
 
RU Alexeev Max #14.06.2011 14:35
+
-
edit
 

Alexeev Max

втянувшийся

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

library GraphFunc;

uses
SysUtils,
Classes,
Math;

Const
Vdd = 5;

{$R *.res}
//преобразование АЦП в вольты ADC_Value - значение АЦП, DigitCap - разрядность АЦП
function ADC_To_Volt(ADC_Value, DigitCap, Param_3: Word): Real; stdcall;

var
MaxValue: LongWord;

begin
MaxValue := 1 shl DigitCap;
Result := Vdd/MaxValue*ADC_Value + 1/(MaxValue*2);
end;

//значение давления в килопаскалях для датчика MPXAZ ADC_Value - значение АЦП, DigitCap - разрядность АЦП
function ADC_To_kPa(ADC_Value, DigitCap, Param_3: Word): Real; stdcall;

begin
Result := (ADC_To_Volt(ADC_Value, DigitCap, 0) + 5*0.095)/(5*0.009);
end;

//значение высоты ADC_Value - значение АЦП, DigitCap - разрядность АЦП, Zero - значение АЦП на земле
function ADC_To_Height(ADC_Value, DigitCap, Zero_Value: Word): Real; stdcall;

const
//p0 := 101.325; //давление на уровне моря
a = 0.00366; //температурный коэффициент объёмного расширения воздуха
t = 20.0;

var
p, p0: Real;

begin
p0 := ADC_To_kPa(Zero_Value, DigitCap, 0);
p := ADC_To_kPa(ADC_Value, DigitCap, 0);

Result := 18400*(1 + a*t)*log10(p0/p);
end;

//значение ускорения для датчика MMA2202, ADC_Value - значение АЦП, DigitCap - разрядность АЦП, Zero - значение АЦП при нулевом ускорении
function ADC_To_Accel(ADC_Value, DigitCap, Zero_Value: Word): Real; stdcall;

var
AccelVolt, ZeroAccelVolt: Real;

begin
AccelVolt := ADC_To_Volt(ADC_Value, DigitCap, 0);
ZeroAccelVolt := ADC_To_Volt(Zero_Value, DigitCap, 0);
Result := (AccelVolt - ZeroAccelVolt)/0.04;
end;

{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports
ADC_To_Volt,
ADC_To_kPa,
ADC_To_Height,
ADC_To_Accel;

begin
end.
 
 
+
-
edit
 

Alexeev Max

втянувшийся

ST> В память БРЭО пишу пока только один параметр--сумму накоплений АЦП, для перевода в высоту использую коэффициент, полученный опытным путем (на лифте). Есть возможность в программе ввести такой коэффициент?

Надо будет задать свою функцию преобразования АЦП->Высота в DLL и прописать её в файле настроек.

Чуть попозже, выложу релиз с такой возможностью.

С функцией помогу, т.е. включу её в DLL под отдельным названием...
 
RU Ignis Caelum #14.06.2011 14:45  @Alexeev Max#14.06.2011 14:05
+
-
edit
 

Ignis Caelum

опытный

...
A.M.> В качестве примера условно взят кадр длиной 4 байта. Первые 2 байта значение датчика давления оцифровка 16 бит, вторые два байта - акселерометр оцифровка 10 бит.
...

Возможен ли мой случай : с кадры разной длиной появляющиеся в потоке с разной частотой ?

P.S.
для отображения используешь Tchart или другую библиотеку ?
Лучше быть оптимистом и ошибаться, чем пессимистом, который всегда прав.  8.0.552.2158.0.552.215
1 2 3 4

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru