Модули мобильной системы X90
В ходе синхронизации канал связи открыт. Важно убедиться, что модуль присутствует и что на станции, принимающей сообщение, хранится актуальное значение SequenceCounter.
FlatStream может обрабатывать полнодуплексную связь. Это означает, что оба канала / направления связи могут обрабатываться отдельно. Они должны быть синхронизированы независимо друг от друга, так что теоретически может также осуществляться симплексная связь.
Синхронизация в выходном направлении (контроллер как передатчик):
Соответствующие биты синхронизации (OutputSyncBit и OutputSyncAck) сбрасываются. В результате в этот момент FlatStream не может использоваться для отправки сообщений от контроллера к модулю.
Алгоритм
1) Контроллер должен записать значение '000' в счетчик OutputSequenceCounter и сбросить бит OutputSyncBit.
Контроллер должен циклически опрашивать старший полубайт регистра InputSequence (проверять наличие значений '000' в OutputSequenceAck и '0'
в бите OutputSyncAck).
Модуль не принимает текущее содержимое InputMTU, поскольку канал еще не синхронизирован.
Модуль сравнивает значения OutputSequenceAck и OutputSyncAck со значениями OutputSequenceCounter и OutputSyncBit.
2) Если контроллер регистрирует ожидаемые значения в OutputSequenceAck и OutputSyncAck, то он получает разрешение на приращение счетчика
OutputSequenceCounter.
Контроллер продолжает циклически опрашивать старший полубайт регистра OutputSequence (проверяет наличие значений '001' в OutputSequenceAck и '0' в InputSyncAck).
Модуль не принимает текущее содержимое InputMTU, поскольку канал еще не синхронизирован.
Модуль сравнивает значения OutputSequenceAck и OutputSyncAck со значениями OutputSequenceCounter и OutputSyncBit.
3) Если контроллер регистрирует ожидаемые значения в OutputSequenceAck и OutputSyncAck, то он получает разрешение на приращение счетчика
OutputSequenceCounter.
Контроллер продолжает циклически опрашивать старший полубайт регистра OutputSequence (проверяет наличие значений '001' в OutputSequenceAck и '1' в InputSyncAck).
Примечание:
Теоретически, данные могут передаваться, начиная с этого этапа. Однако перед передачей данных рекомендуется дождаться полной синхронизации выходного направления.
Модуль устанавливает бит OutputSyncAck.
Выходное направление синхронизировано, и контроллер может передавать данные на модуль.
Синхронизация во входном направлении (контроллер как приемник):
Соответствующие биты синхронизации (InputSyncBit и InputSyncAck) сбрасываются. Вследствие этого FlatStream не может использоваться в данный момент для отправки сообщений с модуля на процессор.
Алгоритм
Модуль записывает значение '000' в InputSequenceCounter и сбрасывает InputSyncBit.
Модуль контролирует старший полубайт регистра OutputSequence и ожидает значений '000' в InputSequenceAck и '0' в InputSyncAck.
1) Контроллеру не разрешено принимать текущее содержимое InputMTU, поскольку канал еще не синхронизирован.
Контроллер должен сравнить значения InputSequenceAck и InputSyncAck со значениями InputSequenceCounter и InputSyncBit.
Если модуль находит ожидаемые значения в InputSequenceAck и InputSyncAck, то увеличивает InputSequenceCounter.
Модуль отслеживает старший полубайт регистра OutputSequence и ожидает значений '000' в InputSequenceAck и '0' в InputSyncAck.
2) Контроллеру не разрешено принимать текущее содержимое InputMTU, поскольку канал еще не синхронизирован.
Контроллер должен сравнить значения InputSequenceAck и InputSyncAck со значениями InputSequenceCounter и InputSyncBit.
Если модуль находит ожидаемые значения в InputSequenceAck и InputSyncAck, он устанавливает InputSyncBit.
Модуль отслеживает старший полубайт регистра OutputSequence и ожидает, что бит InputSyncAck будет иметь значение '1'.
3) Контроллеру разрешено установить InputSyncAck.
Примечание:
Теоретически данные могут передаваться уже в этом цикле.
Если InputSyncBit установлен, а значение счетчика InputSequenceCounter увеличено на 1, значения в активированных байтах Rx должны быть приняты и квитированы (см. также «Связь во входном направлении»).
Входное направление синхронизировано, и модуль может передавать данные на контроллер.
216 |
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
Модули мобильной системы X90
Если канал синхронизирован, то станция-партнер готова принимать сообщения от передатчика. По требованиям FlatStream перед отправкой данных передатчиком необходимо создать массив передачи.
Передающая станция должна также генерировать управляющий байт для каждого созданного сегмента. Этот управляющий байт содержит информацию о том, как должна обрабатываться следующая часть передаваемых данных. Позиция следующего управляющего байта в потоке данных может изменяться. Поэтому при передаче нового управляющего байта она всегда должна быть четко указана. Первый управляющий байт всегда находится в первом байте первой последовательности. Все последующие позиции определяются по приведенной ниже формуле.
Формула FlatStream для вычисления позиции следующего управляющего байта:
Позиция (следующего управляющего байта) = Текущая позиция + 1 + Длина сегмента
Пример
Три автономных сообщения (7 байтов, 2 байта и 9 байтов) передаются с использованием MTU размером 7 байтов. Остальная часть конфигурации соответствует настройкам по умолчанию.
|
|
|
|
Сообщение 1: |
|
|
|
|
|
Массив передачи/приема |
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Из 7 элементов USINT в соответствии с |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
A1 |
A2 |
A3 |
|
A4 |
|
A5 |
A6 |
A7 |
|
|
|
настраиваемым размером MTU |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
По умолчанию |
|
|
|
||
|
|
|
|
Сообщение 2: |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Последовательность |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C1 |
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
|
|
|
|
|
|
B1 |
|
B2 |
|
|
|
|
|
для цикла шины 1 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Последовательность |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C2 |
A7 |
- |
- |
- |
- |
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
для цикла шины 2 |
|||||||
|
|
|
|
Сообщение 3: |
|
|
|
|
|
|
|
|
|
|
|
Последовательность |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
C3 |
B1 |
B2 |
- |
- |
- |
- |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
для цикла шины 3 |
|||||||
|
D1 |
D2 |
D3 |
D4 |
|
D5 |
|
D6 |
D7 |
D8 |
D9 |
|
|
|
|
|
|
|
|
Последовательность |
||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
C4 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
для цикла шины 4 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
Больше нет данных для передачи |
|
|
|
|
|
|
|
|
|
Последовательность |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
C5 |
D7 |
D8 |
D9 |
- |
- |
- |
||||||||||||
|
|
|
|
для цикла шины 5 |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Последовательность |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
- |
|
|
- ... |
|
|
|
|
C0 |
- |
- |
- |
- |
- |
- |
||||
|
|
|
|
|
|
|
|
|
для цикла шины 6 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 46: Массив передачи/приема (по умолчанию)
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
217 |
Модули мобильной системы X90
Прежде всего сообщения необходимо разделить на сегменты. В конфигурации по умолчанию важно убедиться, что каждая последовательность может содержать весь сегмент, включая связанный управляющий байт. Последовательность ограничена размером заданного MTU. Другими словами, сегмент должен быть хотя бы на 1 байт меньше MTU.
MTU = 7 байтов → Макс. длина сегмента = 6 байтов
•Сообщение 1 (7 байтов)
Первый сегмент = Управляющий байт + 6 байтов данных
Второй сегмент = Управляющий байт + 1 байт данных
•Сообщение 2 (2 байта)
Первый сегмент = Управляющий байт + 2 байта данных
•Сообщение 3 (9 байтов)
Первый сегмент = Управляющий байт + 6 байтов данных
Второй сегмент = Управляющий байт + 3 байта данных
•Больше нет сообщений
Управляющий байт C0
Для каждого сегмента должен быть создан уникальный управляющий байт. Кроме того, для сохранения связи в дежурном режиме генерируется управляющий байт C0.
C0 (управляющий байт 0) |
|
|
C1 (управляющий байт 1) |
|
|
C2 (управляющий байт 2) |
|
|
– SegmentLength / длина сегмента |
= |
0 |
– SegmentLength / длина сегмента |
= |
6 |
– SegmentLength / длина сегмента |
= |
1 |
(0) |
|
|
(6) |
|
|
(1) |
|
|
– nextCBPos / позиция след. |
= |
0 |
– nextCBPos / позиция след. управ- |
= |
0 |
– nextCBPos / позиция след. управ- |
= |
0 |
управляющего байта (0) |
|
|
ляющего байта (0) |
|
|
ляющего байта (0) |
|
|
– MessageEndBit / признак конца |
= |
0 |
– MessageEndBit / признак конца |
= |
0 |
– MessageEndBit / признак конца |
= |
128 |
сообщения (0) |
|
|
сообщения (0) |
|
|
сообщения (1) |
|
|
Управляющий байт |
Σ |
0 |
Управляющий байт |
Σ |
6 |
Управляющий байт |
Σ |
129 |
Таблица 21: Принцип формирования управляющих байтов FlatStream для примера конфигурации по умолчанию (часть 1)
C3 (управляющий байт 3) |
|
|
C4 (управляющий байт 4) |
|
|
C5 (управляющий байт 5) |
|
|
– SegmentLength / длина сегмента |
= |
2 |
– SegmentLength / длина сегмента |
= |
6 |
– SegmentLength / длина сегмента |
= |
3 |
(2) |
|
|
(6) |
|
|
(3) |
|
|
– nextCBPos / позиция след. |
= |
0 |
– nextCBPos / позиция след. управ- |
= |
0 |
– nextCBPos / позиция след. управ- |
= |
0 |
управляющего байта (0) |
|
|
ляющего байта (0) |
|
|
ляющего байта (0) |
|
|
– MessageEndBit / признак конца |
= |
128 |
– MessageEndBit / признак конца |
= |
0 |
– MessageEndBit / признак конца |
= |
128 |
сообщения (1) |
|
|
сообщения (0) |
|
|
сообщения (1) |
|
|
Управляющий байт |
Σ |
130 |
Управляющий байт |
Σ |
6 |
Управляющий байт |
Σ |
131 |
Таблица 22: Определение управляющих байтов FlatStream для примера конфигурации по умолчанию (часть 2)
218 |
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
Модули мобильной системы X90
При передаче данных в прикладной программе должен быть создан массив передачи. Затем последовательности передаются одна за другой с использованием FlatStream и принимаются модулем.
Информация:
Хотя все модули B&R со связью FlatStream всегда поддерживают наиболее компактную передачу данных в выходном направлении, рекомендуется использовать одинаковую конфигурацию для массивов передачи в обоих направлениях связи.
ПЛК / контроллер шины |
|
Модуль |
|
||
|
|
|
Внутренний буфер |
Внутренний массив |
|
Массив передачи |
OutputMTU |
|
приема в модуле |
приема в модуле |
|
Тип данных: USINT |
Тип данных: USINT |
|
Тип данных: USINT |
Тип данных: USINT |
|
_data_01 |
Байты Tx |
Циклич. |
* Байты Rx |
_data_01 |
|
_data_02 |
Если используется |
Буфер передачи |
Если увеличивается счетчик |
_data_02 |
|
_data_03 |
_data_03 |
||||
OutputMTU: |
модуля циклически |
OutputSequence: |
|||
_data_04 |
ЦП заполняет |
получает данные |
Модуль добавляет содержимое |
_data_04 |
|
из OutputMTU |
|||||
|
|
|
|
||
_data_05 |
OutputMTU |
по шине X2X |
буфера передачи во внутренний |
_data_05 |
|
массив |
|||||
указанной |
|
||||
. . . |
последовательностью |
|
Если это удалось: |
. . . |
|
_data_xx |
из массива передачи |
|
Значение InputSequenceAck |
_data_xx |
|
|
|
приходит в соответствие |
|||
|
|
|
со значением счетчика передачи |
|
|
|
Рисунок 47: Связь FlatStream (передача) |
|
|||
Длина сообщения изначально меньше размера OutputMTU. В этом случае одной последовательности будет достаточно для передачи всего сообщения и необходимого управляющего байта.
Алгоритм
Циклический запрос состояния:
– Модуль отслеживает счетчик OutputSequenceCounter.
0) Циклические проверки:
– Контроллер должен проверять OutputSyncAck.
→Если OutputSyncAck = 0: Сбросить OutputSyncBit и повторно синхронизировать канал.
– Контроллер должен проверять, активирован ли OutputMTU.
→Если OutputSequenceCounter > InputSequenceAck: MTU не активирован, потому что последняя последовательность еще не квитирована.
1) Подготовка (создание массива передачи):
–Контроллер должен разбить сообщение на допустимые сегменты и создать необходимые управляющие байты.
–Контроллер должен объединить сегменты и управляющие байты в массив передачи.
2) Передача:
– ЦП передает текущий элемент массива передачи в OutputMTU.
→ OutputMTU передается циклически в буфер передачи модуля, но далее не обрабатывается.
– ЦП должен увеличить OutputSequenceCounter.
Реакция:
–Модуль принимает байты из внутреннего буфера приема и добавляет их во внутренний массив приема.
–Модуль передает уведомление о квитировании и записывает значение OutputSequenceCounter в OutputSequenceAck
3) Завершение:
– ЦП должен отслеживать OutputSequenceAck.
→ Последовательность считается успешно переданной, только если она была квитирована посредством OutputSequenceAck. Для выявления потенциальных ошибок передачи в последней последовательности важно убедиться, что длина этапа Завершение достаточно велика.
Примечание:
Для точного контроля продолжительности передачи необходимо подсчитывать циклы задачи, прошедшие с момента последнего увеличения OutputSequenceCounter. Таким образом можно измерить количество циклов шины, потребовавшихся для передачи предыдущих сегментов. Если значение счетчика мониторинга превышает установленное пороговое значение, то последовательность можно считать потерянной.
(Соотношение между циклом шины и циклом задачи может быть установлено пользователем, так что пороговое значение должно определяться индивидуально.)
– Следующие последовательности могут быть переданы только в следующем цикле шины после успешной проверки завершения.
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |
219 |
Модули мобильной системы X90 |
|
|
|
|
|
|
Сообщение, размер которого превышает OutputMTU |
|
|
|
|||
Массив передачи, который необходимо создать в управляющей программе, состоит из нескольких элемен- |
||||||
тов. Пользователь должен правильно организовать байты данных и управления и передавать элементы |
||||||
массива один за другим. Алгоритм передачи остается неизменным и повторяется, начиная с точки Цикли- |
||||||
ческие проверки. |
|
|
|
|
|
|
Общая блок-схема |
|
|
|
|
|
|
Пуск |
|
|
|
|
|
|
► разница = (OutputSequenceCounter - |
|
|
|
|
|
|
OutputSequenceAck) И 7 |
|
|
|
|
|
|
► предел = (OutputSequenceCounter - |
|
|
|
|
|
|
LastValidAck) И 7 |
|
|
|
|
|
|
(разница ≤ предел) |
Нет |
OutputSequenceAck = |
Нет |
LastValidAck = |
Да |
|
И (OutputSyncAck = 1) |
||||||
|
OutputSequenceCounter? |
|
OutputSequenceCounter? |
|
||
И (OutputSyncBit = 1)? |
|
|
|
|||
|
|
|
|
|
||
Да |
|
Да |
|
Нет |
|
|
разница = 0? |
|
LastValidAck = |
|
|
|
|
|
OutputSequenceAck |
|
|
|
||
|
|
|
|
|
||
Да |
|
|
|
|
|
|
LastValidAck = |
|
OutputSequenceAck = 0? |
Нет |
|
|
|
OutputSequenceAck |
|
|
|
|
||
|
|
|
|
|
||
|
|
Да |
|
|
|
|
Есть еще |
|
|
|
OutputSequenceCounter = 0 |
|
|
последовательности |
|
OutputSequenceCounter = 1 |
OutputSyncBit = 1 |
|
||
для отправки? |
|
|
|
LastValidAck = 0 |
|
|
Да |
|
|
|
|
|
|
Копировать указанную |
|
|
|
|
|
|
последовательность в MTU |
|
|
|
|
|
|
Увеличить OutputSequenceCounter |
|
|
|
|
|
|
Обработка последовательности |
|
Синхронизация |
|
|||
Рисунок 48: Блок-схема для выходного направления |
|
|||||
220 |
Мобильная система управления X90 Руководство пользователя V 1.20 - Перевод руководства |