Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БЭМЗ полищук доки / 2020 / А2000 минск / АСКВ2 БУ max90-ru_v1.20.pdf
Скачиваний:
15
Добавлен:
21.12.2020
Размер:
11.44 Mб
Скачать

Модули мобильной системы 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 - Перевод руководства

Соседние файлы в папке А2000 минск