CANOPEN драйвер
Re: CANOPEN драйвер
Добрый день! Второй can может работать одновременно с первым, но на другой скорости?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Добрый день, да, должен мочь.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 9
- Зарегистрирован: 04 мар 2021, 15:06
Re: CANOPEN драйвер
Добрый день!
Можно ли задать значения по умолчанию для номера узла(co_nodeID) и скорости передачи(co_bitRate) так,
чтобы они выставлялись при отключенной загрузке из EEPROM (co2_vars.settings.LoadParamsFromUserMemory_ena = 0;)?
Можно ли задать значения по умолчанию для номера узла(co_nodeID) и скорости передачи(co_bitRate) так,
чтобы они выставлялись при отключенной загрузке из EEPROM (co2_vars.settings.LoadParamsFromUserMemory_ena = 0;)?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Добрый день, в COODEdit этим параметрам значения по-умолчанию задайте нужные.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 9
- Зарегистрирован: 04 мар 2021, 15:06
Re: CANOPEN драйвер
Это первое, что я пробовал. Я даже создал словарь только с этими 2мя обьектами.
Как будто инициализация его игнорирует и в co2_Init все равно выставляет bitRate = 3, а nodeID = 0
А если выставить значения после инициализации и сделать co_ReInit(&co2_vars);
то вообще все в 0 сбрасывается и перестает работать.
Как будто инициализация его игнорирует и в co2_Init все равно выставляет bitRate = 3, а nodeID = 0
А если выставить значения после инициализации и сделать co_ReInit(&co2_vars);
то вообще все в 0 сбрасывается и перестает работать.
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Так делать нельзя – объекты словаря до индекса 3000h (не включительно) являются служебными и нужны для нормальной работы драйвера – их нужно оставить как в исходном проекте.Я даже создал словарь только с этими 2мя обьектами.
Для достижения вашей цели должен помочь следующий рецепт:
Код: Выделить всё
co2_vars.settings.LoadParamsFromUserMemory_ena = 0;//Не загружать значения параметров из ЭНОЗУ
... //остальные настройки
co2_Init(&co2_vars); //Инициализация драйвера CANOpen
//выставляем нужный номер узла (1-126) и скорость (1-6 - см. canSpeedTable в файле CANOpenUDfuncs.c)
co2_vars.co_nodeID = 50;
co2_vars.co_bitRate = 6; // 1000 kb/s
co_ReInit(&co2_vars);
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
-
- Сообщения: 9
- Зарегистрирован: 04 мар 2021, 15:06
Re: CANOPEN драйвер
Я вернул корректный словарь и после этого рецепт сработал!
Спасибо!
Спасибо!
Re: CANOPEN драйвер
Здравия желаю.
Давайте разберемся с работой двух CAN-ов одновременно.
До сих пор работал с CAN2, все хорошо. Встала необходимость использовать оба кэна.
Подключил библиотеку для двух кэнов.
Проинициализировал CAN1 аналогично инициализации CAN2. Прошиваю. Не работают оба кэна.
Отключаю в ПО инициализацию CAN1, CAN2 начинает работать правильно.
Подскажите пожалуйста что я делаю не так.
Благодарю.
Давайте разберемся с работой двух CAN-ов одновременно.
До сих пор работал с CAN2, все хорошо. Встала необходимость использовать оба кэна.
Подключил библиотеку для двух кэнов.
Проинициализировал CAN1 аналогично инициализации CAN2. Прошиваю. Не работают оба кэна.
Отключаю в ПО инициализацию CAN1, CAN2 начинает работать правильно.
Подскажите пожалуйста что я делаю не так.
Благодарю.
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Добрый день, покажите код инициализации, пожалуйста. В примере MotorControlDemo есть два кена. Оттуда брали?
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: CANOPEN драйвер
void SM_Net_Init(TSM_Net *p) {
p->state = 0;
p->state_prev = 0xff;
//Настройка драйвера CANOpen модуля CAN1
co1_vars.settings.LoadParamsFromUserMemory_ena = 1; // Разрешить загружать значения параметров из ЭНОЗУ
co1_vars.settings.CAN_ISR_priority = IRQ_PRIORITY_CAN1; // Присвоение приоритета перывания CAN (обработчик внутри библиотеки)
co1_vars.settings.MultiPDO_ena = 0; // Отключение обработки PDO без учета номера узла (спец. функция)
co1_vars.settings.RX_PDO_Callback_ena = 0; // Не вызывать функции обратного вызова при приеме PDO
co1_vars.settings.AutoBusON_ena = 1; // Автоматически перезапускать CAN при ошибках на линии
co1_vars.settings.BlockTransfer_ena = 1; // Разрешить блочную передачу (нужна для осциллографа)
co1_Init(&co1_vars); // Инициализация драйвера CANOpen
//Настройка драйвера CANOpen модуля CAN2
co2_vars.settings.LoadParamsFromUserMemory_ena = 1; // Разрешить загружать значения параметров из ЭНОЗУ
co2_vars.settings.CAN_ISR_priority = IRQ_PRIORITY_CAN2; // Присвоение приоритета перывания CAN (обработчик внутри библиотеки)
co2_vars.settings.MultiPDO_ena = 0; // Отключение обработки PDO без учета номера узла (спец. функция)
co2_vars.settings.RX_PDO_Callback_ena = 0; // Не вызывать функции обратного вызова при приеме PDO
co2_vars.settings.AutoBusON_ena = 1; // Автоматически перезапускать CAN при ошибках на линии
co2_vars.settings.BlockTransfer_ena = 1; // Разрешить блочную передачу (нужна для осциллографа)
co2_Init(&co2_vars); // Инициализация драйвера CANOpen
файл CANOpen_drv.h :
//!Включатель CAN 1
#define CAN_1_ENABLE
//********************************************************************************************
//!Включатель CAN 2
#define CAN_2_ENABLE
p->state = 0;
p->state_prev = 0xff;
//Настройка драйвера CANOpen модуля CAN1
co1_vars.settings.LoadParamsFromUserMemory_ena = 1; // Разрешить загружать значения параметров из ЭНОЗУ
co1_vars.settings.CAN_ISR_priority = IRQ_PRIORITY_CAN1; // Присвоение приоритета перывания CAN (обработчик внутри библиотеки)
co1_vars.settings.MultiPDO_ena = 0; // Отключение обработки PDO без учета номера узла (спец. функция)
co1_vars.settings.RX_PDO_Callback_ena = 0; // Не вызывать функции обратного вызова при приеме PDO
co1_vars.settings.AutoBusON_ena = 1; // Автоматически перезапускать CAN при ошибках на линии
co1_vars.settings.BlockTransfer_ena = 1; // Разрешить блочную передачу (нужна для осциллографа)
co1_Init(&co1_vars); // Инициализация драйвера CANOpen
//Настройка драйвера CANOpen модуля CAN2
co2_vars.settings.LoadParamsFromUserMemory_ena = 1; // Разрешить загружать значения параметров из ЭНОЗУ
co2_vars.settings.CAN_ISR_priority = IRQ_PRIORITY_CAN2; // Присвоение приоритета перывания CAN (обработчик внутри библиотеки)
co2_vars.settings.MultiPDO_ena = 0; // Отключение обработки PDO без учета номера узла (спец. функция)
co2_vars.settings.RX_PDO_Callback_ena = 0; // Не вызывать функции обратного вызова при приеме PDO
co2_vars.settings.AutoBusON_ena = 1; // Автоматически перезапускать CAN при ошибках на линии
co2_vars.settings.BlockTransfer_ena = 1; // Разрешить блочную передачу (нужна для осциллографа)
co2_Init(&co2_vars); // Инициализация драйвера CANOpen
файл CANOpen_drv.h :
//!Включатель CAN 1
#define CAN_1_ENABLE
//********************************************************************************************
//!Включатель CAN 2
#define CAN_2_ENABLE