9.2.2.2.11 Протокол блочной SDO выгрузки.
Рисунок 27. Протокол блочной SDO выгрузки.
По данному протоколу реализуется сервис Блочная SDO выгрузка, которая
стартует с сервиса Инициация блочной SDO выгрузки. Клиент может указать серверу
граничное значение размера блока данных в байтах, начиная с которого можно для
увеличения производительности передачи использовать протокол Блочной SDO выгрузки,
взамен протокола SDO выгрузки(обычной
или укороченой). Если размер набора данных
оказывается меньше либо равен значению этой границы, то сервер продолжет трансферт
по протоколу обычной или укороченной передачи, иначе выгрузка SDO будет
происходить как последовательность сервисов Выгрузка SDO блока. Данная
последовательность прекращается в следующих случаях:
• Был выгружен сегмент с установленным c-битом, указывающим на завершение
последовательности выгружаемых
блоков.
• В результате запроса/индикации Аварийное завершение SDO трансферта,
указывающего на неуспешное завершение выгрузки последовательности.
Весь сервис Блочная SDO выгрузка завершается сервисом Завершение блочной SDO
выгрузки. Если клиент и сервер на стадии Инициация блочной SDO выгрузки указали
свою способность подсчитывать CRC, то клиент должен подсчитать CRC всего объёма
принятых данных, и сравнить с аналогичной величиной сообщённой ему сервером. Если
эти величины не совпадают, то клиент вместо подтверждения должен послать серверу
индикацию Аварийное завершение SDO трансферта.
Клиент Сервер
Блочная SDO выгрузка(обычная)
Инициация блочной SDO выгрузки(фаза 1).
...
Выгрузка блока(нормальная).
Выгрузка блока(последний блок).
Завершение блочной SDO выгрузки
Инициация блочной SDO выгрузки(фаза 2).
Выгрузка блока(нормальная).
Клиент Сервер
Блочная SDO выгрузка(с откатом к более
простым протоколам)
Инициация блочной SDO выгрузки(фаза 1)
(pst !=0).
Переключение на протокол сегментной
SDO выгрузки
Выгрузка блока(нормальная).
Клиент Сервер
Подтверждение блока
Выгрузка сегмента 0(с=0, seqno=0).
Выгрузка сегмента 1(с=0, seqno=1).
...
Выгрузка сегмента n(с=0, seqno=n).
Выгрузка блока(последний блок).
Клиент Сервер
Подтверждение блока
Выгрузка сегмента 0(с=0, seqno=0).
Выгрузка сегмента 1(с=0, seqno=1).
...
Выгрузка сегмента n(с=1, seqno=n).