new mtx class

develop
aleksey_k 2024-09-09 16:13:17 +09:00
parent 15acd446d8
commit 8e17d04563
5 changed files with 190 additions and 7 deletions

View File

@ -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, //модель спектра для анализа (объект)

View File

@ -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
}
}

View File

@ -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(

140
mxtMethod.js 100644
View File

@ -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();
}

View File

@ -68,7 +68,7 @@ function diagnose() {
src: __ampl, //объект с массивом данных пиковой формы
freq: __frq, //частота вращения, Гц
spec: ausp, //спектр пиковой формы
visible: false, //отображение графиков
visible: true, //отображение графиков
}
)