ПЗ (1192639), страница 5
Текст из файла (страница 5)
}
}
Для передвижения стрелки используется функция setRotation(), которая вращает объект относительно точки трансформации.
В приведенном примере амперметр обладает шкалой от 5 до 30, поэтому если данные выходят за границы диапазона, то стрелка будет указывать на 0 или 30.
Вольтметр работает аналогичным образом как и амперметр. Разница заключается в способе подключении к цепи, разных пределах измерения и отправлением разных данных.
В лабораторной работе с переменным источником тока так же используется осциллограф и цифровой мультиметр.
Конструктор осциллографа:
ui->setupUi(this);
a1.load("C:/Users/User/Desktop/kur/osci.jpg");
scene = new QGraphicsScene();
scene2 = new QGraphicsScene();
ui->graphicsView_2->setScene(scene2);
ui->graphicsView->setScene(scene);
item1 = scene->addPixmap(a1);
ui->dialx->setMaximum(500);
ui->dialxx->setMaximum(500);
ui->dialy->setMaximum(500);
ui->dialyy->setMaximum(500);
}
В осциллографе используются две графические сцены, одна для изображения самого осциллографа, другая для отображения графика функции.
Рисунок 19 – Модель осциллографа
Функция osc() используется для отображения графика и его изменения:
float x=-100;
QPointF b,c;
QLineF e;
scene2->clear();
float z;
float y1=(float)ui->dialx->value()/10;
float y2=(float)ui->dialxx->value()/10;
float x1=(float)ui->dialy->value()/10;
float x2=(float)ui->dialyy->value()/10;
for(int i=0;i<200;i++){
z=i;
b.setX(x+z+x2);
b.setY((y1+50)*sin((x+z)/(20+x1))+y2);
x+=1;
c.setX(x+z+x2);
c.setY((y1+50)*sin((x+z)/(20+x1))+y2);
e.setPoints(b,c);
scene2->addLine(e);
}
ui->graphicsView_2->update();
График чертится поточечно с использованием класса QLine.
Для корректирования графика используются ползуны с диапазоном от 0 до 50. Каждый ползун изменяет один из коэффициентов x1,x2,y1,y2.
Для того, чтобы можно было наглядно увидеть зависимость вида графика от коэффициентов используются слоты on_dialx_valueChanged(), on_dialxx_valueChanged(), on_dialy_valueChanged() и on_dialyy_valueChanged(). Эти слоты вызывают функцию osc(), которая обновляет график в реальном времени.
void MainWindow::on_dialx_valueChanged(int value)
{
osc();
}
void MainWindow::on_dialxx_valueChanged(int value)
{
osc();
}
void MainWindow::on_dialy_valueChanged(int value)
{
osc();
}
void MainWindow::on_dialyy_valueChanged(int value)
{
osc();
}
Мультиметр в отличии от остальных измерительных приборов при вызове принимает 3 параметра – силу тока, напряжение, сопротивление и изменяет свои показания в зависимости от установленного режима. На рисунке 20 изображен мультиметр в режиме измерения силы тока с максимальным пределом измерения 200 мкА.
Рисунок 20 – Мультиметр, измеряющий ток 5мкА
Конструктор мультиметра:
void multi::multi()
{
scene = new QGraphicsScene();
sw=2;
ui->amper->setScene(scene);
multi1 = scene->addPixmap(b1);
multi2 = scene->addPixmap(b2);
for(int i=0;i<4;i++){
for(int j=0;j<7;j++){
segments[i][j]=scene->addPixmap(seg[i][j]);
}
}
multi2->setPos(102,290);
multi2->setTransformOriginPoint(95,95);
multi2->setRotation(-180);
segments[0][0]->setPos(110,120);
segments[0][1]->setPos(131,120);
segments[0][2]->setPos(131,147);
segments[0][3]->setPos(110,168);
segments[0][4]->setPos(110,147);
segments[0][5]->setPos(110,120);
segments[0][6]->setPos(110,144);
segments[1][0]->setPos(155,120);
segments[1][1]->setPos(176,120);
segments[1][2]->setPos(176,147);
segments[1][3]->setPos(155,168);
segments[1][4]->setPos(155,147);
segments[1][5]->setPos(155,120);
segments[1][6]->setPos(155,144);
segments[2][0]->setPos(200,120);
segments[2][1]->setPos(221,120);
segments[2][2]->setPos(221,147);
segments[2][3]->setPos(200,168);
segments[2][4]->setPos(200,147);
segments[2][5]->setPos(200,120);
segments[2][6]->setPos(200,144);
segments[3][0]->setPos(245,120);
segments[3][1]->setPos(266,120);
segments[3][2]->setPos(266,147);
segments[3][3]->setPos(245,168);
segments[3][4]->setPos(245,147);
segments[3][5]->setPos(245,120);
segments[3][6]->setPos(245,144);
}
Конструктор добавляет на сцену изображение корпуса мультиметра, рычага и четырех семисегментных индикаторов.
При нажатии на рычаг вызывается функция mousePressEvent():
void MainWindow::mousePressEvent(QMouseEvent *eventPress){
QPoint z=eventPress->pos();
if((z.x()>278)&&(z.y()>304)&&(z.x()<304)&&(z.y()<319)){
multi2->setRotation(-36);
multistate=1; //выкл
segment();
}
if((z.x()>316)&&(z.y()>310)&&(z.x()<336)&&(z.y()<325)){
multi2->setRotation(-18);
multistate=2; //вольт
segment();
В зависимости от места нажатия рычаг меняет свое положение и изменяется режим мультиметра. Переданные данные изменяются в зависимости от режима так, чтобы составлять 4 целых числа. Затем функция gre() изменяет состояние индикаторов, чтобы соответствовать полученному значению.
}
void multi::gre(double x, int y){
if( x==0){
segments[y][0]->show();
segments[y][1]->show();
segments[y][2]->show();
segments[y][3]->show();
segments[y][4]->show();
segments[y][5]->show();
segments[y][6]->hide();
}
if( x==1){
segments[y][0]->hide();
segments[y][1]->show();
segments[y][2]->show();
segments[y][3]->hide();
segments[y][4]->hide();
segments[y][5]->hide();
segments[y][6]->hide();
}
if( x==2){
segments[y][0]->show();
segments[y][1]->show();
segments[y][2]->show();
segments[y][3]->hide();
segments[y][4]->show();
segments[y][5]->hide();
segments[y][6]->show();
}
if( x==3){
segments[y][0]->show();
segments[y][1]->show();
segments[y][2]->show();
segments[y][3]->show();
segments[y][4]->hide();
segments[y][5]->hide();
segments[y][6]->show();
Если данные превосходят максимальный предел измерения, то мультиметр будет показывать максимальное значение.
6 Технико-экономическое обоснование
После завершения проектирования и разработки виртуальной лаборатории требуется произвести расчет затрат на его разработку.
Технический аспект работы программиста нормирован достаточно хорошо, чтобы произвести оценку. Существует множество методик оценки технической трудоемкости создания ПО. В данной работе воспользуемся методом оценки по суммарной трудоемкости видов работ, измеренных в человеко-часах, выражаемых формулой:
где T – общая трудоемкость, чел/час, ti – трудоемкость отдельной разновидности работ, чел/час.
Таблица 1 – План выполнения работ
Вид работы | Затраченное время, чел/час | Затраченное машинное время, чел/час |
Постановка задачи | 8 | – |
Ознакомление с сферой деятельности | 30 | 5 |
Выбор программных средств | 2 | – |
Разработка логики и алгоритмов | 40 | 10 |
Разработка интерфейса пользователя | 20 | 5 |
Написание программы | 150 | 150 |
Отладка | 50 | 50 |
Тестирование | 10 | 10 |
Итого | 310 | 230 |
При себестоимости человека-часа 300 руб, оплата труда по тарифу составляет 93000 руб.
Заключение
Общие слова про виртуальные лаборатории в учебном процессе (1-2 абзаца).
В ходе выполнения ВКР были решены следующие задачи:
– изучена предметная область: выяснено назначение и принцип работы измерительных приборов;
– разработана структура программы;
– в качестве используемого программного обеспечения были выбраны язык C++ и среда разработки Qt Creator;
– реализована виртуальная лаборатория для расчета цепей постоянного и переменного токов;
– определены экономические затраты.
Результатом ВКР является программный продукт, позволяющий проводить занятия по дисциплине "Электротехника" по двум темам: "Исследование цепей постоянного тока" и "Цепей цепей переменного тока при последовательном соединении активного, индуктивного и емкостного сопротивлений". Применение данной виртуальной лаборатории позволит расширить образовательные возможности студентов при выполнении лабораторных работ не находясь непосредственно в аудитории. Результаты ВКР планируются к внедрению на кафедре "Электротехника, электроника и электромеханика" ДВГУПС, о чем свидетельствует акт о внедрении.
Список использованных источников
1 Гопкало В.Н. Выпускная квалификационная работа. Общие требования и правила оформления: методическое пособие / В.Н. Гопкало, О.А. Графский – Хабаровск: Изд-во ДВГУПС, 2010. – 82 с.
2 Трухин А.В. Об использовании виртуальных лабораторий в образовании // Открытое и дистанционное образование. 2002. № 4. – С.18-27.
3 Соловов А.В. Виртуальные учебные лаборатории: некоторые направления и принципы разработки // Материалы Всероссийской научно-методической конференции "Телематика 2002". – С. 35-43
4 Qt Documentation [Электронный ресурс] / The Qt Company, 2017 – Режим доступа: http://doc.qt.io/
5 Qwt User's Guide [Электронный ресурс] / rathmann, 2017-03-25 – Режим доступа: http://qwt.sourceforge.net/
6 Программные средства быстрой разработки приложений. Учебное пособие / А.В. Савкина, А. Вл. Савкина. - Саранск: Изд-во Мордов.ун-та, 2009. № гос. регистрации 0320900751
7 Пикулин В.Д. Расчет цепей переменного тока: Составители: Агрба П.Д., Пикулин В.Д.: Учебно-методическое пособие. – Нижний Новгород: Нижегород- ский госуниверситет, 2016. – 23 с.
8 Ломоносов, В.Ю. Электротехника / В.Ю. Ломоносов, К.М. Поливанов, О.П. Михайлов. - М.: Энергоатомиздат, 1990. - 400 с.
9 Шлее М. Профессиональное программирование на C++ / Издательство: СПб.: БХВ-Петербург, 2015 - 929 с.
10 Касаткин А.С. Электротехника: Учебник. – М.: Высшая школа, 2000.
11 Лачин В.И.Электроника: Учебное пособие для студ. втузов./ Лачин В.И., Савелов Н.С. – Ростов-на-Дону: Феникс, 2002. – 315 с.
12 Останин Б.П. Руководство к компьютерным лабораторным работам по электротехнике. – Владивосток: Издательство ВГУЭС, 2002. – 54 с.
13 Bress, T. Effective LabVIEW Programming: – NTS Press, 2013. – 720 с.
14 Майо Д. Самоучитель Microsoft Visual Studio 2010 / Издательство:«БХВ-Петербург», 2010 – 464 с.
15 Рендольф Н. Visual Studio 2010 для профессионалов / Издательство: «Диалектика», 2011 – 1184 с.
16 Макки А. Введение в .NET 4.0 и Visual Studio 2010 для профессионалов / Издательство: «Вильямс», 2010 – 416 с.
17 Марк Лутц. Изучаем Python / 5-я ред. – Издательство «Символ-Плюс», 2011 – 1280 с.
18 A Byte of Python [Электронный ресурс] / Swaroop Chitlur, 2017. – Ре-жим доступа: https://python.swaroopch.com/
19 Python Documentation [Электронный ресурс] / Python Software, 2017. – Режим доступа: https://www.python.org/doc/
20
Приложение