Сделай Сам Свою Работу на 5

Состояние тестирования датчиков





Задача нашего контроллера состоит в поддержании заданных значений параметров среды теплицы: температуры, освещенности, концентрации рН. Для того чтобы эти параметры поддерживать согласно плану, необходимо считывать текущее состояние среды с помощью датчиков.

В нашем случае не будем рассчитывать на большую интеллектуальность датчиков. Датчики не будут иметь своего процессора и будут только выдавать измененные параметры по запросу контроллера. Таким образом, следующим состоянием будет опрос датчиков. Добавим это состояние на диаграмму, назовем Testing Environment и соединим с состоянием Idle. Это событие назовем Timer. Имеется в виду, что у контроллера есть встроенные часы, которые через заданное время инициализируют это событие.

Теперь разберем подробнее, что необходимо сделать для тестирования параметров среды.

Активизировавшись, контроллер опрашивает датчики температуры и рН. Для того чтобы отразить, что опрос датчиков происходит в течение данного состояния, необходимо добавить новое действие (Action). Для этого во вкладке Actions (98i Detail) из контекстного меню выбираем Insert.

Выберем полученное действие двойным нажатием мыши и попадем в диалоговое окно, представленное на рис. 6.7 (окно показано для версии 98i).



Рис. 6.7.Настройка параметров действия для версии 98i

Для версии 2000 это окно получило некоторые изменения, которые, впрочем, не отразились на его сути (рис. 6.8).

Рис. 6.8.Настройка параметров действия для версии 2000

Здесь мы можем переключаться между действием (Action) и посылкой сообщения (Send Event). Разница между этими пунктами в том, что действие осуществляется самим классом, для которого мы создаем диаграмму состояния, то есть здесь вызывается метод этого класса, а посылка сообщения направлена на объект другого класса, метод которого вызывается при помощи этого сообщения. Этот объект задается в строке Send target. Также можно задать имя вызываемого метода класса в строке Send event и аргументы в строке Send arguments.

Можно настроить момент, в который происходит отмеченное действие. Здесь предоставляется выбор из четырех состояний:

· On entry показывает, что указанное действие необходимо производить при входе в состояние до выполнения остальных действий.



· On exit показывает, что действие должно быть выполнено перед самым выходом из указанного состояния.

· Do (Entry until exit для 98i) — действия, производимые в течение состояния до выхода. Если таких действий набирается несколько, то почти наверняка их можно выделить в отдельную диаграмму состояния.

· On Event (Upon event для 98i) — действия в ответ на определенные события, обрабатываемые в текущем состоянии. При выборе этого пункта открывается возможность заполнить события (Event), параметры (Arguments) и условия, когда это действие обрабатывается (Condition), то есть может случиться так, что событие произошло, а условие' его обработки не наступило. Этот пункт удобно использовать при обработке события, которое не приводит к переходу в другие состояния, и отражается значком Transition To Self.

Нужно заметить, что при изменении этих параметров изменяется и надпись на значке состояния.

События отражаются при помощи символа ^перед ним. Действия: при входе: entry:, при выходе: exit:, в течение работы: do:, действия по сообщению: on:. Условие обработки показывается выражением в квадратных скобках. Данная нотация довольно удобна и позволяет, не активизируя окно свойств, одним взглядом оценить сделанное.

Заполним событие как показано на рис. 6.7-6.8. По аналогии заполним действие для опроса датчика рН и получим рис. 6.9.

Рис. 6.9.Значок состояния при тестировании среды после изменений

Вывод диаграммы из цикла

После того как протестировано состояние среды, необходимо привести показатели к норме посредством включения соответствующих исполнительных устройств. Для отражения этого действия создадим состояние Adjusting Environment, которое соединим с состоянием Testing Environment.



После настройки среды система переходит в ожидание следующего момента времени. Отразим это при помощи стрелки, соединяющей состояния Adjusting Environment и Idle.

Однако у нас получилась система с бесконечным циклом. У нее нет выхода. Но мы знаем, система должна закончить работу в тот момент, когда урожай созрел. Ключом созревания будем считать истечение времени выращивания растения по плану выращивания.

Для отражения этого введем состояние Analysing Time, которое включим между состоянием Idle и Testing Environment. Перетащим конец стрелки Timer на Analysing Time и соединим его новой стрелкой Testing Environment. Добавим End State, соединим это состояние с Analysing Time, заполним условие RClick=>Open Specification=>Detail (рис. 6.10), говорящее о том, что переход осуществляется только тогда, когда истекло время роста растения. Это окно имеет практически те же заполняемые поля, что и рассмотренное ранее, поэтому не будем на нем подробно останавливаться. Единственное, что хотелось бы отметить, это то, что стрелку можно перенести прямо отсюда, изменив позиции From (откуда) и То (куда).

Рис. 6.10.Заполнение условия выполнения перехода

Совет. Для того чтобы быстрее добраться до спецификаций, можно использовать двойное нажатие мыши на диаграмме или стрелке.

Добавление замечания

Для добавления последнего, еще не использованного нами значка, введем в диаграмму комментарий, который соединим при помощи значка Anchor Note to Item с состоянием Analysing Time, и должно получиться примерно следующее (рис. 6.11).

Рис. 6.11.Диаграмма состояния после добавления замечания

Настройка среды

Распишем подробнее, какие состояния должна пройти система для настройки среды в соответствии с планом выращивания, при этом сделаем следующие допущения:

· для увеличения температуры в теплице необходимо включить нагреватель;

· для уменьшения температуры необходимо включить вентилятор;

· для переключения в режим «День» необходимо включить освещение;

· для переключения в режим «Ночь» необходимо выключить освещение;

· для уменьшения рН необходимо добавить в раствор воды;

· для увеличения рН необходимо добавить в раствор удобрений. Причем возможно одновременное включение нагревателя, лампочек и водяной заслонки, но должно быть невозможно одновременное включение нагревателя и вентилятора, а также одновременное поступления воды и удобрений.

Произведя анализ необходимых действий, нетрудно заметить, что перечисленный набор можно разделить на три независимые части, это:

· настройка температуры (t);

· настройка освещения (light);

· настройка уровня рН.

Так как мы приняли допущение, что процессор у нас только один, то эти состояния будут пройдены последовательно. Но если для каждой части используется свой процессор, то можно было бы создать автономные классы для управления этими состояниями.

Rational Rose предоставляет возможность создания вложенных диаграмм состояния, что удобно для большей детализации каждого состояния. Воспользуемся этим в нашем случае.

Добавим три новых состояния Adjusting t (настройка температуры), Adjusting Light (настройка освещения) и Adjusting рН (настройка рН). Для этого добавим новые состояния прямо в значок Adjusting Environment. Перед добавлением значок будет выделен рамкой, а после добавления будет автоматически раздвинут, чтобы в него уместился добавленный элемент. Изменим направления входящей и выходящей стрелок так, чтобы входящая указывала на Adjusting рН, а выходящая исходила из Adjusting t, и соединим эти состояния последовательно. Теперь распишем, что происходит в этих состояниях (рис. 6.12).

Рис. 6.12.Настройка среды

Настройка температуры происходит только при ее изменении, что показывают функции tempDown и tempUp. Если произошло одно из этих событий, то температура сравнивается с той, которая должна быть по плану, и если она меньше, то включается нагреватель, а если больше — вентилятор.

Однако если температура достигла нормального уровня, то вентилятор и нагреватель отключаются. Аналогично происходит и с уровнем рН.

Для освещения лампочка просто включается при наступлении времени освещения и выключается при наступлении ночного времени суток.

Совет. Для того чтобы создать ломаную стрелку, нужно «потянуть» мышкой за ее середину.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.