ЗАДАНИЕ IV

Тема: Формализация объектов. Разбиение. Связи. Библиотеки. Управление.2D-визуализация. Проектирование простейшей панели управления
Цель: Знакомство с методами организации вычислений в среде Stratum 2000.

Перед началом работы необходимо:

владеть работой с клавиатурой и мышкой;
знание основных понятий информатики : файловая система, программное обеспечение , состав компьютера;
владение основными приемами работы в MS Windows.
        Схемой называется множество имиджей, соединенных информационными связями. Схема отображает структуру исследуемой системы. Разделение системы на элементы производится для удобства манипулирования ими.
Сложные системы полезно делить на элементы. Разделение на элементы следует производить таким образом, чтобы из этих элементов можно было составить в другой комбинации другую систему. Разбиение системы на элементы следует производить так, чтобы основное количество связей оставалось внутри элементов. В этом случае будет достигнуто большая целостность элементов, которыми далее будет можно манипулировать как законченными сущностями. При этом следует помнить о двух крайностях. Слишком элементарные имиджи легко тестировать, но сборка системы из набора "атомов" - весьма трудоемкая задача, так как количество связей становится слишком велико. Слишком "крупные" имиджи неудобны тем, что из их комбинаций сложно составить что-то новое или модифицировать систему без изменения самих составляющих. Изменение же составляющих ведет к переработке тех систем, которые также используют данные имиджи.
Задание 1.

        Допустим, что от Y зависит переменная Z. Например, Z:=10000/(abs(Y)+1). Создадим новый имидж с названием div_func, содержанием которого будет данная формула. Значения же Y будут передаваться из имиджа, подобный которому нами уже был изготовлен ранее (line_func, лабораторная работа № 3 ):

x:=x+1
y:=2*~x+2

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

        Освоим некоторые манипуляции с ее элементами. Для того, чтобы схема выглядела более привлекательно научитесь перемещать имиджи, ломать и спрямлять связи.
        Чтобы передвинуть имидж надо указать на него курсором мыши и удерживая левую кнопку на мыши сдвинуть курсор. Вместе с курсором сместится имидж. Связь будет двигаться за своим имиджем.
        Чтобы переломить связь, то есть внести в нее дополнительный фрагмент, укажите на связь курсором мыши и добейтесь ее активации (на ней появятся отметки), нажав левую кнопку мыши. Далее, если нажать клавишу CTRL, то курсор мыши превратится в перекрестие. Нацельтесь перекрестием на место будущего излома линии и подтвердите свое желание левой кнопкой мыши. Пока вы будете ее удерживать, передвигая мышь, за курсором потянется излом связи.
        Чтобы проделать операцию обратную этой, то есть удалить лишний излом, проделайте те же операции, используя вместо клавиши CTRL клавишу SHIFT.
        Удаление связи в целом производится таким образом. Связь активируется указанием на нее курсора мыши и нажатием левой ее кнопки. После того, как появились на линии связи специальные отметки, нажмите клавишу DELETE на клавиатуре. Подтвердите решение об удалении связи нажатием кнопки ДА на выпавшем меню.
        Объясним еще две возможности для имиджей - размножение дублированием и удаление. Для первой достаточно удерживая клавишу CTRL, указать курсором на имидж и удерживая левую кнопку мыши, отвести ее курсор в сторону - появится дубль имиджа. Два имиджа абсолютно идентичны. И следует заметить, что изменения (модели) в одном будут приводить к изменениям в другом автоматически. Если вы хотите оставить за собой право в дальнейшем модифицировать текст одного из них независимо от другого, позаботьтесь, чтобы они имели разные имена. В двух имиджах, полученных дублированием, различными могут быть только данные (кроме тех, что назначаются ПО УМОЛЧАНИЮ).
        Дублировать можно не только одинокие имиджи, но и целые схемы или их части. Для этого удерживая левую кнопку мыши и смещая ее курсор, оконтурите предполагаемый для копирования фрагмент схемы. То, что попадет в прямоугольник до отпускания кнопки, будет отмечено. Далее удерживая клавишу CTRL и указывая на отмеченную область, передвигайте мышь. Таким образом, добейтесь появления копии выбранного фрагмента.
        Чтобы удалить имидж, активируйте его (указать курсором и нажать левую кнопку мыши) и нажмите клавишу DELETE. Если имидж имеет связи, система уточнит Ваше желание, так как связи также будут удалены. Группу имиджей можно удалить, если отметить их как только что было описано и нажать клавишу DELETE.

        Итак, схема из двух имиджей составлена. Запуск ее на счет произведем нажатием кнопки cm_run.gif (180 bytes) - "Пуск", или нажатием несколько раз на кнопку cm_run.gif (198 bytes) - "Один шаг". Для просмотра значений переменных можно заглядывать в диалог "Свойства имиджа".

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

        Отображение может быть различным - в виде изменяющихся значений в полях экрана, статических и динамических абстрактных образов (функций, линий), условных обозначений (лампочек, гистограмм), натурального трехмерного изображения, изменяющихся или передвигающихся графических образов. Все изображения быстро компонуются из готовых имиджей, которые уже есть в библиотеках.
        Простейшим является отображение в виде меняющихся значений переменных. Начнем с него. Будем наблюдать значения Z в специальном окне. Для этого в библиотеке CONTROLS.LIB выберите имидж с именем NUMBERVIEW. Делайте так. На рабочем поле схемы нажмите правую кнопку мыши, из появившегося меню выберите пункт ВСТАВИТЬ ИМИДЖ ИЗ БИБЛИОТЕКИ, нажав левую кнопку мыши. В открывшемся окне, в поле БИБЛИОТЕКА, нажав на кнопку с изображением "выбор из списка" (стрелка вниз), двойным быстрым нажатием на левую кнопку мыши выберите библиотеку с именем CONTROLS.LIB. Затем среди изображений имиджей выберите тот, который подписан как NUMBERVIEW, сделайте свой выбор двойным нажатием левой кнопки на мыши, указывая на имидж. Имидж появится на рабочем поле схемы.
        Установите связь имиджа div_func (переменная Z)с имиджем numberview (переменная Value).
        Теперь для того, чтобы изображение появилось, надо для него создать окно (графическое пространство). Для этого из библиотеки UNIT.LIB выберите имидж GRAPHICSPACE и установите его на поле схемы.

Графический элемент и пространство для него можно соединить связью по переменным HSPACE. Теперь номер порождаемого имиджем GRAPHICSPACE графического пространства HSPACE будет сообщаться имиджу NUMBERVIEW, который будет посылать свое изображение в это окно.Однако это можно не делать если мы работаем только с одним окном. Как в нашем случае

        Отметим, что на экране будет отображаться два окна - одно, где изображена главная схема проекта, другое - порождаемое имиджем графического пространства и изображением в нем поля со значениями переменной Z. Имя последнего окна можно задать самому, для этого в переменную WINDOWNAME имиджа GRAPHICSPACE написать некоторое слово, например, "Результаты". По умолчанию окно имеет имя MainWindow.

        Итак, запустим схему в работу. cm_run.gif (198 bytes) - "Один шаг" или cm_run.gif (180 bytes) - "Пуск".

        Поставьте NUMBERVIEW-элементов столько, сколько необходимо для удобства работы. По одному на каждую отображаемую переменную. Расположение полей в окне регулируйте заданием значений переменных ORGX и ORGY в имиджах NUMBERVIEW. Значения ORGX и ORGY задаются в пикселях по горизонтальной и вертикальной осям экрана. При этом надо помнить, что значения по горизонтальной оси возрастают слева направо. При этом левый обрез окна по умолчанию соответствует нулю. Значения по вертикальной оси возрастают СВЕРХУ ВНИЗ (!) и верхний обрез соответствует нулю по умолчанию. Для удобства номер пикселя выводится в статусной строке внизу экрана и указывает на место, где находится курсор мыши.

Если не задавать значения переменных ORGX и ORGY, то они принимают значения координат имиджа на схеме.

        Более сложной системой отображения данных является график. Построим зависимость Z от X. Для этого воспользуемся имиджем полилинии POLYLINE в библиотеке GRAPH2D. Установите ее имидж в рабочее поле, соедините переменные: X имиджа line_func с X имиджа polyline, а Z имиджа div_func с Y имиджа polyline. Не забудьте переменную HSPACE из имиджа polyline соединить с такой же в имидже GRAPHICSPACE.

        Для настройки параметров полилинии, ее цвета, толщины и других важных параметров пользуйтесь данными имиджа polyline.
        Для закрепления материала можете с помощью второй полилинии (сделайте копию) изобразить зависимость Y от X. И визуально посмотреть - где эти линии пересекаются. Чтобы сделать копию имиджа, укажите курсором на прототип, нажмите клавишу CTRL на клавиатуре и левую кнопку на мыши, и отведите курсор мыши в сторону. После того, как появится второе изображение имиджа, отпустите кнопку мыши и клавишу.
        Запуская схему ( cm_stop.gif (180 bytes) - "Стоп (очистить)" и cm_run.gif (198 bytes) - "Один шаг") можно плавно шагами подойти к точке пересечения линий, остановиться в ней и посмотрев на вьюверы узнать при каком значении X линии пересекаются, то есть определить корень системы двух нелинейных уравнений.
        Может получиться так, что изображение в окне "Результаты" не будет отцентрировано. Как здесь поступить? Во-первых, указывая на контур окна курсором мыши и удерживая левую ее кнопку можно менять размеры окна. Кстати, размеры окна Вы можете задать как значения переменных Height и Width в имидже GraphicSpace прямо на схеме. Тогда окно будет появляться сразу требуемых размеров. Во-вторых, нажимая курсором мыши на верхнюю (синюю) строку любого из окон и удерживая ее левую кнопку можно двигать окна по экрану монитора, добиваясь удачного для них расположения. В-третьих, умножая, перед тем как передать на полилинию значения вычисленных X и Y на константы или прибавляя к ним константы, вы можете масштабировать, зеркалировать или сдвигать изображение. Например, на Y полилинии можно подавать значение переменной r (вычисляемой как r:=z*Mz+Sz), а не Z как ранее. Тогда Sz, равное например 100, будет сдвигать изображение полилинии в окне на 100 пикселей вниз, (-100) - вверх. Значение Mz, равное 5 например, увеличит изображение в 5 раз, а значение 0.1 уменьшит его в 10 раз. Формулу можно дописать в имидж div_func, а можно изготовить отдельный имидж и включить его в разрыв связи между полилинией и имиджем div_func.
        Теперь поставим на конец каждого графика изображение цветной точки. Для этого, используйте стандартный имидж Ellipse из библиотеки Graph2d.LIB и соедините переменную X имиджа polyline с переменной X имиджа Ellipse и также Y с Y. Задайте переменным r1, r2 (радиусы эллипса по горизонтали и вертикали в пикселях) значения 2, а переменной BrushColor (цвет закраски эллипса) значение rgb(255,0,0). Другой имидж Ellipse соедините со второй полилинией также, но цвет задайте rgb(0,255,0). Не забудьте соединить у обоих имиджей Ellipse переменную HSpace с соответствующей переменной из имиджа polyline или GraphicSpace, чтобы изображение красной и зеленой точек появилось в окне "Результаты".
        Теперь будем управлять значением X непосредственно вручную с клавиатуры. Можно управлять переменными мышкой, клавиатурой, подавать значения из файла или базы данных, или, наконец, формировать автоматически, сконструировав для этого специальную формулу или систему.

        Проще управлять значениями от мышки. Для этого удалите запись X:=X+1 из имиджа linear_func. Например так, укажите на имидж linear_func курсором и нажмите быстро дважды кнопку мыши. Откроется меню "Свойства имиджа". Нажмите на закладку "Текст". Встаньте курсором на строку с записью X:=X+1. Сотрите строку клавишами BackSpace и Delete. Возможен другой вариант. Можно не стирать строку, если есть подозрение, что она Вам потом понадобится вновь. В этом случае в начале строки наберите две косые черты - //X:=X+1. Такой символ означает, что за ним до конца строки идут комментарии, которые не подлежат вычислению. Когда будет необходимо, можете убрать "косые".
        Теперь установим на схему управлятор. Находясь на рабочем поле схемы нажмите правую кнопку мыши. Откроется меню. Выберите из него пункт "Вставить имидж из библиотеки" левой кнопкой мыши. Установите курсор мыши на указатель в поле библиотеки и щелкните по левой кнопке. Из списка библиотек выберите курсором мыши и нажатием ее левой кнопки строку CONTROLS.LIB. Просмотрите содержимое библиотеки. Найдите имидж с названием Vslider. Указав на него мышью, нажмите быстро дважды на ее левую кнопку, имидж окажется на рабочей схеме.
        Теперь соединим имидж связью с имиджем linear_func. Соединим переменные Value (из Vslider) и X (из linear_func). Теперь, когда Вы будете во время расчета передвигать ползунок управлятора, то его смещение будет преобразовываться в значение Value, которое будет передаваться в имидж linear_func на переменную X. Таким образом, Вы можете произвольно изменять значение X.
        Чтобы управлятор Vslider появился в окне "Результаты" и был Вам доступен, его переменную Hspace необходимо соединить с переменной Hspace имиджа GraphicSpace. Действуйте аналогично только что изложенному.

        Теперь подготовьте данные в имидже Vslider. Для этого, укажите на него курсором мыши и нажмите быстро дважды ее левую клавишу. Появится меню "Свойства имиджа". Нажмите на закладку "Переменные". Появится список переменных и их значения. Теперь измените значения переменных Min и Max. Тогда управлятор в крайних положениях будет выдавать числа, равные указанным в этих переменных, а в промежуточных положениях - пропорционально им. Например, установите значения 0 и 200. Нажмите кнопку на меню ОК.
        Теперь можно нажать кнопку cm_run.gif (180 bytes) - "Пуск". Нажимая на изображение ползунка управлятора на схеме плавно сдвигайте его. В результате значение переменной X будет изменяться, следовательно, будут изменяться показания вьюверов и отрисовываться график.
        Обратите внимание на то, что если резко изменять положение ползунка, то график будет ломаться. Это объясняется тем, что в этом случае переменная X принимает значения скачком, так как промежуточные ее значения просчитываться не успевают. Поэтому, ведите ползунок плавно.
        Установите самостоятельно ползунок на переменную ширины полилинии Width имиджа Polyline.
        Теперь будем выводить сигналы о превышении некоторого порогового значения.
        Вставим из библиотеки имидж Lamp.
        Для выработки сигнала о превышении порогового значения создадим имидж: TestFunc. Содержащий строки flag:= x > porog.
        Соединим его переменную Х с переменной Y имиджа в div_func, а переменную flag с переменной light имиджа Lamp. Задайте некоторое значение пороговой величины.

        Задайте цвет лампочки в переменной Color имиджа Lamp.

Дополнительное задание.

        Запишите только что созданный вами проект на дискету. Для этого в меню файл выберите пункт: сохранить проект как.
        Задание на самостоятельную работу: Постройте расчетную модель из собственной предметной области. Разбейте ее на имиджи согласно логике предмета. Соберите 2-3 схемы перекомбинировав имиджи и связи. Постройте схему, отображающую причинно следственные связи. Сконструируйте пульт управления и отображения.

Результат.

        Созданный вами проект может иметь следующий вид:


flab004.gif (9886 bytes)