new mtx class
parent
15acd446d8
commit
8e17d04563
|
@ -10,7 +10,7 @@ export class maskClass {
|
||||||
if (this.visible == true) { this.canvas = gtl.plots.add("Model") };
|
if (this.visible == true) { this.canvas = gtl.plots.add("Model") };
|
||||||
}
|
}
|
||||||
|
|
||||||
getModel() {
|
__getModel() {
|
||||||
let __model = this.spec.base; //массив точек базовой линии
|
let __model = this.spec.base; //массив точек базовой линии
|
||||||
let imin = 0; //левая граница коридора
|
let imin = 0; //левая граница коридора
|
||||||
let imax = 0; //правая граница коридора
|
let imax = 0; //правая граница коридора
|
||||||
|
@ -35,7 +35,7 @@ export class maskClass {
|
||||||
return __model;
|
return __model;
|
||||||
} //построение упрощенной модели спектра
|
} //построение упрощенной модели спектра
|
||||||
|
|
||||||
getMask(options) {
|
__getMask(options) {
|
||||||
let __model = options.model; //массив точек спектра для сравнения с портретом
|
let __model = options.model; //массив точек спектра для сравнения с портретом
|
||||||
let __mask = options.mask.base; //массив точек базовой линии для построения портрета дефекта
|
let __mask = options.mask.base; //массив точек базовой линии для построения портрета дефекта
|
||||||
let harms = options.harms; //кол-во гармоник портрета
|
let harms = options.harms; //кол-во гармоник портрета
|
||||||
|
@ -132,13 +132,13 @@ export class maskClass {
|
||||||
|
|
||||||
getResult() {
|
getResult() {
|
||||||
let __result = {}; //результат
|
let __result = {}; //результат
|
||||||
|
let __model = this.__getModel(); //рисуем модель спектра и получаем массив его данных
|
||||||
let __rows = Object.keys(this.set); //массив ключей объекта (наименование портретов)
|
let __rows = Object.keys(this.set); //массив ключей объекта (наименование портретов)
|
||||||
let __model = this.getModel(); //рисуем модель спектра и получаем массив его данных
|
|
||||||
|
|
||||||
for (let i = 0; i < __rows.length; i++) {
|
for (let i = 0; i < __rows.length; i++) {
|
||||||
let __name = __rows[i]; //имена портретов
|
let __name = __rows[i]; //имена портретов
|
||||||
let __arr = this.set[__name]; //массив значений
|
let __arr = this.set[__name]; //массив значений
|
||||||
let __corr = this.getMask(
|
let __corr = this.__getMask(
|
||||||
{
|
{
|
||||||
name: __name, //имя маски дефекта
|
name: __name, //имя маски дефекта
|
||||||
model: __model, //модель спектра для анализа (объект)
|
model: __model, //модель спектра для анализа (объект)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ var record = gtl.options.record;
|
||||||
var point = gtl.options.point;
|
var point = gtl.options.point;
|
||||||
|
|
||||||
var fnc = gtl.import("userFunctions.js");
|
var fnc = gtl.import("userFunctions.js");
|
||||||
var msk = gtl.import("maskVM.js");
|
|
||||||
let maskClass = gtl.import("maskClass.js").maskClass;
|
let maskClass = gtl.import("maskClass.js").maskClass;
|
||||||
|
|
||||||
var __frq = fnc.getFreq(
|
var __frq = fnc.getFreq(
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
|
@ -68,7 +68,7 @@ function diagnose() {
|
||||||
src: __ampl, //объект с массивом данных пиковой формы
|
src: __ampl, //объект с массивом данных пиковой формы
|
||||||
freq: __frq, //частота вращения, Гц
|
freq: __frq, //частота вращения, Гц
|
||||||
spec: ausp, //спектр пиковой формы
|
spec: ausp, //спектр пиковой формы
|
||||||
visible: false, //отображение графиков
|
visible: true, //отображение графиков
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue