Модули мобильной системы X90
При получении данных массив передачи генерируется модулем, передается через FlatStream и затем должен быть воссоздан в массиве приема. Структура входящего потока данных может конфигурироваться в регистре режима. При этом алгоритм получения данных не меняется.
ПЛК / контроллер шины |
|
Модуль |
|
||
|
|
|
Внутренний буфер |
Внутренний массив |
|
Массив приема |
InputMTU |
|
передачи в модуле |
передачи в модуле |
|
Тип данных: USINT |
Тип данных: USINT |
|
Тип данных: USINT |
Тип данных: USINT |
|
_data_01 |
Байты Rx |
Циклич. |
* Байты Tx |
_data_01 |
|
_data_02 |
Если увеличивается |
InputMTU |
Если разрешено: |
_data_02 |
|
_data_03 |
_data_03 |
||||
счетчик |
циклически получает |
модуль заполняет внутренний |
|||
_data_04 |
InputSequence: |
данные из |
буфер передачи |
_data_04 |
|
|
буфера приема |
указанной последовательностью |
|||
_data_05 |
InputMTU необходимо |
по шине X2X |
из массива передачи |
_data_05 |
|
добавить в конец |
|
|
|||
. . . |
массива приема |
|
Модуль увеличивает |
. . . |
|
_data_xx |
(увеличение InputSequenceAck |
|
счетчик InputSequence |
_data_xx |
|
для корректного завершения) |
|
|
|||
|
Рисунок 49: Связь FlatStream (вход) |
|
|||
Алгоритм
0) Циклический опрос состояния:
–Контроллер должен отслеживать InputSequenceCounter.
Циклические проверки:
–Модуль проверяет InputSyncAck.
–Модуль проверяет InputSequenceAck.
Подготовка:
– Модуль формирует управляющие байты / сегменты и создает массив передачи.
Действие:
–Модуль передает текущий элемент внутреннего массива передачи во внутренний буфер передачи.
–Модуль увеличивает значение счетчика InputSequenceCounter.
1) Прием (как только увеличивается значение InputSequenceCounter):
–Контроллер должен принять данные из InputMTU и добавить их к концу массива приема.
–Контроллер должен сравнить значения InputSequenceAck и InputSequenceCounter текущей обрабатываемой последовательности.
Завершение:
– Модуль отслеживает значение регистра InputSequenceAck.
→ Последовательность считается успешно переданной, только если она была квитирована посредством InputSequenceAck.
– Дальнейшие последовательности могут быть переданы только в следующем цикле шины после успешной проверки завершения.
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
221 |
Модули мобильной системы X90 |
|
|
|
|
|
Общая блок-схема |
|
|
|
|
|
|
Пуск |
|
|
|
|
InputSyncBit = 1? |
|
► InputSequenceAck = InputSequenceCounter |
Синхронизация |
||
|
► RemainingSegmentSize = 0 |
|
|||
|
|
|
► SegmentFlags = 0 |
|
|
|
Да |
|
|
|
|
InputSyncAck = 1? |
Нет |
InputSequenceAck > 0? |
Нет |
||
|
|
||||
|
Да |
|
Да |
|
|
MTU_Offset = 0 |
|
InputSyncAck = 1 |
|
||
(InputSequenceCounter – |
|
|
|
|
|
InputSequenceAck) |
|
|
|
|
|
И 0x07 = 1? |
|
|
|
|
|
|
|
|
► RemainingSegmentSize = |
|
|
RemainingSegmentSize = 0? |
|
MTU_Data[MTU_Offset] И 0b0011 1111 |
|
|
|
|
► SegmentFlags = |
|
|
||
|
|
|
MTU_Data[MTU_Offset] И 0b1100 0000 |
|
|
|
|
|
► MTU_Offset = MTU_Offset + 1 |
|
сегмента |
RemainingSegmentSize > |
|
|
|
||
(InputMTU_Size - MTU_Offset)? |
|
|
|
||
|
|
|
|
|
|
► DataSize = InputMTU_Size – MTU_Offset |
► DataSize = RemainingSegmentSize |
|
данных |
||
► Копирование данных сегмента, например с помощью |
|
|
|
||
memcpy(xxx, ADR(MTU_Data[MTU_Offset]), DataSize) |
|
|
|
||
|
|
|
Обработка |
||
► MTU_Offset = MTU_Offset + DataSize |
|
|
|
|
|
► RemainingSegmentSize = RemainingSegmentSize - DataSize |
|
|
|||
RemainingSegmentSize = 0 И |
|
► Пометить сегмент как завершенный |
|||
(SegmentFlags И 0x80) = 0? |
|
||||
|
|
|
|||
|
|
|
|
|
|
RemainingSegmentSize = 0 И |
|
|
|
|
|
(SegmentFlags И 0x40) = 0? |
|
|
|
|
|
InputMTU_Size = MTU_Offset? |
|
► InputSequenceAck = |
|
|
|
|
InputSequenceCounter |
|
|
||
|
|
|
|
|
|
Рисунок 50: Блок-схема для входного направления |
|
|
|||
222 |
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
Модули мобильной системы X90
Дополнительная информация Рекомендуется сохранять переданные сообщения в отдельных массивах приема.
Сегмент, следующий за сегментом, в котором установлен бит MessageEndBit, должен быть добавлен в массив приема. После этого сообщение полностью получено и может быть передано в пределах устройства для дальнейшей обработки. Для следующего сообщения должен быть создан новый/отдельный массив.
Информация:
При передаче с помощью мультисегментных MTU можно сделать несколько небольших сообщений частью одной последовательности. В программе важно убедиться, что можно обработать достаточное число массивов приема. Регистр подтверждения разрешается настраивать только после получения всей последовательности.
Приращение счетчика SequenceCounter более чем на единицу указывает на возникновение ошибки.
Примечание: эта ситуация очень маловероятна при работе без использования функции ускоренной отправки.
В этом случае приемник останавливает работу. Все дополнительные входящие последовательности игнорируются, пока не будет выполнена повторная передача данных с правильным значением SequenceCounter. Эта реакция защищает передатчик от многократного приема подтверждений для переданных последовательностей. Передатчик может идентифицировать последнюю успешно переданную последовательность, используя SequenceAck станции-партнера, и продолжить передачу данных с этой точки.
Подтверждения должны проверяться на достоверность.
Если приемник успешно принял последовательность, она должна быть квитирована. Приемник берет значение SequenceCounter, переданное с данными, и сравнивает с ним значение SequenceAck. Передатчик считывает SequenceAck и регистрирует успешную передачу данных. Если передатчик подтверждает последовательность, которая еще не была передана, то передача данных должна быть прервана для повторной синхронизации канала. Биты синхронизации сбрасываются, и текущее/незавершенное сообщение отбрасывается. Его необходимо отправить снова, когда канал будет повторно синхронизирован.
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
223 |
Модули мобильной системы X90
Имя: FlatstreamMode
Во входном направлении массив передачи генерируется автоматически. Этот регистр предоставляет пользователю две опции для большей компактности входящего потока данных. После их активации необходимо соответствующим образом изменить программный код для обработки.
Информация:
Все модули B&R, имеющие режим FlatStream, поддерживают опции «Большие сегменты» и «мультисегментный MTU» в выходном направлении. Явное разрешение необходимо только для компактной передачи данных во входном направлении.
Описание битов регистра:
Бит |
Имя |
Значение |
Описание |
0 |
Мультисегментный MTU |
0 |
Не разрешено (по умолчанию) |
|
|
1 |
Разрешено |
1 |
Большие сегменты |
0 |
Не разрешено (по умолчанию) |
|
|
1 |
Разрешено |
2–7 |
Зарезервированы |
|
|
По умолчанию
По умолчанию обе опции, связанные с компактной передачей данных во входном направлении, отключены.
1.Модуль формирует сегменты, которые хотя бы на один байт меньше, чем допустимый MTU. Каждая последовательность начинается с управляющего байта, так что поток данных четко структурирован и его относительно просто обрабатывать.
2.Поскольку сообщение FlatStream может иметь любую длину, последний сегмент сообщения зачастую не может заполнить все пространство MTU. По умолчанию остальные байты на этом цикле передачи данных не используются.
|
|
|
|
|
|
Цикл шины 1 |
|
|
|
Цикл шины 2 |
|
|
|
|
Цикл шины 3 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
|
|
|
C |
|
|
|
- |
- |
|
C |
|
- |
|
ME0 |
|
|
|
|
|
|
|
ME1 |
|
|
|
|
ME1 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
Сегмент 1 |
|
|
|
Сегмент 2 |
|
|
|
|
Сегмент 3 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
Сообщение 1 |
|
|
|
|
|
Сообщение 2 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
Управляющий байт с MessageEndBit = 0 |
|
|
|
|
|
|
|
|
||||
|
ME0 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
Управляющий байт с MessageEndBit = 1 |
|
ME1 |
|
|
|
|
|
Рисунок 51: Структура сообщения в MTU (по умолчанию)
224 |
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
Модули мобильной системы X90
Использование мультисегментных MTU
При использовании этой опции InputMTU заполняется полностью (если есть достаточный объем данных, ожидающих передачи). Ранее незаполненные байты Rx передают следующие управляющие байты и соответствующие им сегменты. Это позволяет использовать активные байты Rx более эффективно.
|
|
|
|
|
|
Цикл шины 1 |
|
|
|
|
Цикл шины 2 |
|
|
|
|
|
|
Цикл шины 3 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
|
|
|
C |
|
|
|
|
C |
|
|
|
C |
|
|
|
- |
- |
|
ME0 |
|
|
|
|
|
|
|
ME1 |
|
|
|
|
ME0 |
|
|
|
ME1 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сегмент 1 |
|
|
|
|
Сегмент 2 |
|
3 |
|
|
|
Сегмент 4 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
Сообщение 1 |
|
|
|
|
|
|
Сообщение 2 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
Управляющий байт с MessageEndBit = 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
ME0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
Управляющий байт с MessageEndBit = 1 |
|
ME1 |
|
|
|
|
|
Рисунок 52: Организация сообщений в MTU (мультисегментные MTU)
Использование больших сегментов
При передаче очень длинных сообщений или при включении очень малого количества байтов Rx по умолчанию должно создаваться очень много сегментов. Это создает лишнюю нагрузку на шину, поскольку для каждого сегмента должен быть создан и передан дополнительный управляющий байт. При использовании опции «Большие сегменты» длина сегмента ограничена 63 байтами, независимо от размера InputMTU. Один сегмент может занять несколько последовательностей, т.е. могут быть образованы «чистые» последовательности без управляющих байтов.
Информация:
Однако все еще возможно разделить сообщение на несколько сегментов. Если эта опция активирована и, например, возникают сообщения длиннее 63 байтов, то сообщения можно все еще разделить на несколько сегментов.
|
|
|
|
Цикл шины 1 |
|
|
Цикл шины 2 |
|
|
|
|
|
Цикл шины 3 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
|
|
|
- |
- |
- |
|
C |
|
|
- |
|
ME1 |
|
|
|
|
|
|
|
ME1 |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сегмент 1 |
|
|
Сегмент 2 |
|
|
|
|
|
|
Сегмент 3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
Сообщение 1 |
|
|
|
|
|
|
Сообщение 2 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
Управляющий байт с MessageEndBit = 0 |
|
|
|
|
|
|
|
|
|
|||
|
ME0 |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
Управляющий байт с MessageEndBit = 1 |
|
ME1 |
|
|
|
|
|
|
|
|
|
|
Рисунок 53: Организация сообщений в MTU (большие сегменты)
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
225 |