_3m 4 18 января, 2013 Опубликовано 18 января, 2013 · Жалоба Реализую 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 4 21 февраля, 2013 Опубликовано 21 февраля, 2013 · Жалоба Тихо сам с собою... Посмотрел как реализовано в исходниках canopennode В canopennode повтор сбойного блока реализован как запрос очередного блока с новым размером blksize со стартовой позицией в источнике по возвращенному ackseg. Так и реализовал. Насколько это правильно не знаю, других источников нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться