diff --git a/src/specificClass.js b/src/specificClass.js index 7653a41..ef679e9 100644 --- a/src/specificClass.js +++ b/src/specificClass.js @@ -1,6 +1,6 @@ const EventEmitter = require('events'); -const {loadCurve,logger,configUtils,configManager,state, nrmse, MeasurementContainer, predict, interpolation , childRegistrationUtils} = require('generalFunctions'); -const { name } = require('../../generalFunctions/src/convert/lodash/lodash._shimkeys'); +const {loadCurve,gravity,logger,configUtils,configManager,state, nrmse, MeasurementContainer, predict, interpolation , childRegistrationUtils,coolprop} = require('generalFunctions'); +const pressure = require('../../generalFunctions/src/convert/definitions/pressure'); class Machine { @@ -84,9 +84,21 @@ class Machine { this._updateState(); }); + + //perform init for certain values + this._init(); + this.child = {}; // object to hold child information so we know on what to subscribe this.childRegistrationUtils = new childRegistrationUtils(this); // Child registration utility + + } + + _init(){ + //assume standard temperature is 20degrees + this.measurements.type('temperature').variant('measured').position('atEquipment').value(15).unit('C'); + //assume standard atm pressure is at sea level + this.measurements.type('atmPressure').variant('measured').position('atEquipment').value(101325).unit('Pa'); } _updateState(){ @@ -670,15 +682,36 @@ _callMeasurementHandler(measurementType, value, position, context) { return { cPower, cFlow }; } - calcEfficiency(power, flow, variant) { + calcEfficiency(power,flow,variant) { + + const pressureDiff = this.measurements.type('pressure').variant('measured').difference('Pa'); + const g = gravity.getStandardGravity(); + const temp = this.measurements.type('temperature').variant('measured').position('atEquipment').getCurrentValue('K'); + const atmPressure = this.measurements.type('atmPressure').variant('measured').position('atEquipment').getCurrentValue('Pa'); + const rho = coolprop.PropsSI('D', 'T', temp, 'P', atmPressure, 'WasteWater'); + + + this.logger.debug(`temp: ${temp} atmPressure : ${atmPressure} rho : ${rho} pressureDiff: ${pressureDiff?.value || 0}`); + const flowM3s = this.measurements.type('flow').variant('predicted').position('atEquipment').getCurrentValue('m3/s'); + const powerWatt = this.measurements.type('power').variant('predicted').position('atEquipment').getCurrentValue('W'); + this.logger.debug(`Flow : ${flowM3s} power: ${powerWatt}`); if (power != 0 && flow != 0) { - // Calculate efficiency after measurements update - this.measurements.type("efficiency").variant(variant).position('atEquipment').value((flow / power)); - } else { - this.measurements.type("efficiency").variant(variant).position('atEquipment').value(null); - } + const specificFlow = flow / power; + const specificEnergyConsumption = power / flow; + this.measurements.type("efficiency").variant(variant).position('atEquipment').value(specificFlow); + this.measurements.type("specificEnergyConsumption").variant(variant).position('atEquipment').value(specificEnergyConsumption); + + if(pressureDiff?.value != null && flowM3s != null && powerWatt != null){ + const meterPerBar = pressureDiff.value / rho * g; + const nHydraulicEfficiency = rho * g * flowM3s * (pressureDiff.value * meterPerBar ) / powerWatt; + this.measurements.type("nHydraulicEfficiency").variant(variant).position('atEquipment').value(nHydraulicEfficiency); + } + + } + + //change this to nhydrefficiency ? return this.measurements.type("efficiency").variant(variant).position('atEquipment').getCurrentValue(); } @@ -768,8 +801,8 @@ _callMeasurementHandler(measurementType, value, position, context) { module.exports = Machine; /*------------------- Testing -------------------*/ -/* +/* curve = require('C:/Users/zn375/.node-red/public/fallbackData.json'); //import a child