Пояснительная записка (1218768), страница 7
Текст из файла (страница 7)
Листинг 10 – Определение начальных центроидов кластеров
startPosition(1,:) = [707 1250];
startPosition(2,:) = [743 1405];
startPosition(3,:) = [778 1560];
startPosition(4,:) = [814 1690];
startPosition(5,:) = [850 1700];
Координаты центров выбираются с учетом норм, определенных для данного тепловоза.
Как уже отмечалось в п.п. 3.1, следует вести учет количества кластеров, так как оно будет варьироваться в зависимости от наличия или отсутствия той или иной позиции контроллера в соответствующем файле (листинг 4).
По завершении работы алгоритма координаты центроидов полученных кластеров, а также точек данных, попадающих в окружность с центром в центроиде и радиусом, устанавливаемым исследователем (листинг 12) сохраняются в файл MS Excel.
Листинг 12 – Формирование окружности точками данных
for k=1:1:C_length
for i=1:1:length(Pow1)
if ((Pow1(i,1)-C(k,1))*(Pow1(i,1)-C(k,1))+(Pow1(i,2)-C(k,2))*(Pow1(i,2)-C(k,2))<(r*r))
Centr(n,1) = Pow1(i,1);
Centr(n,2) = Pow1(i,2);
n = n + 1;
end
end
end
Также, выводится окно с графиками, на которых представлен исходный вид данных и результат их кластеризации (рисунок 15)
Y
Y
X
X
Рисунок 15 – Данные до кластеризации и после нее:
по оси абсцисс откладывается количество оборотов,
а по оси ординат – значения мощности
Для того, чтобы удавалось хранить всю общность получаемых данных (т.е. результаты обработки нескольких файлов) и, таким образом, прослеживать тенденцию поведения оборудования на высоких скоростях, необходимо определенным образом организовать запись новых данных в файл, где уже хранятся результаты предыдущих исследований. Для этого отдельно создается файл формата txt, в котором хранится число, отражающее номер строки в файле MS Excel, с которой следует начать запись при новом запуске программы (листинг 13).
Листинг 13 – Сохранение результатов анализа
fid = fopen('shift0.txt', 'r');
if fid == -1
fid = fopen('shift0.txt', 'a');
end
shift = fscanf(fid, '%d');
fclose(fid);
if shift > 0
shift = shift + Centr_length;
fid = fopen('shift0.txt', 'w');
if fid == -1
error('File is not opened');;
end
fprintf(fid,'%d', shift);
fclose(fid);
filename = 'Areas.xls';
xlswrite(filename,Centr, sheet, ['A' num2str(shift)]);
...
При необходимости проанализировать результаты анализа файлов, следует вызвать модуль визуализации, который считывает данные из файла MS Excel (рисунок 16 ).
Y
X
Рисунок 16 – Содержимое файла MS Excel:
по оси абсцисс откладывается количество оборотов,
а по оси ординат – значения мощности
Благодаря организованный системе хранения результатов анализа данных о мощности и количестве оборотов дизельного двигателя возможным является прослеживание тренда: как только отображаемые скопления изменяют соответствующие им значения мощности на более низкие (образуется заметное «движение вниз» отображаемых данных), необходимо произвести диагностику оборудования локомотива, так как такая ситуация свидетельствует об ухудшении качества работы дизельного двигателя (в редких случаях, бортовых систем).
3.4 Анализ скорости тепловоза на критическом участке
Для оценки технического и теплотехнического состояния оборудования тепловозов стандартно используется технология реостатных испытаний. При этом тяговые двигатели тепловоза отключаются от главного генератора, а выводы главного генератора подключаются к мощным нагрузочным сопротивлениям (реостатам) с водяным или воздушным охлаждением. Недостаток данного метода заключается в высокой трудоемкости работ и эпизодической возможности проведения стационарных испытаний.
В то же время, состояние тепловоза достаточно достоверно может быть оценено в эксплуатационных условиях с использованием данных бортовых систем регистрации. Для тепловозов, работающих на участке Комсомольск – Высокогорная целесообразно выделить контрольный участок от ст. Оунэ до Кузнецовского тоннеля. В четном направлении тепловозы движутся с гружеными поездами стандартных весов 4900 или 5600 тонн. При прохождении указанного участка требуется полное использование мощности головного и подталкивающего локомотивов. Таким образом, участок Оунэ – Кузнецовский тоннель можно рассматривать как участок со стандартизированной нагрузкой.
Географические координаты контрольного участка Оунэ – Кузнецовский тоннель от отметки 50° 10.777' Северной широты и 138° 50' Восточной долготы до 50° 12.4' Северной широты и 139° 3.745' Восточной долготы.
Проход участка Оунэ – Кузнецовский тоннель достаточно легко обнаруживается по характерному резкому снижению скорости движения до 0 при заходе в тоннель, вследствие недоступности сигнала спутниковой навигационной системы GPS в тоннеле или по изменению значения поля GPS_Valid в базе данных бортовой системы регистрации.
Анализ параметров работы на контрольном участке позволяет проверить работу тепловоза на максимальных режимах и выявить проблемные секции с заниженной мощностью, проблемами в системе охлаждения и циркуляции масла, пониженной производительностью турбокомпрессора.
Наличие отклонений в работе оборудования, приводящих к снижению касательной силы тяги, реализуемой тепловозом, является достаточным диагностическим признаком для принятия решения о досрочной постановке тепловоза на ремонт. Недостаток мощности приводит к снижению скорости движения на контрольном участке ниже критической для эксплуатируемого типа локомотива (для 3ТЭ10МК – 23,4 км/ч).
Таким образом, задачей анализа является выделение во временных рядах отрезков данных, относящихся к проследованию контрольного участка, определение установившейся скорости движения и сравнение ее с контрольным показателем.
Для анализа используются значения параметров широты, долготы и скорости, представленных в файлах «Longitude.txt», «Latitude.txt» и «Speed.txt».
Алгоритм, реализующий данный вид анализа, состоит из следующих шагов:
– поиск координат искомого отрезка (листинг 14);
Листинг 14 – Поиск начала и конца исследуемого отрезка
for i=1:1:length(Lat)
if (Lat(i) == latitude_1)&&(Long(i) == longitude_1)
Beg = i;
break;
end
end
for j=Beg:1:length(Lat)
if (Lat(j) == latitude_2)&&(Long(j) == longitude_2)
End = j;
break;
end
end
– выделение значений скорости, соответствующих заданному отрезку; как отмечалось в п.п. 2.1, фиксация значений широты и долготы происходит с минутным интервалом, в то время, как регистрация значений скорости производится с интервалом в 3 секунды; исходя из этого, для того, чтобы определить отрезок данных по скорости локомотива, соответствующий заданному отрезку пути, необходимо произвести выравнивание длин этих отрезков (листинг 15);
Листинг 15
if Beg ~= 1
Beg = Beg *20;
end
End = End*20;
– сравнение найденных значений скорости с заранее определенной нормой (листинг 16).
Листинг 16 – Выявление низких значений скорости
u = 1;
for i=Beg:1:End
if Speed(i)<Sp
tooLowSpeed(u) = i;
u = u + 1;
end
end
В соответствии с требованием заказчика, в алгоритме также предусмотрена возможность ручного ввода координат интересующего оператора отрезка данных. Это позволит исследовать не только описываемый в данном пункте участок пути следования тепловоза, но и любой другой.
Несмотря на алгоритмическую простоту рассматриваемого вида анализа, его применение позволяет автоматизировать один из важнейших видов диагностики состояния тепловоза, на данный момент проводимый операторами вручную.
3.5 Реализация графического интерфейса пользователя в среде MATLAB
В пакет прикладных программ MATLAB включена среда GUIDE, позволяющая создавать приложения с графическим интерфейсом пользователя [21] (рисунок 17).
Рисунок 17 – Окно среды GUIDE
Работа в среде GUIDE начинается с выбора пользователем вида исходного окна: диалоговое окно, окно с уже имеющейся областью построения графиков и управляющими кнопками, или же пустое окно [22].
В левой части описываемой среды имеется панель, где представлены все элементы графического интерфейса, которые пользователь может добавлять на окно разрабатываемого приложения (рисунок 17).
Каждый добавляемый в рабочую область среды элемент интерфейса обладает рядом настраиваемых свойств: от цвета и типа шрифта, до размеров и возможности масштабирования после компиляции (рисунок 18).
Рисунок 18 – Инспектор свойств элемента интерфейса
В основе работы приложения с графическим интерфейсом пользователя лежат так называемые События – Callbacks , возникающие при взаимодействии пользователя с элементами интерфейса [23].
В соответствии с п.п. 2.1 и п.п. 2.8, в рамках выполнения данной работы необходимо реализовать графические интерфейсы трех модулей анализа данных.
С учетом специфики задачи, решаемой блоком №1, его окно состоит из элемента Axes – для отображения диаграмм частот [24], двух кнопок (Buttons) – для загрузки входных файлов и построения диаграмм, одного поля ввода (TextEdit) – для указания оператором номера позиции контроллера, для которого необходимо построить диаграмму, и двух переключателей (RadioButtons), позволяющих отображать диаграммы при переходе с более высокой позиции контроллера на более низкую и наоборот (рисунок 19).
Рисунок 19 – Графический интерфейс первого модуля
При нажатии на кнопку «Загрузить файлы», генерируется событие CallBack (листинг 17), которое сначала вызывает стандартное диалоговое окно ОС Windows, приглашающее пользователя выбрать файлы для анализа, а затем запускает процедуру анализа.
Листинг 17 – Событие для нажатия на кнопку «Загрузить файлы»
function DownloadData_Callback(hObject, eventdata, handles)
[filename] = uigetfile( ...
{ '*.txt','TXT-files (*.txt)'; ...
'*.*', 'All Files (*.*)'}, ...
'Please pick two files with data', ...
'MultiSelect', 'on');
Test1 = importdata(filename{1,1},'\t');
Test2 = importdata(filename{1,2},'\t');
Time_periods (Test1, Test2);
Непосредственно, анализ происходит в функции Time_periods (), входными параметрами которой являются массивы необходимых значений, выделенных из загруженных файлов.
Построение диаграмм частот происходит по нажатии на кнопку «Построить». Вызывается событие ShowResult_Callback, которое, на основе значения, записанного в поле ввода текста, и выделенного переключателя, вызывает функцию stem для требующегося графика (листинг18).
Листинг 18 – Формирование выходных данных
var = get(handles.Poz_Nom, 'string');
var = str2double(var);
switch var
case 9
if get(handles.radiobutton1, 'Value') == 1
stem(x_9_up, y_9_up);















