Цитата
Поэтому есть пара вопросов.
1. Я так понял что у Вас, как и у многих других реализаций, есть функция CANOPen.dispatch, которая должна циклически вызываться из главной программы и выполнять раскидку и создание PDO,SDO сообщений и реакцию на NMT. То есть время выполнения такой функции зависит от загрузки сети и точно не детерминировано - что мне как-то не нравится. Или это нормально?
От загрузки сети это почти не будет зависеть, если отсев левых кадров будет производится еще в прерываниях по приему кадров.
Более того вызов dispatch я делаю в отдельной задаче RTOS по событию (сообщению) из прерывания по приему.
Разумеет, контроллер должен иметь достаточную производительность.
В RTOS есть анализ загрузки, типа профайлинг. Так что, все под контролем
Цитата
2. Как у Вас выглядит Object Directory - просто массив данных одинаковой длины? Как вы к нему обращаетесь? Через функции, чтобы избежать порчи данных при чтении и чтобы CANopen знал, когда слать PDO? Или просто?
Нет, не массив. Список с абстрактным интерфейсом для доступа к объекту.
Т.е. TObject - полностью абстрактный класс, все методы - виртуальные.
CANopen стек имеет доступ ко всем объектам только через этот абстактный класс.
Подобное построение реализовано во всем стеке.
Цитата
3. Как насчет NMT master и сервисов LSS. Реализовывали ли их?
Нет. Не требовалось. Но, если понадобиться, добавить недолго - стек построен прозрачно.
Цитата
4. Что посоветуете для первой попытки связи с CANopen устройством?
У меня есть CANanalyzer с IXXATшным USB адаптером. Как я понял, NMT и PDO сообщения я еще смогу сгенерить самостоятельно, но SDO - надо бы что-то получше. Я думал, действительно какой-нибудь ПЛК взять для экспериментов, но не могу понять, какой.
Я использовал ПЛК от BECK@IPC: SC23/24. Среда CoDeSys.
http://www.beck-ipc.comЦитата
5. Вы брали какой нибудь стек за основу или полностью свой лепили?
Исключительно свой, по документам CANopen CIA.
Цитата
6. Отправка сообщений - используете ли Вы какой-нибудь буфер или по одному шлете?
Разумеется, буфер. По передаче тоже. Более того, у CAN контроллера есть как правило свои аппаратные буферы.