Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SDO Block Download Protocol
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
_3m
Реализую SDO Block Download Protocol

из ds301 v4.02 не все понятно
сейчас заткнулся на реализации повтора сбойного блока

в п. 9.2.2.2.10 Download SDO Block Segment Protocol написано что сервер выдает ответ где ackseq номер последнего успешно полученного сегмента, этим все понятно а вот смысл поля blksize непонятен.
Также не вполне ясно как передавать повторный блок. Допустим начальную позицию источника данных я вычислю на основании номера блока и ackseq а вот размер передаваемого блока если ackseg не ноль неясен.
например передавали блок из 5 сегментов, в ответе сервер вернул ackseg=2 blksize=5
Ясно что успешно приняты 1 и 2 сегменты, 3-5 не приняты.
Повторить можно как минимум двумя способами:
1) повторить передачу блока из blksize сегментов начиная с сегмента ackseg+1 (3), т.е передать сегменты 3,4 и 5
2) начать передачу нового сегмента из blksize сегментов с начала, используя смещение источника данных вычисленное на основе ackseg. Т.е будет передано 5 сегментов, из них первые три повтор и еще 2 новые данные.

Ситуация может быть еще сложнее: в ответе на сбойный блок сервер может выдать любой blksize, например
сбойный блок был из 5 сегментов, ответ сервер выдает:
ackseg=2 blksize=4
или
ackseg=2 blksize=10
как кленту на такое реагировать ?


_3m
Тихо сам с собою...

Посмотрел как реализовано в исходниках canopennode
В canopennode повтор сбойного блока реализован как запрос очередного блока с новым размером blksize со стартовой позицией в источнике по возвращенному ackseg.

Так и реализовал. Насколько это правильно не знаю, других источников нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.