1) Считать файлы справочника ДС (REF) и конфигурации агрегата (CFG).
) Найти в CFG блок описателей неисправностей ДС. По содержанию этого блока (CFG) и справочнику ДС (REF) сформировать матрицу диагностических состояний Mds.
3) Матрица Mds должна иметь число строк, равное числу ДС, описанных в CFG и число столбцов, равное числу диагностических параметров (94), которые могут быть использованы при описании диагностических состояний.
) Сформировать в матрице Mds очередную строку для очередного диагностического состояния (из CFG). То есть, найти в REF строку описания ДС по имени и наличие параметров отметить в строке Mds. Изначально матрица Mds заполнена «-1».
Этот алгоритм реализует функция MakeDsMatr().
void MakeDsMatr()
{(int i=0;i< DSs.Length;i++)(int j = 1; j<mDiag.Count; j++)
{[] bf = (string[]) mDiag[j];(DSs[i] == bf[0]) //если Названия дефектов равны
{(int k = 1; k < bf.Length; k++)
{kk =FindDp(bf[k]);(kk != -1)
{[i, kk] = VecDP[kk];
}
}
}
}
}
Далее, для получения результатов нужно передать матрицу Mds функции public double[,] getDiagnos(double[,] dsMatr, int nDP, int nDS), которая и выдает конечную матрицу с диагнозом. Матрица состоит из nDS (число диагностических состояний) строк и двух столбцов. Первый столбец - сила дефекта, второй - его вероятность. Исходный код функции getDiagnos() представлен в приложении А.3.
Результаты диагностирования выводятся в виде таблицы диагноза на вкладке «Результаты диагностики». Также, на этой вкладке выводится рассчитанное с помощью функции public int SetDay() рекомендуемое количество дней до следующего осмотра.
int day;
//Расчет дней до следующей диагностикиint SetDay()
{max = Int32.MinValue;(int i = 0; i < DSs.Length; i++)
{(diagn[i, 0] > max)= diagn[i, 0];
}(max > 4)= 4;= 0.25 - ((max-1)/12);= max * (TBtwRepair / 24);(max > 100)= 100.0;(int)max;
}
Кроме того, на вкладку «Графики» выводится обширный иллюстративный материал:
1) графики сигналов виброперемещения;
) графики спектров виброперемещения и виброускорения;
3) графики функции плотности распределения вероятности в сравнении с нормальным распределением.
Функция вывода спектров перемещения сигналов
приведена в приложении А.4.
5.3.6 Сохранение результатов диагностики
При нажатии на кнопку «Шаг 5: Сохранение результатов» можно сохранить результаты диагностики ЦБН в текстовый файл в кодировке UTF-8.
Формат файла таков. В первой строке через табуляцию находятся название агрегата, дата измерения и количество дней до следующей диагностики. Начиная со второй строки, находятся строки таблицы результатов диагностики, содержащие название дефекта, силу дефекта, его вероятность и значения переменных, позволивших диагностировать данный дефект. Получившийся файл можно увидеть на рисунке 5.3.
Рисунок 5.3 - Файл с результатами диагностики
5.4 Интерфейс программы
Интерфейс программы представляет собой GUI-форму,
разбитую на 4 вкладки и панель с управляющими кнопками внизу (см. рисунок 5.4).
Рисунок 5.4 - Внешний вид главного окна
программы
Для обеспечения отказоустойчивости программы и уверенности в наличии всех необходимых для расчета данных: сигналы, конфигурация агрегата, справочник диагностических состояний - реализовано последовательное нажатие управляющих кнопок. При успешном завершении операции по нажатию на кнопку «Шаг N» доступ к кнопке «Шаг N» закрывается, но открывается доступ к кнопке «Шаг N+1». Исходный код главной формы программы приведен в приложении А.5.
При начальном запуске программы пользователю доступны кнопки «Шаг 1: Загрузка сигналов», «Новый расчет» и «Выход» и открыта вкладка «Уставки».
На вкладке «Уставки» пользователю доступны для редактирования некоторые уставки диагностических параметров, находящиеся в компоненте ListBox в левой части окна, и некоторые характеристики агрегата, которые заказчик захотел менять вручную, - они находятся в верхней части окна (см. рисунок 5.4).
Щелкнув правой кнопке мыши на ListBoxe,
пользователь может вызвать окно редактирования уставки, что показано на рисунке
5.5.
Рисунок 5.5 - Редактирование уставок
При неправильном вводе числового значения
пользователю выдается ошибка, диагностируемая с помощью try{}…catch{}.
try
{= Convert.ToDouble(textBox1.Text);
}
catch
{
dan = -1;
}
Для осуществления диагностики агрегата нужно
убедиться, что получены все необходимые данные из файлов. Поначалу доступна
кнопка «Шаг 1: Загрузка сигналов». При ее нажатии открывается окно выбора файла
(см. рисунок 5.6).
Рисунок 5.6 - Выбор файла с сигналами
Если загрузка прошла с ошибкой, пользователю
выдается сообщение, изображенное на рисунке 5.7.
Рисунок 5.7 - Ошибка и успех загрузки файла
сигналов
Если ошибки не было - данные успешно загружаются, пользователю выдается сообщение об успешной загрузке, закрывается доступ к кнопке «Шаг 1: Загрузка сигналов», но открывается доступ к кнопке
«Шаг 2: Загрузка конфигурации» (см. рисунок
5.8).
Рисунок 5.8 - Вид кнопок после загрузки сигналов
Поведение программы при нажатии на кнопки
«Шаг 2: Загрузка Конфигурации» и «Шаг 3:
Загрузка справочника ДС» ничем не отличается от поведения при нажатии на кнопку
«Шаг 1: Загрузка конфигурации» - меняется лишь формат сообщений об ошибке и
успехе загрузке соответствующего файла (см. рисунок 5.9).
Рисунок 5.9 - Сообщения при загрузке файла
конфигурации агрегата и справочника диагностических состояний
Когда загружены все данные, открывается доступ к кнопке
«Шаг 4: Диагностика» (см. рисунок 5.10)
Рисунок 5.10 - Вид управляющих кнопок после
успешной загрузки всех данных
При нажатии на эту кнопку происходит вывод информации на остальные три вкладки, а вкладка «Уставки» блокируется, так как на данном этапе изменение уставок уже не повлияет на расчет.
На вкладку «Матрица диагностических параметров»
выводится информация о значениях диагностических переменных для каждой опоры
(см. рисунок 5.11).
Рисунок 5.11 - Вид матрицы диагностических
параметров
Для каждого диагностического параметра выводится
информация о собственно значении переменной, о значении уставки - значении
переменной при полной исправности агрегата, об отношении значения переменной к
уставке и о частоте на которой проявляется эта переменная. При этом переменная,
имеющая отношение к уставке меньше 1, не выделяется цветом; имеющая отношение
от 1 до 2 и, следовательно, небольшой дефект - выделяется зеленым цветом;
имеющая отношения от 2 до 4, т.е. дефект средней тяжести - выделяется желтым
цветом. А серьезный дефект, при отношении значения переменной к уставке больше
4, - выделяется красным цветом (см. рисунок 5.12).
Рисунок 5.12 - Три вида окраски переменных
Вкладка «Результаты диагностики» изображена на рисунке 5.13.
В верхней левой части отображается информация о названии агрегата, дате измерения и количестве дней до следующей диагностики.
В средней части находится сама таблица с результатами. В первом столбце отображается название дефекта, загруженное из справочника диагностических состояний. Во втором - сила дефекта. Сила дефекта может варьироваться от 0 до 5. В третьем столбце находится вероятность дефекта. При вероятности дефекта больше 60% уже требуется ремонт агрегата. В четвертом столбце показаны переменные и их рассчитанные значения, на основании которых был поставлен диагноз.
Рисунок 5.13 - Вкладка «Результаты диагностики»
Чуть ниже таблицы с результатами находится компонент StatusBar, в который выведено состояние сигнала. При получении сигнала могут возникнуть следующие проблемы:
1) нет сигнала с датчика;
2) произошло смещение нуля;
3) обрыв линии;
4) датчик плохо закреплен на оборудовании.
Все эти неисправности выявляются программно и в случае их наличия выводятся текстом на красном фоне в данный StatusBar. Если сигнал с опоры достоверный - выводится «Есть сигнал» на зеленом фоне.
На вкладке «Графики» можно посмотреть на
различные графики, которые многое могут сказать понимающему специалисту. Среди
этих графиков: график сигналов (см. рисунок 5.14), график спектров
виброперемещения (см. рисунок 5.15), график спектров виброускорения (см.
рисунок 5.16), график сравнения с нормальным распределением (см. рисунок 5.17).
Графики выбираются с помощью компонента ComboBox,
находящегося в центре. В случае если сигнала с какой-то опоры не было - график
этой опоры скрывается.
Рисунок 5.14 - График сигналов
Рисунок 5.15 - Спектры виброперемещения
Рисунок 5.16 -Спектры виброускорения
Рисунок 5.17 - Сравнение с нормальным
распределением
После проведения диагностики можно сохранить результаты в текстовый файл, нажав на кнопку «Шаг 5: Сохранение результатов».
Нажатие на кнопку «Новый расчет» приведет
программу в начальное состояние. Можно будет заново загрузить файлы,
редактировать уставки и получить новые результаты.
5.5 Тестирование программы
Отказоустойчивость программы реализована через
«защитное программирование» - использование связки try{}..catch{}
на этапе получения данных из визуальных компонентов формы и загрузки информации
из файлов, а также с помощью последовательного получения доступа к следующей
управляющей кнопке только после успешного завершения выполнения операций,
последовавших после нажатия предыдущей кнопки.
private void nButtonExcel_Click(object sender, EventArgs e)
{
{.FileName = "";.ShowDialog();(ofd.FileName != "") //если файл найден
{(dan.LoadFromExcell(ofd.FileName) == false)
//если данные корректно загружены
{dlg = new NTaskDialog();.PredefinedButtons = TaskDialogButtons.Ok;.Title = "Ошибка!";.Content.Text = "Неправильный формат файла";
dlg.PreferredWidth = 360;.Show();
}
{ NTaskDialog dlg = new NTaskDialog();.PredefinedButtons = TaskDialogButtons.Ok;.Title = "Триггер 2В";
dlg.Content.Text = "Данные успешно загружены!";
dlg.Content.Image = NSystemImages.Information;.Content.ImageSize = new NSize(32, 32);.PreferredWidth = 360;
dlg.Show();
//Получение доступа к следующей кнопке.
nButtonConfig.Enabled = true;.Enabled = false;
}
}
}
{dlg = new NTaskDialog();.PredefinedButtons = TaskDialogButtons.Ok;.Title = "Ошибка!";.Content.Text = "Неправильный формат файла";
dlg.Content.Image = NSystemImages.Error;.PreferredWidth = 360;
dlg.Show();
}
}
Правильность результатов, выдаваемых промежуточными функциями, проверялась с помощью тестовых примеров, предоставленных заказчиком. Программный продукт после завершения был предоставлен заказчику и успешно прошел его испытания, о чем получен акт о внедрении в ЗАО «ПромСервис» (см. приложение Б).
Выводы по разделу 5
В этом разделе был рассмотрен процесс разработки
программы «Триггер 2В». Среди прочего были рассмотрены структура классов,
алгоритмы расчета диагностических параметров, интерфейс программы и приведен
исходный код некоторых важные функции. Фрагменты исходного кода программы можно
увидеть в приложении А к данной записке.
6. Экономический раздел
.1 Оценка затрат на разработку продукта
вибродиагностика нагнетатель газоперекачивающий
В состав затрат на разработку и реализацию проекта включается стоимость всех расходов, необходимых для реализации комплекса работ, составляющих содержание данной разработки. Основными источниками затрат при работе над данной задачей, являющейся частью этапа проектирования жизненного цикла общей информационной системы, становятся капитальные предпроизводственные затраты, которые, могут быть учтены и минимизированы. Определим основные статьи затрат:
Затраты на расходные материалы:
1) Вспомогательная литература - 1 шт. - 600 рублей;
) Компакт-диски CD-RW - комплект 5 шт. - 175 рублей;
3) Канцтовары - 600 рублей.
Итого - 1350 рублей.
Основная заработная плата разработчиков программного продукта за месяц:
1) Программист 1 категории - месячный оклад - 4600 рублей.
Итого - 4600 рублей в месяц.
Дополнительная месячная заработная плата разработчиков программного продукта составляет двадцать процентов от основной заработной платы: 0,2 * 4600 = 920 рублей.
Месячный фонд заработной платы представляет собой сумму основной и дополнительной заработной платы: 4600 + 920 = 5520 руб.
Отчисления на социальные нужды составляют двадцать шесть процентов от фонда оплаты труда: 0,26 * 5520 = 1435,2 рублей.
Прочие расходы включают расходы на машинное время (порядка двух месяцев на разработку, отладку и тестирование программного продукта 400 часов стоимостью 30 рублей в час): 400 * 30 = 12000 рублей.
Срок разработки - 2 месяца. Суммарная смета затрат составит: 27260,4 рублей, в том числе:
1) Расходные материалы - 1350 рублей.
) Основная заработная плата разработчиков за 2 месяца - 9200 рублей.
3) Дополнительная заработная плата разработчиков за 2 месяца - 1840 рублей.
) Отчисления на социальное страхование за 2 месяца - 2870,4 рублей.
) Прочие расходы - 12000 рублей.
Итого - 27260,4 рублей.
До внедрения каждый месяц 1 пользователь с зарплатой 8000 рублей в месяц 80% рабочего времени выполнял данную работу. Ее годовая себестоимость в таком случае равна 12 * 1 * 8000 * 0,8 = 76 800 рублей.
После внедрения тот же пользователь смог выполнять ту же работу только 40% рабочего времени. Ее годовая себестоимость стала равной
* 1 * 8000 * 0,4 = 38 400 рублей.
6.2 Оценка экономической
эффективности разработки
Расчет годового экономического эффекта (Э) в
случае экономии при выполнении одной и той же работы производится по формуле
6.1:
Э=[(С1-С2)-Е*К], (6.1)
где С1, С2 - себестоимость работ, выполняемых по базовому и новому вариантам, руб.;
Е - нормативный коэффициент экономической эффективности (Е=0,33);
К - капитальные вложения на проектирование и внедрение проектируемой системы, руб.
Э = (76800 - 38400) - 0,33*1350 = 37954,5
Расчетный коэффициент экономической
эффективности (Е) показывает величину экономии на эксплуатационных затратах,
образующихся за счет внедрения новой системы, на один рубль единовременных
капитальных вложений и рассчитывается по формуле 6.2:
Е = Э / К (6.2)
Е = 37954,5/1350 = 28,12
Так как Е>0,33, то проектирование и внедрение проектируемой системы эффективно.
Расчетный условный срок окупаемости капитальных
вложений (Ток) определяется как величина, обратная расчетному коэффициенту
экономической эффективности (см. формулу 6.3):
Ток = К / Э (6.3)
Ток = 1350/37954,5 = 0,004.
Тк - нормальный срок окупаемости, Тк = 3 года;
Тк > Ток - условие выполняется.
Выводы по разделу 6
В экономической части дипломной работы произведен расчет стоимости разработки программы, которая составила 27260,4 руб. и рассчитан годовой эффект от внедрения разработанной программы на предприятие, который составил 37954,5 руб.