public void Start() { if (DaqReceiver == null) { RobinChannel[] channels = new RobinChannel[8]; for (int i = 0; i < channels.Length; i++) { channels[i] = new RobinChannel(i, Settings.Default.AsyncFMax, Settings.Default.AsyncLine); } int packetCountFor1Sec = (int)(Settings.Default.AsyncFMax / 3200.0 * 16.0); DaqReceiver = new Daq5509Receiver(ModuleIp, channels, packetCountFor1Sec); DaqReceiver.WavesReceived += DaqReceiver_WaveReceived; } DaqReceiver.Start(); }
//public static double[] CalculateScalars(DateTime now, TsiMsg.WaveData wave, RobinChannel ch, RobinMeasure[] measures, float gap, WinTrace trace) //{ // return CalculateScalars(now, wave.AsyncData, wave.Rpm, ch, measures, gap, trace, null); //} public static double[] CalculateScalars(DateTime now, float[] values, float rpm, RobinChannel ch, RobinMeasure[] measures, float gap) { //var valuesLength = wave.AsyncDataCount; var valuesLength = values.Length; int m = (int)Math.Round(Math.Log10((double)valuesLength) / Math.Log10(2.0)); var Fs = ch.AsyncFMax * 2.56; var freq = new double[valuesLength / 2]; var rms = new double[valuesLength / 2]; //var windowFunc = WindowFunction.Hamming; var measList = new double[measures.Length]; var logStr = new StringBuilder(); logStr.Append("CH" + ch.Id + ","); double[] Pxx; for (int i = 0; i < measList.Length; i++) { var measure = measures[i]; switch (measure.Type) { case RobinMeasureType.Bandpass: measList[i] = GetBandpass(values, ch.AsyncFMax, WindowFunction.Hanning, measure.SpectrumUnit, // Unit2Type.rms, measure.BandLow, measure.BandHigh, measure.Integral); break; case RobinMeasureType.OrderBandpass: double bandLow = measure.BandLow * rpm / 60.0; double bandHigh = measure.BandHigh * rpm / 60.0; measList[i] = GetBandpass(values, ch.AsyncFMax, WindowFunction.Hanning, measure.SpectrumUnit, //Unit2Type.rms, bandLow, bandHigh, measure.Integral); break; case RobinMeasureType.CrestFactor: measList[i] = CmsMath.crestFactorValue(values, valuesLength); break; case RobinMeasureType.Peak: measList[i] = CmsMath.peakValue(values, valuesLength); break; case RobinMeasureType.DC: measList[i] = gap * 1000.0 / ch.Sensitivity + measure.Offset; //TODO: Sensitivity에 보정치 적용(대신 저 *1000을 업애면서 기존DB와 호환되게) break; case RobinMeasureType.PtoP: int CmsLowPeakIndex = 5; if (CmsLowPeakIndex <= 0) { measList[i] = CmsMath.peak2peak(values, valuesLength); } else { var orderedValues = values.OrderBy(v => v).ToArray(); var lowerPeak = orderedValues[CmsLowPeakIndex]; var upperPeak = orderedValues[orderedValues.Length - 1]; measList[i] = upperPeak - lowerPeak; } break; case RobinMeasureType.Custom: measList[i] = GetBandpass(values, ch.AsyncFMax, WindowFunction.Hanning, measure.SpectrumUnit, // Unit2Type.rms, measure.BandLow, measure.BandHigh, measure.Integral); break; default: logStr.Append("### UNDEFINED FUNCTION TYPE ###"); break; } //logStr.Append(measure.Name + "-" + measList[i].ToString("F3") + ","); } return(measList); }