示例#1
0
 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();
 }
示例#2
0
        //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);
        }