Дипломная (вкр): Программное обеспечение для вибродиагностики технологического оборудования

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

public double this[int num]

{{{return (double) Mas[num]; }{ return 0;}}

{

{Mas[num] = value; }{}

}

}

Расчет статистических параметров происходит в процедуре Set_StatistikParameter(), а выдача самих параметров реализована через соответствующие свойства.

double Disp //дисперсия

{

{Dispersia;

}

}

double Koef_Assimetr //коэф ассиметрии

{

{KoefAssimetr;

}

}

На основе класса Massiv были созданы еще два класса: MassivTP и MassivYstavok.

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

MassivTP:Massiv

{string Parameter(int num);

}

Класс MassivYstavok используется в программе для хранения уставок диагностических параметров. Уставка - заданные технологические параметры, характеризующие полностью исправный агрегат. По превышению уставки над реальным полученным значением можно судить о том или ином дефекте. Диагностических параметров очень много, но для удобства программирования доступ к ним реализован через свойства класса.

double U_Rfo

{

{(double)Mas[3];

}

}double U_R2fo

{

{(double)Mas[8];

}

}

Еще из нововведений функция получения названия уставки по номеру public string Parameter(int num), процедура вывода уставок в компонент ListBox public void SetListBox(NListView list) и процедура изменения значения выбранной пользователем уставки public void SetUstavki(int num, double znach).

MassivYstavok:Massiv

{double ОП;double УП;double fl1;double fl2;double fl3;double fna;double fz;double ред;double KOEFF;void SetUstavki(int num, double znach)

{[num] = znach;

}void SetListBox(NListView list){...}string Parameter(int num)

{ret = "";(num)

{0:= "U1_Sfгг";;

}

}

Для хранения и безопасного использования всех данных предназначен класс Dannie. Наряду с исходными данными, считанными из файла или заданными по умолчанию (сигналы с опор, дата измерения и название агрегата, массивы уставок и технологических параметров), он содержит множество дополнительных переменных для хранения промежуточных данных. Все переменные скрыты от внешнего изменения с помощью ключевого слова private. Весь функционал и взаимодействие с пользователем реализован через открытые внешне процедуры и функции.

partial class Dannie

{string U_NAME; // название аппаратурыstring DiagDate; //Дата и время измеренияint CountInMas; // число измерений в массивах сигналовint CountInMasTehParametr; //числоТПMassivTP TP; // Значения технологических параметровint kodZ;

//- 1 - нет сигнала ЗО верт;

//- 2 - нет сигнала ЗО гориз;

//- 4 - нет сигнала ЗО осев;

//- 8- нет сигнала ПО верт;

//- 16 - нет сигнала ПО гориз;

//- 32 - ошибки чтения ТПMassiv X_MSEK; // E6:E8197 Отсчеты сигналов, мсекMassiv SI_ZOV; //Cигналы с опорMassiv SI_ZOH;Massiv SI_ZOA;Massiv SI_POV;Massiv SI_POH;

}

Класс Dannie очень большой - около 500 переменных и более 200 функций, поэтому с помощью ключевого слова partial разбит на несколько файлов, а сами файлы сгруппированы по папкам в соответствии с выполняемыми в них действиями (см. рисунок 5.1).

Рисунок 5.1 - Внешний вид проекта

В последующих разделах весь функционал проекта будет рассмотрен подробнее.

5.3 Общий алгоритм работы

В соответствии с методикой диагностирования, разработанной заказчиком, программа для получения конечного результата должна пройти через шесть шагов:

Шаг 1.  Ввод данных для диагностирования.

Шаг 2.      Предварительная обработка информации для диагностирования.

Шаг 3.      Расчет диагностических параметров.

Шаг 4.      Подготовка и расчет диагностической матрицы.

Шаг 5.      Вывод результатов диагностики и графиков функций исходных данных.

Шаг 6.      Сохранение результатов диагностики

Рассмотрим эти шаги подробнее.

5.3.1 Ввод данных для диагностирования

Для выявления дефектов оборудования необходимо загрузить из файлов следующую информацию:

1)   виброакустические данные с опор оборудования и технологические данные агрегата;

)     конфигурацию агрегата;

3)     справочник диагностических состояний.

. Загрузка сигналов

Данные сигналов и технологические параметры содержатся в Excel-файле, который имеет структуру, изображенную в таблице 5.1. Полностью функции загрузки данных из Excel приведены в приложении А.1.

Таблица 5.1 - Структура файла сигналов

№

Имя массива в программе

Номера ячеек в Excel

Назначение массива

1

X_MSEK

E6:E8197

Отсчеты сигналов, мсек, для отображения сигналов.

2

SI_ZOV

A6:A8197

Значения сигнала, измеренного на задней опоре в вертикальном направлении

3

SI_ZOH

B6:B8197

Значения сигнала, измеренного на задней опоре в горизонтальном направлении

4

SI_ZOA

C6:C8197

Значения сигнала, измеренного на задней опоре в осевом направлении

5

SI_POV

G6:G8197

Значения сигнала, измеренного на передней опоре в вертикальном направлении

6

SI_POH

H6:H8197

Значения сигнала, измеренного на передней опоре в горизонтальном направлении

7

TP

K6:K19

Значения технологических параметров

8

U_NAME

F3

Имя выбранного агрегата

9

DiagDate

J3

Дата и время измерения

10

kodZ

I3

1 - нет сигнала ЗО верт; 2 - нет сигнала ЗО гориз; 4 - нет сигнала ЗО осев; 8- нет сигнала ПО верт; 16 - нет сигнала ПО гориз; 32 - ошибки чтения технологических параметров.


Загрузка данных происходит по нажатию пользователем кнопки «Шаг 1: Загрузка сигналов» (см. пункт 5.4). По нажатию этой кнопки происходит вызов процедуры public bool LoadFromExcel(string fileName). Внутри процедуры находится связка try{}.. catch{}. Если при загрузке данных возникла ошибка, то внутри catch{} происходит вызов return false и пользователю выдается сообщение, что при загрузке данных произошла ошибка. Если ошибки нет - функция возвращает true.

Для загрузки данных из Excel пришлось добавить ссылку на соответствующую Com-сборку.

using Excel = Microsoft.Office.Interop.Excel;

public bool LoadFromExcel(string fileName)

{.Application excelapp;.Window excelWindow; //Окно.Workbooks excelappworkbooks; // Рабочие книги.Workbook excelappworkbook; // рабочая книга.Sheets excelsheets; //Листы.Worksheet excelworksheet; //Лист.Range excelcells; //Ячейки= new Excel.Application();.Visible = false;

{= excelapp.Workbooks;

//Открываем книгу и получаем на нее ссылку= excelapp.Workbooks.Open(fileName,.Missing, Type.Missing, Type.Missing, Type.Missing,.Missing, Type.Missing, Type.Missing, Type.Missing,.Missing, Type.Missing, Type.Missing, Type.Missing,.Missing, Type.Missing);= excelappworkbook.Worksheets;

//Получаем ссылку на лист 1= (Excel.Worksheet)excelsheets.get_Item(1);

//считываем Название= excelworksheet.get_Range("F3", Type.Missing);_NAME = Convert.ToString(excelcells.Value2);

//считываем дату= excelworksheet.get_Range("J3", Type.Missing);= Convert.ToString(excelcells.Value2);= excelworksheet.get_Range("A4", Type.Missing);= Convert.ToInt32(excelcells.Value2);= excelworksheet.get_Range("K4", Type.Missing);= Convert.ToInt32(excelcells.Value2);= excelworksheet.get_Range("I3", Type.Missing); //kodZ= Convert.ToInt32(excelcells.Value2);(kodZ != 1) //ЗО верт SI_ZOV

{_ZOV = new Massiv();_ZOV.Add(new Queue((Array)excelworksheet.get_Range("A6",

"A" + (6 + CountInMas - 1).ToString()).Cells.Value2));

}

{_ZOV = new Massiv();_ZOV.Add(new Queue((Array)new double[CountInMas]));

}.Quit();true;

}

{.Quit();false;

}}

При успешной загрузке файла сигналов, открывается доступ к кнопке «Шаг 2: Загрузка конфигурации».

. Загрузка конфигурации агрегата

Файл конфигурации имеет структуру, представленную в таблице 5.2. Разделители полей везде пробелы. Кодировка файла - UTF-8.

Таблица 5.2 - Структура файла конфигурации агрегата

№ строки файла

Состав

Пример

1

Имя конфигурации

ГПА_1

2

Значение максимального виброперемещения

Smax 52

3

Границы Fo - нижняя и верхняя границы

Fo 80 85

4

Маркер начала описателей опор: «Опоры»

Опоры

5

Номер опоры, тип подшипника, его характеристики в зависимости от типа. Для скольжения: «скл» - число вкладышей опорной и упорной частей. Для качения: «кач<номер>» Dвнутр, Dнар, Dтк, Nтк, угол с опорой

1 скл 5 6 2 кач  0322 110 240 41.28 8 0

6

Маркер конца описателей опор: «Опоры-к»

Опоры-к

7

Число зубьев передачи - ведущая шестерня (Fz) ведомая шестерня (Fред)

ЗП 19 26

8

Муфта - число зубьев/пальцев

Мф 10

9

Число направляющих лопаток на диафрагме

НА 28

9

Число лопаток на каждом колесе (группе колес)

Лоп 13 13 13

10

Маркер начала матрицы ДС: «ДС»

ДС

11

Перечень ДС с указанием номеров физических опор. Для каждого ДС - одна запись формата: <Имя ДС по справочнику> <Имя ДС для Протокола> Имя ДС не может содержать пробелов.

Дисбаланс_вала Дисбаланс_вала_ГПА1

12

Маркер конца матрицы ДС: «ДС-к»

ДС-к


После нажатия кнопки «Шаг 2: Загрузка конфигурации» происходит вызов функции bool SetConfigFile(string fname), где осуществляется проверка на соответствие файла требуемой структуре. В частности проверяется наличие маркеров «ДС», «ДС-к», «Опоры», «Опоры-к». При успешном прохождении проверки данные считываются, функция возвращает true и открывается доступ к следующей кнопке «Шаг 3: Загрузка справочника ДС» (см. пункт 5.4).

. Загрузка справочника диагностических состояний

Файл справочника диагностических состояний имеет структуру, представленную в таблице 5.3. Разделители полей везде пробелы. Кодировка файла - UTF-8.

Таблица 5.3 - Структура файла справочника диагностических состояний

№ строки файла

Состав

Пример

1

Заголовок

Справочник ДС

2

Имя ДС, n блоков <Имя пар-ра>:<номер опоры> Если параметр связан с другими: <Имя пар-ра>:<номер опоры>И(<Имя пар-ра>:<номер опоры>ИЛИ<Имя пар-ра>:<номер опоры>)

Дисбаланс_вала SFo:1 Дисбаланс_вала RFo:2 ИЛИ AFo:2


<Номер опоры> может принимать значения:

- Передняя опора.

- Задняя опора.

- Задняя опора в осевом направлении.

- Технологические параметры.

Как и в случае с предыдущим файлом происходит вызов функции проверки правильности структуры файла bool SetDiagnFlle(string fname). При успешном завершении данные считываются и открывается доступ к следующей кнопке «Шаг 4: Диагностика» (см. пункт 5.4).

5.3.2 Предварительная обработка информации для диагностирования

Для запуска процесса диагностирования необходимо предварительно переработать вводимую информацию: преобразовать сигналы виброперемещения в спектры виброперемещения и виброускорения, вычислить оборотную частоту вращения вала нагнетателя и рассчитать уставки, зависящие от оборотной частоты вращения вала [13]. Кроме того, нужно убедиться, что сигналы, полученные с датчиков валидные, т.е. проверить было ли вообще считывание сигнала, не было ли обрыва линии на середине считывания, не выдается ли ложный сигнал, в связи с плохим креплением датчика к опоре ЦБН. Блок-схема алгоритма предварительной обработки виброакустических данных для выполнения диагностирования изображена на рисунке 5.2.

Рисунок 5.2 - Алгоритм предварительной обработки виброакустических данных

Для расчета сигналов виброперемещения используется процедура SetSpektr(). Сигналы, измеренные с опоры, преобразуются с помощью быстрого преобразования Фурье (БПФ) в массив комплексных чисел. Затем полученный массив нормализуется в массив вещественных чисел. Для использования БПФ и комплексных чисел к проекту была подключена бесплатная математическая библиотека AlgLib.

void SetSpektr ()

{j = CountInMas / 2;fmaxFFT = (int)4000 * 1.28;freqmax = 4000;[] dd;= new Massiv();(int i = 0; i < j; i++)

{.Add((i * fmaxFFT) / j);

}

//SI_ZOV= SI_ZOV.ToDoubleMas;= new AP.Complex[0];.fft.fftr1d(ref dd, CountInMas, ref FZOV);= Norm(FZOV);

}

Спектры виброускорения рассчитываются из спектров виброперемещения c помощью функции AP.Complex[] FillA(AP.Complex[] compMas).

AP.Complex[] FillA(AP.Complex[] compMas)

{SpecChanelPrice = 1.25;.Complex[] res = new AP.Complex[CountInMas / 2];(int i = 0; i < CountInMas / 2; i++)

{ymn = Math.Pow(2 * Math.PI * i * SpecChanelPrice, 2.0) / 1000000;[i] = new AP.Complex(compMas[i].x * ymn, compMas[i].y * ymn);

}res;

}

Проверка сигнала на те или иные неисправности происходит в следующем куске кода.

.Text = "SI_ZOV";(noSignal(SI_ZOV.Disp))

{.Text += ": Нет сигнала";.BackColor = Color.Tomato;

}if (ZeroShift(SI_ZOV.SrAr))

{.Text += ": Смещение нуля";.BackColor = Color.Tomato;

}if (lineBreak(fS06FoZov,freq[1],S06FoZov,Szov_fo))

{.Text += ": Обрыв линии";.BackColor = Color.Tomato;

}if (deviceMalfunction(lzov,Szov_fo))

{.Text += ": Плохое крепление датчика";.BackColor = Color.Tomato;

}

{.Text += ": Есть сигнал";.BackColor = Color.LimeGreen;

}

По синтаксису эти функции довольно просты. Например, функция проверки сигнала bool noSignal(SI_ZOV.Disp) показывает отсутствие сигнала, когда дисперсия массива сигнала меньше единицы, а смещение нуля ZeroShift(SI_ZOV.SrAr) диагностируется, если среднее арифметическое массива сигналов больше 0.001.

bool ZeroShift(double p1)

{res;(Math.Abs(p1) < 0.001)= false;= true;res;

}bool noSignal(double p1)

{res;(Math.Abs(p1) > 1)= false;= true;res;

5.3.3 Расчет диагностических параметров

Диагностические параметры можно разбить на следующие типы:

1)   Частота вращения вала нагнетателя Fo.

)     Размах виброперемещения Sр(Fo) - величина, определяемая руководством по эксплуатации ЦБН и свидетельствующая об общем состоянии опоры и агрегата. В скобках (в данном случае Fo) указывается частота, на которой рассчитан данный параметр.

3)     Амплитуда пика в спектре виброперемещения S(Fo) и виброускорения A(Fo).

)       Наличие пика и бокового пика на определенной частоте R(Fo) и Ra(Fo), которое определяется в виде отношения амплитуды спектра на соответствующей частоте к среднему уровню спектра в окрестности данной частоты.

)       Параметры, определяющий число гармоник указанной частоты М(Fo) и Ma(Fo), присутствующих в конкретном спектре.

)       Параметр, характеризующий превышение амплитуды определенной частоты над другими информативными пиками EXCS(Fo).

Рассмотрим тонкости вычисления этих параметров ниже.

Наибольший вклад в максимальную величину (Smax) вносят гармоники и субгармоники частоты вращения вала Fo. Для этого общий уровень вибрации Smax (определяемый пользователем, по умолчанию 52 мкм.) раскладывается обратно пропорционально номеру гармоники N частоты вращения вала Fo [14]. Размах виброперемещения Sp на частоте вращения Fo оценивается равным половине Smax. Таким образом,

Smax(1) = Smax/2,

Smax(N) = Smax/2/Сум/N,

где Сум = 1/0.5+1/2+1/3+1/4+…1/9+1/10,

а N - номер гармоники.

Важным диагностическим параметром является частота вращения вала - Fo. Для расчета нужно взять значение технологического параметра «Fo СТ». По спектру виброперемещения найти пик в диапазоне ± 2.5 Гц. Из 5 каналов выбирается наибольший по амплитуде. Затем берется выбранный канал и по одному каналу с каждой стороны и с использованием квадратичной аппроксимации по трем точкам, находится его реальное значение (вещественное) как значение частоты перегиба аппроксимационной функции. Найденное значение и есть Fo, которое используется как основа пересчета частот при дальнейших расчетах. Для квадратичной аппроксимации по трем точкам используется класс Polynomial из библиотеки AlgLib. Функция, иллюстрирующая этот алгоритм, представлена ниже.

Источник: https://www.bibliofond.ru/detail.aspx?id=723375