ЗАДАНИЕ XXXVI
Тема:
Сервисные средства. Цель: Ознакомиться с сервисными средствами среды Stratum 2000. |
Для работы необходимо:
уметь работать с клавиатурой и мышкой | |
владеть основными приемами работы в системе Windows | |
владеть основными приемами работы в Stratum 2000 |
Печать
Для того, чтобы распечатать схему на принтере, нужно нажать
кнопку или выбрать пункт “Печать” в меню “Файл”.
При этом будет распечатана текущая схема проекта.
Для печати текста имиджа
необходимо сделать следующее:
Печать результатов работы модели (графиков, рисунков и т.д.). В тот момент, когда появляется необходимость распечатать графики, рисунки и другие результаты, нужно нажать клавишу PrintScreen. Далее следует запустить любой графический редактор (например, PaintBrush) и произвести в нем операцию вставки из буфера. После этого рисунок распечатывается средствами графического редактора.
Настройки
Язык. Настраивается в пункте
“Параметры среды” в закладке “Язык”. Нужно выбрать необходимый
язык, нажать “OK”. Язык сменится только после перезагрузки
Stratum’а.
Загрузка. При загрузке
среды может загрузиться последний проект, About-диалог или ничего не
загружается. Эти режимы тоже устанавливаются в параметрах среды, в закладке
"Загрузка"
Если не удается запустить несколько
экземпляров Stratum’а, то, скорее всего, не установлен флажок
“Разрешить одновременную работу нескольких экземпляров” в настройках.
Установите его в закладке “Загрузка” окна настроек параметров среды,
которое появляется при выборе пункта “Параметры среды” меню
“Параметры”. Здесь же устанавливается и то, что загружается
первоначально.
В том случае, если не удовлетворяют
настройки цветовой схемы редактора текстов моделей имиджей, то в закладке
“Редактор” можно выбрать другие цветовые схемы (загрузить готовые из
файлов или создать собственные).
Отладка модели
С первого раза построить сложную
правильно функционирующую схему практически невозможно. После сборки схемы
нужно проводить ее отладку, то есть проверить поведение модели
во всех возможных состояниях и выяснить, соответствует ли оно требуемому. В том
случае, если что-то не в порядке, необходимо сделать следующее:
1.Локализовать ошибку. Примеры локализации.
logmessage(STRING Message). Выводит текст в окно сообщений. Если переменная, значение которой требуется вывести, имеет тип FLOAT, то можно воспользоваться функцией string(). Например: logmessage(string(~number))
MessageBox(STRING Message, STRING Topic, FLOAT flag). Принципиальное отличие от предыдущей функции заключается в том, что после каждого ее вызова вычисления останавливаются и появляется окно с сообщением Message. Возобновляются вычисления только по закрытии этого окна. Этой функцией целесообразно пользоваться только в тех случаях, когда она вызывается реже, чем 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).
Для того, чтобы исправить эту ошибку, установите в 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 с одноименной переменной во вновь созданном.
Запустите проект. Объект будет вращаться, но не против часовой, а по часовой
стрелке. В данном случае налицо ошибка проектирования, которая возникла из-за
того, что не учтена или неправильно учтена какая-то из особенностей среды.
Положение объекта зависит только от координат x, y.
Следовательно, дело заключается только в том, как себя ведут соответствующие
переменные. Запустите проект в пошаговом режиме и проследите за изменением
переменных x и y и за тем, как это отражается
в окне. Обратите внимание на то, что при увеличении значения y объект опускается
вниз. А проект построен, исходя из обычной направленности оси y: увеличение
значения вверх. Здесь не была учтено то, что ось y в
Stratum при работе с 2d-графикой направлена вниз. Чтобы
добиться вращения против часовой стрелки, достаточно исправить знаки на
противоположные в тех выражениях, где вычисляется координата y.
Исправьте 2 строки, помеченные справа звездочками *****:
y := ~y0 - ~R*sin(~angle)
angle := GetAngleByXY(~x - ~x0,~y + ~y0)
Откомпилируйте заново текст имиджа и запустите проект. Убедитесь, что все работает так, как требовалось.