Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОтчетВолков.doc
Скачиваний:
9
Добавлен:
13.05.2015
Размер:
354.82 Кб
Скачать

4. Структура базы данных ас

Структурная схема базы данных автоматизированной системы диагностики дефектов конструкций электронных средств с помощью акустических сигналов представлена на рисунке 4.

Рис. 4. Структурная схема базы данных

База данных автоматизированной системы реализована с помощью СУБД MicrosoftAccessи содержит четыре таблицы:

  1. Defect

В ней содержится 6 полей:

  • equipment_id– идентификационный номер электронного устройства;

  • environment_id- идентификационный номер среды;

  • defect_type_id- идентификационный номер типа дефекта;

  • average_data– усредненная матрица дефекта;

  • dx– матрица допустимых отклонений от среднего значения;

  • kol-vo– вес выборки по которым сформировалась усредненная матрица

Ключом таблицы Defectявляется составным и содержит поля идентификационных номеров типов дефектов, среды и электронных устройств.

  1. Equipment

  • equipment_id– идентификационный номер электронного устройства;

  • equipment_name– название электронного устройства;

Ключом таблицы Equipmentявляется полеequipment_id.

  1. Environment

  • environment_id- идентификационный номер среды;

  • environment_name– название среды;

Ключом таблицы Environmentявляется полеenvironment_id.

  1. Defect_type

  • defect_type_id- идентификационный номер типа дефекта;

  • defect_type_name– название типа дефекта.

Ключом таблицы Defect_typeявляется полеdefect_type_id.

Главное таблицей является таблица Defect. Она связана с остальными таблицами связью «один-ко-многим» с каскадным обновлением связанных полей и каскадным удалением связанных записей.

  1. Модуль наполнения базы дефектов

Модуль автоматизированной системы диагностики дефектов конструкций электронных средств с помощью акустических сигналов реализован в VisualStudio2008 с помощью технологииADO.NET

ADO.NET — это набор классов, предоставляющих службы доступа к данным программисту, работающему на платформе .NET Framework.ADO.NET имеет богатый набор компонентов для создания распределенных приложений, совместно использующих данные. Это неотъемлемая часть платформы .NET Framework, которая предоставляет доступ к реляционным данным, XML-данным и данным приложений. ADO.NET удовлетворяет различные потребности разработчиков, включая создание клиентских приложений баз данных, а также бизнес-объектов среднего уровня, используемых приложениями, средствами, языками и веб-обозревателями[5].

На рисунке 5 представлен компонент DataSetADO.NETиспользованный для реализации модуля наполнения базы дефектов.

Рис. 5. Компонент ADO.NET

Объект DataSetпредставляет источник данных, к которым обращается автоматизированная система, в данном случае это созданная база данных вMicrosoftAccess. DataSet состоит из объектов типа DataTable. Объекты DataTable используются для представления одной из таблиц базы данных в DataSet. В свою очередь, DataTable составляется из объектов DataColumn. DataColumn – это блок для создания схемы DataTable. Каждый объект DataColumn имеет свойство DataType, которое определяет тип данных, содержащихся в каждом объекте DataColumn. Например, можно ограничить тип данных до целых, строковых и десятичных чисел. Поскольку данные, содержащиеся в DataTable, обычно переносятся обратно в исходный источник данных, необходимо согласовывать тип данных с источником.

Коллекция Rows объекта DataTable возвращает набор строк (записей) заданной таблицы. Эта коллекция используется для изучения результатов запроса к базе данных. Мы можем обращаться к записям таблицы как к элементам простого массива.

DataSet – это специализированный объект, содержащий образ базы данных. Для осуществления взаимодействия между DataSet и собственно источником данных используется объект типа DataAdapter. Само название этого объекта – адаптер, преобразователь, – указывает на его природу. DataAdapter содержит метод Fill() для обновления данных из базы и заполнения DataSet[1]. Так же в каждом DataAdapterможно создатьsql-запрос на запись, какое-то единичное значение, добавление, обновление и удаление.

В автоматизированной системе диагностики дефектов конструкций электронных средств с помощью акустических сигналов применяются такие запросы как: вывод отдельно усредненной матрицы, матрицы допустимых отклонений, количество образцов, добавление новой записи в таблицу Defect,Defect_type,EquipmentиEnvironment, удаление записи из таблицыDefect,Defect_type,EquipmentиEnvironment.

Так же есть объекты отображения данных на подобии DataGridViewдля целых таблиц и массивов записей иComboBoxдля отдельных полей/столбцов таблицы. В автоматизированной системе диагностики дефектов конструкций электронных средств с помощью акустических сигналов используетсяComboBoxдля представления выбора параметров во вкладке «Диагностика» и «Обучение».

Для наполнения базы данных во вкладке «Обучение» рядом с каждым ComboBoxнаходиться кнопки для удаления выбранного типа дефекта/среды/устройства и добавления новых.ComboBoxтак же служат для формирования новой записи в таблицеDefect. Это происходит при нажатии кнопки «Загрузить образец» во вкладке «Обучение». После того как параметры определены иwave-файл соответствующего формата выбран, программа анализирует входной сигнал, получает из него матрицу. После этого проводится пересчет имеющейся матрицы соответствующего типа дефекта, устройства и среды с учетом полученной и размером выборки (если матрица уже есть) или создает новую запись в которую вносит выбранные параметры и полученную в ходе анализа входного сигнала матрицу.

При процедуре диагностике проводиться запрос усредненной матрицы и матрицы допустимых отклонений каждого типа дефекта указанного устройства и среды.

Листинг модуля находиться в приложении 1.

ЗАКЛЮЧЕНИЕ

За период производственной практики с 25.06.2012 по 15.07.2012 были выполнены следующие задания:

  1. изучена структура предприятия ООО «РН-Информ»;

  2. сформирован набор требований предъявляемых к входным данным АС диагностики дефектов;

  3. разработана структура базы данных АС диагностики дефектов;

  4. разработан модуль наполнения базы данных дефектов;

  5. подготовлен и оформлен отчёт.

Также были изучены основы технологии ADO.Net, с помощью которого был разработан модуль наполнения базы данных дефектов.

Автоматизированная система диагностики дефектов конструкций электронных средств с помощью акустических сигналов приобрела функцию пополнения базы данных дефектов.

Список использованных источников

  1. Евсеева О.Н., Шамшев А.Б. Работа с базами данных на языке C#. Технология АDO .NET: Учебное пособие.

  2. Поисковая система Google [Электронный ресурс]. URL: http://www.google.ru.

  3. Поисковая система Yandex [Электронный ресурс]. URL: http://www.yandex.ru.

  4. Электронная энциклопедия Wikipedia [Электронный ресурс]. URL: http://ru.wikipedia.org.

  5. Электронная библиотека MSDN [Электронный ресурс]. URL: http://msdn.microsoft.com

ПРИЛОЖЕНИЕ 1

Листинг приложения Diagnostic

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using MathWorks.MATLAB.NET.Utility;

using MathWorks.MATLAB.NET.Arrays;

using MatLab;

using System.IO;

namespace Diagnostic

{

public partial class Form1 : Form

{

string FileName = "";

Class1 matLabObj = new Class1();

MWNumericArray MW=new MWNumericArray();

public Form1()

{

InitializeComponent();

}

private const int ColumnLength = 39;

private const int RowLength = 17;

private const string ValueColumnPrefix = "Value_";

private const string MatrixDataTableName = "MatrixTable";

double[,] wave = new double[900, ColumnLength];

public DataTable CreateValueMatrix()

{

var dataTable = new DataTable(MatrixDataTableName);

for (int i = 1; i <= ColumnLength; i++)

{

var dataColumn = new DataColumn(ValueColumnPrefix + i, typeof(double)) { Caption = "Значение " + i };

dataTable.Columns.Add(dataColumn);

}

return dataTable;

}

public void FillDataTableFromArray(double[,] inputValues, DataTable dataTable)

{

for (int i = 1; i <= RowLength; i++)

{

DataRow currentRow = dataTable.NewRow();

for (int j = 1; j <= ColumnLength; j++)

{

string currentColumnName = ValueColumnPrefix + j;

currentRow[currentColumnName] = inputValues[i - 1, j - 1];

}

dataTable.Rows.Add(currentRow);

}

}

public string GetXmlMatrix(double[,] inputMatrix)

{

var newDataTable = CreateValueMatrix();

FillDataTableFromArray(inputMatrix, newDataTable);

var valuesDataSet = new DataSet("MatrixValues");

valuesDataSet.Tables.Add(newDataTable);

var stringWriter = new StringWriter();

valuesDataSet.WriteXml(stringWriter, XmlWriteMode.WriteSchema);

return stringWriter.ToString();

}

public DataTable GetDataTableFromXml(string xml)

{

var decomrpessedDataSet = new DataSet("MatrixValues");

var stringReader = new StringReader(xml);

decomrpessedDataSet.ReadXml(stringReader, XmlReadMode.ReadSchema);

return decomrpessedDataSet.Tables[MatrixDataTableName];

}

public double[,] FillArrayFormTable(DataTable DT)

{

double[,] mas = new double[RowLength, ColumnLength];

for (int i = 0; i < RowLength; i++)

for (int j = 0; j < ColumnLength; j++) mas[i, j] = (double)DT.Rows[i].ItemArray[j];

return mas;

}

public double[,] Average(double[,] ave, double[,] samp, int kol)

{

double[,] res=new double[RowLength,ColumnLength];

for (int i = 0; i < RowLength; i++)

for (int j = 0; j < ColumnLength; j++)

res[i,j] = (ave[i, j] * (kol - 1)+samp[i,j])/kol;

return res;

}

public double[,] doverInter(double[,] ave, double[,] dx, double[,] samp)

{

double[,] res = new double[RowLength, ColumnLength];

for (int i = 0; i < RowLength; i++)

for (int j = 0; j < ColumnLength; j++)

res[i,j]=Math.Max(ave[i, j] - samp[i, j], dx[i, j]);

return res;

}

private void Form1_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "defectBaseDataSet.Environment". При необходимости она может быть перемещена или удалена.

this.environmentTableAdapter.Fill(this.defectBaseDataSet.Environment);

// TODO: данная строка кода позволяет загрузить данные в таблицу "defectBaseDataSet.Defect_type". При необходимости она может быть перемещена или удалена.

this.defect_typeTableAdapter.Fill(this.defectBaseDataSet.Defect_type);

// TODO: данная строка кода позволяет загрузить данные в таблицу "defectBaseDataSet.Equipment". При необходимости она может быть перемещена или удалена.

this.equipmentTableAdapter.Fill(this.defectBaseDataSet.Equipment);

// TODO: данная строка кода позволяет загрузить данные в таблицу "defectBaseDataSet.Environment". При необходимости она может быть перемещена или удалена.

this.environmentTableAdapter.Fill(this.defectBaseDataSet.Environment);

// TODO: данная строка кода позволяет загрузить данные в таблицу "defectBaseDataSet.Defect". При необходимости она может быть перемещена или удалена.

this.defectTableAdapter.Fill(this.defectBaseDataSet.Main_Table);

}

private void LoadFile_Click(object sender, EventArgs e)

{

try

{

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&

openFileDialog1.FileName.Length > 0)

{

FileName = openFileDialog1.FileName;

Random ran = new Random();

for (int i = 0; i < 900; i++)

for (int j = 0; j < ColumnLength; j++)

wave[i, j] = ran.Next(0, 20);

listBox1.Items.Add("=================");

listBox1.Items.Add("Образец из файла:");

listBox1.Items.Add(FileName);

listBox1.Items.Add("загружен!");

GrafButton.Enabled = true;

DiagnosticButton.Enabled = true;

* }

else MessageBox.Show("Файл не загружен");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void LoadFileSemple_Click(object sender, EventArgs e)

{

try

{

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&

openFileDialog1.FileName.Length > 0)

{

FileName = openFileDialog1.FileName;

double[,] matrix = new double[RowLength, ColumnLength];

Random ran = new Random(21);

MW = (MWNumericArray)matLabObj.Diag(FileName);

for (int i = 0; i < RowLength; i++)

for (int j = 0; j < ColumnLength; j++)

matrix[i, j] = ran.Next(0, 22);

DefectBaseDataSetTableAdapters.Main_TableTableAdapter mainTA = new Diagnostic.DefectBaseDataSetTableAdapters.Main_TableTableAdapter();

try

{

DefectBaseDataSet.Main_TableDataTable mainRow = defectBaseDataSet.Main_Table as DefectBaseDataSet.Main_TableDataTable;

DataTable DT = new DataTable();

DT = GetDataTableFromXml(mainTA.ScalarQueryAve(Convert.ToInt16(equipmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(environmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(DefectTypeFilterBox.SelectedValue.ToString())).ToString());

double[,] avergeMat = FillArrayFormTable(DT);

DT = GetDataTableFromXml(mainTA.ScalarQueryDX(Convert.ToInt16(equipmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(environmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(DefectTypeFilterBox.SelectedValue.ToString())).ToString());

double[,] dxMat = FillArrayFormTable(DT);

int kol = Convert.ToInt16(mainTA.ScalarQueryKol(Convert.ToInt16(equipmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(environmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(DefectTypeFilterBox.SelectedValue.ToString())).ToString());

mainTA.UpdateQueryMainTable(GetXmlMatrix(Average(avergeMat, matrix, kol)),

GetXmlMatrix(doverInter(avergeMat, dxMat, matrix)), kol + 1,

Convert.ToInt16(equipmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(environmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(DefectTypeFilterBox.SelectedValue.ToString()));

}

catch (Exception ex)

{

mainTA.InsertQueryMainTable(Convert.ToInt16(equipmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(environmentFilterBox.SelectedValue.ToString()),

Convert.ToInt16(DefectTypeFilterBox.SelectedValue.ToString()), GetXmlMatrix(matrix), GetXmlMatrix(matrix), 1);

}

MessageBox.Show("Образец загружен.");

listBox1.Items.Add("=================");

listBox1.Items.Add("Образец из файла:");

listBox1.Items.Add(FileName);

listBox1.Items.Add("загружен!");

GrafSample.Enabled = true;

}

else MessageBox.Show("Файл не загружен");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void EquipmentAddButton_Click(object sender, EventArgs e)

{

EquipmentAddForm eAddForm=new EquipmentAddForm();

DialogResult result= eAddForm.ShowDialog();

switch (result)

{

case DialogResult.OK:

{

equipmentTableAdapter.Fill(defectBaseDataSet.Equipment);

equipmentBindingSource.ResetCurrentItem();

equipmentBindingSource1.ResetCurrentItem();

break;

}

case DialogResult.Cancel:

{

return;

}

}

}

private void EnvironmentAddButton_Click(object sender, EventArgs e)

{

EnvironmentAddForm eAddForm = new EnvironmentAddForm();

DialogResult resulr= eAddForm.ShowDialog();

switch (resulr)

{

case DialogResult.OK:

{

environmentTableAdapter.Fill(defectBaseDataSet.Environment);

environmentBindingSource.ResetCurrentItem();

environmentBindingSource1.ResetCurrentItem();

break;

}

case DialogResult.Cancel:

{

return;

}

}

}

private void DefectTypeAddButton_Click(object sender, EventArgs e)

{

DefectTypeAddForm dAdd = new DefectTypeAddForm();

DialogResult resultat = dAdd.ShowDialog();

switch (resultat)

{

case DialogResult.OK:

{

defect_typeTableAdapter.Fill(defectBaseDataSet.Defect_type);

defecttypeBindingSource.ResetCurrentItem();

break;

}

case DialogResult.Cancel:

{

return;

}

}

}

private void GrafSample_Click(object sender, EventArgs e)

{

matLabObj.Graf(FileName);

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

private void GrafButton_Click(object sender, EventArgs e)

{

matLabObj.Graf(FileName);

}

private void EquipmentDelButton_Click(object sender, EventArgs e)

{

DialogResult result = MessageBox.Show("Уверены, что хотите удалить запись?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch (result)

{

case DialogResult.Yes:

{

DataRowView rowView = equipmentBindingSource.Current as DataRowView;

if (rowView != null)

{

DefectBaseDataSet.EquipmentRow row = rowView.Row as DefectBaseDataSet.EquipmentRow;

if (row != null) row.Delete();

defectTableAdapter.Update(defectBaseDataSet.Main_Table);

equipmentTableAdapter.Update(defectBaseDataSet.Equipment);

return;

}

break;

}

case DialogResult.No:

{

return;

}

}

}

private void EnvironmentDelButton_Click(object sender, EventArgs e)

{

DialogResult result = MessageBox.Show("Уверены, что хотите удалить запись?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch (result)

{

case DialogResult.Yes:

{

DataRowView rowView = environmentBindingSource.Current as DataRowView;

if (rowView != null)

{

DefectBaseDataSet.EnvironmentRow row = rowView.Row as DefectBaseDataSet.EnvironmentRow;

if (row != null) row.Delete();

defectTableAdapter.Update(defectBaseDataSet.Main_Table);

environmentTableAdapter.Update(defectBaseDataSet.Environment);

return;

}

break;

}

case DialogResult.No:

{

return;

}

}

}

private void DefectTypeDelButton_Click(object sender, EventArgs e)

{

DialogResult result = MessageBox.Show("Уверены, что хотите удалить запись?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch (result)

{

case DialogResult.Yes:

{

DataRowView rowView = defecttypeBindingSource.Current as DataRowView;

if (rowView != null)

{

DefectBaseDataSet.Defect_typeRow row = rowView.Row as DefectBaseDataSet.Defect_typeRow;

if (row != null) row.Delete();

defectTableAdapter.Update(defectBaseDataSet.Main_Table);

defect_typeTableAdapter.Update(defectBaseDataSet.Defect_type);

defecttypeBindingSource.ResetCurrentItem();

return;

}

break;

}

case DialogResult.No:

{

return;

}

}

}

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{

AboutBox1 about = new AboutBox1();

about.Show();

}

private void DiagnosticButton_Click(object sender, EventArgs e)

{

}

}

}