Page 3 of 7

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 11:41 am
by STC
Вчера начал дорабатывать прошивку для поддержки редактирования таблиц в реальном времени.
Сделал чтобы блок по команде менеджера посылал имена редектируемых таблиц в дополнение к обычным. В ближайшее время поменяю внутреннюю логику прошивки для работы с ОЗУ при обращении к таблицам.
Для обмена данными меджу менеджером и блоком во время радактирования таблиц предлагаю добавить следующий информационный пакет.

Code: Select all

!{NTAA(data)\r
@{NTAA(data)\r
N - номер набора редактируемых таблиц (0 или 1)
T - код таблицы из набора (ХХ, рабочая и т.д.)
AA - адрес фрагмента в таблице
(data) - данные фрагмента для записи/чтения в таблицу. Размер данных любой но не больше 32 байт.

Алгоритм обмена данными между менеджером и блоком следующий.
Пользователь открывает окно редактировании таблиц (не акцкентируем на этом внимание) на котором есть две кнопки - "прочитать" и "записать". При нажатии на кнопку "прочитать" менеджер посылает блоку команду CHANGEMODE и блок начинает посылать менеджеру содержимое всех таблиц. После получения всех данных менеджер снова посылает команду CHANGEMODE для восстановления режима посылки по умолчанию. После того как пользователь отредактировал таблицы он нажимает кнопку "записать" и менеджер пересылает содержимое только тех фрагментов и тех таблиц которые редактировались.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 1:40 pm
by Serj_K
Тогда размер передаваемого фрагмента лучше сделать 16-и байтным. Причём для упрощения можно вообще не использовать код таблицы и адрес фрагмента, а передавать всю таблицу(ы) целиком - нам нужно их затащить в менеджер полностью, а не отдельный фрагмент. Как минимум для переноса в менеджер.
А вот перенос отредактированных в менеджере данных может и усложнить. Нас ведь интересует изменение в реальном времени, то есть конкретной точки. Для этого мы мониторим текущее состояние двигателя - обороты, температуру, состояние концевика карба и расход воздуха. На основании этих данных точно знаем, какая точка таблиц используется. Далее изменяем значение этой текущей точки и передаём только его - 1 байт данных + команда. Новое значение заменяет старое в ОЗУ и сразу применяется. После завершения редактирования посылается команда на сохранение данных в ЕЕПРОМ и они переносятся туда из ОЗУ. Также остаётся копия таблиц в менеджере, которую можно сохранить в файле.

По форме редактирования в менеджере.
Имеем вкладку данных прошивки. Читаем прошивку, читаем таблицы из ЕЕПРОМ секу(реально из ОЗУ). Выбираем работу с редактируемыми таблицами, например ставим флажок. Выбираем таблицу для редактирования. При этом двигатель находится в некотором состоянии, которое мы мониторим. На графике соответствующих таблиц каким-то образом нужно отображить текущее состояние оборотов или температуры. Это может быть вертикльный маркер. На графике рабочей характеристики по считанным данным также изменяется значение расхода воздуха и соответственно переключается таблица. Мы двигаем точку графика, когда обороты находятся непосредственно возле неё. При этом изменённые данные по этой точке сразу передаются в секу. Кроме того, нужно переключать таблицы в соответствии с режимом работы двигателя - пуск, холостой ход, рабочий режим. Температурная коррекция - это отдельная таблица, до которой дойдёт дело уже в конце.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 4:17 pm
by STC
Полностью согласен. Я просто не хотел акцентировать внимание на деталях реализации пользовательского интерфейса, а хотел акцентировать внимание на протоколе.
Возможность пересылки в блок значения одной точки я не исключал (описанный мной пакет данных это позволяет делать, он универсален).

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 8:51 pm
by Serj_K
Пересылать в секу блок данных при редактировании в реальном времени смысла нет, достаточно изменённую текущую точку. Или полные таблицы при начальной инициализации ЕЕПРОМ.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 9:14 pm
by STC
Так и есть

Re: Редактирование кривых УОЗ в реальном времени

Posted: Thu May 26, 2011 9:33 pm
by ender11
может, пусть менеджер и решает, что ему нужно -- всё сразу, или точку?

Re: Редактирование кривых УОЗ в реальном времени

Posted: Fri May 27, 2011 10:05 am
by STC
Понятное дело что это должен менеджер решать.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Fri May 27, 2011 10:15 am
by STC
Столкнулся с проблемой связанной с возможностью затирания редактируемой таблицы при автоматическом переключении газ/бензин.
Редактируемая таблица размещена в ОЗУ и в момент переключения между газом и бензином мы производим копирование выбранного набора кривых в ОЗУ. При этом если не сохранить отредактированную копию в ОЗУ обратно в EEPROM то мы ее потеряем, но сохрканить ее довольно сложно, так как процесс сохранения довольно долгий и на это время нужно отложить процесс перенесения в ОЗУ новой таблицы...
Как один из вариантов решения этой проблемы это на время редактирования запрещать переключение газ/бензин и использовать только тот набор который мы выбрали для редактирования независимо от того какое сейчас топливо.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Fri May 27, 2011 12:54 pm
by Serj_K
Можно сделать по другому. Если будет флаг, отвечающий за загрузку в ОЗУ конкретной таблицы и этот флаг изменяется только внешней командой, то при переходе на другое топливо будет работать таблица из флэш и редактирование заблокируется. Тогда можно будет сохранить изменённую таблицу без потери.

Re: Редактирование кривых УОЗ в реальном времени

Posted: Fri May 27, 2011 2:26 pm
by STC
Как вариант можно еще использовать 2 таблицы в ОЗУ вместо 1. Это правда жирно будет по памяти, но ее вроде в меге 32 2 кб. Одна для бензина, другая для газа.
Да, скорее всего так и сделаю.