diff --git a/classes/maskClass.js b/classes/maskClass.js index 2a6e331..ddcf814 100644 --- a/classes/maskClass.js +++ b/classes/maskClass.js @@ -10,7 +10,7 @@ export class maskClass { if (this.visible == true) { this.canvas = gtl.plots.add("Model") }; } - getModel() { + __getModel() { let __model = this.spec.base; //массив точек базовой линии let imin = 0; //левая граница коридора let imax = 0; //правая граница коридора @@ -35,7 +35,7 @@ export class maskClass { return __model; } //построение упрощенной модели спектра - getMask(options) { + __getMask(options) { let __model = options.model; //массив точек спектра для сравнения с портретом let __mask = options.mask.base; //массив точек базовой линии для построения портрета дефекта let harms = options.harms; //кол-во гармоник портрета @@ -132,13 +132,13 @@ export class maskClass { getResult() { let __result = {}; //результат + let __model = this.__getModel(); //рисуем модель спектра и получаем массив его данных let __rows = Object.keys(this.set); //массив ключей объекта (наименование портретов) - let __model = this.getModel(); //рисуем модель спектра и получаем массив его данных - + for (let i = 0; i < __rows.length; i++) { let __name = __rows[i]; //имена портретов let __arr = this.set[__name]; //массив значений - let __corr = this.getMask( + let __corr = this.__getMask( { name: __name, //имя маски дефекта model: __model, //модель спектра для анализа (объект) diff --git a/classes/mtxClass.js b/classes/mtxClass.js new file mode 100644 index 0000000..b103b24 --- /dev/null +++ b/classes/mtxClass.js @@ -0,0 +1,44 @@ +export class mtxClass { + constructor(args) { + this.spec = args.spec; + this.filter = args.filter; + this.set = args.set; + if (this.tol != undefined) { this.spec.harm_tolerance = args.tol } + } + + __getModDeep(ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = this.spec.frequency / this.filter.width; //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df); + return mod; + }; //определение глубины модуляции ВЧ составляющих + + getMatrix() { + let __result = {}; //результат + let __num = 6; //глубина матрицы (количество гармоник) + let __lvl = 0; //уровень развития дефекта + let __rows = Object.keys(this.set); //массив ключей объекта (наименование портретов) + + for (let i = 0; i < __rows.length; i++) { + let __name = __rows[i]; //имена портретов + let __arr = this.set[__name]; //массив значений + + let __color = __arr[0]; //предустановленный цвет + let __freq = __arr[1]; //расчетная частота + let __harms = []; //массив обнаруженных гармоник + + let __harms_set = this.spec.add_harms_set(__freq, __num, __color, 2); //строим набор частот (гармонический ряд) + __harms_set.name = __name; + for (let j = 0; j < __num; j++) { + //__harms_set.harms[j].tolerance = (j + 1) * __fValue * this.tol; //устанавливаем коридор обнаружения гармоники + if (__harms_set.harms[j].is_present == true) { + __lvl = Math.round(this.__getModDeep(__harms_set.harms[j].amplitude, __harms_set.harms[j].base)); + __harms.push(__lvl); + } else { __harms.push(0) }; + __result[__name] = __harms; + } + } + return __result + } +} + diff --git a/maskMethod.js b/maskMethod.js index 0ecf056..e2688cb 100644 --- a/maskMethod.js +++ b/maskMethod.js @@ -5,7 +5,6 @@ var record = gtl.options.record; var point = gtl.options.point; var fnc = gtl.import("userFunctions.js"); -var msk = gtl.import("maskVM.js"); let maskClass = gtl.import("maskClass.js").maskClass; var __frq = fnc.getFreq( diff --git a/mxtMethod.js b/mxtMethod.js new file mode 100644 index 0000000..a7dd592 --- /dev/null +++ b/mxtMethod.js @@ -0,0 +1,140 @@ +"use strict"; +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; + +var fnc = gtl.import("userFunctions.js"); +let mtxClass = gtl.import("mtxClass.js").mtxClass; + +var __frq = fnc.getFreq( + /*{ + src: gtl.analog_inputs[signals[0].portNumber], //источник сигнала частоты вращения + freq: 10, //граничная частота фильтрации сигнала + time: 1, //интервал измерения частоты вращения + avg: 4, //количество отсчетов для усреднения + dc: -0.05 //порог срабатывания счетчика + }*/ +).value; //получаем частоту вращения + +let canvas0 = gtl.plots.add("Мониторинговый спектр"); +let canvas1 = gtl.plots.add("Спектр вибраци"); +let canvas2 = gtl.plots.add("Спектр огибающей"); + +var ausp2 = fnc.getAusp( + { + src: gtl.analog_inputs[signals[0].portNumber], //источник сигнала + name: "AUSPm", //имя спектра + color: 0x001E90FF, //цвет в формате HEX + frequency: 25600, //граничная частота + resolution: 16, //частотное разрешение + average: 6, //количество усреднений + view: gtl.spec.db, //единицы отображения (дБ) + } +); //мониторинговый спектр + +var ausp = fnc.getAusp( + { + src: gtl.analog_inputs[signals[0].portNumber], //источник сигнала + name: "AUSPd", //имя спектра + color: 0x0000FF00, //цвет в формате HEX + frequency: 800, //граничная частота + resolution: 1, //частотное разрешение + average: 6, //количество усреднений + view: gtl.spec.db, //единицы отображения (дБ) + level: 20 //уровень обнаружения гармоник + } +); //диагностический спектр вибрации + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.width = 1482; //ширина полосы фильтра + +var spen = fnc.getSpen( + { + src: filter_spen, //источник сигнала + name: "SPEN", //имя спектра + color: 0x00ff0000, //цвет в формате HEX + frequency: 200, //граничная частота + resolution: 0.25, //частотное разрешение + average: 8, //количество усреднений + view: gtl.spec.db, //единицы отображения (дБ) + level: 10 //уровень обнаружения гармоник + } +); //спектр огибающей + +//[Диагностика] +gtl.diagnostic.interval = gtl.acq_time; +let __result = {}; //объект для формирования результата + +function diagnose() { + + var __set = { + "FREQ": [0x89AC76, fnc.FREQ(__frq), 6, 13, 0, 0.3], + "BPFO": [0x6A5ACD, fnc.BPFO(__frq), 6, 13, 0, 0.07], + "BPFI": [0x008000, fnc.BPFI(__frq), 6, 8, 0, 0.07], + "BSF": [0xFFA000, fnc.BSF(__frq), 6, 10, 0, 0.3], + "FTF": [0xFF2400, fnc.FTF(__frq), 6, 6, 0, 0.5] + }; //набор портретов предполагаемых дефектов [цвет, частота, кол-во, уровень, тип ряда, коэфф затухания] + + canvas0.add( + { + color: ausp2.color, + name: ausp2.name, + x: ausp2.resolution, + y: ausp2.data + } + ); //рисуем мониторинговый спектр вибрации на plot + + canvas1.add( + { + color: ausp.color, + name: ausp.name, + x: ausp.resolution, + y: ausp.data + } + ); //рисуем спектр вибрации на plot*/ + + let __spen_tools = fnc.createTools( + { + spec: spen, //спектр для построения модели (объект) + set: __set, //источник данных для построения частотных линий + tol: 1 //коридор обнаружения гармоники на портрете, % + } + ); //формируем компоненты и частотные линии на спектре огибающей + + canvas2.add( + { + color: spen.color, + name: spen.name, + x: spen.resolution, + y: spen.data, + spec_tools: __spen_tools.to_json() + } + ); //рисуем спектр огибающей на plot + + let __mtx = new mtxClass( + { + spec: spen, //спектр для построения модели (объект) + set: __set, //источник данных для построения портретов дефектов + filter: filter_spen, //полосовой фильтр (для определения разницы амплитуд гармонической и случайной составляющей) + tol: 1, //коридор обнаружения гармоники, % + } + ) + + gtl.log.info("FREQ", fnc.FREQ(__frq)); + gtl.log.info("FTF", fnc.FTF(__frq)); + gtl.log.info("BPFO", fnc.BPFO(__frq)); + gtl.log.info("BPFI", fnc.BPFI(__frq)); + gtl.log.info("BSF", fnc.BSF(__frq)); + + __result["Matrix"] = __mtx.getMatrix(); //обнаруженные дефекты + __result["const"] = spen.data[0]; //постоянная составляющая спектра огибающей + gtl.results = __result; + + gtl.diagnostic.stop(); +} \ No newline at end of file diff --git a/peakMethod.js b/peakMethod.js index db4681c..29e80c6 100644 --- a/peakMethod.js +++ b/peakMethod.js @@ -68,7 +68,7 @@ function diagnose() { src: __ampl, //объект с массивом данных пиковой формы freq: __frq, //частота вращения, Гц spec: ausp, //спектр пиковой формы - visible: false, //отображение графиков + visible: true, //отображение графиков } )