6.4 KiB
Карта CAN-адресов Balsam_167_periph и BALZAM_167
Формирование адреса peripheral
В Source/Internal/main.c выполняется:
get_Mode();
InitCan(0, Mode);
В Source/Internal/ecan.c настроены два extended CAN ID:
long id = 0x80BA0000;
MBOX0.MSGID.all = id + 0x10 + DevNum; /* передача */
MBOX1.MSGID.all = id + DevNum; /* приём */
0x80000000 задаёт extended-формат и не является частью отображаемого
29-битного идентификатора. Фактические адреса на шине:
TX peripheral = 0x00BA0010 + Mode
RX peripheral = 0x00BA0000 + Mode
Адреса всех режимов peripheral
Mode |
Назначение | TX peripheral -> BALZAM | RX BALZAM -> peripheral |
|---|---|---|---|
| 1 | adr_TRN1 |
0x00BA0011 |
0x00BA0001 |
| 2 | adr_TRN2 |
0x00BA0012 |
0x00BA0002 |
| 3 | adr_POW1 |
0x00BA0013 |
0x00BA0003 |
| 4 | adr_POW2 |
0x00BA0014 |
0x00BA0004 |
| 5 | adr_LOA1, УМП1 |
0x00BA0015 |
0x00BA0005 |
| 6 | adr_LOA2, УМП2 |
0x00BA0016 |
0x00BA0006 |
| 7 | adr_ENG1 |
0x00BA0017 |
0x00BA0007 |
| 8 | adr_PULT |
0x00BA0018 |
0x00BA0008 |
| 9 | adr_SHKF |
0x00BA0019 |
0x00BA0009 |
Приёмные адреса основного контроллера
В BALZAM_167/Src/balzam_7/CanSetupBalzam7.c настроено:
| RX mailbox | CAN ID | Запись обработчиком |
|---|---|---|
| 0 | 0x00BA0010 |
Unites[1] |
| 1 | 0x00BA0011 |
Unites[2] |
| 2 | 0x00BA0012 |
Unites[3] |
| 3 | 0x00BA0013 |
Unites[4] |
| 4 | 0x00BA0014 |
Unites[5] |
| 5 | 0x00BA0015 |
Unites[6] |
| 6 | 0x00BA0016 |
Unites[7] |
| 7 | 0x00BA0017 |
Unites[8] |
| 8 | 0x00BA0018 |
Unites[9] |
| 9 | 0x00745019 |
специальная обработка MPU |
| 10 | 0x00BA001A |
Unites[11] |
| 11 | 0x00BA001B |
Unites[12] |
Причина такого соответствия — запись в обработчике:
Unites[box + 1][register_address] = received_data;
Имена индексов Unites
Текущие определения в CanSetupBalzam7.h:
| Индекс | Имя устройства |
|---|---|
| 1 | UKSS1_CAN_DEVICE |
| 2 | UKSS4_CAN_DEVICE |
| 3 | UKSS2_CAN_DEVICE |
| 4 | UKSS3_CAN_DEVICE |
| 5 | UMP1_CAN_DEVICE |
| 6 | UMP2_CAN_DEVICE |
| 7 | UKSS8_CAN_DEVICE |
| 8 | VPU1_CAN_DEVICE |
| 9 | UKSS5_CAN_DEVICE |
| 10 | MPU_CAN_DEVICE |
| 11 | UKSS6_CAN_DEVICE |
| 12 | UKSS7_CAN_DEVICE |
Фактическое попадание пакетов
При текущем коде пакет peripheral с Mode=N принимается mailbox N, после
чего записывается в Unites[N+1].
| Peripheral | TX CAN ID | Фактический Unites |
Имя по текущим константам |
|---|---|---|---|
adr_TRN1, Mode 1 |
0x00BA0011 |
Unites[2] |
UKSS4_CAN_DEVICE |
adr_TRN2, Mode 2 |
0x00BA0012 |
Unites[3] |
UKSS2_CAN_DEVICE |
adr_POW1, Mode 3 |
0x00BA0013 |
Unites[4] |
UKSS3_CAN_DEVICE |
adr_POW2, Mode 4 |
0x00BA0014 |
Unites[5] |
UMP1_CAN_DEVICE |
adr_LOA1, Mode 5 |
0x00BA0015 |
Unites[6] |
UMP2_CAN_DEVICE |
adr_LOA2, Mode 6 |
0x00BA0016 |
Unites[7] |
UKSS8_CAN_DEVICE |
adr_ENG1, Mode 7 |
0x00BA0017 |
Unites[8] |
VPU1_CAN_DEVICE |
adr_PULT, Mode 8 |
0x00BA0018 |
Unites[9] |
UKSS5_CAN_DEVICE |
adr_SHKF, Mode 9 |
0x00BA0019 |
нет приёма | — |
Связь с ошибкой обрыва фаз
Peripheral передаёт регистры ошибок modbus[0], modbus[1] и modbus[2]
в CAN-пакете с начальным адресом данных 0. Признак обрыва/перекоса Wry
занимает бит 2:
Wry = 0x0004
Основной контроллер выставляет:
mpu_out[125].bit6 =
(Unites[UMP1_CAN_DEVICE][0] & 0x0004) ||
(Unites[UMP1_CAN_DEVICE][1] & 0x0004);
mpu_out[125].bit10 =
(Unites[UMP2_CAN_DEVICE][0] & 0x0004) ||
(Unites[UMP2_CAN_DEVICE][1] & 0x0004);
С учётом UMP1_CAN_DEVICE=5 и UMP2_CAN_DEVICE=6 получаем:
| Выход MPU | Читаемые данные | CAN ID, заполняющий эти данные |
|---|---|---|
mpu_out[125].bit6 |
Unites[5][0/1] |
0x00BA0014 |
mpu_out[125].bit10 |
Unites[6][0/1] |
0x00BA0015 |
Но УМП отправляют:
| Плата | Фактический CAN ID | Куда пакет попадает сейчас |
|---|---|---|
УМП1, Mode=5 |
0x00BA0015 |
Unites[6], область УМП2 |
УМП2, Mode=6 |
0x00BA0016 |
Unites[7], область UKSS8 |
Таким образом, сейчас присутствует смещение адреса на единицу. УМП1 может
влиять на mpu_out[125].bit10 вместо bit6, а УМП2 не попадает ни в один из
двух ожидаемых массивов УМП.
Обратное направление
Основной контроллер отправляет устройству с индексом N через mailbox
15 + N, которому назначен CAN ID с номером N - 1.
| Получатель | TX CAN ID BALZAM | RX CAN ID peripheral |
|---|---|---|
| УМП1 | 0x00BA0004 |
0x00BA0005 |
| УМП2 | 0x00BA0005 |
0x00BA0006 |
В обратном направлении также имеется смещение на единицу.
Вывод
Перед изменением кода необходимо сверить CAN-трассу и реальные положения адресных перемычек. После подтверждения адресной схемы возможны два варианта:
- использовать при настройке CAN peripheral значение
Mode - 1; - перенастроить RX/TX mailbox основного контроллера под текущие значения
Modeperipheral.
Комментарии возле mailbox основного проекта частично не совпадают с текущими константами устройств, поэтому менять адреса только по комментариям нельзя.