Нагрузка сети CANOpen выше ожидаемой - PullRequest
0 голосов
/ 21 октября 2019

Я работаю над проектом с главным компьютером, подключенным через сеть CANOpen к 4 подчиненным.

На каждом временном шаге компьютер получает сообщение измерения от каждого ведомого устройства и отправляет им управляющее сообщение. Всего принимается 4 сообщения и 4 сообщения отправляются в каждый отсчет времени.

Отправленное сообщение представляет собой PDO с 6 байтами данных (8 байтов, включая COB-ID). Полученное сообщение представляет собой PDO с 8 данными. байт (10 байт, включая COB-ID)

Моя сеть CAN настроена на 1 Мбит / с, и я запускаю программу на частоте 1000 Гц (время выборки 1 мс). Поскольку общая нагрузка, полученная в результате описанных сообщений, составляет 576 бит / цикл, общая ожидаемая нагрузка в сети составляет 576 кбит / с, или 57% .

. Однако я вижу, чточто:

  1. Управляющий компьютер измеряет нагрузку ~ 86% (при минимуме 68% и пиках 100%).
  2. Шина USB CANанализатор, который я подключаю к сети, регистрирует трафик сообщений (в пересчете на счет), который составляет примерно половину от того, что я номинально ожидаю (т. е. 4 отправлено, 4 получено в каждом цикле, в течение 50 секунд должно получиться 50 000 сообщений)пока я вижу только 18-25к). Кроме того, я получаю 1-2 сообщения об ошибках за цикл от ведомых устройств, что сеть перегружена. Прежде чем это указать, даже подсчет размера этих сообщений как части трафика не приблизится к объяснению аномалии в нагрузке.

Что я хотел бы знать, так это мой ли способРасчет загрузки сети CANOpen является правильным. Например, существуют ли какие-либо специфичные для протокола рукопожатия, CRC или какие-либо дополнительные байты, отправляемые для того, чтобы сеть просто работала? Я ничего не видел на вики-странице CANOpen , но я знаю, что есть такие дополнения к сообщениям в оригинальном шине CAN стандарт.

1 Ответ

1 голос
/ 21 октября 2019

В сообщении CAN больше данных для передачи. Существует также арбитражный идентификатор (11 или 29 бит, в зависимости от того, используете ли вы CAN 2.0A или 2.0B), есть 15-битный CRC, 7-битный маркер EOF, поле управления, а также некоторые другие зарезервированные биты. В зависимости от данных, также могут быть биты заполнения.

Используя CAN2.0B и предполагая, что данные имеют 48 бит (6 байтов), вы получите размер сообщения примерно 132 бит и примерно 151 бит для ваших 64сообщения о битах.

Подводя итог, вы получите примерно 1132 бита за цикл, что слишком много для шины 1 Мбит / с и 1000 Гц.

Надеюсь, это поможет.

...