Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получение данных по запросу в J1939.
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > АВТО электроника
galjoen
Например, простейший случай. Я хочу запросить Total Averaged Information с PGN=00FE4D и Default Priority=7. Для этого мне нужно послать запрос с PGN=00EA00, а в нём, в 3-х байтах данных указать запрашиваемый PGN=FE4D.
Т.е. запрос будет выглядеть так:
ID = 18 E0 00 00 и 3 байта данных в такой последовательности: 4D FE 00
Правильно?
А в ответ, не позже через 200 милисекунд, я получу:
ID = 1C FE 4D 00 и 8 байтов данных: XX XX XX XX XX XX XX XX.
Правильно?
galjoen
Попробовал сделать как тут описал - ничего не получилось. То ли запрос у меня неправильный, то ли блок на такие запросы не отвечает. Буду дальше пробовать... Ни у кого лога J1939 с запросами нет?
HARMHARM
Пробовали запрашивать. Пришли к выводу, что всё, что реализовано, и так бегает без запросов.
galjoen
Цитата(HARMHARM @ Nov 16 2009, 20:16) *
Пробовали запрашивать. Пришли к выводу, что всё, что реализовано, и так бегает без запросов.

А NACK в ответ на свои запросы получали? Я не получал.
Я сейчас посмотрел (но не всё понял) "SAE J1939-81-2001.Network management.pdf", так там этим самым запросам очень много страниц посвящено. Вроде получается, что самый универсальный запрос, на который кто нибудь да должен ответить, будет с ID=0x18EAFFFE. Тогда если в данных будет, например, 4D FE 00, то даже если кто-нибудь такой запрос получил, но не поддерживает, то он должен NACK (PGN=E8FF) ответить. Т.е. вроде от всех систем NACK-и должны прийти (с разными SA). Если я ту pdf-ку правильно понял конечно. Как будет доступ к машине - попробую и отпишу.
HARMHARM
Цитата(galjoen @ Nov 16 2009, 22:42) *
А NACK в ответ на свои запросы получали? Я не получал.

Не получал.
Может нет модуля, который бы ответил. Или в нём не реализована эта функция вообще.
galjoen
Попробовал слать сообщение с ID=0x18EAFFFE и данными 0x00E000. Это вроде Address Claim. И на него все отвечать должны, хотя бы NACK. Никакого отклика не получил. Думаю, что там всё урезано до безобразия. В сети сообщений полно, но большинство с фиктивными данными, никак не изменяющимися и не имеющими отношения к реальности. Например, даже оборотов двигателя я не нашёл (всегда 1300), давление масла бывает 4.8 атмосферы и 0, большинство температур и давлений фиктивные (ошибок не было) и т.д. Это я о ПАЗ-ике с китайским двигателем cummins...
HARMHARM
Возможно, хотя на практике такого не видел. ПАЗики, правда, мне не попадались smile.gif
Видел, что есть пустые поля в сообщении, если используется только часть байтов.
galjoen
Ну вот, например, PGN=FEC1. Это пробег в 5 метрах на бит. Первые 4 байта общий, вторые 4 - за поезду (trip). Хотя не понятно, что считать поездкой. Ну да не важно. Это сообщение ВСЕГДА приходит со всеми 8-ю байтами =0. Как и с PGN=FEE0 (тож к пробегу относится) - там тоже все 8 байт всегда =0. Хотя мы на этом ПАЗике поездили...
А вот ЛИАЗ с катерпиллером полностью своему J1578 соответствует. Там пробеги, температуры, давления, топливо, скорости - всё соответствуют. Он не китайский что ли?
HARMHARM
Разница, видимо, не в китайскости, наверняка китайцам софт не дают smile.gif, а в качестве реализации. Может у них по требованию программные модули отключаются или типа того.
Trip, насколько я понял - то ли от включения зажигания, то ли от кнопки "сброс суточного одометра" на приборке.
Кстати, в отличие от FEE0, FEC1 встречается часто и имеет данные.
Juray
Да что китайсы - в натуральном бошевском EDC-7 обнаружилось, что он еще не всякому вопрошающему соизволит ответить даже NACK.
В запросе нужен определённый адрес источника.

Ну и опции по умолчанию поурезаны, бошевцы приезжали, включали.
galjoen
Цитата(Juray @ Dec 15 2009, 23:20) *
В запросе нужен определённый адрес источника.

Уточните пожалуйста, лучше на примере, что значит определённый адрес?
Juray
Пытались считать журнал неисправностей (DM2 - Previously active trouble codes).
То есть CANID = 18 EA 00 sa (00 - это адрес EDC) "Request PGN";
data = CB FE 00 00 00 00 00 00 (PGN 65227)

Так пока в идентификаторе запроса не выставили в Source Address значение, кое-как вытянутое из бошевских представителей, EDC на этот запрос молчал как партизан. Какое - не могу сказать, бошевцы не позволили.

Цитата(galjoen @ Nov 17 2009, 20:56) *
Попробовал слать сообщение с ID=0x18EAFFFE и данными 0x00E000. Это вроде Address Claim. И на него все отвечать должны, хотя бы NACK.

PGN59904 (EA00) "Request PGN" описано в SAE J1939-21 в разделе 5.4.2 начиная со стр.17
Так вот там сказано: "A NACK is not permitted as a response to a global request."

А запросили вы pgn57344 - CM1 "Cab Message 1". С очень высокой вероятностью не нашлось блоков, способных выслать этот набор параметров.
Кстати, согласно SAE J1939-71 это сообщение должно передаваться периодически с интервалом в 1с, без запроса.
Но надо сказать, не все производители соблюдают рекомендации стандарта. Например, тот же Бошевский EDC передаёт сообщение HOURS только по запросу, а не периодически, как указано в стандарте.
galjoen
Цитата(Juray @ Dec 17 2009, 13:50) *
data = CB FE 00 00 00 00 00 00 (PGN 65227)

Так вроде по стандарту в запросе длина данных всего 3 байта д.б.? А я с запросами в 8 байт и не экспериментировал. А вы запрос с размером данных 3 байта, а всё остальное тоже самое, пробовали посылать? Не отвечает?

А насчёт перебора двух младших байт в ID я пробовал - ответов не было (NACK тоже). Раз в секунду запрашивал - каждый следующий раз 2 мл. байта ID на 1 больше. Девайс неделю на ПАЗике катался - точно все варианты перебрал и даже не по 1-му разу. Хотя я в запросе только 3 байта данных посылал. М.б. из-за этого? Надо было 8 слать?

А вообще, видимо стоит к попыткам что-нибудь запросить вернутся. А то я уж подумал, что это всё не поддерживается. А какой бы мне PGN запросить чтобы наиболее вероятно ответ получить? 65227? А 8 или 3 байта?
Хотя попробую и то и другое - всего 2 варианта. Сейчас задача - вообще хоть какой-нибудь ответ получить.
Juray
Цитата(galjoen @ Dec 17 2009, 14:46) *
Так вроде по стандарту в запросе длина данных всего 3 байта д.б.? А я с запросами в 8 байт и не экспериментировал. А вы запрос с размером данных 3 байта, а всё остальное тоже самое, пробовали посылать?

Тоже пробовали - от этого не зависит.

Цитата
А насчёт перебора двух младших байт в ID я пробовал - ответов не было (NACK тоже).

Многие экономят и не посылают NACK на неподдерживаемые запросы, в расчёте что молчание будет расценено имено как "не поддерживается".

Цитата
я в запросе только 3 байта данных посылал. М.б. из-за этого? Надо было 8 слать?

В блоке-то мы потом реализовали 3-байтный вариант - нормально работает. По стандарту положено 3.

Цитата
А какой бы мне PGN запросить чтобы наиболее вероятно ответ получить? 65227?

Сложный вопрос. Может быть действительно DM2. Или DM1 (65226).
Есть варианты 65259 (CI - идентификация компонента) и 65242 (SOFT - версия ПО). Ответ может прибежать транспортным протоколом, если не уложится в 8 байт.

Если знать, какие блоки вообще подключены к шине, тогда можно предположить, что у кого стоит спрашивать.
Типовой набор - блок двигателя (адрес 0x00) и АБС (0x0B).
Двигатель, если сидит на шине, в обязательном порядке должен гнать EEC1 без всяких запросов с интервалом 10 мс.
С него, по идее, можно спросить неисправности DM1 и DM2, моточасы и коленвал HOURS (65253), израсходованное топливо LFC (65257).

Только вот мне не попадались документы SAE с распределением PGN по блокам.
galjoen
Цитата(Juray @ Dec 17 2009, 15:48) *
Сложный вопрос. Может быть действительно DM2. Или DM1 (65226).
Есть варианты 65259 (CI - идентификация компонента) и 65242 (SOFT - версия ПО). Ответ может прибежать транспортным протоколом, если не уложится в 8 байт.

Ну что же, буду и многобайтные сообщения проверять. В исходном состоянии имеются только 2 многобайтных - FEE3 и FEE1.
Цитата
Если знать, какие блоки вообще подключены к шине, тогда можно предположить, что у кого стоит спрашивать.
Типовой набор - блок двигателя (адрес 0x00) и АБС (0x0B).

Так и есть.
Но, несмотря на однотипность, отличий полно. Вот, например, с одним ПАЗиком встретился у которого сообщения со скоростью (FEBF) с интервалом 50 mS, а не 100 mS приходили.
Цитата
Двигатель, если сидит на шине, в обязательном порядке должен гнать EEC1 без всяких запросов с интервалом 10 мс.

EEC1 ни у кого не шлёт. Искал чтобы обороты получить... И EEC2 и EEC3 тоже не шлёт.
Цитата
С него, по идее, можно спросить неисправности DM1 и DM2, моточасы и коленвал HOURS (65253), израсходованное топливо LFC (65257).

Попробую разные варианты. А DM1 (FECA) без всякого запроса 1 раз в секунду шлётся.
Цитата
Только вот мне не попадались документы SAE с распределением PGN по блокам.

А я так понял, что разные блоки могут сообщения с одинаковым PGN слать. Т.е. отличие в младшем байте ID будет (0x00/0x0B).

А ещё имеются FF08 (ID=18 FF 08 00). Что это такое, в каком документе посмотреть? Хотя, наверное, ерунда какая-нибудь, т.к. там всегда все 8 байт данных FF.
HARMHARM
Цитата(galjoen @ Dec 17 2009, 16:09) *
EEC1 ни у кого не шлёт. Искал чтобы обороты получить... И EEC2 и EEC3 тоже не шлёт.

Обороты из FEF1 часто получаются.
Цитата
А я так понял, что разные блоки могут сообщения с одинаковым PGN слать. Т.е. отличие в младшем байте ID будет (0x00/0x0B).

Да, встречалось.
Цитата
А ещё имеются FF08 (ID=18 FF 08 00). Что это такое, в каком документе посмотреть? Хотя, наверное, ерунда какая-нибудь, т.к. там всегда все 8 байт данных FF.

FFxx это всё проприетарные расширения. New Holland например почти всё так гоняет.
Juray
Цитата(galjoen @ Dec 17 2009, 17:09) *
EEC1 ни у кого не шлёт. Искал чтобы обороты получить... И EEC2 и EEC3 тоже не шлёт.

EEC1 - ОБЯЗАТЕЛЬНОЕ сообщение. Двигатель может не передавать ничего из остальных приписанных ему параметров, но свои обороты он сообщать должен, если он сидит на шине. Есть в шине сообщения с SA=00 ? Если такие есть, но нет EEC1, то контроллер двигателя неправильно настроен.
EEC2 и EEC3 - сообщения вспомогательные.

Цитата(galjoen @ Dec 17 2009, 17:09) *
А я так понял, что разные блоки могут сообщения с одинаковым PGN слать. Т.е. отличие в младшем байте ID будет (0x00/0x0B).

Зависит от PGN.
Есть универсальные - например, любой блок может послать Request, выдать инфу о своих неисправностях, сообщить версию ПО и т.п.
Но есть и специфические, за которые отвечает конкретный блок. Например, АБС бесполезно спрашивать о температуре двигателя - зато может сообщить блок двигателя, а контроллер кондиционера ничего не может сказать о колёсной скорости - это епархия АБС. И т.п.

Цитата(HARMHARM @ Dec 17 2009, 18:56) *
Обороты из FEF1 часто получаются.

Из CCVS? Это как?
Конечно, в принципе, по скорости можно вычислить обороты - зная передаточный коэффициент КПП на текущей передаче, а также состояние педали сцепления. И то - на нейтрали и при выжатом сцеплении обороты так определить нельзя.

Цитата(HARMHARM @ Dec 17 2009, 18:56) *
FFxx это всё проприетарные расширения.

Именно. Весь диапазон FF00-FFFF определен как "Manufacturer Assigned".
galjoen
Цитата(Juray @ Dec 18 2009, 13:59) *
EEC1 - ОБЯЗАТЕЛЬНОЕ сообщение. Двигатель может не передавать ничего из остальных приписанных ему параметров, но свои обороты он сообщать должен, если он сидит на шине. Есть в шине сообщения с SA=00 ? Если такие есть, но нет EEC1, то контроллер двигателя неправильно настроен.
EEC2 и EEC3 - сообщения вспомогательные.

Ну нет там EEC1. А с 00, в младшем байте ID, сообщений большинство. Вот FEF2 - мгновенный расход, например.
А из PGN F0xx имеется только:
Код
ID                  данные
18 F0 00 0F     FF FF FF FF 0F FF FF FF - всегда (кто такой 0F (SA) в ID? Больше вроде нигде он не встречается)
18 F0 01 00     FF FF FF FF FF FF FF FF
18 F0 01 0B     CF FF F0 FF FF 0D FF FF

Это с завода так. Никто там ничего никогда не перестраивал и вообще не подключался. И работает. М.б. потому, что коробка механическая? Надо будет на автомате глянуть.

А как там вообще что-нибудь настроить можно?
Juray
Цитата(galjoen @ Dec 18 2009, 17:00) *
Ну нет там EEC1. А с 00, в младшем байте ID, сообщений большинство. Вот FEF2 - мгновенный расход, например.


Цитата
Код
18 F0 00 0F     FF FF FF FF 0F FF FF FF - всегда (кто такой 0F (SA) в ID? Больше вроде нигде он не встречается)

Странно.
0F - это "Топливная система".
Притом что F0 00, то есть pgn61440 - это ERC1 (Electronic Retarder Controller 1), сообщение тормоза-замедлителя, который обычно является субблоком ЭСУД.

F001 передаваемое с адреса 00 - это тоже нонсенс какой-то.
pgn61441 = EBC1 - Electronic Brake Controller 1. Это информация о работе тормозной системы, включая АБС/ПБС.
Вот с адреса 0B - это нормально (третья запись).

Цитата
Это с завода так. Никто там ничего никогда не перестраивал и вообще не подключался. И работает. М.б. потому, что коробка механическая? Надо будет на автомате глянуть.

А как там вообще что-нибудь настроить можно?


Настройка выполняетя с помощью соответствующего диагностического оборудования и софта. Вплоть до перешивки контроллера. Когда мы на УралАЗе с бошевцами пересекались, довелось наблудать процедурку - у них целый стенд для этого применяется. А вот на МАЗе они просто ноутом через адаптер подключались, но там перешивку не делали - только включение опции.

Собственно, есть мысль, что производитель поставляет блок, в котором задействован только необходимый минимум функциональности.
Тот же Бош со скрипом включил выдачу некоторых сообщений, которые изначально не передавались.

А уж какие-то китайцы могут и вообще повырубать трансляцию как попало - мол, не предвидится приёмника для этого сообщения - и нафиг его передавать.
galjoen
Цитата(Juray @ Jan 26 2010, 13:02) *
Странно.
0F - это "Топливная система".
Притом что F0 00, то есть pgn61440 - это ERC1 (Electronic Retarder Controller 1), сообщение тормоза-замедлителя, который обычно является субблоком ЭСУД.

Что-то я не нашёл документ, в котором прописано соответствие между SA (младшие 8 бит ID) и системами автомобиля. Не подскажете где посмотреть?
В сети имеется мультипакетное сообщение:
Код
ID                Данные
18 EC FF 0F   20 13 00 03 FF E1 FE 00
18 EB FF 0F   01 00 00 40 1F 6E 10 4F
18 EB FF 0F   02 6E 00 00 6E 00 00 6E
18 EB FF 0F   03 78 3F 14 05 6E FF FF

Т.е. SA=0F, а само сообщение аналогично Retarder Configuration. Но там 8 мл. бит ID д.б. =0x10.
Видимо это тоже глюк.
Цитата(Juray @ Jan 26 2010, 13:02) *
Настройка выполняетя с помощью соответствующего диагностического оборудования и софта. Вплоть до перешивки контроллера. Когда мы на УралАЗе с бошевцами пересекались, довелось наблудать процедурку - у них целый стенд для этого применяется. А вот на МАЗе они просто ноутом через адаптер подключались, но там перешивку не делали - только включение опции.

Такую штуку, которая подключается к ноуту и ставит флаги, я держал в руках, но воткнуть её в тот момент было некуда. Автобуса не было. В следующий раз подготовлюсь получше. Напаяю определитель откуда исходит сообщение (на базе CAN хоста) и буду писать всё, что шлёт эта штука. А также и остальной трафик CAN. В итоге надеюсь, что сам научусь флаги ставить.
Цитата(Juray @ Jan 26 2010, 13:02) *
Собственно, есть мысль, что производитель поставляет блок, в котором задействован только необходимый минимум функциональности.
Тот же Бош со скрипом включил выдачу некоторых сообщений, которые изначально не передавались.

А уж какие-то китайцы могут и вообще повырубать трансляцию как попало - мол, не предвидится приёмника для этого сообщения - и нафиг его передавать.

Видимо так и есть, хотя тут не китайцы, а наши задействованы...
У всех автобусов с АКПП сообщение EEC1 есть. И данные в нём корректные.
Причём сообщение EEC1 имеется и на некоторых автобусах с механической КПП, но не на всех. Примерно 1 из 3. Отчего зависит - непонятно.
Задавал этот вопрос Камминзу - обещали разобраться. Говорят, что галки у нас в России на заводе ставят. В первой половине февраля буду у Камминза - подниму эту тему ещё раз.
Juray
Распределение адресов определено в таблицах "SAE J1939 Tables B2 to B9"
Ссылка на эти таблицы есть в SAE J 1939-81, в п.4.1.2 (по версии JUL97)
Мне эти таблицы достались уже переведённые на русский, в виде приложения к техническим требованиям. Поделиться не могу, к сожалению.

А я, похоже, ошибся с трактовкой адреса.

0F = "Топливная система" - это не адрес, а номер функции по таблице B5 "Наименование функций, общие для всех областей промышленности"

А вот по таблице B2 "Рекомендуемые адреса. Группа промышленности 0 - Общая" 0F это как раз "Замедлитель двигателя".
Так что с этими сообщениями всё в порядке. Остаётся странность только с F001.

А откуда 0x10?
По той же B2 это "Замедлитель карданной передачи".
galjoen
Цитата(Juray @ Jan 28 2010, 06:17) *
Распределение адресов определено в таблицах "SAE J1939 Tables B2 to B9"
Ссылка на эти таблицы есть в SAE J 1939-81, в п.4.1.2 (по версии JUL97)

TABLE B2
J1939 PREFERRED ADDRESSES
INDUSTRY GROUP #0 - GLOBAL
Rev Address ECU-Module Definition
0 Engine #1
1 Engine #2
....
15 Retarder – Engine Engine Compression Braking
16 Retarder – Driveline
.......
Спасибо, сразу же нашёл. Это оно?
Цитата
А откуда 0x10?

Это из "CAN-Specification SAE J1939 VOITH DIWA.3 E200-ECU"
У меня распечатка есть, а сам файл найти не могу. На другом компе наверное.
Цитата
По той же B2 это "Замедлитель карданной передачи".

Т.е. "16 Retarder – Driveline" так перевели. Так лучше уж в оригинале смотреть...
Juray
Ага, оно самое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.