CANOPEN драйвер
Re: CANOPEN драйвер
Спасибо!
А если я, как указано выше, поменяю значения параметров по умолчанию(к примеру номер узла). И захочу это сохранить в эн.памяти, то я должен использовать функцию -void co_ODexpositor_paramConservation?
И при следующем включении МК параметры будут считаны уже измененные?
А если я, как указано выше, поменяю значения параметров по умолчанию(к примеру номер узла). И захочу это сохранить в эн.памяти, то я должен использовать функцию -void co_ODexpositor_paramConservation?
И при следующем включении МК параметры будут считаны уже измененные?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Правильно. Также можно дать команду на сохранение юниконом.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: CANOPEN драйвер
А не подскажите в штатном ПО motorcontroldemo где происходит считывание параметров из энергонезависимой памяти При включении МК, я так понял это в функции can инициализации?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Параметры CANopen драйвер восстанавливает внутри своей библиотеки, а для доступа к энергонезависимой памяти используются пользователские функции co_UserMemoryRead и co_UserMemoryWrite, которые вызывает библиотека. Конкретно параметры восстанавливаются в момент вызова
внутри этой функции.
Код: Выделить всё
co2_Init(&co2_vars); //Инициализация драйвера CANOpen
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: CANOPEN драйвер
Спасибо! А если у меня несколько блоков в одной сети, можно ли их всех проинициилизировать из Юникона, у каждого блока свои параметры. Как лучше быть в данном случае. Набор параметров практически одинаковый, а сами данные разные. Блоки все включены, у них разные номера узлов. Можно ли через Юникон одновременно в разные узлы отправлять свои настройки? Или нужно к каждому блоку подключаться отдельно и вбивать вручную параметры?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Для этого есть, во-первых, функция переноса параметров, во-вторых групповые операции. Можно сливать и заливать на компьютер параметры с разных устройств со всей сети автоматически. Читайте справку на юникон, там все описано.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: CANOPEN драйвер
Добрый день! Круто, что юникон появился в свободном доступе на битбакете. Очень полезная вещь, спасибо. С проектом motorcontroldemo он у меня сцепился без проблем. Но вот в моем собственном проекте у меня все крашится на функции . Возникает косяк, похожий на описанный на форуме нииэта http://forum.niiet.ru/viewtopic.php?f=3 ... t=30#p3506
Тоже попадает в вечный цикл обработчика вотчдога, и регистр xPSR говорит о том, что это хард фолт. Вроде я всю инициализацию сделал по аналогии с motorcontroldemo, но что то идет не так. Я так понял, что функция и вызывается как в раз в этой функции драйвера. Сам код такой
Чего этой функции для работы может не хватать? Может приоритеты прерываний не так заданы?
Может ли дело быть в словаре объектов? Я пока свой не составлял, тупо закомментил в старом неотносящиеся к моему проекту строчки и все
Код: Выделить всё
co2_Init(&co2_vars);
Тоже попадает в вечный цикл обработчика вотчдога, и регистр xPSR говорит о том, что это хард фолт. Вроде я всю инициализацию сделал по аналогии с motorcontroldemo, но что то идет не так. Я так понял, что функция
Код: Выделить всё
co_CAN2GpioInit();
UserMem.init(&UserMem);
Код: Выделить всё
co2_vars.settings.LoadParamsFromUserMemory_ena = 1;//Разрешить загружать значения параметров из ЭНОЗУ
co2_vars.settings.CAN_ISR_priority = IRQ_PRIORITY_CAN;//Присвоение приоритета перывания 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
Может ли дело быть в словаре объектов? Я пока свой не составлял, тупо закомментил в старом неотносящиеся к моему проекту строчки и все
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: CANOPEN драйвер
Добрый день. Словарь объектов комментировать руками - плохая идея, воспользуйтесь COODEdit для удаления объектов, он сгенерирует корректный словарь. Из-за этого скорее всего и сыпется, структура словаря побилась.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: CANOPEN драйвер
Добрый день! Не могли бы Вы описать формат пакета при работе блочной передачи данных?
- motorcontrol
- Site Admin
- Сообщения: 12
- Зарегистрирован: 25 ноя 2015, 14:55
Re: CANOPEN драйвер
Формат пакета блочной передачи следующий:
Идентификатор:
0x0780 + № узла (одинаковый для приема и передачи - узел не может одновременно принимать и отправлять пакет данных).
Структура пакета:
Идентификатор:
0x0780 + № узла (одинаковый для приема и передачи - узел не может одновременно принимать и отправлять пакет данных).
Структура пакета:
- Размер блока (16 бит). Определяет размер блока в словах минус один (одно слово = 16 бит). Допустимые значения 0-255, что соответствует размерам блоков от 1 до 256 слов по 16 бит в каждом.
- Данные. От 1 до 256 слов по 16 бит в каждом.
- Контрольная сумма CRC16 (16 бит).