Академический Документы
Профессиональный Документы
Культура Документы
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Сибирский государственный университет геосистем и технологий»
(СГУГиТ)
Институт геодезии и менеджмента
Кафедра прикладной информатики и информационных систем
КУРСОВАЯ РАБОТА
по дисциплине «Моделирование систем»
Разработка информационной системы анализа пространственно-временного
состояния структурных элементов техногенного объекта на примере
варианта №52
Обучающийся:
Фещенко Надежда Витальевна
_________________________________
Группа: БИ-22
Руководитель: Бугаков П.Ю., к.т.н.,
доцент
Зав. кафедрой: Бугакова Т. Ю.
Дата допуска к защите: 01.06.2022
Новосибирск 2022
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ГЕОСИСТЕМ И
ТЕХНОЛОГИЙ»
(СГУГиТ)
Институт геодезии и менеджмента
Кафедра прикладной информатики и информационных систем
УТВЕРЖДАЮ
Зав. кафедрой Бугакова Т.Ю.
«14» февраля 2022г.
ЗАДАНИЕ
НА КУРСОВУЮ РАБОТУ
по дисциплине Моделирование систем
Обучающемуся Фещенко Надежде Витальевне
Группа БИ-22
Тема работы (проекта): Разработка информационной системы анализа
пространственно-временного состояния структурных элементов
техногенного объекта на примере варианта №52
Руководитель: Бугаков Петр Юрьевич, к.т.н., доцент
Тема утверждена распоряжением по институту ИГиМ 12.10.2021 № Р-4
Срок сдачи выполненной работы 01.06.2022
Задание или перечень рассматриваемых вопросов:
1) РАЗРАБОТКА МОДЕЛИ ИНФОРМАЦИОННОЙ СИСТЕМЫ
НЕПРЕРЫВНО-ДИСКРЕТНОГО ПОТОКА ДАННЫХ
2) РАЗРАБОТКА ЛОГИЧЕСКОЙ СТРУКТУРЫ МОДЕЛИ
3) ТЕСТИРОВАНИЕ МОДЕЛИ МЕТОДОМ ЧЕРНОГО ЯЩИКА
Перечень графического материала с указанием основных чертежей и (или)
иллюстративного материала (формат А4) Схема расположения контрольных
точек на объекте исследования
Исходные данные к курсовой работе: Таблица геопространственных данных
контрольных точек, расположенных на объекте исследования
3
ГРАФИК
выполнения курсовой работы
Отметка о
Этапы выполнения курсовой работы (проекта) Срок выполнении этапа
исполнения работы
(дата, подпись
руководителя)
Инструктаж по ознакомлению с требованиями охраны 14.02.2022
труда, техники безопасности, пожарной безопасности,
а также правилами внутреннего трудового распорядка.
Постановка задач и целей, работа с литературой
Разработка имитационной модели непрерывно- 14.02.2022 –
дискретного потока псевдослучайных 27.02.2022
последовательности данных процедурами их
машинной генерации.
Математическое моделирование системы обработки на 28.02.2022 –
основе математических схем моделирования систем. 13.03.2022
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ......................................................................................................................
1 РАЗРАБОТКА ИМИТАЦИОННОЙ МОДЕЛИ НЕПРЕРЫВНОГО
ДИСКРЕТНОГО ПОТОКА............................................................................................
1.1 Постановка цели моделирования системы ..................................................
1.2 Описание объекта моделирования .................................................................
1.3 Концептуальная модель информационной системы ................................
1.4 Автоматизированная система мониторинга ...............................................
1.5 Математическая модель информационной системы ..............................
2 РАЗРАБОТКА ЛОГИЧЕСКОЙ СТРУКТУРЫ МОДЕЛИ СИСТЕМЫ.................
2.1 Разработка обобщенной блок схемы ...........................................................
2.2 Разработка логической блок схемы .............................................................
2.3 Разработка детальной блок-схемы ...............................................................
2.4 Разработка программной блок-схемы .........................................................
3 РАЗРАБОТКА И ТЕСТИРОВАНИЕ ПРОГРАММЫ.............................................
3.1 Программная реализация модели .................................................................
3.2 Описание интерфейса программы ................................................................
3.3 Тестирование системы методом «черного ящика» ................................
3.3.1 Имитация пространственно-временного состояния «Состояние
покоя»...............................................................................................................54
3.3.2 Имитация пространственно-временного состояния
«Поступательное равномерное движение».................................................55
3.3.3 Имитация пространственно-временного состояния «Скачок».......56
3.3.4 Имитации пространственно-временного состояния «Циклическое
движение»........................................................................................................57
3.3.5 Проверка параметров точности системы.........................................58
ЗАКЛЮЧЕНИЕ.............................................................................................................
СПИСОК ЛИТЕРАТУРЫ.............................................................................................
ПРИЛОЖЕНИЕ А (ОБЯЗАТЕЛЬНОЕ).......................................................................
Программный код..........................................................................................................
5
ВВЕДЕНИЕ
S ( t ) =S ( H 0 ( t ) , H 1 ( t ) , … , H n (t ) ) , (2)
S1= A ∙ M 0+ ( 1− A ) ∙ M 0 , (6)
Sn = A ∙
∑ Mi +( 1− A ) ∙ M (8)
i−1
n
Для точности вычисления рассматриваются верхняя и нижняя границы
вектора, которые вычисляются по формуле:
∆ H ср =
|H 0 + H 1|+|H 1 + H 2|+…+|H n−1+ H n|
1 1 1 1 1 1
(12)
n−1
i i ∆ H ср (13)
H new =H 0+ rand (± )
2
13
ЗАКЛЮЧЕНИЕ
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ А (ОБЯЗАТЕЛЬНОЕ)
Программный код
Блок 1.
private void OpenDB_Click_1(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "Базы данных (*.db;*.sqlite)|*.db;*.sqlite|Все файлы|
*.*";
if (openFile.ShowDialog() == DialogResult.OK)
{
DataForCalculate = new DataBase(openFile.FileName);
Tables_Combo.Enabled = true;
ShowDB.Enabled = true;
pictureBox1.Enabled = true;
Tables_Combo.Items.Clear();
Tables_Combo.Items.AddRange(DataForCalculate.GetTableNames());
pictureBox1.Image = DataForCalculate.GetImage();
textbox_A.Text = DataForCalculate.GetA().ToString();
textbox_A.Enabled = true;
textbox_T.Text = DataForCalculate.GetT().ToString();
textbox_T.Enabled = true;
buttonSaveTandA.Enabled = true;
}
}
65
Блок 2.
public string[] TableNames()
{
string SQLQuery = "SELECT name FROM sqlite_master WHERE
type='table' ORDER BY name;";
SQLiteCommand command = new SQLiteCommand(SQLQuery,
SQLiteConn);
SQLiteDataReader reader = command.ExecuteReader();
List<string> TNames = new List<string>();
while (reader.Read())
{
if (reader[0].ToString() != "Данные_дополнительно")
{
TNames.Add(reader[0].ToString());
}
}
return TNames.ToArray();
}
Блок 3.
private void ShowDB_Click_1(object sender, EventArgs e)
{
if (Tables_Combo.SelectedIndex != -1)
{
dataGridView1.Columns.Clear();
dataGridView1.Rows.Clear();
try
{
DataForCalculate.GetTableContent(dataGridView1,
Tables_Combo.Text);
66
AddRow.Enabled = true;
Decompose_1.Enabled = true;
Decompose_2.Enabled = true;
Decompose_4.Enabled = true;
}
catch
{
MessageBox.Show("Ошибка открытия таблицы", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
Блок 4.
public void Addrow(DataGridView dataGrid)
{
double[] newRow = new double[dataGrid.ColumnCount - 1];
Random rnd = new Random();
for (int i = 0; i < dataGrid.ColumnCount - 1; i++)
{
double min = Table[0, i], max = Table[0, i];
for (int j = 1; j < dataGrid.RowCount; j++)
{
double p = Table[j, i];
min = Math.Min(p, min);
max = Math.Max(p, max);
}
newRow[i] = Math.Round(min + rnd.NextDouble() * (max - min), 4);
}
67
double summ = 0;
for (int j = 0; j < ColCount; j++)
{
summ = summ + Math.Pow(Table[i, j] + T, 2);
}
m.Add(Math.Sqrt(summ));
}
return m;
}
Блок 5.2
private List<double> AlphCalcFunc(double[,] Table, int RowsCount, int
ColCount, double T)
{
List<double> alph = new List<double>();
alph.Add(0);
for (int i = 1; i < RowsCount; i++)
{
double summ = 0;
for (int j = 0; j < ColCount; j++)
{
summ = summ + ((Table[0, j] + T ) * (Table[i, j] + T));
}
double acosVal = summ / (M[0] * M[i]);
if (acosVal <= 1 && acosVal >= -1)
{
double acosResult = Math.Acos(acosVal);
alph.Add(Math.Round(acosResult, 6) * (3600 * 180) / Math.PI);
}
else
{
69
alph.Add(0);
}
}
return alph;
}
Блок 5.3
private List<double> PrognozCalc(List<double> Znacheniya, double A)
{
List<double> PrognozList = new List<double>();
PrognozList.Add(A * Znacheniya[0] + (1 - A) * Znacheniya.Average());
for (int i = 1; i<Znacheniya.Count; i++)
{
PrognozList.Add(A * Znacheniya[i] + (1 - A) * PrognozList[i-1]);
}
PrognozList.Add(A * PrognozList.Average() + (1 - A) *
PrognozList.Last());
return PrognozList;
}
Блок 5.4
public void DataGrid1_Fill (DataGridView gridView)
{
gridView.Rows.Clear();
gridView.Columns.Clear();
gridView.Columns.Add("Эпоха", "Эпоха");
gridView.Columns.Add("M", "M");
gridView.Columns.Add("M прогноз", "M прогноз");
gridView.Columns.Add("Угол Альфа", "Угол Альфа");
gridView.Columns.Add("Угол Альфа прогноз", "Угол Альфа прогноз");
for (int i=0; i<M.M.Count; i++)
{
70
gridView.Rows.Add(i,
Math.Round(M.M[i], 4),
Math.Round(M.MProg[i], 4),
Math.Round(M.Alph[i], 4),
Math.Round(M.AlphProg[i], 4)
);
}
gridView.Rows.Add("Прогноз", "мяу", Math.Round(M.MProg.Last(), 4),
"мяу", Math.Round(M.AlphProg.Last(), 4));
}
Блок 5.5
public void DataGrid2_Fill(DataGridView gridView)
{
gridView.Rows.Clear();
gridView.Columns.Clear();
gridView.Columns.Add("Эпоха", "Эпоха");
gridView.Columns.Add("M-", "M-");
gridView.Columns.Add("M", "M");
gridView.Columns.Add("M+", "M+");
gridView.Columns.Add("R", "R");
gridView.Columns.Add("L", "L");
gridView.Columns.Add("Состояние объедка", "Состояние объедка");
double R, L;
string avar;
Color rowColor;
for (int i = 0; i < M.M.Count; i++)
{
R = (MPlus.M[i] - MMinus.M[i]) / 2;
L = Math.Abs(M.M[0] - M.M[i]);
if (R > L)
71
{
avar = "Не аварийное";
rowColor = Color.Green;
}
else if (R == L)
{
avar = "Предаварийное";
rowColor = Color.Yellow;
}
else
{
avar = "Аварийное";
rowColor = Color.Red;
}
gridView.Rows.Add(i,
Math.Round(MMinus.M[i], 4),
Math.Round(M.M[i], 4),
Math.Round(MPlus.M[i], 4),
Math.Round(R, 4),
Math.Round(L, 4),
avar
);
gridView.Rows[gridView.Rows.Count - 1].DefaultCellStyle.BackColor
= rowColor;
}
R = (MPlus.MProg.Last() - MMinus.MProg.Last()) / 2;
L = Math.Abs(M.M[0] - M.MProg.Last());
if (R > L)
{
avar = "Не аварийное";
72
rowColor = Color.Green;
}
else if (R == L)
{
avar = "Предаварийное";
rowColor = Color.Yellow;
}
else
{
avar = "Аварийное";
rowColor = Color.Red;
}
gridView.Rows.Add("Прогноз",
Math.Round(MMinus.MProg.Last(), 4),
Math.Round(M.MProg.Last(), 4),
Math.Round(MPlus.MProg.Last(), 4),
Math.Round(R, 4),
Math.Round(L, 4),
avar
);
gridView.Rows[gridView.Rows.Count - 1].DefaultCellStyle.BackColor =
rowColor;
}
Блок 5.6
public void GraphicOtklick(Chart chart1)
{
chart1.Series.Clear();
chart1.Series.Add("M");
chart1.Series.Add("M-");
chart1.Series.Add("M+");
73
chart1.Series.Add("M прогноз");
chart1.Series.Add("M- прогноз");
chart1.Series.Add("M+ прогноз");
for (int i = 0; i < chart1.Series.Count; i++)
{
chart1.Series[i].ChartType = SeriesChartType.Spline;
chart1.Series[i].BorderWidth = 2;
chart1.Series[i].Label = "#INDEX";
chart1.Series[i].MarkerStyle = MarkerStyle.Circle;
chart1.Series[i].MarkerSize = 7;
}
chart1.ChartAreas[0].RecalculateAxesScale();
}
Блок 5.7
public void GraphicPhase(Chart chart1)
{
chart1.Series.Clear();
chart1.Series.Add("M");
chart1.Series.Add("M-");
chart1.Series.Add("M+");
chart1.Series.Add("M прогноз");
for (int i = 0; i < chart1.Series.Count; i++)
{
chart1.Series[i].ChartType = SeriesChartType.Spline;
chart1.Series[i].BorderWidth = 2;
chart1.Series[i].Label = "#INDEX";
chart1.Series[i].MarkerStyle = MarkerStyle.Circle;
chart1.Series[i].MarkerSize = 7;
}
for (int i = 0; i < M.M.Count; i++)
{
chart1.Series["M"].Points.AddXY(i, M.M[i]);
chart1.Series["M-"].Points.AddXY(i, MMinus.M[i]);
chart1.Series["M+"].Points.AddXY(i, MPlus.M[i]);
chart1.Series["M прогноз"].Points.AddXY(i, M.MProg[i]);
}
chart1.Series["M прогноз"].Points.AddXY(M.M.Count, M.MProg.Last());
chart1.ChartAreas[0].RecalculateAxesScale();
}
Блок 6.1
private void BlockNumButton_Click(object sender, EventArgs e)
75
{
kolBlocks = Convert.ToInt32(BlockNumeric.Value);
BlockCombo.Items.Clear();
BlockDataCombo.Items.Clear();
pointStorage = new List<int>[kolBlocks];
for (int i = 0; i < kolBlocks; i++)
{
BlockCombo.Items.Add("Блок " + Convert.ToChar(65 + i));
BlockDataCombo.Items.Add("Блок " + Convert.ToChar(65 + i));
pointStorage[i] = new List<int>();
}
BlockCombo.SelectedIndex = -1;
BlockCombo.SelectedIndex = 0;
listBox1.Items.Clear();
listBox2.Items.Clear();
for (int i = 0; i < DataForCalculate.ColCount; i++)
{
listBox1.Items.Add(i + 1);
}
BlockCombo.Enabled = true;
listBox1.Enabled = true;
listBox2.Enabled = true;
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
}
76
Блок 6.2
private void BlockCombo_SelectedIndexChanged(object sender, EventArgs e)
{
selectedBlock = BlockCombo.SelectedIndex;
listBox2.Items.Clear();
if (BlockCombo.SelectedIndex != -1)
{
for (int i = 0; i < pointStorage[selectedBlock].Count; i++)
{
listBox2.Items.Add(pointStorage[selectedBlock][i]);
}
}
}
Блок 6.3
private void button2_Click(object sender, EventArgs e)
{
if (pointStorage[0].Count == 0)
{
MessageBox.Show("Распределите в каждый блок хотябы одну
точку", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
for (int i = 1; i < kolBlocks; i++)
{
if (pointStorage[i].Count != pointStorage[0].Count)
{
MessageBox.Show("Распределите равное количество точек!",
"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
77
}
calculatedData = new Decompose_1[kolBlocks];
for (int i = 0; i < kolBlocks; i++)
{
double[,] tableBlocks = new double[DataForCalculate.RowCount,
pointStorage[i].Count];
for (int j = 0; j < DataForCalculate.RowCount; j++)
{
for (int k = 0; k < pointStorage[i].Count; k++)
{
tableBlocks[j, k] = DataForCalculate.Table[j, pointStorage[i][k] -
1];
}
}
calculatedData[i] = new Decompose_1(tableBlocks,
DataForCalculate.RowCount, pointStorage[i].Count, DataForCalculate.GetT(),
DataForCalculate.GetA());
}
BlockDataCombo.Enabled = true;
FillGraphic();
}
Блок 6.4
private void FillGraphic()
{
chart3.Series.Clear();
for (int i = 0; i < kolBlocks; i++)
{
chart3.Series.Add("Блок " + Convert.ToChar(i + 65));
chart3.Series[i].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
78
chart3.Series[i].Label = "#INDEX";
chart3.Series[i].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
chart3.Series[i].MarkerSize = 7;
chart3.Series[i].BorderWidth = 2;
chart3.ChartAreas[0].RecalculateAxesScale();
for (int j = 0; j < calculatedData[i].M.M.Count; j++)
{
chart3.Series[i].Points.AddXY(j, calculatedData[i].M.M[j]);
}
}
}
Блок 7.1
private void Form4_Load(object sender, EventArgs e)
{
checkedListBox1.Items.Clear();
chart1.Series.Clear();
for (int i = 0; i < dataBase.ColCount; i++)
{
checkedListBox1.Items.Add($"Точка {i + 1}", false);
chart1.Series.Add($"Точка {i + 1}");
chart1.Series[i].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
chart1.Series[i].Label = "#INDEX";
chart1.Series[i].BorderWidth = 2;
chart1.Series[i].MarkerStyle =
System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
chart1.Series[i].MarkerSize = 7;
for (int j = 0; j < dataBase.RowCount; j++)
{
79