CANOPEN драйвер

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 01 дек 2021, 12:33

Сам свои PDO драйвер не примет, надо соединять проводками CAN друг на друга. И при этом надо сделать разные номера узлов для разных CAN при соединении вместе. Поэтому лучше использовать внешнее устройство, мы обычно используем второй канал переходника CAN-USB фирмы марафон и их утилиту canwise. Она умеет и принимать, и передавать любые данные в хексах.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: CANOPEN драйвер

Сообщение Илья! » 01 дек 2021, 16:29

ну что ж, давайте дальше отлаживать )
имеем следующую конфигурацию.
Плата с двумя кэнами. Связь с Юниконом по обоим кэнам присутствует. CANH и СANL обоих кэнов объединил проводками. Настраиваю Кэн2 на передачу TPDO, Кэн1 настраиваю на прием RPDO. Изменение параметра (статус параметра - редактируемый) НЕ НАБЛЮДАЮ. Осциллографом вижу наличие в сети посылок с заданной частотой.

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 01 дек 2021, 16:31

Переходник USB-CAN у вас есть? Встаньте на линию, посмотрите посылки, найдите там PDO, проверьте правильность идентификатора и данных. Это позволит понять, что не работает - передача данных или приём. После этого можно отлаживать ту или другую часть. Для отладки нужно в студию:
1. Настройки RPDO
2. Настройки TPDO
3. Содержимое объектов
4. Посылки в сети в хексах с USB-CAN адаптера
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: CANOPEN драйвер

Сообщение Илья! » 01 дек 2021, 16:55

Вы имеете ввиду марафоновский адаптер? есть, через него как раз и осуществляется связь с Юниконом. А посмотреть посылки Canwise?

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 01 дек 2021, 17:21

1. Зайти на сайт марафона и скачать Canwise, или с их диска, если он есть в поставке.
2. Установить Canwise.
3. Открыть документацию на марафон, посмотреть на каких пинах разъема второй канал CAN. Спаять провод или воспользоваться разветвителями, если они есть в комплекте.
4. Подключить первый и второй каналы марафона на одну линию с контроллером.
5. Запустить Canwise, открыть второй канал (который первый в нумерации с нуля), выбрать скорость.
6. Наблюдать посылки. Там есть несколько плагинов к сanwise, трейсер посылок, логгер, CANOpen анализатор и другие. Выбрать какой понравится и в нём смотреть. Мы базовым "CAN monitor" пользуемся обычно.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: CANOPEN драйвер

Сообщение Илья! » 02 дек 2021, 09:43

Доброе утро.
Обнаружился еще один баг. Давайте с ним разберемся, прежде чем с самими посылками.
Конфигурация железа тажа: плата с двумя Кэнами, которые объединены линиями CANH/CANL. На Кэн2 подключен Юникон через марафон.
Node_ID у Кэнов разные. Юникон при включении видит оба узла и подключается к обоим как по отдельности так и совместно.
Проблема в следующем: не сохраняются ( или не восстанавливаются) в энергонезависимой памяти коммуникационные параметры Кэн1. Коммуникационные параметры Кэн2 сохраняются. Пользовательские параметры сохраняются. Это во-перавых.
А во-вторых, при переключении между узлами начинает моргать кнопочка "обновить словарь". Предполагаю, что это может быть по причине первой проблемы.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: CANOPEN драйвер

Сообщение Илья! » 02 дек 2021, 11:36

уточняю по морганию "обновить словарь". такая последовательность:
1. к Юникону подключены оба узла.
2. изменил коммуникационный параметр в Кэн узла2.
3. сохранил параметры.
4. выкл питание, вкл питание
5. подключился в Юниконе к узлу2
6. редактируемый параметр не сохранил своего значения.
7. подключился в Юниконе к узлу1
8. заморгал "обновить словарь"
9.обновил, сохранил.
10. переключился на узел2, не моргает
11. выкл, вкл питание.
12. подкл к узлу1, не моргает.
13. подкл к узлу2, моргает.
14. обновил, выкл, вкл.
15. подкл к узлу2, не моргает
16. подкл к узлу1, моргает
и т.д.

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 02 дек 2021, 13:38

Проблема, как мы понимаем, связана с тем, что параметры обоих словарей - для CAN1 и CAN2 - сохраняются в одну и ту же область пользовательской памяти.

По умолчанию так сделано из-за того, что, как правило, оба словаря CAN содержат одинаковые наборы параметров.
Поэтому во время инициализации драйвера сначала CAN1 загружает из памяти значения параметров, а затем CAN2 загружает те же самые значения.

Если делать разные адреса сохранения параметров, то при одинаковых словарях объектов для сохранения параметров вам нужно будет сохранять значения параметров, подключившись к CAN2, так как именно он восстанавливает параметры последним. Если сохранить параметры через CAN1, то CAN2 всё равно перетрёт все параметры на его значения, так как инициализация CAN2 идёт второй после CAN1.

Чтобы частично обойти эту проблему, в COODEdit было решено разделить адреса хранения параметров "коммуникационных", т.е. ответственных за CAN (индексы 1000-2FFF) и пользовательских параметров словаря (индексы 3000-5FFF). Эти настройки доступны на вкладке "Настройки профиля". Идея в том, чтобы сохранять коммуникационные параметры в разные области памяти (т.е. номер узла и настройки PDO), а все остальные параметры в одну область памяти, предполагая, что словари одинаковые:
2021-12-02_13-25-13.png
2021-12-02_13-25-13.png (8.23 КБ) 5164 просмотра
Итого, нужно понять, что вы хотите:
1. Два одинаковых словаря объектов для разных CAN, но с разными коммуникационными настройками, сохранёнными в пользовательской памяти.
2. Разные словари объектов для разных CAN, например, один усечённый для связи с внешними устройствами, второй полный "для своих устройств".
3. Просто потестить как работают PDO из одного CAN в другой. Потом будет работать один CAN или два сразу, но с полностью одинаковыми настройками.

Чтобы решить задачу 1 или 3, нужно:

Поменять адреса сохранения параметров в EEPROM можно в заголовочном файле "co_ODvars.h":

Код: Выделить всё

//! Начальный адрес для сохранения в SPI памяти словаря 1-го CAN
#define CO1_SPI_START_ADDR 0
//! Начальный адрес для сохранения в SPI памяти словаря 2-го CAN
#define CO2_SPI_START_ADDR 0
заменить на:

Код: Выделить всё

//! Начальный адрес для сохранения в SPI памяти словаря 1-го CAN
#define CO1_SPI_START_ADDR 0
//! Начальный адрес для сохранения в SPI памяти словаря 2-го CAN
#define CO2_SPI_START_ADDR 3500

В таком случае параметры, сохранённые с CAN1, будут располагаться с адреса 0, а параметры с CAN2 - с адреса 3500.
Это будет работать, если 3500 байт будет достаточно для хранения значений параметров CAN1, иначе области памяти будут "наползать" друг на друга.
В этом случае, нужно будет увеличить адрес, по которому сохраняются значения из CAN2.

Также нужно проследить, что в настройках COODEdit для второго модуля CAN для объектов 3000-5FFF на вкладке "Настройки профиля" указан адрес CO1_SPI_START_ADDR, как на скриншоте выше.

Если же хотите делать вариант 2, т.е. разные словари объектов для разных CAN, то нужно полностью сохранять оба CAN по разным адресам пользовательской памяти и следить за тем, чтобы в этих словарях не было одних и тех же переменных - иначе восстанавливаться они будут теми значениями, что были сохранены командой в CAN2.


Мы на практике обычно пользуемся вариантом, когда оба CAN содержат одинаковый слова и сохраняются полностью в одну область пользовательской памяти (как сейчас сделано в motorcontroldemo). И номер узла, соответственно, одинаковый. Тогда CANы работают в разных подсетях в режиме резервирования. При отказе одного по второму будет слаться тоже самое в те же объекты. Разными настройками в разных CAN обычно не пользуемся.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: CANOPEN драйвер

Сообщение Илья! » 02 дек 2021, 13:51

всё, что я описал по морганию "обновить словарь" относится к разным адресам размещения коммуникационных настроек для Кэн1 и Кэн2. А вот пользовательские переменные - общие.
т.е. у меня
//! Начальный адрес для сохранения в SPI памяти словаря 1-го CAN
#define CO1_SPI_START_ADDR 0
//! Начальный адрес для сохранения в SPI памяти словаря 2-го CAN
#define CO2_SPI_START_ADDR 3500
в COODEdit-е это учтено.
т.е. мне нужно два разных КЭНа (с разными комм. настройками) и один общий словарь пользователя

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 02 дек 2021, 14:03

Ну, мигание кнопки Обновить словарь и сохранение параметров хоть и связаны косвенно, но лучше разделять эти проблемы пока. Т.е. у вас
#define CO1_SPI_START_ADDR 0
#define CO2_SPI_START_ADDR 3500

и в кодедите настроено как у меня на скриншоте?
И при этом если подключиться к CAN2, поменять коммуникационный параметр, сохранить параметры юниконом, перезагрузить контроллер - он сбрасывается на дефолты?

При этом тоже самое через CAN1 работает, т.е. можно сохранить коммуникационный параметр, перезагрузить и он остаётся? При этом чему равен этот же коммуникационный параметр в CAN2? Не переписывается ли на то, что сохранили в CAN1?
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Ответить