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