об олимпиаде узнают от преподавателя, а затем с нетерпением ждут новых задач и участвуют в олимпиадах самостоятельно.
Проведение дистанционных олимпиад представляется весьма перспективным и полезным делом, особенно в связи с активным вхождением российских вузов в сеть Интернет. Важную роль в эффективности таких олимпиад имеет оперативная информационная поддержка, которая может быть осуществлена с помощью веб-сервера. Участие в олимпиадном движении предоставляет студентам возможность сформировать такие необходимые качества конкурентоспособного специалиста, как творческий характер мышления, способность к анализу и синтезу информационных потоков, уме-
ние оптимально использовать имеющиеся ресурсы, психологическую готовность к коллективной деятельности в стрессовых условиях, умение адаптироваться в производственном коллективе.
2005
2003
2000
ЭЭЭ
ЭЭ8
□ 1 курс
■ 2 курс
□ 3 курс
□ 4 курс
■ 5 курс
□ 6 курс
0% 20% 40% 60% 80% 100%
Рис. 2. Распределение по курсам участников
Литература
1. Богоявленская Д.Б. Психология творческих способностей. - М.: Издательский центр «Академия», 2002.
2. Попов А.И. Формирование творческой компетентности специалиста в условиях олимпиадного движения // Открытое образование. - 2005. - №6. - С.23-30.
3. Гончаров А.И., Никулин Ю.А. Опыт проведения Всероссийской дистанционной олимпиады по компьютерной физике (Тезисы)/Сборник трудов научно-методического семинара "Телематика - 98". - СПб, 1998. - С. 177-178.
САПР В ВИРТУАЛЬНЫХ ЛАБОРАТОРНЫХ ЦИКЛАХ
В. И. Карначук, доц., к. т. н., физико-технический факультет Тел. (8-3822) 41-68-84, E-mail: viktor@phtd.tpu.edu.ru Н.А. Федоров, инженер E-mail: fedorov_nikita@mail.ru Томский политехнический университет http://www.tpu.ru
The article a simple but effective algorithm for creating a program for virtual laboratory works, aimed to individualization of learning
Лабораторные работы в вычислительных классах для технических специальностей занимают все больший объем учебного времени. На наш взгляд, большим преимуществом виртуальных лабораторных работ является их дешевизна, мобильность по отношению к перестройке под определенный уровень обучения, универсальность технического обслуживания, открытость по отношению к обновлению содержания и экономия времени, отводимого на
лабораторные циклы по учебным дисциплинам.
Современные виртуальные лабораторные работы не сводятся, как правило, к применению расчета с помощью стандартных лицензионных пакетов. Они имеют все необходимые компоненты обучающих программ: встроенные методические указания к выполнению работ, удаленную базу данных тестового контроля, удобный интерфейс управляющей оболочки. Объем
пакета невелик, он не превышает 5 Мбайт, установленных для пользователя рабочей станции локальной сети Е1кегЫе1. Пакет имеет открытую структуру, что позволяет менять содержание лабораторных работ, а также настройку параметров моделирующей программы. После изучения теоретического материала студент автоматически направляется на тестирование и, если степень усвоения превышает установленный предел, то открывается интерфейсное окно выполнения лабораторной работы. Пакеты имеют отдельную программу - редактор, предназначенную только для преподавателя, с помощью которой процесс обновления и ранжирования тестового материала производится быстро и удобно [6].
Однако практика выполнения виртуальных работ по описанной технологии обучения имеет один существенный недостаток: отсутствие индивидуального подхода к обучаемому. Обычно это приводит к тому, что многие студенты умудряются сдавать отчеты по лабораторным циклам, не выполнив самостоятельно ни одной работы, а просто переписывая их у сокурсников. Выходом из этой ситуации является построение программы-оболочки в виде САПР, в рабочем поле которой каждый студент набирает сам свой вариант работы. Такого рода учебные САПР должны иметь в своих библиотеках варианты заданий, тестовые вопросы и методические разработки по каждой работе цикла. Имеющиеся программные пакеты САПР, такие как У^т, 8тиНпк, МВТУ, не предназначены для задач обучения, их библиотеки не содержат такого рода информации. Поэтому их использование напрямую в учебном процессе нельзя назвать удачным.
В лабораториях физико-технического факультета Томского политехнического университета нашла применение подобная простая САПР, разработанная для выполнения лабораторных циклов по курсам автоматического управления физическими процессами. Программа представляет собой визуальный редактор, позволяющий моделировать настройку динамических звеньев систем как в отдельности, так и в составе простых систем автоматического регулирования в целом. Можно выбирать и создавать звенья, необходимые пользователю, из библиотеки звеньев, решение производится либо методами Рунге-Кутты и Адамса, либо путем использования цифровой передаточной функции звена в виде рекуррентного соотношения в символьном виде. Эта особен-
ность позволяет расширять возможности программы при ее использовании. Интерфейс программы интуитивно прост и понятен. Все кнопки управления расположены на лицевой панели главного окна программы. Для каждого элемента схемы, собранной на рабочей области, двойным нажатием мыши можно вызвать окно настройки, которое содержит все параметры и действия, характерные для этого элемента.
Программа позволяет строить графики переходных процессов или фазовых портретов на выходе любого звена набранной схемы.
Общий вид главного окна программы представлен на рис.1 (см. цв. вставку). Окно состоит из рабочей области, панели инструментов и статусной строки. Панель инструментов состоит из трех частей, разделяемых граничными разделителями. Первая часть включает все необходимые разделы меню, позволяющие создавать новый проект, редактировать, сохранять, менять способ решения и удалять проект. Вторая часть - это кнопки быстрого вызова этих процедур. Назначение каждой кнопки показывается всплывающим меню.
Кнопка «сброс» позволяет очистить все результаты вычислений, графики и фазовый годограф. Третья группа кнопок позволяет выбирать из библиотек элементарные звенья для постановки их на рабочей области. Кнопка «генератор» позволяет поместить на рабочей области генератор сигналов, задаваемых на входе системы. Характер сигнала определяет цифровая передаточная функция, вводимая пользователем. Он может быть синусоидальным сигналом от псевдореального времени, которое существует в системе и является общим для всех элементов, либо сигналом единичного скачка. Возможно установить задержку перед скачком (рис.2. Настройка генератора входных сигналов -см. цв. вставку).
При этом пользователь может выбрать для этого генератора (как и для любого другого звена) график, на который будет производиться вывод графического отображения его выходных значений.
Кнопка «сумматор» помещает на рабочее поле суммирующий блок системы ( рис.3. Настройка сумматора сигналов. - см. цв. вставку).
В окне параметров сумматора для каждого входа можно задать знак суммируемого сигнала, сегмент с отрицательным знаком закрашивается в черный цвет.
Кнопка «точка» создает на рабочем поле размножающую точку на 3 выхода. Этот элемент необходим для построения цепей обратных связей. Никаких параметров настройки этот элемент не имеет.
Кнопка «индикатор» создает звено-повторитель, позволяющее показывать текущее значение переменной на его выходе. Кроме этого выходное значение переменной на выходе каждого звена схемы можно вызвать в панели статуса, выделив нужное звено.
Первая кнопка закладки «Линейные звенья» - «умножитель» создает звено с двумя входами, позволяющее умножить сигнал с одного из входов на задаваемый пользователем множитель.
Кнопка «дифференциатор» создает звено идеального дифференцирования, а кнопка «интегратор» - звено идеального интегрирования. Кнопка «звено 1 порядка» задает инерционное звено, у которого можно настроить два параметра: коэффициент передачи и постоянную времени.( рис.4. Настройка звена первого порядка - см. цв. вставку).
Аналогично используются в наборе и остальные звенья.
Для управления процессом моделирования используются три кнопки: «пуск», «сброс» и «параметры». Последняя кнопка позволяет настроить некоторые параметры процесса моделирования, в частности, длину цикла пересчета, метод интегрирования.
После соединения всех звеньев системы в требуемой последовательности нужно отредактировать параметры звеньев и запустить схему в работу. Графики переходных процессов на выходах любых звеньев можно наблюдать с помощью переключения закладок «рабочее поле - график». Общий вид набранной задачи представлен на рис. 5 (см. цв. вставку).
Программа состоит из двух модулей, это компонент TNewZveno, который представляет собой некий шаблон звена, вызванного на рабочее поле, и модуль Redactor, представляющий собственно код программы в целом.
Предком компонента TNewZveno служит стандартный класс Delphi - TPanel. Он подходит потому, что у этого класса есть свойство TCanvas, благодаря чему упрощается прорисовка компонента в процессе выполнения программы. Для того, чтобы изменить вид компонента, используется перерисовка Paint, которая есть у каждого визуаль-
ного компонента. Полезно также в этой процедуре сделать и перерисовку точек соединения при наведении мыши. Таким образом, это будет происходить автоматически, тогда отпадает необходимость выполнять проверку положения мыши в самой программе, что упростит ее написание.
Для того, чтобы получить широкие возможности для управления звеном, необходимо обрабатывать некоторые стандартные свойства Windows:
- CMMouseEnter - событие, возникающее при входе указателя мыши в зону, где находится компонент,
- CMMouseLeave - событие, возникающее при выходе указателя мыши из зоны, где находится компонент,
- WM_LBUTTONDOWN - событие нажатия на левую кнопку мыши,
- WMLBUTTONUP - событие отпускания левой кнопки мыши,
- WMMOUSEMOVE - событие, возникающее при движении мыши.
Эти события посылаются операционной системой и сопровождаются при этом некоторыми значениями, которые характеризуют данное событие. Для WMMOUSEMOVE, например, это абсолютные координаты указателя мыши в данный момент времени. Использование событийного программирования существенно упрощает связь между программой и каждым звеном в отдельности. Дополнительно к этому создадим свое событие ZM_ZVENOREPAINT, которое будет посылаться главному окну программы по окончании прорисовки звена. Оно необходимо для того, чтобы можно было отследить моменты перетаскивания звена по рабочему полю редактора и совершать обновление связей в схеме системы.
Для каждого из перечисленных событий создаем обработчики, которые будут перехватывать события и обрабатывать данные соответствующим образом.
Затем создаем переменные, в которых будут храниться параметры звена, такие как его входная и выходная координаты, номер предыдущего звена, номер последующего звена, формула передаточной функции в символьном виде и различные флаги. После этого необходимо переопределить процедуру Create, в которой задаем значения переменных по умолчанию и начальное положение звена.
Для того чтобы была возможность соединять звенья, нужно в процедуре обработки нажатия левой кнопки мыши проверять,
произошло ли нажатие в точке входа или выхода звена. Если это так, то необходимо перерисовывать линию соединения до тех пор, пока левая кнопка мыши не будет отпущена ( событие WM LBUTTONUP). Затем проверяется, где именно это произошло. Если в точке входа или выхода другого звена, то рисуем соединение.
Такое построение компонента, когда все наиболее простые функции содержатся внутри самого компонента, упрощает написание главного модуля программы. И нет необходимости писать такие функции для каждого звена при его соединении с системой.
Главный модуль программы - Redactor - объединяет процедуры создания звеньев, обработки поступающих от них событий, размещения звеньев на рабочем поле и контролирования хода циклов пересчета значений на выходах звеньев.
С помощью процедуры Create происходит создание звеньев и учет их порядка и количества:
Procedure TForml. ToolButton4Click(Sender: Tobject); begin
ItemsCount: =ItemsCount+1;
Zvenya[ItemsCount]:=TNewZveno.Create(SelJ);
Zvenya[ItemsCount].Parent:=Panel1;
Zvenya[ItemsCount].OnClick:=ZvenoClick;
Zvenya[ItemsCount].Left:=10;
Zvenya[ItemsCount].Top:=10;
Zvenya[ItemsCount].OnMouseMove: =
ZvenoMouseMove;
Zvenya[ItemsCount].Tag:=ItemsCount;
Zvenya[ItemsCount].OnMouseUp: =
NewZveno1MouseUp;
Zvenya[ItemsCount].PopupMenu: =PopupMenu 1;
Zvenya[ItemsCount].Formula: = '5 *8/26'; end;
Здесь ItemCount показывает, сколько звеньев располагаются в данный момент на поле редактора. Каждому звену присваивается свой порядковый номер, который в дальнейшем используется другими звеньями, для указания направления существующих соединений.
Каждому звену присваивается значения координат левого верхнего угла, которые определяют начальное положение звена на поле. Также можно задать передаточную функцию звена, которая хранится в свойстве Formula каждого звена.
Для того, чтобы была возможность соединять звенья между собой, напишем процедуру ZvenoClick, которая будет обрабатывать щелчки мышью. Сначала необходимо преобразовать абсолютные значения коор-
динат в относительные для использования внутри окна. Это делается стандартной функцией ScreenToClient. Затем нужно определить, не располагается ли указатель на точке входа звена:
If ((xx>1) and (xx<7)) and ((yy>((Height div2)-3)) and (yy< ((Height div 2)+3)))
Если это так и вход не занят, инициируем процедуру соединения и выставляем флаги, которые показывают состояние входа и невозможность его использования в данный момент. Такая же проверка производится и для выхода. После окончания проверок входа и выхода выставляются флаги, говорящие о том, что звено готово соединиться с другим, и управление передается процедуре прорисовки соединительных линий.
Теперь нужно обработать процедуру отпускания кнопки мыши. В этой процедуре сначала осуществляется проверка на то, какое именно звено пытается соединиться, если соответствующих флагов нет, то процедура прекращается. Если же регистрируется попытка соединения, то как и в первом случае проверяется присутствие мыши на входе или выходе другого звена. И если это так, соединение регистрируется и прорисовывается:
Iop.y: =Top+Output.y; Iop.x:=Left+Output.x; Connects.Input[Connects.Count]:=iop; LedUp:=True;
Connects.Izveno[Connects.Count]:=Tag; Conects.Connected[Connects. Count]:=True; StatusBar1.Panels.Items[0].Text: = 'Input:'+
Теперь необходимо записать функцию, которая будет прорисовывать соединения при перемещении какого-либо звена. Для этого необходимо знать точки начала и окончания каждого соединения. Такая информация создается при появлении соединения и обновляется при перемещении звена. После получения координат производится расчет точек перегиба и прорисовка соединения: xy[1][1]:=Connects.Input[i].x; xy[1][2]:=Connects.Input[i].y; Form1.Image1.Canvas.MoveTo(xy[1][1], xy[1][2]);
xy[2][1]: =Connects.Input[i].x+(Connects. Output [i].x-Connects.Input[i].x)div2; xy[2][2]:=Connects.Input[i].y; Form1.Im age1.Canvas.LineTo (xy[2][1], xy[2][2]);
xy[3][1]: =Connects.Input[i].x+(Connects. Output [i]. x-Connects.Input[i].x) div2; xy[3][1]: =Connects.Output[i].y; Form1.Im age1.Canvas.LineTo (xy[3][1], xy[3][2]);
xy[4][1]: =Connects.Output[i].x; xy[4][2]: =Connects.Output[i].y; Form l.Imagel.CanvasLineTo (xy[4][1], xy[4][2]);
Form l.Imagel.CanvasLine To (x,y);
После несложных расчетов получаем точки и рисуем соединение, в рабочей области редактора оно получается из ортогональных линий.
Для редактирования свойств звена создаем специальное меню, которое будет появляться при нажатии на правую кнопку мыши. Из этого меню можно также удалить звено. Для редактирования свойств создаем специальную форму, в которой динамически будут появляться поля свойств звена.
Процедура удаления звена происходит путем освобождения памяти, занимаемой звеном и сдвига всех звеньев, созданных после данного, вверх по порядковому номеру. То же происходит и с соединениями, принадлежащими данному звену: x:=Form1.Image1. Canvas.PenPos.x; y:=Form1.Image1. Canvas.PenPos.y; Form1.Image1.Canvas.Pen. Color:=clWhite; xy[1][1]: =Connects.Intput[cc].x; xy[1][2]: =Connects.Intput[cc].y; Form1.Image1.Canvas.MoveTo(xy[1][1], xy[1][2]); xy[2][1]: =Connects.Input[cc].x+(Connects. Output[
cc].x-Connects.Input[cc].x)div2; xy[2][2]: =Connects.Intput[cc].y; Form 1.Image1.Canvas.LineTo(xy[2][1], xy[2][2]); xy[3][1]: =Connects.Input[cc].x+(Connects. Output[
cc]. x-Connects.Input[cc]. x) div2; xy[3][2]: =Connects.Intput[cc].y; Form 1.Image1.CanvasLineTo(xy[3][1], xy[3][2]); xy[4][1]:=Connects.Output[cc].x; xy[4][2]: =Connects.Output[cc].y; Form 1.Image1.CanvasLineTo(xy[4][1], xy[4][2]); Form 1.Image1.Canvas.MoveTo (x,y);
По мере того, как пользователь собирает схему, программа строит двумерную матрицу целых чисел, являющуюся направленным графом размерностью NxN, где N -общее число звеньев, находящихся на рабочем поле. Каждый элемент матрицы является целым 32 битным числом, два старших байта которого являются номером выхода звена -источника, а два младших - номером входа звена-приемника, между которыми произведено соединение. Номера строк в этом графе соответствуют номерам звеньев
- источников, а столбцов - номерам звеньев
- приемников. При нажатии на кнопку «Запуск» на основе этого графа строится матрица - вектор, размерностью Мх2, где М -число звеньев, имеющих связи. Эта матрица сортируется в соответствии с порядком протекания сигнала по схеме и так же, как пре-
дыдущая, включает в себя всю информацию о каждом соединении. После этого запускается расчет, каждая итерация которого происходит по таймеру, интервал работы которого определяется из интервала дискретизации, заданного пользователем. Расчет производится путем вызова процедуры WFunk, входными параметрами которой являются результаты расчета предыдущего звена, а выходными - результаты, поступающие на выход. Процедура WFunk производит преобразование, подстановку данных в символьное выражение, определяемое переменной Formula, преобразует его к так называемой «польской записи» и производит его вычисление.
Имея передаточную функцию непрерывной системы, можно получить дискретную передаточную функцию, умножив ее на передаточную функцию экстраполятора и взяв от нее Z-преобразование, где Z=exp(pT).
Рекуррентные соотношения для звеньев были получены путем Z- преобразования аналоговой передаточной функции W(p), умноженной на экстраполятор G(p), результатом которого является цифровая передаточная функция W(z), из которой затем выводится искомое рекуррентное соотношение для звена
yi = F (yi -1" yo; xi, xi -1" xo)-
Недостатком этого способа является трудоемкость (иногда и невозможность) получения рекуррентных соотношений для некоторых передаточных функций. В таких случаях можно использовать другие методы решения (методы Рунге-Кутты, Адамса и т. п.). Для этого достаточно лишь в качестве WFunc указать соответствующую функцию, в которой производится решение.
В случае решения системы численными методами выделяем две матрицы: матрицу коэффициентов числителя и матрицу коэффициентов знаменателя. После этого программа вычисляет 4 матрицы (A,B,C,D), которые являются коэффициентами в системе уравнений пространства состояний:
— = A * S + B * X ;(1) dt
Y = C * S + D * X.(2)
где S - параметры состояния объекта; Х - входные координаты объекта; Y -выходные координаты объекта. Решая уравнение (1) и подставляя решение в (2), получаем значения Y. Коэффициенты А, В,С, D находят следующим образом:
1. проверяем в матрицах коэффициентов числителя (num) и знаменателя (den) наличие нулевых коэффициентов при старших степенях и отбрасываем их (например, num=[0,0,1,3]=[1,3]),
2. проверяем, чтобы порядок знаменателя был больше или равен порядку числителя,
3. добавляем нули в начало полинома числителя, чтобы его длина была равна длине полинома знаменателя,
4. делим все элементы полинома числителя на первый элемент полинома знаменателя,
5. коэффициенты D - это первая колонка получившегося полинома числителя
( в случае с одним входом - это просто число),
6. делим полином знаменателя на свой первый элемент,
7. первая строка матрицы А есть получившийся полином знаменателя, взятый с противоположным знаком,
8. остальные строки матрицы А есть матрица с единицами в главной диагонали
Пример: 1 -3 -5 -3.78
0 1 0 0 0 0 1 0 0 0 0 1
9. Матрица В - это просто единичная матрица,
10. элементы матрицы С получаются следующим образом:
C = num - den * num . i i +1 1
Литература
1. Архангельский А. Ильин В. , Тагин М. Русская справка (HELP) по Delphi 5.0 и Object Pascal. Бином, ISNB 5-7989-0168-8.
2. Архангельский А. Программирование в Delphi 5., Бином,ISBN 5-7989-0104-1.
3. Архангельский А. Программирование в Delphi 6., Бином,ISBN 5-7989-0227-7.
4. Дарахвелидзе П., Марков Е. Delphi 4 в подлиннике. - М.: Бином.
5. Дарахвелидзе П., Марков Е., Котенок О. Программирование в Delphi 5. - СПб., BHV-СПб, ISNB 58206-0052-5.
6. Карначук В. Моделирующие программы для лабораторных практикумов // Открытое образова-ние.-2003.-№3.- С. 23-27.
ПРОБЛЕМЫ РАЗВИТИЯ И ВНЕДРЕНИЯ СИСТЕМЫ ТЕСТИРОВАНИЯ В ВЫСШЕМ УЧЕБНОМ ЗАВЕДЕНИИ
К.И. Шахгельдян, к.т.н., доц., начальник отдела информационных систем Тел.: + 7-4232-404226,E-mail: carinash@vvsu.ru ,http://athena.vvsu.ru/carina Е.В. Садон, директор центра мониторинга качества подготовки специалиста
Тел.: +7-4232-404238, E-mail: elena.sadon@vvsu.ru Владивостокский государственный университет экономики и сервиса (ВГУЭС)
http://www.vvsu.ru
We discuss the challenges of education quality monitoring based on an assessment system. The assessment system is considered in the article and the questions of its deployment at
Vladivostok State University of Economics.
1. Введение
Вопросу качества образования в последнее время уделяется большое внимание [1]. Если
рассматривать «качество образования» как качество образовательного процесса, можно говорить, что
это понятие отражает уровень соответствия выпускника вуза образовательным стандартам. Установление соответствия требует проведения объективных измерений в течение всего