Техническое обеспечение современного шоу может включать в себя весьма сложный комплекс оборудования: звуковые и световые системы, видеопроекторы, механику сцены, пиротехнику, динамические пневмофигуры, трансформируемые декорации, спецэффекты разного калибра. Многое из перечисленного (например, акустические системы и световые приборы) зрители видят непосредственно. Но есть еще и подводная часть айсберга — вспомогательное оборудование, начиная от простейших механических переключателей и заканчивая интеллектуальными устройствами и робототехникой, а также компьютерными программами, обеспечивающими согласованную работу всех систем.
MIDI Show
Control.
С некоторых пор слово "шоу" прочно
закрепилось в нашем языке для
обозначения всего того, что раньше
называлось представлением.
Спектакль, мюзикл, концерт — то есть
некое массовое мероприятие, где
задействованы артисты, звук, свет,
видео, спецэффекты. На западе "шоу"
трактуется и в более широком смысле,
начиная от мультимедийной лекции
или семинара и заканчивая парками
развлечений по типу Диснейленда. А
если говорят о "живом" выступлении,
то есть когда на сцене работают
артисты, используется более
конкретное Live Show.
Техническое обеспечение
современного шоу может включать в
себя весьма сложный комплекс
оборудования: звуковые и световые
системы, видеопроекторы, механику
сцены, пиротехнику, динамические
пневмофигуры, трансформируемые
декорации, спецэффекты разногокалибра. Многое из перечисленного
(например, акустические системы и
световые приборы) зрители видят
непосредственно. Но есть еще и
подводная часть айсберга —
вспомогательное оборудование,
начиная от простейших механических
переключателей и заканчивая
интеллектуальными устройствами и
робототехникой, а также
компьютерными программами,
обеспечивающими согласованную
работу всех систем.
Технология управления шоу
зародилась еще в 60е годы, в
развлекательных парках. Все началось,
конечно, с ручного управления, когда
стейджменеджер подавал команды
голосом, а оператор конкретного
устройства (например, электрического
подъемника) их исполнял. Один из
американских стейджменеджеров
вспоминает, как ставились мюзиклы на
Бродвее: "В шоу было занято от 40 до
50 техников, бегающих за сценой как
сумасшедшие. Я использовал вспышки
света, чтобы дать команду на запуск
определенной сцены, давал командыоператорам через головные гарнитуры
и работал по сценарию, записанному
на листке бумаги".
Сегодня технология управления шоу
— это целая индустрия со своими
стандартами и протоколами. Приборы
одного типа объединены в системы:
управления светом, звуком,
машинерией (механикой сцены),
проекцией, пиротехникой. Каждая
система состоит из контроллера и
конечных приборов, которыми
контроллер управляет посредством
определенных сигналов. Например,
световой пульт может управлять
диммерами и сканерами посредством
цифрового протокола DMX512 по
интерфейсу RS485. Эти устройства
совместно с пультом образуют
самостоятельную шоусистему, внутри
которой все взаимодействие
происходит с помощью протоколов
класса "контроллерприбор".
Термин Show Control означает нечто
большее — соединение
самостоятельных шоусистем в одну
большую управляемую систему. Так,компьютер, подключенный к дым
машине и регулирующий количество
тумана в декорации морской гавани —
это еще не система Show Control, как,
впрочем, и звуковая система,
воспроизводящая шум прибоя сама по
себе. Только объединение этих систем
в одну, управляемую от главного
контроллера, является полноценной
системой управления шоу.
По отношению ко времени все шоу
можно разбить на два типа:
асинхронные и синхронные. Пример
асинхронного шоу — "дом с
сюрпризами" в парке развлечений.
Здесь посетители, бродя по дому,
задевают разные датчики, запуская
сопоставленные с датчиками сцены (то
есть последовательности какихлибо
механических процессов, звуковых и
световых сигналов). Все сцены могут
происходить в разных частях "дома"
одновременно и независимо друг от
друга, без привязки к единой шкале
времени.
В синхронном шоу, как следует из
названия, используется некий способсинхронизации событий. Каждое
событие привязано к определенному
моменту времени, а шкала времени
формируется мастерустройством на
основе, например, видеофрагмента или
саундтрека. Мастерустройство
генерирует таймкод, который
поступает в подчиненные контроллеры
или непосредственно в конечные
приборы. Возможен и более простой
вариант, при котором устройства
только стартуют одновременно, по
команде с главного контроллера, а
долговременная постоянная
синхронизация отсутствует. Пример
синхронного шоу — концерт или
спектакль, где световые сцены и
другие элементы шоу
синхронизированы со звуком.
Появление MIDI Show Control
В конце 80х годов прошлого века
протокол MIDI стал привлекать
внимание театральных инженеров и
специалистов по концертному свету в
качестве альтернативы
существовавшим на тот момент
протоколам управления. И хотя MIDIсеквенсоры и средства ввода
(контроллеры) не очень подходили для
задач театральной автоматизации, сам
протокол подходил вполне, как по
возможностям, так и изза невысокой
стоимости и широкой
распространенности.
Основная задача состояла в вызове
сцены, запрограммированной в
световом пульте. На всякий случай
уточню, что сцена — это
фиксированное состояние функций
осветительных приборов. Сцена могла
быть сколь угодной сложной (с
закольцовками, связанными
макросами, подпрограммами и т. п.),
но для ее вызова требовалось нажатие
всего пары кнопок светового пульта:
LOAD (загрузить) и GO (запустить).
Очевидно, MIDI здесь вполне мог
заменить оператора пульта. Все, что
нужно передавать в сообщении, — это
номер сцены и саму команду. А
данные, связанные со сценой,
находились бы в памяти светового
пульта.
Постепенно производители световогооборудования стали использовать
MIDI в своей продукции. Но, как это
часто бывает, возникла проблема
совместимости. Компании,
занимающиеся театральным светом,
производили системы, в которых
сцены менялись MIDIсообщением
Program Change, а компании,
производящие концертное световое
оборудование, использовали команды
Note On.
В 1989 году Andy Meldrum, сотрудник
фирмы VariLite, предложил
разработать открытый протокол,
который позволял бы соединять шоу
системы разного назначения и разных
производителей, и управлять ими с
помощью любого MIDIконтроллера. К
концу 1989 года Charlie Richmond из
компании Richmond Sound Design
организовал рабочую группу в составе
MMA (MIDI Manufactures Association)
и открыл форум на электронной доске
объявлений. Созданный в результате
проект стандарта был утвержден
MMA и JMSC (Japanese MIDI Standard
Committee) и 25 июля 1991 года
превратился в "Рекомендованнуюпрактику RP002", или, иначе, в MIDI
Show Control версии 1.0.
Основные принципы
Протокол MIDI Show Control (MSC)
предназначен для объединения
интеллектуальных систем управления
шоутехникой (контроллеров) в
единую сеть. MSC напрямую не
управляет конечными приборами и не
заменяет такие протоколы класса
"контроллерприбор", как DMX512
или Strand. Это очень похоже на
соединение MIDIсеквенсора и
синтезатора. Секвенсор посылает
синтезатору высокоуровневую
команду "взять ноту", а синтезатор в
ответ запускает заложенную в его
недрах программу формирования
звука, то есть целый набор
низкоуровневых операций.
В спецификации MSC используются
термины Controller и Controlled Device.
Обычно MSCсистема состоит из
одного, главного контроллера — им
чаще всего является обычный
компьютер (PC или Mac) ссоответствующей программой
управления и MIDIинтерфейсом.
Этот компьютер и называется в
спецификации словом Controller. А
световой пульт в данном случае
является управляемым устройством
(Controlled Device), которое
выполняет команды главного
контроллера, переводя их в команды
типа "контроллерприбор" и посылая
последние к световым приборам по
своим коммутационным каналам,
независящим от MIDI (в случае DMX
512 — это витая пара с земляным
проводом в оплетке).
Схожим образом к главному
контроллеру подключаются по MIDI
остальные шоусистемы (механика
сцены, пиротехника и тому подобное).
Набор команд MSC основан на
структуре команд существовавших в
то время шоусистем.
Управляемое устройство (например,
световой пульт) может также
передавать команды MSC через свой
MIDIвыход. Это позволяет
записывать действия, производимыеоператором на пульте — примерно так
же, как происходит запись в секвенсор
с MIDIклавиатуры. Только в данном
случае используется программа,
оперирующая не треками, а списками
сцен (Cue List). При записи она
фиксирует все события, приходящие
от управляемых устройств, и
размещает их в списке сцен со своей
позицией на шкале времени.
Таким образом, можно заранее
прописать нужную последовательность
событий с каждого пульта управления,
используемого в шоу, отредактировать
полученные данные, а во время шоу
запустить список на воспроизведение.
В MSC используется таймкод MTC, а
это значит, что управляемые
устройства можно синхронизировать с
главным контроллером. Свет со
звуком, изображение со светом, и всю
систему в целом. При этом точность
выдачи команд по времени равна
одному кадру (то есть около 1/30
секунды).
Кроме того, по MSC можно связать
несколько контроллеров одного типа.Так, например, если две световые
консоли соединены по MIDI, то
нажатие кнопки GO на одной из них
приведет к тому, что вторая консоль
отработает ту же команду GO, но уже
без оператора. Здесь все довольно
очевидно и напоминает
первоначальное предназначение MIDI
— управлять с одной клавиатуры
несколькими синтезаторами
одновременно.
Важный принцип управления "живым"
шоу состоит в том, что сбой одного
управляемого устройства не должен
привести к сбою в управлении другими
устройствами. Этот принцип может
быть реализован с помощью открытой
или закрытой петли.
В системе "открытая петля"
подтверждение команд от
управляемого устройства к
контроллеру не требуется.
Используется однонаправленная
передача данных и, соответственно,
одностороння коммутация. То есть,
MIDIвыход главного контроллера
соединяется с MIDIвходомуправляемого шоуустройства, и
только. Этот экономичный способ был
выбран в MSC в качестве основного.
В системе "закрытая петля"
используется взаимная коммутация
устройств и ожидается
стандартизированный ответ от
управляемого устройства. Такая
система требует более
интеллектуальных контроллеров и
занимает большую полосу
пропускания, но при этом достигается
большая точность во взаимодействии
устройств, обнаружение, коррекция
ошибок и прочие прелести. Метод
закрытой петли предложен в версии
MSC 1.1, появившейся в феврале 1996
года (документ RP014). Для работы в
режиме закрытой петли используется
двухэтапный протокол подтверждения
(2 Phase Commit), о котором
поговорим в следующей статье.
Предосторожности и ограничения
В шоусистеме нередко используется
опасное оборудование (в том числе
представляющее угрозу для жизни),например, пиротехника или механика.
Но это не значит, что такое
оборудование управляется MSC
непосредственно, и сбой или ошибка в
программе приведут к неприятным
последствиям. Спецификация
крупными буквами предупреждает:
"[Протокол MSC] никоим образом не
отменяет обычные меры безопасности,
какие должны соблюдаться при
использовании потенциально опасного
оборудования. Для максимальной
безопасности должны применяться
такие ручные элементы управления,
как аварийные выключатели,
блокираторы, ограничители, системы
подтверждения команд и прочее. Из
автоматических устройств —
запирающие переключатели, датчики
близости, детекторы газа,
инфракрасные камеры, датчики
движения и давления. Протокол MSC
не предназначен для отдачи команд
опасному оборудованию. MSC лишь
подает сигнал о действии, которое
желательно выполнить, если все
требования и условия безопасности
соблюдены. Только соответствующим
образом спроектированные системы иподготовленный обслуживающий
персонал могут определить, насколько
эти требования выполняются в
конкретной ситуации. Метод
двухэтапного подтверждения 2PC
исключительно надежен и может
использоваться для обеспечения
дополнительной безопасности в шоу
системах. Однако 2PC должен быть
реализован в соответствии с
требованиями этой спецификации и
только в дополнение к
вышеперечисленным мерам".
MIDI Show Control не является
единственно возможным решением для
управления шоусистемами. Он не
лишен некоторых недостатков,
присущих технологии MIDI в целом.
Первый недостаток — невысокая
скорость передачи данных, а,
следовательно, не всегда адекватное
время отклика приборов. Иногда эта
проблема устраняется простой
разгрузкой линии, то есть соединением
приборов не цепочкой, а "звездой" из
распределительной коробки (MIDI
Thru Box) или многоканального MIDI
интерфейса/маршрутизатора.Для большинства же задач управления
шоу, скорость MSC вполне приемлема
и даже избыточна. Например,
стандартная команда "СветСцена
36.1Пуск" займет 10 байт, которые
будут переданы примерно за 3 мс
(подробности смотрите в предыдущих
статьях цикла). Это время примерно в
сто раз меньше среднестатистической
скорости реакции оператора пульта.
Второй очевидный недостаток —
максимальная длина MIDIкабеля,
которая не должна превышать 15
метров. Он может быть устранен
применением усилителей на линии
("бустеров"), в результате чего длина
линии может быть доведена до трехсот
и более метров. Кроме того, есть и
другие варианты передачи MIDI
сообщений (FireWire или
беспроводные системы).
Формат сообщений
Сообщения MIDI Show Control
относятся к категории универсальных
эксклюзивных сообщений реальноговремени (Universal Real Time System
Exclusive) и используют SubID#1 =
0x02 (подробнее о системных
сообщениях и SubID см. в третьей
статье цикла).
Шаблон сообщения MSC показан на
рис. 1. Начинается сообщение байтом
0xF0, признаком SysEx. Затем идет
байт 0x7F, определяющий категорию
реального времени, затем передается
номер прибора, которому адресовано
сообщение. Далее — SubID 0x02,
признак MSC. Байт формата команды
показывает, к какой категории
оборудования относится сообщение: к
звуку, свету, механике и т. п. Далее
следует сама команда. Как правило,
это одно действие, например, "пуск"
или "стоп". Затем передаются
дополнительные данные — параметры
команды. Чаще всего это номер сцены
и данные времени. Завершается SysEx
сообщение, как обычно, байтом 0xF7.
Общее число байт в сообщении MSC
не должно превышать 128.Как правило, команды адресуются
одновременно только одному
устройству. Например, для
выполнения команды GO на двух
световых пультах нужно передать от
главного контроллера сообщения,
показанные на рис. 2.
Номера с 0x00 по 0x6F соответствуют
индивидуальным устройствам. Номер
устройства, как правило, задается
пользователем в настройках (как
главного контроллера, так и
управляемого). Возможно также
создание групп устройств, для чего
используются групповые
идентификаторы (с 0x70 по 0x7E, то
есть всего до 15 групп). Это удобно,
если одни и те же сообщения
необходимо постоянно посылать
нескольким устройствам. Не все
устройства обязаны отвечать на
групповые номера.
Наконец, есть специальный
широковещательный номер 0x7F,который используется для передачи
сообщений всем устройствам сети,
независимо от того, на какой номер
они настроены. Один управляемый
контроллер может отвечать на
несколько номеров, как
индивидуальных, так и групповых. И
наоборот, несколько управляемых
контроллеров могут отвечать на один
и тот же номер, что позволяет
обойтись для них одним сообщением.
Формат команды
Название "формат команды"
(command_format), на мой взгляд,
несколько неудачно, поскольку не
отражает сути вопроса; к тому же, его
можно перепутать со следующим
байтом — самой командой. Формат
команды в терминологии MSC — это
простонапросто категория
оборудования, для которой
предназначено сообщение.
Стандарт определяет несколько общих
категорий, внутри них — несколько
более конкретных, и особую
категорию Alltypes. К общимкатегориям относятся свет, звук,
машинерия, видео, проекция,
спецэффекты и пиротехника. Номера
этих категорий содержат в младшем
полубайте ноль, за исключением
категории "свет". Номера более
конкретных категорий заключены
внутри общих и имеют тот же старший
полубайт, что и общая категория (рис.
3).MIDI Show
Control.
Двухэтапное подтверждение (2PC, Two
Phase Commit) — это особый метод
взаимодействия устройств, при
котором все команды подтверждаются
и до выполнения, и по завершении.
Технически — это набор команд,
расширяющих базовую версию
протокола MIDI Show Control. Этот
набор появился в 1996 году и описан в
документе RP014, выпущенном
организацией MMA. Вместе с исходной
спецификацией MSC (документ RP
002) он образует новую версию
протокола (MIDI Show Control 1.1).
При разработке метода 2PC стояла
непростая задача — обеспечить связь
нескольких устройств закрытой
архитектуры друг с другом, при
которой все они работают согласованно
либо не работают совсем, независимо
от наличия ошибок в коммутационных
каналах. Задача была решена с
использованием двух фаз (этапов) в
коммуникации. На первом этапе всестороны соглашаются о том, что
должно быть сделано. На втором этапе
стороны реализуют это соглашение и
сообщают о результатах.
Метод двухэтапного подтверждения
напоминает метод сценической
координации, применяемый при
взаимодействии стейджменеджера и
оператора устройства. Первая фаза —
ожидания (STANDBY), соответствует
команде "приготовиться". Вторая фаза
— "выполнить" или "пошел" (GO).
Метод 2PС предлагается использовать
для тщательно спланированных шоу и
тогда, когда в целях безопасности
требуются дополнительные проверки и
избыточность в механизмах управления
(например, при работе с машинерией
или пиротехникой). При этом
обеспечиваются проверка данных и
обнаружение ошибок в
коммутационных каналах.
2PC требует взаимной коммутации
устройств. Это значит, что, кроме
соединения главного контроллера с
контролируемым устройством,требуется и обратное, то есть MIDI
выход пульта управления прибором
соединяется с MIDIвходом главного
контроллера. Команды 2PC образуют
четвертый рекомендованный набор (о
первых трех см. предыдущую статью),
он приведен в таблице на рис. 1.
Спецификация предполагает, что в
системе 2PC около каждого
контроллера и контролируемого
устройства присутствует человек
оператор, который называется в данном
случае "локальный оператор".
Локальный оператор может просто
наблюдать за процессом, либо
выполнять дополнительную проверку
безопасности и ручное вмешательство в
управление при сбое оборудования.
Предполагается, что локальный
оператор выполняет свои функции
через специальную панель управления(пульт или схожий интерфейс),
который называется "интерфейс
локального оператора".
Сообщения 2PC
В отсутствие сбойных ситуаций для
выполнения одной сцены в протоколе
2PC используются четыре сообщения.
Они показаны в таблице на рис. 2 с
указанием порядка следования и
стороныотправителя.
Сначала главный контроллер посылает
подчиненному устройству сообщение
STANDBY ("приготовиться"). Это
сообщение "разогревает" прибор и
уведомляет его о том, что скоро
должна быть выполнена заданная сцена.
В ответ на это устройство отвечает
контроллеру сообщением
STANDING_BY ("наготове"),
показывая свою готовность выполнитьданную сцену. Для выполнения сцены
главный контроллер посылает
сообщение GO_2PC. Последнее
сообщение серии, COMPLETE
("выполнено"), посылается прибором
главному контроллеру и сообщает о
том, что выполнение сцены завершено
успешно.
Предусмотрены также три сообщения
на случай, если произошел сбой:
ABORT, CANCEL и CANCELLED.
Если контролируемое устройство
обнаруживает сбойную
(исключительную) ситуацию, то есть
ситуацию, когда нормальное
выполнение сцены невозможно, оно
уведомляет об этом главный
контроллер посредством сообщения
ABORT. Для указания причины сбоя в
это сообщение помещается код
состояния, на основании которого
главный контроллер может выбрать
дальнейший вариант действий.
Сообщение CANCEL посылается от
контроллера к прибору и говорит о
том, что предыдущее сообщение(STANDBY и/или GO_2PC) нужно
отменить. В ответ на это прибор может
ответить сообщением CANCELLED
("отменено"), подтверждая отмену
предыдущих команд.
Сообщения 2PC имеют несколько
общих элементов, таких как номер
секвенции (nn nn), контрольная сумма
(сс), код состояния (s1 s2) и данные
сцены (d1 d2 d3 d4). Эти элементы
описаны далее, в соответствующих
разделах. На рисунках 39 показана
структура сообщений 2PC.Номер секвенции
Нумерация сцен в сообщениях от
контроллера к контролируемому
устройству происходит в протоколе
2PC так же, как и в обычных
сообщениях MSC (то есть с помощью
полей Q_number, Q_list или Q_path,
см. предыдущую статью).
Кроме того, для каждого из сообщений
STANDBY, GO_2PC и CANCEL
главный контроллер генерирует
уникальный номер (от 1 до 16383),
который называется номером
секвенции. Этот же номер передается в
обратных сообщениях
(STANDING_BY, COMLETE,
CANCELLED и ABORT), и по нему
главный контроллер определяет, к
какой сцене относится сообщение.
Таким образом, в обратных сообщенияхдостаточно использовать только номер
секвенции, полный номер сцены
передавать не нужно.
Номера секвенций позволяют работать
по методу 2PC простым устройствам,
таким как различные детекторы и
датчики. Например, детектор газа
может не понимать концепцию сцен.
При получении сообщения STANDBY
он просто проверяет наличие газа. Если
газ не обнаружен, детектор отвечает
сообщением ABORT, если обнаружен
— сообщением STANDING_BY.
Детектор игнорирует поля типа
Q_number и просто копирует номер
секвенции из входящего сообщения в
исходящее. Кроме того, номера
секвенций облегчают отслеживание
ответных сообщений от
контролируемых устройств оператору
главного контроллера.
Контрольные суммы
Каждое сообщение 2PC содержит
контрольную сумму, состоящую из
двух MIDIбайт (14 бит). При расчете
контрольной суммы поляcommand_format, command и data
сообщения рассматриваются как
массив двухбайтовых значений. Если
число байт в этих полях нечетное, для
расчета суммы в конец добавляется
один нулевой байт. Перед расчетом те
байты, которые занимает контрольная
сумма, обнуляются.
Контрольная сумма рассчитывается
путем простого сложения элементов
полученного массива, при этом
переполнения игнорируются. После
чего к полученному результату
прибавляется номер устройства. В
завершении над полученным числом и
константой 0x7F7F (32639)
выполняется логическая операция AND
(см. статью цикла "Передача данных.").
Сторона, принимающая сообщение,
проверяет его правильность, заново
рассчитывая контрольную сумму и
сверяя ее с полученным значением в
сообщении. Если контрольная сумма
отличается на стороне
контролируемого устройства, оно
посылает контроллеру сообщение
ABORT с кодом состояния "ошибкаконтрольной суммы". Если сумма
отличается на стороне контроллера, он
реагирует на это так, будто было
получено сообщение ABORT.
Коды состояния
Коды состояния используются в
сообщениях ABORT и CANCELLED и
отражают причину ошибки или
состояние отмененной сцены. Код
состояния представляет собой
беззнаковое двухбайтовое целое число.
Чтобы оно могло быть передано по
MIDI, два младших бита числа должны
быть нулевыми. Соответственно,
наименьший код состояния будет равен
4, наибольший 0xFFFC (65532). В
описании сообщений статускод
выглядит как "s1 s2". Метод
преобразования кода состояния в
значения s1 и s2, и наоборот, показан на
рис. 10.Есть три числовых диапазона кодов
состояния. Первый диапазон — общий
для всех форматов команд, коды
состояния в нем применимы для любых
типов контроллеров. Характерная
особенность этих кодов в том, что все
они являются отрицательными
числами, если рассматривать код как
целое число со знаком (подробнее о
представлении целых отрицательных
чисел см. четвертую статью цикла). Все
коды, возвращаемые в сообщениях
CANCELLED, попадают в этот первый
диапазон.
Второй диапазон зависит от формата
команды, то есть специфичен для
устройств определенного типа.
Например, код состояния 0x1008
означает "низкое давление воды", если
получен от устройства типа
"спецэффект" (формат команды от
0x50 до 0x5F). Но когда тот же код
получен от устройства управления
звуком (формат команды от 0x10 до
0x1F), он означает "неполадки в
усилителе".
Третий диапазон зависит как отформата команды, так и от
производителя. То есть, производители
используют коды состояния в третьем
диапазоне по своему усмотрению.
Информация об этих кодах
обязательно должна быть
опубликована. Естественно,
наибольшая совместимость систем
достигается в том случае, если коды из
этого диапазона используются как
можно реже. Спецификация 2PC
рекомендует всегда, когда это
возможно, использовать коды
состояния из второго диапазона.
Код состояния 0 зарезервирован на
случай неизвестной ошибки или
ошибки, для обозначения которой
другие коды не подходят. Таблица на
рис. 11 подытоживает вышесказанное.
В таблицах на рис. 12 и 13 приведены
все коды состояния, не зависящие отформата команды. Буквы в столбце
"Сообщения" показывают, какие
сообщения могут привести к
получению ответа от устройства с
данным кодом состояния
(S=STANDBY, G=GO_2PC,
C=CANCEL). Первая таблица
содержит коды состояния,
используемые в сообщении
CANCELLED, вторая — в сообщении
ABORT. Обратите внимание, что
сообщение ABORT, посланное
прибором в результате обработки
сообщения CANCEL, может иметь
только два кода состояния:
"неизвестная/неопределенная ошибка"
и "ошибка контрольной суммы". Код
состояния "таймаут" никогда не
появляется в реально передаваемых
сообщениях, он включен для
упрощения внутреннего устройства
контроллера.В таблице на рис. 14 перечислены коды
состояния из второго диапазона, то
есть коды, которые зависят от формата
команды, но применимы ко всем
производителям устройств.Данные сцены
В сообщениях STANDBY и GO_2PC
используются четыре семибитных байта
данных. Эти байты должны
присутствовать обязательно,независимо от того, используются ли
они контролируемым устройством или
нет. Если корректные значения d1d4
для данной сцены (или для данного
прибора) неизвестны, на их месте
должны быть переданы нули.
Байты данных позволяют сопоставить
со сценой дополнительную
информацию. Например, в световых
пультах, работающих по принципу "Go
On, Go Off", используется величина
"Go Level", или gl, которая задается
выражением gl = d1 + (d2*128).
Последовательность команд
STANDBYGO_2PC со значением
gl=255 эквивалентна команде Go On.
Та же последовательность со значением
gl=0 эквивалентна команде Go Off.
Допустимы и промежуточные значения
gl от 0 до 255. Например, значение
gl=128 эквивалентно команде "Go Cue
To 50%". Любое значение gl вне
диапазона 0255 в настоящее время
является некорректным, а при его
получении прибор должен отправить
сообщение ABORT со статускодом
"некорректное значение данных сцены
d1". Значения gl=256 и вышезарезервированы для возможных
будущих расширений.
В других типах устройств
использование байтов d1d4
определяется производителем и
должно быть описано в документации.
Если устройство получает
некорректные данные d1d4, оно
должно ответить сообщением ABORT с
одним из кодов состояния
"некорректное значение данных сцены
dx". Например, некорректное значение
d1 должно привести к сообщению
ABORT с кодом "некорректное
значение данных сцены d1". В тех
случаях, когда ошибка данных касается
более чем одного байта d1d4,
сообщение ABORT должно содержать
код состояния, соответствующий
наименьшему ошибочному байту.
Устройства, которые понимают только
часть байтов данных, например, d1 и
d3, должны игнорировать значения
остальных байт.
Взаимодействие устройств
Итак, выполнение сцены начинается скоманды "приготовиться" (STANDBY),
которую главный контролер посылает
контролируемому устройству. Главный
контроллер ожидает ответного
сообщения STANDING_BY в течение
двух секунд. Если за это время оно не
приходит, главный контроллер считает,
что прибор ответил сообщением
ABORT. Если по любой из причин
прибор не может подготовить данную
сцену к выполнению, то он отвечает
сообщением ABORT явно.
Ответное сообщение STANDING_BY
посылается только в том случае, если
запрошенная сцена известна прибору,
находится в его памяти и готова к
немедленному выполнению. В
сообщении STANDING_BY прибор
передает также максимальное время,
требуемое для выполнения сцены.
Позже контроллер использует это
время, чтобы определить, не произошел
ли сбой в контролируемом устройстве.
Максимальное время может быть
значительно больше реально
требуемого для сцены, но никак не
меньше. Если для выполнения сцены
требуется вмешательство оператора, товремя ожидания действий оператора
также должно учитываться.
После успешного обмена STANDBY
STANDING_BY главный контроллер
посылает сообщение GO_2PC, которое
приводит к выполнению заданной
сцены. По завершении сцены прибор
отправляет в главный контроллер
сообщение COMPLETE. Если во время
выполнения сцены происходит сбой,
прибор немедленно передает
сообщение ABORT с соответствующим
кодом состояния. Если сообщение
GO_2PC пришло с тем номером сцены,
для которого еще не поступало
сообщения STANDBY (вероятно, изза
ошибки в главном контроллере), то
прибор должен ответить сообщением
ABORT с кодом состояния "не в
режиме ожидания".
Контролируемое устройство не обязано
помнить акт обмена STANDBY
STANDING_BY для какойлибо сцены
продолжительное время. Например,
если сцена была успешно согласована, а
главный контроллер послал сообщение
GO_2PC только через час послесогласования, прибор может просто
напросто забыть, "о чем идет речь", и
ответить сообщением ABORT с кодом
состояния "не в режиме ожидания".
Возможен также случай
предварительного согласования
STANDBYSTANDING_BY для
нескольких сцен с одним и тем же
прибором до того, как будет передана
первая команда GO_2PC. В этом
случае устройству нужно помнить
несколько сцен, находящихся в режиме
ожидания. Производители должны
публиковать максимальное число таких
сцен. Хранимый в памяти акт обмена
STANDBYSTANDING_BY очищается
по получении сообщения GO_2PC.
Чтобы выполнить сцену повторно,
требуется новое согласование.
Таймауты
Основной метод обнаружения ошибок
по методу 2PC состоит в отслеживании
временного интервала между
отправкой сообщения прибору и
получением от него ответа. Если этот
интервал превышает максимальнодопустимый, наступает таймаут.
Главный контроллер расценивает тайм
аут так, будто прибор передал
сообщение ABORT с кодом состояния
"таймаут". Этот "искусственный" код
(поскольку он никогда не посылается
прибором явно) говорит контроллеру о
том, что контролируемое устройство
перешло в неуправляемый режим (по
крайней мере, по протоколу 2PC).
Для сообщений STANDBY и CANCEL
таймаут равен двум секундам.
Поэтому, например, сообщения
STANDBY должны посылаться как
минимум за две секунды до
предполагаемого времени отправки
сообщения GO_2PC.
Таймаут на сообщение GO_2PC (то
есть время между отправкой этого
сообщения и прихода ответного
COMPLETE) не является величиной
постоянной и зависит от
продолжительности сцены, переданной
прибором в сообщении
STANDING_BY. Если после запуска
сцены сообщение COMPLETE не
пришло в течение 125% от указаннойпродолжительности, то контроллер
расценивает это как таймаут.
Дополнительные 25% нужны для учета
"разброса часов" в контроллере и
контролируемом устройстве.
Ожидание сообщений
Метод 2PC был разработан так, чтобы
контролируемые устройства никогда не
ожидали сообщений от главного
контроллера. Прибор просто принимает
сообщение, выполняет предписанные
им действия и возвращает ответное
сообщение. Даже в состоянии
"наготове" прибор лишь помнит обмен
STANDBYSTANDING_BY, который
был произведен в недавнем времени, но
не находится в постоянном ожидании
команды GO_2PC.
Преимущество такого способа работы
очевидно. Так как контролируемое
устройство никогда не ждет
сообщений, оно всегда готово принять
команды ручного управления от
локального оператора. Следовательно,
если даже главный контроллер даст
сбой, шоу может продолжаться сиспользованием ручного управления на
каждом из устройств.
Главный контроллер по определению
должен ожидать сообщений
STANDING_BY, COMPLETE и
CANCELLED в течение определенного
времени. Более того, он должен
одновременно ожидать многочисленные
сообщения, чей порядок отправки не
определен. Поэтому в контроллере
применяется некий алгоритм
обнаружения таймаутов для
множества сообщений от множества
приборов.
Обработка исключительных
ситуаций
Подобная обработка основана в методе
2PC на простом принципе. Если на
очередную команду главного
контроллера какойлибо прибор
отвечает сообщением ABORT, то вся
система переходит в специальную фазу
восстановления. Главный контроллер
посылает всем приборам системы
сообщения CANCEL, информируя их
об отклонении от безошибочнойпоследовательности сцен. Это
сообщение посылается для тех сцен,
которые находятся в состоянии
"наготове" или уже выполняются.
Если отменяемая сцена находится в
состоянии "наготове", то акт
согласования STANDBY
STANDING_BY просто забывается.
Если сцена уже исполняется, прибор
может выполнить одно из действий:
1) завершить сцену как обычно;
2) приостановить сцену, ожидая
дальнейшего ее выполнения;
3) прекратить сцену без возможности
дальнейшего ее выполнения;
4) вернуться к состоянию, которое
было до начала выполнения команды
GO_2PC;
5) выполнить сцену в обратном
порядке.
Кроме того, в процесс может
вмешаться локальный оператор и
перевести прибор в режим ручного
управления.
Какое из этих действий будет
выполнено, зависит от оборудования иобстоятельств, при которых получено
сообщение CANCEL. Если
выполняемая сцена приводит к какому
либо вреду, вероятно, лучший выбор в
данном случае — завершить сцену.
Если сцена приводит к неопределенной,
ненадежной ситуации, ее следует
приостановить, сбросить или
выполнить в обратном порядке.
Конечное решение зависит от
оборудования и ситуации в шоу.
Некоторые приборы всегда выполняют
одно из перечисленных
восстановительных действий, другие
позволяют это действие
запрограммировать. Поведение прибора
при получении сообщения CANCEL
должно быть документировано
производителем.
Если устройство решит завершить
сцену в обычном порядке, оно должно
послать как сообщение CANCELLED с
кодом "в процессе завершения", так и
сообщение COMPLETE. Первое из них
посылается в ответ на сообщение
CANCEL немедленно, второе — после
фактического завершения сцены.Сцены, приостановленные сообщением
CANCEL, могут продолжить
выполнение после обмена STANDBY
STANDING_BYGO_2PC.
В любом случае, на сообщение
CANCEL прибор должен ответить либо
сообщением CANCELLED, либо
сообщением ABORT. Последнее
допустимо только в том случае, если в
сообщении CANCEL обнаружена
ошибка контрольной суммы. Если на
сообщение CANCEL не получен ответ в
течение двух секунд, контроллер
обработает ситуацию так, будто было
передано сообщение ABORT.
Сообщение ABORT, как говорилось
ранее, посылается контролируемым
устройством в случае сбоя при
выполнении команд STANDBY,
GO_2PC или CANCEL. Номер
секвенции в этом сообщении говорит
контроллеру о том, какое из сообщений
STANDBY, GO_2PC или CANCEL
вызвало сбой. Код состояния
показывает наиболее значимую причину
сбоя, однако могут быть и
дополнительные, менее важныепричины. Поэтому исправления
сбойной ситуации на основе одного
кода состояния может быть
недостаточно.
Значимость кода состояния
пропорциональна легкости, с которой
сбойная ситуация может быть
исправлена. Например, код
"блокирующий переключатель не
установлен" менее значим, чем "сбой в
моторе". Первый сбой может быть
исправлен немедленным
вмешательством человека; второй,
возможно, удастся исправить, только
разобрав мотор.
Код состояния "manual overriding in
progress" ("сцена в процессе ручного
управления") показывает, что
локальный оператор контролируемого
устройства взял на себя контроль за
выполнением сцены. Некоторые
устройства могут игнорировать все
сообщения 2PC, пока локальный
оператор использует ручное
управление.
Иногда сообщение ABORT не означаетсбой устройства, а просто говорит о
том, что ожидаемое событие все еще не
произошло. Подобное поведение
характерно для всевозможных
датчиков и детекторов. Для таких
приборов главный контроллер не
передает сообщение CANCEL.
Пример работы 2PC
Посмотрим, как может использоваться
метод 2PC на практике. Для простоты
возьмем небольшую координированную
последовательность команд,
образующих сцену. Сначала опишем
процесс обмена сообщениями без
ошибок, затем рассмотрим несколько
сбойных ситуаций и то, как они могут
быть обработаны.
В сцене будет задействован
моторизированный поворотный стол, на
котором находится некая конструкция
(предположим, небольшая декорация).
Изначально декорация повернута к
зрителю "спиной", так что задача стола
— развернуть ее на 180 градусов,
лицом к зрителю. Поворот стола
происходит в течение 30 секунд. Вначале сцены декорация дополнительно
закрыта от зрителя иллюстрированным
полотнищем, которое прикреплено к
механическому штанкету №12 и
поднимается перед поворотом стола.
Система сценического подъема и
поворотный стол работают по MIDI и
имеют независимые консоли
управления у операторов.
Перед началом сцены со стола должна
выйти актриса. К сожалению, она
выходит так, что этого не видит ни
один из операторов (в реальной жизни
это маловероятно, но здесь
необходимо, чтобы показать
большинство функций 2PC). Поэтому
используется "электронный глаз",
установленный так, что актриса во
время своего ухода обязательно
перекрывает его луч. Перед тем как
начнет работать механика сцены,
электронный глаз должен определить,
что актриса вышла.
Естественно, ко всему этому
добавляются свет и звук. Есть две
звуковые и три световые сцены. Первая
звуковая сцена начинается, когдаактриса пересекает луч глаза, вторая —
когда стол повернется наполовину, то
есть на 90 градусов. Первая световая
сцена начинается, когда полотнище
приоткрывает декорацию, вторая —
когда стол начинает поворачиваться,
финальная сцена — когда декорация
полностью развернется к залу.
Весь процесс управляется главным
контроллером — компьютерной
программой. Он разбит на несколько
этапов так, чтобы программа могла
отслеживать ключевые события.
Например, поворот стола разбит на два
этапа по 90 градусов вместо одного,
полного поворота на 180. В таблице на
рис. 15 показан список сцен с коротким
описанием.
Все происходит в следующей
последовательности:1. Ожидать выполнения сцены EE6.
2. Запустить сцену S109.
3. Подождать 3 секунды (дать время
актрисе уйти).
4. Запустить сцены F28 и L118.
5. Подождать завершения сцены F28.
6. Запустить сцены F28.1, ТТ34 и L
118.1
7. Ожидать завершения сцены ТТ34.
8. Запустить сцены ТТ34.1 и S110
9. Ожидать завершения сцены ТТ34.1
10. Запустить сцену L119.
Названия сцен (типа "L119")
приведены здесь для удобства, в MIDI
сообщениях они не передаются.
Например, сообщение для сцены TT
34.1 будет содержать следующие
параметры: command_format=24,
Q_number=34.1, а L119 —
command_format=01, Q_number=119.
Обмен сообщениями без ошибок
Последовательность сообщений 2PC в
упрощенном виде при безошибочном
выполнении сцен данного примера
приведена в таблице на рис. 16.Примечания:
A. Контролер посылает сообщения
STANDBY для сцен, которые должны
начаться до того, как стол повернется
на 90 градусов. Эти сообщения
посылаются заблаговременно, с учетомвозможного двухсекундного тайм
аута.
B. Получена серия ответных сообщений
STANDING_BY. Сцена, к которой
относится STANDING_BY, задается
только номером секвенции. Видно
также, что сообщения STANDING_BY
получены не в том порядке, в каком
отправлены сообщения STANDBY. В
данном случае система сценического
подъема послала два сообщения
STANDING_BY одно за другим.
C. Электронный глаз ответил на
сообщение STANDBY сообщением
ABORT, так как актриса еще не
пересекла луч.
D. Электронный глаз ответил на
сообщение STANDBY сообщением
STANDING_BY — актриса, наконец,
пересекла луч. Поскольку больше нам
электронный глаз не нужен, мы не
будем посылать ему сообщение
GO_2PC. Однако это равносильно
отмене сцены, и в соответствии со
спецификацией 2PC мы должны были
бы послать для сцены EE6 сообщениеCANCEL. Но для простых устройств
детекторов вроде электронного глаза
это необязательно, так как для них
команда GO_2PC все равно никогда не
посылается.
E. Обратите внимание на столбец
секунд. Между приемом сообщения
STANDING_BY от электронного глаза
в момент времени 06.010 и отправкой
сообщения GO_2PC для света и
системы подъема прошла задержка
примерно в три секунды (время,
необходимое для ухода актрисы).
F. Сообщение GO_2PC для сцены 28.1
отправлено перед получением
сообщения COMPLETE для сцены 28.
Контроллер системы подъема понимает
это так, что штанкет №12 должен
продолжать подъем и после завершения
сцены 28.
G. По получении сообщения
COMPLETE для сцены 28 можно
приступать к выполнению сцен 34
поворотного стола и света 118.1. В это
время происходит также обмен
сообщениями STANDBYSTANDING_BY для оставшихся сцен.
H. Штанкет №12 поднят до
колосников.
I. Сообщение GO_2PC для сцены 34.1
поворотного стола отправлено перед
получением сообщения COMPLETE
для сцены 34. Так же, как и система
подъема, контроллер стола
интерпретирует это как сигнал не
прекращать движения после отправки
сообщения COMPLETE для сцены 34.
J. После завершения сцены 34
включается звуковая сцена 110.
K. После завершения сцены 34.1
включается световая сцена 119.
Ошибки, обнаруженные на ранней
стадии
Теперь предположим, что во время
выполнения нашей сцены произошли
коекакие ошибки. Сначала рассмотрим
ошибку, которая приводит к
прекращению всей сцены.
Предположим, контроллер системыподъема обнаружил неполадку одного
из лебедочных моторов, связанных с
двенадцатым штанкетом. Тогда система
подъема вместо STANDING_BY
вернет сообщение ABORT. После чего
главный контроллер (компьютерная
программа) ответит сообщением
CANCEL для всех сцен, которым было
отправлено сообщение STANDBY.
Последовательность сообщений может
выглядеть так, как показано на рис. 17.
Примечания:
A. Первая сцена системы подъема
возвращает сообщение ABORT с кодом
состояния "сбой в моторе". Этот код
преобразуется в текстовое сообщение,которое выводится оператору
системы.
B. Всем контролируемым устройствам
посылается сообщение CANCEL для
тех сцен, которые еще не завершились.
Это в соответствии с требованиями
2PC по восстановлению после сбоя (см.
ранее). Так как отдельные приборы все
еще обрабатывают сообщения
STANDBY, сообщения
STANDING_BY и CANCEL
перемешиваются во времени друг с
другом.
C. К главному контролеру начинают
приходить сообщения CANCELLED.
Как и в случае с сообщениями
STANDING_BY, они приходят не в том
порядке, в каком были отправлены
сообщения CANCEL. Статускод
сообщений CANCELLED —
"terminated", так как ни одна из
отмененных сцен не начала
выполняться.
D. Главному контроллеру не остается
ничего другого, как отменить сцену F
28.1 (сообщение CANCEL в моментвремени 0.018 с). Так как контроллер
системы подъема уже забыл, что сцена
F28.1 была в состоянии "наготове", он
отправляет главному контроллеру
сообщение CANCELLED со статус
кодом "не в режиме ожидания".
Как видно из этого гипотетического
примера, протокол 2PC успешно
выявил неполадку с лебедочным
мотором. Начало поворота площадки
было автоматически остановлено.
Декорация на площадке не повернулась
и не порвала полотнище, которое
осталось неподвижно висеть. Кроме
того, стейджменеджер за главным
контроллером был проинформирован о
неполадке сообщением на экране
компьютера.
Ошибки, произошедшие во время
выполнения сцены
Они обрабатываются почти так же, как
и вышеуказанная ошибка. Все
ожидающие или выполняющиеся сцены
завершаются сообщением CANCEL от
главного контроллера. Отличие здесь в
том, что число возможных вариантоввыключения безобразия на сцене
значительно увеличивается. И выбор
правильного решения не всегда
очевиден.
Спецификация рекомендует
разработчикам тщательно рассмотреть
все варианты — от продолжения
работы как ни в чем не бывало до
возврата в исходное состояние.
Предположим, что мотор поворотного
стола из нашего примера сломался
после поворота стола на 45 градусов.
Тогда, спустя гдето 18 секунд от
начала сцены (см. рис. 16), главному
контроллеру будет передано сообщение
ABORT.
Поле чего все сцены получат
сообщения CANCEL. Две из них,
находящиеся в состоянии "наготове"
(S110 и L119), обработают отмену
"попростому", забыв, что им было
послано сообщение "приготовиться".
Однако обработка сообщения CANCEL
в сцене F28, которая к этому моменту
еще не завершилась, более
проблематична. Так как полотнище
продолжает подъем, то вероятно,лучше всего поднять его до конца, дав
сцене F28 полностью завершиться, с
возвращением статускода "completing"
в сообщении CANCELLED и
последующим сообщением
COMPLETE. Но если бы по сценарию
полотнище должно было не
подниматься, а опускаться, показывая
зрителю нанесенную на него картину,
сцену F28 следовало бы, наверное,
завершить немедленно.
Сравнительная характеристика 2PC
и MSC
Подытожим сказанное выше
сравнительной характеристикой обоих
наборов команд.
Обычные команды MSC посылаются в
любой момент времени и выполняются
немедленно. Команды 2PC
планируются, образуя нечто вроде
сценария, в котором
последовательность сцен должна
выполняться совершенно
определенным образом и никак иначе.
Обычные сообщения MSC хорошо
подходят для мероприятий типа LiveShow (например, для рокконцертов,
где нет жесткого планирования) и для
медиаэлементов, которые не
представляют угрозы безопасности,
таких как свет, звук и видео. Команды
2PC больше подходят для
запрограммированных шоу и для
медиаэлементов, которые влияют на
безопасность, например, машинерия и
пиротехника.
В наборе команд MSC есть несколько
сообщений, которые приводят к
различным электрическим или
механическим процессам в
контролируемом устройстве, например,
команды GO, SET, FIRE, STOP и
RESUME. Набор команд 2PC содержит
лишь одно сообщение, приводящее к
действию — GO_2PC. К какому
результату приведет данное сообщение,
зависит от списка сцен, сохраненного в
контролируемом устройстве, и от того,
как этот сценарий будет
интерпретирован.
Главное преимущество MSC перед 2PC
— быстрый отклик на запрошенное
действие и простая конфигурация