CANOPEN драйвер

Rine
Сообщения: 49
Зарегистрирован: 28 апр 2017, 09:25

Re: CANOPEN драйвер

Сообщение Rine » 26 окт 2017, 16:16

Спасибо!
А если я, как указано выше, поменяю значения параметров по умолчанию(к примеру номер узла). И захочу это сохранить в эн.памяти, то я должен использовать функцию -void co_ODexpositor_paramConservation?
И при следующем включении МК параметры будут считаны уже измененные?

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

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 26 окт 2017, 16:56

Правильно. Также можно дать команду на сохранение юниконом.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Rine
Сообщения: 49
Зарегистрирован: 28 апр 2017, 09:25

Re: CANOPEN драйвер

Сообщение Rine » 27 окт 2017, 09:17

А не подскажите в штатном ПО motorcontroldemo где происходит считывание параметров из энергонезависимой памяти При включении МК, я так понял это в функции can инициализации?

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

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 27 окт 2017, 11:12

Параметры CANopen драйвер восстанавливает внутри своей библиотеки, а для доступа к энергонезависимой памяти используются пользователские функции co_UserMemoryRead и co_UserMemoryWrite, которые вызывает библиотека. Конкретно параметры восстанавливаются в момент вызова

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

co2_Init(&co2_vars); //Инициализация драйвера CANOpen
внутри этой функции.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Rine
Сообщения: 49
Зарегистрирован: 28 апр 2017, 09:25

Re: CANOPEN драйвер

Сообщение Rine » 27 окт 2017, 13:02

Спасибо! А если у меня несколько блоков в одной сети, можно ли их всех проинициилизировать из Юникона, у каждого блока свои параметры. Как лучше быть в данном случае. Набор параметров практически одинаковый, а сами данные разные. Блоки все включены, у них разные номера узлов. Можно ли через Юникон одновременно в разные узлы отправлять свои настройки? Или нужно к каждому блоку подключаться отдельно и вбивать вручную параметры?

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

Re: CANOPEN драйвер

Сообщение Лашкевич Максим » 27 окт 2017, 13:11

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

rasulikv
Сообщения: 6
Зарегистрирован: 24 авг 2017, 15:23

Re: CANOPEN драйвер

Сообщение rasulikv » 07 фев 2018, 15:22

Добрый день! Круто, что юникон появился в свободном доступе на битбакете. Очень полезная вещь, спасибо. С проектом motorcontroldemo он у меня сцепился без проблем. Но вот в моем собственном проекте у меня все крашится на функции

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

co2_Init(&co2_vars); 
. Возникает косяк, похожий на описанный на форуме нииэта http://forum.niiet.ru/viewtopic.php?f=3 ... t=30#p3506
Тоже попадает в вечный цикл обработчика вотчдога, и регистр 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 драйвер

Сообщение Лашкевич Максим » 07 фев 2018, 19:46

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

!klyaksa
Сообщения: 3
Зарегистрирован: 06 авг 2018, 11:17

Re: CANOPEN драйвер

Сообщение !klyaksa » 06 авг 2018, 15:43

Добрый день! Не могли бы Вы описать формат пакета при работе блочной передачи данных?

Аватара пользователя
motorcontrol
Site Admin
Сообщения: 12
Зарегистрирован: 25 ноя 2015, 14:55

Re: CANOPEN драйвер

Сообщение motorcontrol » 06 авг 2018, 17:02

Формат пакета блочной передачи следующий:
Идентификатор:
0x0780 + № узла (одинаковый для приема и передачи - узел не может одновременно принимать и отправлять пакет данных).
Структура пакета:
  • Размер блока (16 бит). Определяет размер блока в словах минус один (одно слово = 16 бит). Допустимые значения 0-255, что соответствует размерам блоков от 1 до 256 слов по 16 бит в каждом.
  • Данные. От 1 до 256 слов по 16 бит в каждом.
  • Контрольная сумма CRC16 (16 бит).
Размер CAN сообщения всегда 8 байт. Соответственно, в последнем CAN сообщении помимо остатка данных пакета и контрольной суммы могут быть несколько (в зависимости от размера блока) неиспользуемых байт.

Ответить