new mtx class
parent
15acd446d8
commit
8e17d04563
|
@ -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, //модель спектра для анализа (объект)
|
||||
|
|
|
@ -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 fnc = gtl.import("userFunctions.js");
|
||||
var msk = gtl.import("maskVM.js");
|
||||
let maskClass = gtl.import("maskClass.js").maskClass;
|
||||
|
||||
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, //объект с массивом данных пиковой формы
|
||||
freq: __frq, //частота вращения, Гц
|
||||
spec: ausp, //спектр пиковой формы
|
||||
visible: false, //отображение графиков
|
||||
visible: true, //отображение графиков
|
||||
}
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue