В блоге:

2014-03-02

Чем плох ELM327. И почему его приходится поддерживать

ELM327 является, похоже, самым известным типом диагностических адаптеров. Но, на мой взгляд, в ELM327 есть несколько концептуальных ошибок.

1. Самая главное ошибка - это ориентация на схему "запрос"-"ответ". Неудачное решение. Для некоторых запросов в момент их отправки нет информации, какие и сколько ответов будет получено. Может прийти одно ответное сообщение, а может несколько. Из-за этого в ELM327 применяется плохое решение с временем ожидания. Есть заданное время, в течение которого ожидается следующее сообщение с ответом. При получении одного сообщения дополнительно тратится время время на ожидание второго (а вдруг придет?). Это одна из причин, почему ELM327 такой медленный.

Для быстрой работы нужно искать обходные пути: например, можно подстроить время задержки. Для некоторых запросов время можно выставить поменьше, но для других время необходимо побольше. Разработчики ELM327 знают о проблеме, поэтому сделали аж два алгоритма адаптивных тайм-аутов. Но, увы, это не выход, адаптивные тайм-ауты толком не работают с сузуковской CAN-шиной: ELM327 постепенно уменьшает время ожидания второго ответа, что потом приводит к пропуску хвоста ответа на медленных запросах.

Другой обходной путь, реализованный в ELM327 - это явное указание числа ожидаемых ответов. Это, в принципе, работает с SDL-KWP по K-Line (хотя там может быть несколько ответов на один запрос, но крайне редко). Но такой путь не подходит для сузуковской CAN-шины с ее мелкими пакетами, число которых заранее неизвестно.

Еще один из вариантов обхода: использование мониторинга. Но этот режим создавался для других задач, поэтому нельзя назвать хорошим решением получение ответа таким путем.

2. Вторая важная концептуальная ошибка ELM327 - это неправильное понимание сценария использования. Разработчики ELM327 из страны эльфов, где обычные пользователи подключают диагностический адаптер и общаются с ним исключительно через терминалку, без всяких диагностических программ. Для них удобная возможность сохранить настройки, чтобы потом сразу после инициализации отправлять PID-запросы в терминалке.

Но в реальном мире через терминал с ELM327 работают только разработчики, да и то на первом этапе. Зато разработчикам программ приходится писать код-простыню установки параметров "на всякий случай" после каждой инициализации. Бессмысленная, но необходимая деятельность.

3. Для поддержки предыдущей концептуальной ошибки был выбран текстовый протокол для обмена. Выбран в неудачной форме: этот текстовый протокол ориентирован на человека с терминалкой, а не на программирование. В результате разбор ответа напоминает шаманство и выполняется сугубо эмпирически: т.е. только на основе опыта, а не при помощи формального описания, которого просто нет.

4. ELM327 задумывался как универсальный, но на практике оказалось, что между протоколами есть отличия, которые нужно учитывать. В результате и универсальности не получилось, и специфичности (удобства использования отдельных протоколов) тоже не наблюдается. Тот же ISO 15765-2 (который мне нужен для сузуковской CAN-шины) явно реализован по остаточному принципу: вроде есть, но нельзя  назвать это нормальной поддержкой. Кроме того, "за бортом" остаются специфичные протоколы, которые несколько отличаются от стандартных (хотя в последних версиях ELM327 есть вялые подвижки в их сторону).


По этим причинам некоторые авторы весьма хороших диагностических программ жутко не любят ELM327 и не хотят делать их поддержку. Я же сделал такую поддержку, хоть и считаю ELM327 неудачной вещью, но могу признать следующие вещи:

1. Само название ELM327 удобно для покупки адаптера из-за своей известности и, в каком-то смысле, раскрученности. Есть куча китайских клонов, которые несколько отличаются качеством реализации, но, в принципе, пригодны для использования при своей низкой цене. Тогда как среди альтернативных адаптеров (не ELM327) пусть и лучших, но присутствует "разброд и шатание" - куча версий, куча названий, ориентированность на конкретные модели против ориентации на псевдоуниверсальность ELM327. Как обычному человеку понять, что для диагностики Сузуки по SDL-KWP вполне подходит адаптер для VAG (Volkswagen Audi Gruppe)?

2. ELM327 криво косо, но поддерживает кроме K-Line еще и CAN. Для свежих Suzuki это полезно. Более того, в моем SZ Viewer CAN-шина пока (за неимением других адаптеров) поддерживается только через ELM327. Но, надеюсь, это временно. Поддержку K+CAN Commander 1.4 буду добавлять, когда придет соответствующий адаптер.

3. К сожалению, вообще отсутствуют массовые альтернативные беспроводные адаптеры, тогда как ELM327 в BT и Wi-Fi версиях доступны для покупки по адекватным ценам.

4. При всей кривизне ELM327 все же берет на себя определенные задачи, которые тяжело решать на слабых мобильных устройствах - например, точное временное управление сигналами (тот же fast init).

Поэтому вторым типом адаптеров, которые поддерживает моя программа, стал именно ELM327. А вот дальше планируется поддержка K+Can Commander 1.4 и адаптеров PassThru-J2534 (на примере Mini VCI, знакомого тойотофанатам).

0 коммент.:

Отправить комментарий

Архив блога