Реализую 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 как кленту на такое реагировать ?
|