В примере указывается размер 0x0B - 11 байт, но ведь данные упаковываются по 4 байта, тут нет ошибки? Я чего-то опять не понимаю? Потому что в структуре 0x20 была похожая ошибка для чтения информации с контроллера:
| 0x00 | 1 байт | Контрольная сумма | 
| 0x01 | 1 байт | Длина пакета | 
| 0x02 | 1 байт | Номер лицензии | 
| 0x03 | 1 байт | Идентификатор пакета | 
| 0x04 | 1 байт | Код операции | 
| 0x05 | 1 байт | Сетевой адрес контроллера | 
| 0x06 | 2 байта | Зарезервировано | 
Такая структура не работает, а Guard Commander шлет немного измененную:
| 0x00 | 1 байт | Контрольная сумма | 
| 0x01 | 1 байт | Длина пакета | 
| 0x02 | 1 байт | Номер лицензии | 
| 0x03 | 1 байт | Идентификатор пакета | 
| 0x04 | 1 байт | Код операции | 
| 0x05 | 1 байт | Зарезервировано | 
| 0x06 | 1 байт | Сетевой адрес контроллера | 
| 0x07 | 1 байт | Зарезервировано | 
И структура из Guard Commander работает, но вот разобраться что именно он шлет в 0x1F, так и не вышло, по этому обращаюсь к Вам - в документации структура точно верная? Если нет, приведите верную пожалуйста