ЗАДАНИЕ XXXVI

Тема: Сервисные средства.
Цель: Ознакомиться с сервисными средствами среды Stratum 2000.

Для работы необходимо:

уметь работать с клавиатурой и мышкой
владеть основными приемами работы в системе Windows
владеть основными приемами работы в Stratum 2000

Печать

    Для того, чтобы распечатать схему на принтере, нужно нажать кнопку   или выбрать пункт “Печать” в меню “Файл”. При этом будет распечатана текущая схема проекта.
Для печати текста имиджа необходимо сделать следующее:

  1. Открыть текст имиджа.
  2. Выделить этот текст полностью и скопировать в буфер обмена.
  3. Запустить любой текстовый редактор (Word или NotePad). Скопировать в него из буфера текст.
  4. Распечатать текст из этого редактора на принтере.

    Печать результатов работы модели (графиков, рисунков и т.д.). В тот момент, когда появляется необходимость распечатать графики, рисунки и другие результаты, нужно нажать клавишу PrintScreen. Далее следует запустить любой графический редактор (например, PaintBrush) и произвести в нем операцию вставки из буфера. После этого рисунок распечатывается средствами графического редактора.

Настройки
    Язык. Настраивается в пункте “Параметры среды” в закладке “Язык”. Нужно выбрать необходимый язык, нажать “OK”. Язык сменится только после перезагрузки Stratum’а.
    Загрузка. При загрузке среды может загрузиться последний проект, About-диалог или ничего не загружается. Эти режимы тоже устанавливаются в параметрах среды, в закладке "Загрузка"
    Если не удается запустить несколько экземпляров Stratum’а, то, скорее всего, не установлен флажок “Разрешить одновременную работу нескольких экземпляров” в настройках. Установите его в закладке “Загрузка” окна настроек параметров среды, которое появляется при выборе пункта “Параметры среды” меню “Параметры”. Здесь же устанавливается и то, что загружается первоначально.
    В том случае, если не удовлетворяют настройки цветовой схемы редактора текстов моделей имиджей, то в закладке “Редактор” можно выбрать другие цветовые схемы (загрузить готовые из файлов или создать собственные).

Отладка модели
    С первого раза построить сложную правильно функционирующую схему практически невозможно. После сборки схемы нужно проводить ее отладку, то есть проверить поведение модели во всех возможных состояниях и выяснить, соответствует ли оно требуемому. В том случае, если что-то не в порядке, необходимо сделать следующее:

1.Локализовать ошибку. Примеры локализации.

logmessage(STRING Message). Выводит текст в окно сообщений. Если переменная, значение которой требуется вывести, имеет тип FLOAT, то можно воспользоваться функцией string(). Например: logmessage(string(~number))

MessageBox(STRING Message, STRING Topic, FLOAT flag). Принципиальное отличие от предыдущей функции заключается в том, что после каждого ее вызова вычисления останавливаются и появляется окно с сообщением Message. Возобновляются вычисления только по закрытии этого окна. Этой функцией целесообразно пользоваться только в тех случаях, когда она вызывается реже, чем 1 раз за такт (то есть стоит внутри каких-то условий). В противном случае будет очень сложно прервать работу проекта.

  1. Исправить ошибку. Если это опечатка, то сложностей нет никаких. Если же это связано с тем, что предварительно была неправильно спроектирована схема, то в этом случае нужно вносить более серьезные изменения, которые могут затронуть всю модель.

Особые случаи
   
Часто бывает, что какая-то переменная при изменении ее значения в свойствах имиджа после нажатия кнопки “Сброс” устанавливается в старое значение. Это происходит, если изменение делается с помощью клавиши “Delete” и данная переменная связана с какой-то переменной в другом имидже. В этом случае можно либо изменить значение переменной в связанной переменной (ее значение выделено синим цветом).
    В случае, если на схеме не видны какие-то элементы (графические объекты, имиджи, связи), то это означает, что отключены некоторые слои в свойствах листа. Для этого нужно щелкнуть правой кнопкой мыши на схеме и в появившемся меню выбрать пункт “Параметры листа”. В появившемся окне выбрать закладку “Слои”. Если там не хватает флажков, то нужно их поставить. После этого невидимые ранее объекты станут видимыми.
    Зависание проекта в ходе работы. Часто случается так, что из-за ошибки в модели происходит “зацикливание” вычислений в имидже. При этом среда перестает реагировать на нажатие кнопок и выбор пунктов меню. Прервать зацикливание можно нажатием комбинации клавиш Ctrl C. После этого появится сообщение, в котором нужно подтвердить остановку проекта, нажав OK.
    “Обрезание окон”. Такое явление случается, когда какое-то из окон выходит за границы рабочего поля среды. Например, за границей окна может оказаться нижний скроллер. В этом случае нужно передвинуть область видимости рабочего поля вниз с помощью самого правого скроллера.

Задание 1
Работа с сервисными средствами и настройки

1.Печать.
    Загрузите из примеров проект
BALL3D.

    Вставьте бумагу в принтер и нажмите кнопку.
    После этого откройте окно редактирования текста имиджа Cylinder3D, выделите весь текст и скопируйте в буфер обмена. Откройте любой текстовый редактор и скопируйте в него текст из этого буфера. После этого, пользуясь стандартными средствами редактора, распечатайте его на принтере.

2. Настройки.
    Зайдите в “Параметры среды” и в закладке “Язык” установите там “English (английский язык)” и нажмите OK. Выгрузите и снова загрузите Stratum. Все меню и надписи теперь будут на английском языке. Установите язык обратно на русский и перезагрузите Stratum.

    Здесь же, в “Параметрах среды”, сделайте так, чтобы при старте Stratum загружал последний проект. После этого перезагрузите его и убедитесь, что все работает правильно.

Задание 2
Отладка.

Откройте новый проект. В этом проекте создайте имидж, содержащий следующий текст:

FLOAT a,b
b := 1/~a
a := ~a + 1

В “Свойствах” установите значение переменной a в -1. Запустите проект. При этом появится сообщение о математической ошибке (деление на 0).

 MatError1.GIF (4997 bytes)

Для того, чтобы исправить эту ошибку, установите в 1 значение a.

Ошибка проектирования

Требуется создать проект, в котором бы имитировалось движение некоторого объекта вокруг заданной точки против часовой стрелки. Объект представляет из себя любую плоскую фигуру (например, квадрат).
В созданном ранее проекте нарисуйте квадрат. В его свойствах установите имя в "Ojb". Теперь создайте точку, вокруг которой должен двигаться квадрат. В средствах создания графических объектов нет прямой возможности нарисовать точку, но это ограничение можно обойти. Для этого нарисуйте линию и в ее свойствах установите длину равной нулю. При этом толщину ее желательно задать не менее 2, иначе ее не будет видно. Здесь же, в "Свойствах", установите имя в "Point".
Теперь замените текст имиджа на следующий:

HANDLE HSpace, HObject, HPoint
FLOAT x, y
FLOAT x0,y0
FLOAT angle,R

if (~HObject)
angle := ~angle + 0.01                      // Изменение угла
x := ~x0 + ~R*cos(~angle)               // Определение координаты x объекта
y := ~y0 + ~R*sin(~angle)                // Определение координаты y объекта   *****
ret := SetObjectOrg2d(~HSpace,~HObject,~x,~y)
else
HObject := GetObject2dByName(~HSpace,#0,"Obj") // Получаем дескриптор объекта
x := GetObjectOrg2dx(~HSpace,~HObject) // Координата x объекта
y := GetObjectOrg2dy(~HSpace,~HObject) // Координата y объекта
HPoint := GetObject2dByName(~HSpace,#0,"Point") // Получаем дескриптор центра вращения
x0 := GetObjectOrg2dx(~HSpace,~HPoint) // Координата x центра вращения
y0 := GetObjectOrg2dy(~HSpace,~HPoint) // Координата y центра вращения
angle := GetAngleByXY(~x - ~x0,~y - ~y0) // Определение угла поворота объекта *****
R := sqrt(sqr(~x - ~x0)+sqr(~y - ~y0)) // Определение радиуса вращения
endif

Откомпилируйте имидж. Вставьте в схему проекта Системный имидж LGSpace и соедините его переменную HSpace с одноименной переменной во вновь созданном.

Debug.GIF (7583 bytes)

Запустите проект. Объект будет вращаться, но не против часовой, а по часовой стрелке. В данном случае налицо ошибка проектирования, которая возникла из-за того, что не учтена или неправильно учтена какая-то из особенностей среды. Положение объекта зависит только от координат x, y. Следовательно, дело заключается только в том, как себя ведут соответствующие переменные. Запустите проект в пошаговом режиме и проследите за изменением переменных x и y и за тем, как это отражается в окне. Обратите внимание на то, что при увеличении значения y объект опускается вниз. А проект построен, исходя из обычной направленности оси y: увеличение значения вверх. Здесь не была учтено то, что ось y в Stratum при работе с 2d-графикой   направлена вниз. Чтобы добиться вращения против часовой стрелки, достаточно исправить знаки на противоположные в тех выражениях, где вычисляется координата y.
Исправьте 2 строки, помеченные справа звездочками *****:

y := ~y0 - ~R*sin(~angle)
angle := GetAngleByXY(~x - ~x0,~y + ~y0)

Откомпилируйте заново текст имиджа и запустите проект. Убедитесь, что все работает так, как требовалось.