Программное обеспечение для вибродиагностики технологического оборудования
Анализ деятельности ЗАО "ПромСервис". Технология перекачки газа, характеристика используемого оборудования. Разработка программы "Триггер 2В" для вибродиагностики состояния центробежных нагнетателей газоперекачивающих агрегатов на компрессорных станциях.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 27.04.2014 |
Размер файла | 4,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Микроклимат производственных помещений - это климат внутренней среды этих помещений, который определяется действующими на организм человека сочетаниями температуры, влажности и скорости движения воздуха [20].
В производственных помещениях, в которых работа на ВДТ и ПЭВМ является вспомогательной, температура, относительная влажность и скорость движения воздуха на рабочих местах должна соответствовать действующим нормам микроклимата производственных помещений, приведённым в таблице 7.2.
При пониженной влажности воздуха в помещениях с ВДТ и ПЭВМ следует применить увлажнители воздуха, заправляемые ежедневно дистиллированной или прокипяченной питьевой водой.
Для создания и автоматического поддержания в лаборатории независимо от наружных условий оптимальных значений температуры, влажности, чистоты и скорости движения воздуха, в холодное время года используется водяное отопление, в теплое время года применяется кондиционирование воздуха.
Таблица 7.2 - Параметры микроклимата для помещений с ПЭВМ
Параметр |
Нормируемый показатель |
Нормативный Документ |
|
Температура воздуха в холодный период года |
22-24С |
СанПиН 2.2.4.548-96 |
|
Температура воздуха в теплый период года |
23-25С |
||
Относительная влажность |
40-60% |
||
Скорость воздуха |
0.1-0.2 м/с |
Шум звукового диапазона приводит к снижению внимания и увеличению ошибок при выполнении различных видов работ. Шум замедляет реакцию человека на поступающие от технических устройств сигналы. Шум угнетает центральную нервную систему, вызывает изменения скорости дыхания и пульса, способствует нарушению обмена веществ, возникновению сердечно-сосудистых заболеваний, язвы желудка, гипертонической болезни. При воздействии шума высоких уровней (более 140 дБ) возможен разрыв барабанных перепонок, контузия, а при ещё более высоких (более 160 дБ) и смерть [21].
Согласно СанПиН 2.2.2/2.4.1340-03, уровень звука на частоте 1000 Гц должен составлять не более 45 дБ.
Для снижения уровня шума стены и потолок помещений с ПЭВМ могут быть облицованы звукопоглощающими материалами. Шумящее оборудование (принтеры, сканеры и т.д.), уровни шума которого превышают нормативные, должно размещаться вне помещений с ПЭВМ.
Важным фактором, сильно влияющим на здоровье и работоспособность программиста, является уровень электромагнитного излучения от ПЭВМ. Электромагнитным излучением называется излучение, прямо или косвенно вызывающее ионизацию среды. Контакт с электромагнитными излучениями представляет серьезную опасность для человека.
Спектр излучения компьютерного монитора включает в себя рентгеновскую, ультрафиолетовую и инфракрасную области, а также широкий диапазон электромагнитных волн других частот. В ряде экспериментов было обнаружено, что электромагнитные поля с частотой 60 Гц (возникающие вокруг линий электропередач, видеодисплеев и даже внутренней электропроводки) могут инициировать биологические сдвиги (вплоть до нарушения синтеза ДНК) в клетках животных. В отличие от рентгеновских лучей электромагнитные волны обладают необычным свойством: опасность их воздействия совсем не обязательно уменьшается при снижении интенсивности облучения, определенные электромагнитные поля действуют на клетки лишь при малых интенсивностях излучения или на конкретных частотах - в «окнах прозрачности». Источник высокого напряжения компьютера - строчный трансформатор - помещается в задней или боковой части терминала, уровень излучения со стороны задней панели дисплея выше, причем стенки корпуса не экранируют излучения. Поэтому пользователь должен находиться не ближе чем на 1.2 м от задних или боковых поверхностей соседних терминалов.
При защите от внешнего излучения основные усилия должны быть направлены на предупреждение переоблучения персонала путем увеличения расстояния между оператором и источником, сокращение продолжительности работы в поле излучения, экранирование источника излучения [22].
Систематическое воздействие на организм человека электростатического поля повышенной напряженности может вызвать функциональные изменения центральной нервной, сердечно-сосудистой, нейрогуморальной и других систем организма. Это вызывает необходимость гигиенического нормирования предельно допустимой интенсивности электростатического поля на рабочих местах согласно указанным данным.
В таблице 7.3 представлены допустимые значения параметров электромагнитных излучений от монитора компьютера регламентируемые СанПиН 2.2.2/2.4.1340-03.
Таблица 7.3 - Допустимые параметры электромагнитных излучений ПЭВМ
Наименование параметров |
Значение |
||
Напряженность электрического поля |
в диапазоне частот 5 Гц - 2 кГц |
25 В/м |
|
в диапазоне частот 2 кГц - 400 кГц |
2,5 В/м |
||
Плотность магнитного потока |
в диапазоне частот 5 Гц - 2 кГц |
250 нТл |
|
в диапазоне частот 2 кГц - 400 кГц |
25 нТл |
||
Поверхностный электростатический потенциал экрана видеомонитора |
500 В |
7.2 Обеспечение нормируемой освещенности
Освещение поверхности с помощью источников света носит название искусственного. При освещении промышленных зданий используется общее и комбинированное освещение. Общее освещение предназначено для освещения всего помещения, поэтому светильники общего освещения располагаются под потолком помещения или на достаточно большом расстоянии от рабочих мест [17].
При расчете общего освещения для горизонтальной рабочей поверхности с учетом света, окрашенного потолком и стенами, применим метод коэффициента светового потока.
Основное уравнение метода (см. формулу 7.1):
Fл = (Еn * S * z * Кз) / n * u (7.1)
где Fл - световой поток каждой из ламп;
Еn - минимальная нормируемая освещенность, лк;
Кз - коэффициент запаса, учитывающий старение ламп, запыленность и загрязнение светильников (Кз = 1,1-1,3);
S - площадь помещения, кв. м;
z - поправочный коэффициент светильников (z =1,1-1,3);
n - число светильников;
u - коэффициент использования светового потока ламп, т. е. отношение светового потока падающего на расчетную поверхность к суммарному потоку всех ламп (u=0,55-0,6).
Подсчитав по формуле световой поток, выбирается ближайшая стандартная лампа, обеспечивающая этот поток. В практике допускается отклонение светового потока выбранной лампы от расчетного в пределах от -10% до +20%, в противном случае задается другая схема расположения светильников. На рисунке 7.2 изображен внешний вид программы расчета искусственного общего освещения рабочего места программиста, а в приложении В представлен ее исходный код.
Рисунок 7.2 - Внешний вид программы расчета искусственного общего освещения
Выводы по разделу 7
При соблюдении всех приведенных в данном разделе гигиенических требований режим работы на персональной ЭВМ составляет не более пяти -шести часов для взрослого человека. При этом через каждые двадцать- тридцать минут необходимо делать перерыв на пять-десять минут для снятия зрительного утомления, во время которого желательно проделать комплекс физических упражнений, улучшающих функциональное состояние центральной нервной и дыхательной систем, мозгового кровообращения, ликвидирующих застойные явления нижней половины тела, ног, плечевого пояса. Два раза в год необходим контроль зрения [22].
В приложении В находится исходный код программы расчета искусственного освещения рабочего места программиста.
Заключение
В результате проделанной работы была разработана и предоставлена заказчику ЗАО «ПромСервис» программа «Триггер 2В», предназначенная для диагностики центробежных нагнетателей газоперекачивающих агрегатов компрессорных станций, о чем свидетельствует акт о внедрении (см. приложение Б). Была написана статья «Вибродиагностика технологического оборудования» (см. приложение Г). В настоящее время подана заявка на регистрацию разработанного программного продукта.
В ходе дипломного проектирования была рассмотрена и реализована методика диагностирования, предложенная заказчиком - ЗАО «ПромСервис». Произведенный обзор аналогичных разработок показал, что существующие на рынке программы и приборы не принимают в расчет всю конструкцию и характеристики ЦБН, а рассматривают общий класс оборудования роторного типа. Проведенный расчет экономической эффективности доказал целесообразность внедрения программы.
Таким образом, полученный программный продукт:
1) полностью реализует все поставленные задачи и отвечает всем функциональным требованиям заказчика;
2) уменьшает экономические издержки, связанные с выходом из строя и остановкой работы газоперекачивающего оборудования, путем своевременной диагностики состояния его узлов в штатном режиме работы;
3) может расширить функциональность штатных систем вибромониторинга без существенного изменения аппаратной части.
В дальнейшем предложенная методика диагностирования может быть доработана для диагностирования газотурбинных двигателей, а существующая программа диагностики портирована на операционную систему Linux.
Список использованных источников
1. Балицкий, Ф. Я. Виброакустическая диагностика зарождающихся дефектов [Текст] / Ф. Я. Балицкий, М. А. Иванова, А. Г. Соколова. - М.: Наука, 1984. - 120 с.
2. Ширман, А. Е. Практическая вибродиагностика и мониторинг состояния механического оборудования [Текст] / А. Е. Ширман, А. М. Соловьев. - М.: Наука и образование, 1996. - 256 с.
3. Материалы сайта www.wikipedia.org.
4. Абдурашитов, С. А. Насосы и компрессоры [Текст] / С. А Абдурашитов. - М.: Недра, 1974. - 524 с.
5. Михайлов, А. К. Компрессорные машины [Текст] / А. К. Михайлов, В. П. Ворошилов. - М.: Энергоатомиздат, 1989. - 288 с.
6. Воронецкий, А. В. Современные центробежные компрессоры [Текст] / А. В. Воронецкий. - М.: Премиум Инжиниринг, 2007. - 140 с.
7. Кудашов, Э. Р. Разработка прогрессивных методов оценки технического состояния газоперекачивающих агрегатов [Текст] / Э. Р. Кудашов. - Тюмень: Автореферат, 2005. - 24 с.
8. Материалы сайта www.vibration.ru.
9. Материалы сайта www.vibrocenter.ru.
10. Материалы сайта www.dynamics.ru.
11. Лабор, В. Си Шарп: Создание приложений для Windows [Текст] / В. Лабор. - Минск: Харвест, 2003. - 396 с.
12. Троелсон, Э. C# и платформа.Net [Текст] / Э. Троелсон. - СПб.: Питер, 2007. - 654с.
13. Русов, В. О. Спектральная вибродиагностика [Текст] / В. О. Русов. - СПб.: Виброцентр, 1996. - 128 с.
14. Грушин, В. А. Вибродиагностика технического состояния машинного оборудования методом обеляющего фильтра [Текст] / В. А. Грушин. - Нижний Новгород: Автореферат, 2006. - 24 с.
15. Белов, Н. А. Безопасность жизнедеятельности [Текст] / Н. А. Белов. - М.: Знание, 2002. - 364 с.
16. Руководство Р 2.2.2006-05. Гигиеническая оценка факторов рабочей среды и трудового процесса [Текст].
17. Самгин, Э. Б. Освещение рабочих мест [Текст] / Э. Б. Самгин. - М.: МИРЭА, 1989. - 186с.
18. Чиркова, Л. М. Безопасность жизнедеятельности. Часть 2: МУ к выполнению лабораторных работ [Текст] / Л. М. Чиркова, Т. А. Кузнецова. - Димитровград: ДИТУД УлГТУ, 2008. - 24с.
19. СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы [Текст].
20. СанПиН 2.2.4.548-96. Гигиенические требования к микроклимату производственных помещений [Текст].
21. Дубовцев, В. А. Безопасность жизнедеятельности [Текст] / В. А. Дубовцев. - Киров: КирПИ, 1992. - 67 с.
22. Мотузко, Ф. Я. Охрана труда [Текст] / Ф. Я. Мотузко. - М.: Высшая школа, 1989. - 336с.
Приложение А
Фрагменты исходного кода программы «Триггер 2B»
А.1 Исходный код функций загрузки данных из Excel
public void SetParameters(double sMax1,
double OP, double YP,
double fl1, double fl2, double fl3,
double fna, double fz, double fred
)
{
sMax = sMax1 / 4;
U1.setParam(0, OP);
U1.setParam(1, YP);
U1.setParam(2, fl1);
U1.setParam(3, fl2);
U1.setParam(4, fl3);
U1.setParam(5, fna);
U1.setParam(6, fz);
U1.setParam(7, fred);
double Sum = (1 / 0.4) + (1 / 0.5) + (1 / 0.6) + (1 / 1.5) + (1 / 2.0) + (1 /
2.5) + (1 / 3.0) + (1 / 4.0) + (1 / 5.0) + (1 / 6.0) + (1 / 7.0) + (1 / 8.0)
+ (1 / 9.0) + (1 / 10.0);
St.Clear();
string[] tempMas = { "Smax", "0.4", "0.5", "0.6", "1", "1.5", "2", "2.5",
"3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22",
"23", "24", "25", "26", "27", "28", "29", "30"};
for (int i = 0; i < 36; i++)
{
St.Columns.Add(tempMas[i]);
}
object[] tempInt = new object[36];
tempInt[0] = sMax;
tempInt[1] = sMax / 2.0 / Sum / 0.4;
tempInt[2] = sMax / 2.0 / Sum / 0.5;
tempInt[3] = sMax / 2.0 / Sum / 0.6;
tempInt[4] = sMax / 2.0;
tempInt[5] = sMax / 2.0 / Sum / 1.5;
tempInt[6] = sMax / 2.0 / Sum / 2.0;
tempInt[7] = sMax / 2.0 / Sum / 2.5;
tempInt[8] = sMax / 2.0 / Sum / 3;
tempInt[9] = sMax / 2.0 / Sum / 4;
tempInt[10] = sMax / 2.0 / Sum / 5;
tempInt[11] = sMax / 2.0 / Sum / 6;
tempInt[12] = sMax / 2.0 / Sum / 7;
tempInt[13] = sMax / 2.0 / Sum / 8;
tempInt[14] = sMax / 2.0 / Sum / 9;
tempInt[15] = sMax / 2.0 / Sum / 10;
tempInt[16] = 0; tempInt[17] = 0; tempInt[18] = 0;
tempInt[19] = 0; tempInt[20] = 0; tempInt[21] = 0;
tempInt[22] = 0; tempInt[23] = 0; tempInt[24] = 0;
tempInt[25] = 0; tempInt[26] = 0; tempInt[27] = 0;
tempInt[28] = 0; tempInt[29] = 0; tempInt[30] = 0;
tempInt[31] = 0; tempInt[32] = 0; tempInt[33] = 0;
tempInt[34] = 0; tempInt[35] = 0;
St.Rows.Add(tempInt);
object[] tempInt2 = new object[36];
//tempInt2[0] = "U_A(nfo)";
tempInt2[0] = 0;
tempInt2[1] = (Math.Pow(2 * Math.PI * 0.4 * 87.522, 2) * (double)tempInt [1])
/ 1000000;
tempInt2[2] = (Math.Pow(2 * Math.PI * 0.5 * 87.522, 2) * (double)tempInt [2])
/ 1000000;
tempInt2[3] = (Math.Pow(2 * Math.PI * 0.6 * 87.522, 2) * (double)tempInt [3])
/ 1000000;
tempInt2[4] = (Math.Pow(2 * Math.PI * 1 * 87.522, 2) * (double)tempInt [4])
/ 1000000;
tempInt2[5] = (Math.Pow(2 * Math.PI * 1.5 * 87.522, 2) * (double)tempInt [5])
/ 1000000;
tempInt2[6] = (Math.Pow(2 * Math.PI * 2 * 87.522, 2) * (double)tempInt [6])
/ 1000000;
tempInt2[7] = (Math.Pow(2 * Math.PI * 2.5 * 87.522, 2) * (double)tempInt [7])
/ 1000000;
tempInt2[8] = (Math.Pow(2 * Math.PI * 3 * 87.522, 2) * (double)tempInt [8])
/ 1000000;
tempInt2[9] = (Math.Pow(2 * Math.PI * 4 * 87.522, 2) * (double)tempInt [9])
/ 1000000;
tempInt2[10] = (Math.Pow(2 * Math.PI * 5 * 87.522, 2) * (double)tempInt [10])
/ 1000000;
tempInt2[11] = (Math.Pow(2 * Math.PI * 6 * 87.522, 2) * (double)tempInt [11])
/ 1000000;
tempInt2[12] = (Math.Pow(2 * Math.PI * 7.4 * 87.522, 2) * }
(double)tempInt[12]) / 1000000;
tempInt2[13] = (Math.Pow(2 * Math.PI * 8 * 87.522, 2) * (double)tempInt [13])
/ 1000000;
tempInt2[14] = 15;
tempInt2[15] = 15;
tempInt2[16] = 15; tempInt2[17] = 15; tempInt2[18] = 15;
tempInt2[19] = 15; tempInt2[20] = 15; tempInt2[21] = 15;
tempInt2[22] = 15; tempInt2[23] = 15; tempInt2[24] = 15;
tempInt2[25] = 15; tempInt2[26] = 15; tempInt2[27] = 15;
tempInt2[28] = 15; tempInt2[29] = 15; tempInt2[30] = 15;
tempInt2[31] = 15; tempInt2[32] = 15; tempInt2[33] = 15;
tempInt2[34] = 15; tempInt2[35] = 15;
St.Rows.Add(tempInt2);
}
public bool LoadFromExcel(string fileName)
{
Excel.Application excelapp;
Excel.Window excelWindow; //Окно
Excel.Workbooks excelappworkbooks; // Рабочие книги
Excel.Workbook excelappworkbook; // рабочая книга
Excel.Sheets excelsheets; //Листы
Excel.Worksheet excelworksheet; //Лист
Excel.Range excelcells; //Ячейка
excelapp = new Excel.Application();
excelapp.Visible = false;
try
{
excelappworkbooks = excelapp.Workbooks;
//Открываем книгу и получаем на нее ссылку
excelappworkbook = excelapp.Workbooks.Open(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
excelsheets = excelappworkbook.Worksheets;
//Получаем ссылку на лист 1
excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
//считываем Название
excelcells = excelworksheet.get_Range("F3", Type.Missing);
U_NAME = Convert.ToString(excelcells.Value2);
//считываем дату
excelcells = excelworksheet.get_Range("J3", Type.Missing);
DiagDate = Convert.ToString(excelcells.Value2);
excelcells = excelworksheet.get_Range("A4", Type.Missing);
CountInMas = Convert.ToInt32(excelcells.Value2);
excelcells = excelworksheet.get_Range("K4", Type.Missing);
CountInMasTehParametr = Convert.ToInt32(excelcells.Value2);
excelcells = excelworksheet.get_Range("I3", Type.Missing); //kodZ
kodZ = Convert.ToInt32(excelcells.Value2);
if (kodZ != 1) //ЗО верт SI_ZOV
{
SI_ZOV = new Massiv();
SI_ZOV.Add(new Queue((Array)excelworksheet.get_Range("A6", "A" + (6 +CountInMas - 1).ToString()).Cells.Value2));
}
else
{
SI_ZOV = new Massiv();
SI_ZOV.Add(new Queue((Array)new double[CountInMas]));
}
if (kodZ != 2) //ЗО гориз
{
SI_ZOH = new Massiv();
SI_ZOH.Add(new Queue((Array)excelworksheet.get_Range("B6", "B" + (6 +CountInMas - 1).ToString()).Cells.Value2));
}
else
{
SI_ZOH = new Massiv();
SI_ZOH.Add(new Queue((Array)new double[CountInMas]));
}
if (kodZ != 4) //ЗО осев
{
SI_ZOA = new Massiv();
SI_ZOA.Add(new Queue((Array)excelworksheet.get_Range("C6", "C" + (6 +CountInMas - 1).ToString()).Cells.Value2));
}
else
{
SI_ZOA = new Massiv();
SI_ZOA.Add(new Queue((Array)new double[CountInMas]));
}
if (kodZ != 8) //ПО верт
{
SI_POV = new Massiv();
SI_POV.Add(new Queue((Array)excelworksheet.get_Range("G6", "G" + (6 +CountInMas - 1).ToString()).Cells.Value2));
}
else
{
SI_POV = new Massiv();
SI_POV.Add(new Queue((Array)new double[CountInMas]));
}
if (kodZ != 16) //ПО гориз
{
SI_POH = new Massiv();
SI_POH.Add(new Queue((Array)excelworksheet.get_Range("H6", "H" + (6 +CountInMas - 1).ToString()).Cells.Value2));
}
else
{
SI_POH = new Massiv();
SI_POH.Add(new Queue((Array)new double[CountInMas]));
}
X_MSEK = new Massiv();
X_MSEK.Add(new Queue((Array)excelworksheet.get_Range("E6", "E" + (6 +CountInMas - 1).ToString()).Cells.Value2));
TP = new MassivTP();
TP.Add(new Queue((Array)excelworksheet.get_Range("K6", "K" + (6 +
CountInMasTehParametr - 1).ToString()).Cells.Value2));
U_TP = new MassivTP();
U_TP.Set_UTP();
UDIV_TP = new MassivTP();
UDIV_TP.makeDiv(TP, U_TP);
U1 = new MassivYstavok();
SI_ZOV.Set_StatistikParameter();
SI_ZOH.Set_StatistikParameter();
SI_ZOA.Set_StatistikParameter();
SI_POV.Set_StatistikParameter();
SI_POH.Set_StatistikParameter();
excelapp.Quit();
return true;
}
catch
{
excelapp.Quit();
return false;
}
}
}
}
А.2 Исходный код функций для расчета параметра R(Fo)
using System;
using System.Collections.Generic;
using System.Text;
namespace d2
{
public partial class Dannie
{
//R(Fo)
private double RfoZOV;
private double RfoZOH;
private double RfoZOA;
private double RfoPOV;
private double RfoPOH;
private double[,] AmpRfo(double koef, int a, Massiv freq, Massiv Azov)
{
int n = ((int)Math.Pow(2.0, koef + 1)) + 1;
if (((int)(koef / 0.5))% 2 == 1) n = n + 1;
double[,] res = new double[n, 2];
for (int i = (int) (a - 2*koef); i <= (int) (a + 2*koef); i++)
{
res[i - (int)(a - 2*koef), 0] = freq[i];
res[i - (int)(a - 2*koef), 1] = Azov[i];
}
return res;
}
private double max_AmpRfo(double[,] temp, int n, double U, ref double fRo)
{
double max = temp[0, 1];
fRo = temp[0, 0];
for (int i = 1; i < n; i++)
{
if (temp[i, 1] > max)
{
max = temp[i, 1];
fRo = temp[i, 0];
}
}
if (max < U) max = 0;
return max;
}
private double[,] AmpRfo_Sred(int a, int b, Massiv freq, Massiv Azov)
{
int n = b - a + 1;
double[,] res = new double[n, 2];
for (int i = a; i <= b; i++)
{
res[i - a, 0] = freq[i];
res[i - a, 1] = Azov[i];
}
return res;
}
private double SrAr(double[,] mas, int n)
{
double sum = 0;
for (int i = 0; i < n; i++)
{
sum += mas[i,1];
}
return sum/n;
}
public void set_R_Fo()
{
int n;
int koef;
int a, b;
double U;
// R(Fo)
koef = 1;
a = (int)Math.Truncate(Fo / freq[1]);
double[,] Rfo_ZOV = AmpRfo(koef,a, freq, AZOV);
double[,] Rfo_ZOH = AmpRfo(koef, a, freq, AZOH);
double[,] Rfo_ZOA = AmpRfo(koef, a, freq, AZOA);
double[,] Rfo_POV = AmpRfo(koef, a, freq, APOV);
double[,] Rfo_POH = AmpRfo(koef, a, freq, APOH);
n = ((int)Math.Pow(2.0, koef + 1)) + 1;
U = U1.Koef * U1.U_Rfo;
double x=0;
double Amp1max = max_AmpRfo(Rfo_ZOV, n, U, ref x);
double Amp2max = max_AmpRfo(Rfo_ZOH, n, U, ref x);
double Amp3max = max_AmpRfo(Rfo_ZOA, n, U, ref x);
double Amp4max = max_AmpRfo(Rfo_POV, n, U, ref x);
double Amp5max = max_AmpRfo(Rfo_POH, n, U, ref x);
a = (int)Math.Truncate(koef*Fo / freq[1]) -(int)Math.Truncate((Fo/2) / freq[1]) + 4;
b = (int)Math.Truncate(koef*Fo / freq[1])+ int)Math.Truncate((Fo /2) / freq[1]) - 4;
n = b - a + 1;
double[,] Rfo_ZOVSred = AmpRfo_Sred(a, b, freq, AZOV);
double[,] Rfo_ZOHSred = AmpRfo_Sred(a, b, freq, AZOH);
double[,] Rfo_ZOASred = AmpRfo_Sred(a, b, freq, AZOA);
double[,] Rfo_POVSred = AmpRfo_Sred(a, b, freq, APOV);
double[,] Rfo_POHSred = AmpRfo_Sred(a, b, freq, APOH);
double Amp1maxSred = SrAr(Rfo_ZOVSred, n);
double Amp2maxSred = SrAr(Rfo_ZOHSred, n);
double Amp3maxSred = SrAr(Rfo_ZOASred, n);
double Amp4maxSred = SrAr(Rfo_POVSred, n);
double Amp5maxSred = SrAr(Rfo_POHSred, n);
RfoZOV = Amp1max / Amp1maxSred;
RfoZOH = Amp2max / Amp2maxSred;
RfoZOA = Amp3max / Amp3maxSred;
RfoPOV = Amp4max / Amp4maxSred;
RfoPOH = Amp5max / Amp5maxSred;
}
}
}
А.3 Исходный код функции постановки диагноза
//Расчет диагноза
public double[,] getDiagnos(double[,] dsMatr, int nDP, int nDS)
{
int kw = 0;
double[] wDP = new double[nDP];
double[] wDS = new double[nDS];
double[,] matDS = new double[nDS, nDP];
double[] forceDS = new double[nDS];
double[] possibDS = new double[nDS];
for (int i = 0; i < nDS; i++)
{
forceDS[i] = 0;
possibDS[i] = 0;
for (int j = 0; j < nDP; j++)
{
matDS[i, j] = dsMatr[i, j];
}
}
//1
for (int j = 0; j < nDP; j++)
{
kw = 0;
for (int i = 0; i < nDS; i++)
{
if (dsMatr[i, j] >= 0)
{
kw++;
}
}
if (kw > 0)
{
kw++;
wDP[j] = 100 / kw; // счеи весов ДП
}
}
//2
for (int i = 0; i < nDS; i++)
{
wDS[i] = 0.0;
for (int j = 0; j < nDP; j++)
{
if (dsMatr[i, j] >= 0)
{
wDS[i] += wDP[j];// счет весов ДC
}
}
}
//3
for (int i = 0; i < nDS; i++)
{
double weightDS = wDS[i];
if (weightDS > 0.0)
{
for (int j = 0; j < nDP; j++)
{
if (dsMatr[i, j] >= 0)
{
dsMatr[i,j] = (wDP[j]/weightDS)*100; //нормирование весов ДП
}
}
}
}
double numDef=0;
double sumDef=0;
for (int i = 0; i < nDS; i++)
{
forceDS[i] = 0;
possibDS[i] = 0;
sumDef = 0;
numDef = 0;
for (int j = 0; j < nDP; j++)
{
if (dsMatr[i,j]>=0.0)
{
sumDef += matDS[i, j];
numDef++;
if (matDS[i, j] > 1.0)
{
possibDS[i] = dsMatr[i, j];
}
}
}
if (numDef > 0)
{
forceDS[i] = sumDef / numDef;
}
}
double[,] res = new double[ nDS,2];
for (int i = 0; i < nDS; i++)
{
res[i, 0] = forceDS[i];
res[i, 1] = possibDS[i];
}
return res;
}
А.4 Исходный код функции вывода спектра виброперемещения
public void PrintSpektr(int num, Nevron.Chart.WinForm.NChartControl Nchart)
{
Nchart.Charts[0].Series.Clear();
NCartesianChart chart = (NCartesianChart)Nchart.Charts[0];
// setup a bar series
NBarSeries bar = (NBarSeries)chart.Series.Add(SeriesType.Bar);
bar.Name = "Bar Series";
bar.BorderStyle.Width = new NLength(0, NGraphicsUnit.Pixel);
bar.HasBottomEdge = false;
//ось у -настройка
NStandardScaleConfigurator scaleConfiguratorY =
(NStandardScaleConfigurator)chart.Axis(StandardAxis.PrimaryY).ScaleConfigurator;
// add interlaced stripe
NScaleStripStyle stripStyle = new NScaleStripStyle(new NColorFillStyle(Color.Beige),
null, true, 0, 0, 1, 1);
stripStyle.SetShowAtWall(ChartWallType.Back, true);
stripStyle.SetShowAtWall(ChartWallType.Left, true);
stripStyle.Interlaced = true;
scaleConfiguratorY.StripStyles.Add(stripStyle);
scaleConfiguratorY.Title.Text = "S, мкм";
//ось Х - настройка
NStandardScaleConfigurator scaleConfiguratorX =
(NStandardScaleConfigurator)chart.Axis(StandardAxis.PrimaryX).ScaleConfigurator;
scaleConfiguratorX.Title.Text = "Частота, Гц";
bar.UseXValues = true;
//настройка графика
Nchart.Legends.Clear();
bar.MarkerStyle.Visible = false;
bar.Values.Clear();
bar.XValues.Clear();
bar.DataLabelStyle.Visible = false;
bar.BorderStyle.Color = Color.Red;
bar.FillStyle = new NColorFillStyle(Color.Red);
//Ввод параметров
NLabel header = Nchart.Labels.AddHeader("Сигнал передней опоры (Вертикальный)");
Nchart.Labels.Clear();
double ind = 0.1;
switch (num)
{
case 0: //si_POV
header = Nchart.Labels.AddHeader("Спектр перемещения, ПО, Верт.");
for (int i = 0; i < freq.Count; i++)
{
bar.Values.Add(APOV[i]+ind);
bar.XValues.Add(freq[i]);
}
break;
case 1: //si_zOV
header = Nchart.Labels.AddHeader("Спектр перемещения, ЗО, Верт.");
for (int i = 0; i < freq.Count; i++)
{
bar.Values.Add(AZOV[i]+ind);
bar.XValues.Add(freq[i]);
}
break;
case 2: //si_POh
header = Nchart.Labels.AddHeader("Спектр перемещения, ПО, Гор.");
for (int i = 0; i < freq.Count; i++)
{
bar.Values.Add(APOH[i]+ind);
bar.XValues.Add(freq[i]);
}
break;
case 3: //si_zOh
header = Nchart.Labels.AddHeader("Спектр перемещения, ЗО, Гор.");
for (int i = 0; i < freq.Count; i++)
{
bar.Values.Add(AZOH[i]+ind);
bar.XValues.Add(freq[i]);
}
break;
case 4: //si_zOa
header = Nchart.Labels.AddHeader("Спектр перемещения, ЗО, Ос.");
for (int i = 0; i < freq.Count; i++)
{
bar.Values.Add(AZOA[i]+ind);
bar.XValues.Add(freq[i]);
}
break;
}
//Настройка заголовка
header.TextStyle.FontStyle = new Nevron.GraphicsCore.NFontStyle("Times New Roman",
10, FontStyle.Regular);
header.ContentAlignment = ContentAlignment.BottomRight;
header.Location = new NPointL(new NLength(2, NRelativeUnit.ParentPercentage), new
NLength(2, NRelativeUnit.ParentPercentage));
//Перерисовка
Nchart.Refresh();
}
}
А.5 Исходный код главной формы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Nevron.UI.WinForm;
using Nevron.UI.WinForm.Controls;
using Nevron.GraphicsCore;
namespace d2
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
bool bGraphPrint = false;
public Dannie dan = new Dannie();
private void button1_Click(object sender, EventArgs e)
{
dan.setListBox(nListYstavki);
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
EditForm f = new EditForm();
f.getDannie(nListYstavki.SelectedItems[0].SubItems[0].Text,
nListYstavki.SelectedItems[0].SubItems[1].Text);
f.ShowDialog();
double d = f.setDannie();
if (d!=-1)
{
nListYstavki.SelectedItems[0].SubItems[1].Text = d.ToString();
dan.SetUstavki(nListYstavki.Items.IndexOf
(nListYstavki.SelectedItems[0]), d);
}
nListYstavki.Refresh();
}
private void MainForm_Load(object sender, EventArgs e)
{
dan.setListBox(nListYstavki);
}
private void nButtonExcel_Click(object sender, EventArgs e)
{
try
{
ofd.FileName = "";
ofd.ShowDialog();
if (ofd.FileName != "") //если файл найден
{
if (dan.LoadFromExcell(ofd.FileName) == false)
//если данные корректно загружены
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат файла";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
else
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Триггер 2В";
dlg.Content.Text = "Данные успешно загружены!";
dlg.Content.Image = NSystemImages.Information;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
nButtonConfig.Enabled = true;
nButtonExcel.Enabled = false;
}
}
}
catch
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат файла";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
}
private void nButtonConfig_Click(object sender, EventArgs e)
{
try
{
ofdTxt.FileName = "";
ofdTxt.Title = "Открыть файл кофигурации:";
ofdTxt.ShowDialog();
if (ofd.FileName != "") //если файл найден
{
if (dan.SetConfigFlle(ofdTxt.FileName) == false)
//если данные корректно загружены
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат файла
конфигурации!";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
else
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Триггер 2В";
dlg.Content.Text = "Конфигурация успешно загружена!";
dlg.Content.Image = NSystemImages.Information;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
nButtonConfig.Enabled = false;
nButtonDiag.Enabled = true;
}
}
}
catch
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат файла конфигурации!";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
}
private void nButtonDiag_Click(object sender, EventArgs e)
{
try
{
ofdTxt.FileName = "";
ofdTxt.Title = "Открыть справочник диагностических состояний:";
ofdTxt.ShowDialog();
if (ofd.FileName != "") //если файл найден
{
if (dan.SetDiagnFlle(ofdTxt.FileName) == false)
//если данные корректно загружены
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат Cправочника
состояний!";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
else
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Триггер 2В";
dlg.Content.Text = "Справочник диагностических состояний
успешно загружен!";
dlg.Content.Image = NSystemImages.Information;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
nButtonDiag.Enabled = false;
nButtonGetDiag.Enabled = true;
}
}
}
catch
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Неправильный формат Cправочника состояний!";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
}
private void nButtonGetDiag_Click(object sender, EventArgs e)
{
try
{
dan.SetParameters(Convert.ToDouble(tSmax.Text),
Convert.ToDouble(tOP.Text),
Convert.ToDouble(tYP.Text),
Convert.ToDouble(tfl1.Text),
Convert.ToDouble(tfl2.Text),
Convert.ToDouble(tfl3.Text),
Convert.ToDouble(tfna.Text),
Convert.ToDouble(tfz.Text),
Convert.ToDouble(tfred.Text)
);
dan.SetYskorenie();
dan.SetSpektrYskoreniya();
dan.set_fo();
dan.set_Sp();
dan.setS_f0();
dan.set_S_0_4_Fo();
dan.set_S_0_6_Fo();
dan.set_S_0_5_1_5_3_0_Fo();
dan.set_S_Gg();
dan.set_A_Fo();
dan.set_A_Fsh();
dan.set_R_Fo();
dan.set_R_2Fo();
dan.set_R_3Fo();
dan.set_R_4Fo();
dan.set_R_5Fo();
dan.set_R_6Fo();
dan.set_R_7Fo();
dan.set_R_8Fo();
dan.set_R_1_5_Fo();
dan.set_R_2_5_Fo();
dan.set_R_0_4_Fo();
dan.set_R_0_6_Fo();
dan.set_R_0_5_Fo();
dan.set_R_Fo_Gg();
dan.set_Ra_Fo();
dan.set_Ra_2Fo();
dan.set_Ra_3Fo();
dan.set_Ra_4Fo();
dan.set_Ra_5Fo();
dan.set_Ra_6Fo();
dan.set_Ra_7Fo();
dan.set_Ra_8Fo();
dan.set_Ra_fl1();
dan.set_Ra_fl2();
dan.set_Ra_fl3();
dan.set_Ra_fna();
dan.set_Ra_fz();
dan.set_Rafz_mod_2();
dan.set_Ra_fred();
dan.set_Ra_2fred();
dan.set_Ra_3fred();
dan.set_Ra_fz_minus_2Fo();
dan.set_fz_minus_Fo();
dan.set_Ra_fz_plus_Fo();
dan.set_Ra_fz_plus_2Fo();
dan.set_Ra_fz_minus_2fred();
dan.set_Ra_fz_minus_fred();
dan.set_Ra_fz_plus_fred();
dan.set_Ra_fz_plus_2fred();
dan.Set_M_Fo();
dan.Set_M_0_5_Fo();
dan.Set_Ma_Fo();
dan.Set_Ma_Fz_fred();
dan.Set_Ma_Fred();
dan.Set_2A_Fo();
dan.Set_3A_Fo();
dan.Set_4A_Fo();
dan.Set_5A_Fo();
dan.Set_6A_Fo();
dan.Set_7A_Fo();
dan.Set_8A_Fo();
dan.Set_11A_Fo();
dan.Set_12A_Fo();
dan.Set_14A_Fo();
dan.Set_15A_Fo();
dan.Set_26A_Fo();
dan.Set_27A_Fo();
dan.Set_29A_Fo();
dan.Set_30A_Fo();
dan.Set_17A_Fo();
dan.Set_18A_Fo();
dan.Set_20A_Fo();
dan.Set_21A_Fo();
dan.Set_EXCA_Fo();
dan.Set_EXCA_2Fo();
dan.Set_EXCA_5Fo();
dan.Set_EXCA_6Fo();
dan.Set_EXCA_04Fo();
dan.Set_EXCA_05Fo();
dan.Set_EXCA_06Fo();
dan.Set_EXCA_13Fo();
dan.Set_EXCA_28Fo();
dan.Set_EXCA_19Fo();
dan.set_Matrica(Matrix);
dan.setStatusSignal(nStatusBar1);
dan.SetNormRasp();
dan.SetVectorDP();
dan.FormDiag();
dan.PrintDiagMatr(ResDiag,label1Nazv,labelData, labelDay);
//интерфейсная часть
nComboGraph.SelectedIndex = 0;
tabYstavki.Enabled = false;
bGraphPrint = true;
nComboGraph.Visible = true;
if (dan.kodZ != 8) //ПО верт
GraphSI_POV.Visible = true;
else
GraphSI_POV.Visible = false;
if (dan.kodZ != 16) //ПО верт
GraphSI_POH.Visible = true;
else
GraphSI_POH.Visible = false;
if (dan.kodZ != 1) //ПО верт
GraphSI_ZOV.Visible = true;
else
GraphSI_ZOV.Visible = false;
if (dan.kodZ != 4) //ПО верт
GraphSI_ZOA.Visible = true;
else
GraphSI_ZOA.Visible = false;
if (dan.kodZ != 2) //ПО верт
GraphSI_ZOH.Visible = true;
else
GraphSI_ZOH.Visible = false;
if (dan.kodZ != 8) //ПО верт
dan.PrintGrafik(0, GraphSI_POV);
else
GraphSI_POV.Clear();
if (dan.kodZ != 1) //ЗО верт SI_ZOV
dan.PrintGrafik(1, GraphSI_ZOV);
else
GraphSI_ZOV.Clear();
if (dan.kodZ != 16) //ПО гориз
dan.PrintGrafik(2, GraphSI_POH);
else
GraphSI_POH.Clear();
if (dan.kodZ != 2) //ЗО гориз SI_ZOH
dan.PrintGrafik(3, GraphSI_ZOH);
else
GraphSI_ZOH.Clear();
if (dan.kodZ != 4) //ЗО осев
dan.PrintGrafik(4, GraphSI_ZOA);
else
GraphSI_ZOA.Clear();
nButtonGetDiag.Enabled = false;
nButtonSave.Enabled = true;
tabDiagnos.Focus();
}
catch
{
NTaskDialog dlg = new NTaskDialog();
dlg.PredefinedButtons = TaskDialogButtons.Ok;
dlg.Title = "Ошибка!";
dlg.Content.Text = "Ошибка в расчетах!";
dlg.Content.Image = NSystemImages.Error;
dlg.Content.ImageSize = new NSize(32, 32);
dlg.PreferredWidth = 360;
dlg.Show();
}
}
private void nButtonClear_Click(object sender, EventArgs e)
{
dan = new Dannie();
dan.setListBox(nListYstavki);
nButtonDiag.Enabled = false;
nButtonConfig.Enabled = false;
nButtonGetDiag.Enabled = false;
nButtonExcel.Enabled = true;
tabYstavki.Enabled = true;
nButtonSave.Enabled = false;
bGraphPrint = false;
GraphSI_POH.Visible = false;
GraphSI_POV.Visible = false;
GraphSI_ZOH.Visible = false;
GraphSI_ZOA.Visible = false;
GraphSI_ZOV.Visible = false;
nComboGraph.Visible = false;
Matrix.ClearAllNodes();
Matrix.Columns.Clear();
ResDiag.ClearAllNodes();
ResDiag.Columns.Clear();
nStatusBar1.Panels.Clear();
label1Nazv.Text = "Название";
labelData.Text = "Дата";
labelDay.Text = "0";
}
private void nButtonQuit_Click_1(object sender, EventArgs e)
{
Close();
}
private void nComboGraph_SelectedIndexChanged(object sender, EventArgs e)
{
if (bGraphPrint == true)
{
switch (nComboGraph.SelectedIndex)
{
case 0://signal
if (dan.kodZ != 8) //ПО верт
dan.PrintGrafik(0, GraphSI_POV);
else
GraphSI_POV.Clear();
if (dan.kodZ != 1) //ЗО верт SI_ZOV
dan.PrintGrafik(1, GraphSI_ZOV);
else
GraphSI_ZOV.Clear();
if (dan.kodZ != 16) //ПО гориз
dan.PrintGrafik(2, GraphSI_POH);
else
GraphSI_POH.Clear();
if (dan.kodZ != 2) //ЗО гориз SI_ZOH
dan.PrintGrafik(3, GraphSI_ZOH);
else
GraphSI_ZOH.Clear();
if (dan.kodZ != 4) //ЗО осев
dan.PrintGrafik(4, GraphSI_ZOA);
else
GraphSI_ZOA.Clear();
break;
case 1://spektr
if (dan.kodZ != 8) //ПО верт
dan.PrintSpektr(0, GraphSI_POV);
else
GraphSI_POV.Clear();
if (dan.kodZ != 1) //ЗО верт SI_ZOV
dan.PrintSpektr(1, GraphSI_ZOV);
else
GraphSI_ZOV.Clear();
if (dan.kodZ != 16) //ПО гориз
dan.PrintSpektr(2, GraphSI_POH);
else
GraphSI_POH.Clear();
if (dan.kodZ != 2) //ЗО гориз SI_ZOH
dan.PrintSpektr(3, GraphSI_ZOH);
else
GraphSI_ZOH.Clear();
if (dan.kodZ != 4) //ЗО осев
dan.PrintSpektr(4, GraphSI_ZOA);
else
GraphSI_ZOA.Clear();
break;
case 2://yskorenie
if (dan.kodZ != 8) //ПО верт
dan.PrintSpektrYskoreniya(0, GraphSI_POV);
else
GraphSI_POV.Clear();
if (dan.kodZ != 1) //ЗО верт SI_ZOV
dan.PrintSpektrYskoreniya(1, GraphSI_ZOV);
else
GraphSI_ZOV.Clear();
if (dan.kodZ != 16) //ПО гориз
dan.PrintSpektrYskoreniya(2, GraphSI_POH);
else
GraphSI_POH.Clear();
if (dan.kodZ != 2) //ЗО гориз SI_ZOH
dan.PrintSpektrYskoreniya(3, GraphSI_ZOH);
else
GraphSI_ZOH.Clear();
if (dan.kodZ != 4) //ЗО осев
dan.PrintSpektrYskoreniya(4, GraphSI_ZOA);
else
GraphSI_ZOA.Clear();
break;
case 3://norm
if (dan.kodZ != 8) //ПО верт
dan.PrintNormRasp(0, GraphSI_POV);
else
GraphSI_POV.Clear();
if (dan.kodZ != 1) //ЗО верт SI_ZOV
dan.PrintNormRasp(1, GraphSI_ZOV);
else
GraphSI_ZOV.Clear();
if (dan.kodZ != 16) //ПО гориз
dan.PrintNormRasp(2, GraphSI_POH);
else
GraphSI_POH.Clear();
if (dan.kodZ != 2) //ЗО гориз SI_ZOH
dan.PrintNormRasp(3, GraphSI_ZOH);
else
GraphSI_ZOH.Clear();
if (dan.kodZ != 4) //ЗО осев
dan.PrintNormRasp(4, GraphSI_ZOA);
else
GraphSI_ZOA.Clear();
break;
}
}
}
private void nButtonSave_Click(object sender, EventArgs e)
{
DialogResult dlg = new DialogResult();
saveFileDial.FileName = dan.SaveFileName;
dlg = saveFileDial.ShowDialog();
if (dlg == DialogResult.OK)
{
dan.SaveFile(saveFileDial.FileName);
}
}
private void MainForm_Resize(object sender, EventArgs e)
{
int B = nTabControl1.Width;
int A = nTabControl1.Height;
int k = (int)(0.0203 * A);
int d = (int)(0.0065 * B);
int W = (int)(0.325 * B);
int H = (int)(0.447 * A);
GraphSI_ZOV.Size = new Size(W, H);
GraphSI_ZOA.Size = new Size(W, H);
GraphSI_ZOA.Location = new Point(W + d, 0);
GraphSI_ZOH.Size = new Size(W, H);
GraphSI_ZOH.Location = new Point((W + d) * 2, 0);
GraphSI_POV.Size = new Size(W, H);
GraphSI_POV.Location = new Point(0, H + k);
nComboGraph.Width = W;
nComboGraph.Location = new Point(W + d, H + k);
GraphSI_POH.Size = new Size(W, H);
GraphSI_POH.Location = new Point(2 * (W + d), H + k);
}
}
}
Приложение Б
Акт о внедрении программного продукта в ЗАО «ПромСервис»
Приложение В
Исходный код программы расчета искусственного общего освещения
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;
namespace BGD
{
public partial class mainForm : Form
{
double[] mas;
public mainForm()
{
InitializeComponent();
}
public int SetSet(int index, int n, int dl, int shir)
{
int res = (int) ((mas[index] * n * 0.55)/ (dl*shir * 1.2* 1.3));
return res;
}
private void button1_Click(object sender, EventArgs e)
{
int res = SetSet(comboLamp.SelectedIndex, (int) nKolVo.Value, (int)
nDlina.Value, (int) nShirina.Value);
if ((res >= 300) && (res<=50))
{
label2.Text = "Освещенность = " + res.ToString() + " нормируема!";
label2.ForeColor = Color.Green;
}
else
{
label2.Text = "Освещенность = " + res.ToString() + " не нормируема!";
label2.ForeColor = Color.Red;
}
}
private void mainForm_Load(object sender, EventArgs e)
{
mas = new double[9];
mas[0] = 600;
mas[1] = 1500;
mas[2] = 1940;
mas[3] = 2180;
mas[4] = 2200;
mas[5] = 3000;
mas[6] = 4000;
mas[7] = 3800;
mas[8] = 5040;
comboLamp.SelectedIndex = 0;
}
}
}
Приложение Г
Тезисы доклада на Межвузовской научно-технической конференции студентов «Поиск решений актуальных проблем производства молодыми учеными и студентами»
КОЛБАСОВ П.А.
ВИБРОДИАГНОСТИКА ТЕХНОЛОГИЧЕСКОГО ОБОРУДОВАНИЯ
(Димитровградский институт технологии, управления и дизайна)
Работа сложных машин и механизмов в промышленности, на транспорте, в повседневной жизни неразрывно связана с эффектом вибраций, интенсивность и характер которых проявляются разным образом в зависимости от технического состояния оборудования. Поэтому, анализируя вибрации тем или иным методом, можно без вывода оборудования из рабочего режима, т.е. без демонтажа или без разборки, получить достаточно полную и достоверную информацию о его текущем состоянии и зарождающихся в нем неисправностях. Проводя такой анализ периодически, можно, исходя из динамики изменений вибраций во времени, спрогнозировать остаточный рабочий ресурс задолго до выхода оборудования из строя.
При разработке методов обработки и анализа виброакустического сигнала узла методами виброакустической диагностики (ВАД) необходимо решить следующие задачи:
- определить по динамическим характеристикам машины характерные для исследуемого узла частоты;
- извлечь компоненты сигнала, относящегося к исследуемому узлу, из смеси шума других узлов, производственного шума и других шумовых фоновых возмущений;
- определить влияния износа деталей на шумовые характеристики машины;
- выбрать оптимальный метод и разработать систему виброакустической диагностики, обеспечивающую необходимую чувствительность для обнаружения износа деталей.
При создании виброакустических диагностических методов появляется проблема инструментария. Использование специализированных звуковых, ориентированных в основном на профессиональных музыкантов, и математических программ оказывается эффективным только для научных разработок виброакустических методов, которые тяжело применять на практике. Среди программ для обработки звука стоит отметить SoundForge, WaveLab и т.д. Среди математических пакетов общепризнанными лидерами являются MathCAD, MathLab, Mathematica и т.д. При решении прикладных задач становится очевидной необходимость создания с помощью языков программирования высокого уровня специализированного программного обеспечения для виброакустической диагностики.
В рамках дипломного проектирования мною разрабатывается программный продукт для вибродиагностики центробежных бензиномоторных насосов и прочего аналогичного технологического оборудования.
Программа получает данные c файла Excel или текстового файла. Данные представляют собой наборы сигналов или спектров, измеренные на передней и задней опоре в вертикальном, горизонтальном и осевом направлениях, а также набор технологических параметров, таких как осевой сдвиг ротора нагнетателя, давление до и после нагнетателя, плотность смазки и т.д.
Оперируя этими данными, программа выдает результат диагностики и отображает различные графики состояния оборудования. Общий вид алгоритма диагностики изображен на рисунке Г.1.
Размещено на http://www.allbest.ru/
Рисунок 1 - Общий вид алгоритма диагностирования
Таким образом, безразборная виброакустическая диагностика является достаточно молодым, но быстро развивающимся направлением в науке, имеющим большое прикладное значение. Используемые в ВАД и реализованные в моей программе методы позволяют существенно уменьшить затраты на обслуживание оборудования за счет повышения качества оценки состояния узлов машин и уменьшения временных затрат на диагностирование.
Размещено на Allbest.ru
Подобные документы
Общая характеристика предприятия, анализ его организационно-управленческой и функциональной структуры. Финансовая оценка эффективности деятельности ООО "Квартал Плюс". Анализ используемого оборудования и программного обеспечения, его эффективность.
отчет по практике [1,5 M], добавлен 10.03.2013Определение и свойства алгоритма, его разработка. Технология создания прикладной программы. Системное программное обеспечение персонального компьютера, его назначение. Приложения, входящие в пакет MS Office XP. Характеристика внутренних и внешних модемов.
методичка [1,7 M], добавлен 26.03.2010Анализ современных информационно-поисковых систем автоматизации производства. Основные виды, требования и параметры технологического оборудования для сборочно-монтажных работ. Разработка физической модели базы данных технологического оборудования.
дипломная работа [1,5 M], добавлен 02.09.2014Анализ информационно-поисковых систем автоматизации производства. Построение инфологической и логической модели базы данных технологического оборудования для сборочно-монтажных работ. Выбор языка программирования приложения БД. Алгоритм работы программы.
дипломная работа [2,5 M], добавлен 18.12.2013Характеристика программного обеспечения персонального компьютера, которое делиться на три класса: системное, прикладное ПО, инструментарий программирования. Особенности работы компьютерной сети - системы связи компьютеров или компьютерного оборудования.
контрольная работа [22,9 K], добавлен 10.06.2010Список используемых программных продуктов на предприятии ООО "FasTel". Требования к оборудованию, выбор среды передачи данных. Разработка топологии сети. Основные требования, предъявляемые к серверной комнате. Выбор сетевого шкафа и оборудования.
реферат [3,1 M], добавлен 09.12.2014Исследование назначения и сетевой структуры предприятия. Основные направления деятельности. Особенности технологического процесса сбора и обработки информации. Программное и аппаратное обеспечение. Изучение конфигурации и оборудования локальной сети.
курсовая работа [149,7 K], добавлен 22.04.2013Анализ задачи модернизации и размещения технологического оборудования. Существующая модель предметной области. Выбор методологии разработки сетевой технологии и архитектуры. Выбор языка и среды программирования. Информационное моделирование интерфейса.
курсовая работа [4,3 M], добавлен 22.12.2011Программное обеспечение - важный компонент функционирования компьютерной деятельности. Изучение принципа работы резидентных программ. Разработка программы по удалению слов из текстового файла без учета регистра. Требования к программе, разработка проекта.
курсовая работа [404,5 K], добавлен 03.02.2011Программное обеспечение современных ЭВМ: файловые менеджеры (Проводник, Windows Commander, Far), сравнительный анализ. Windows Explorer – он же Проводник Windows, описание и характеристика, а также Frigate 5.0, AB Commander 6.1a, и другие программы.
реферат [21,6 K], добавлен 09.12.2008