Ejemplo n.º 1
0
        /// <summary>
        /// 来自iDAU的计算请求
        /// </summary>
        public static int CalcAndSave(int structid, int module, int channel, float fs, DateTime acqTime, float[] orgdata, out string err)
        {
            int    affectCnt   = 0;
            double sensitivity = 1; // 灵敏度系数
            int    formulaid   = 0; // 计算公式

            err = "";

            var sensorid = DataAccessHelper.GetSensorId(structid, module, channel);

            if (sensorid == -1)
            {
                err = string.Format("传感器 {0}-{1}-{2} 不存在", structid, module, channel);
                return(0);
            }
            if (!DataAccessHelper.GetSensorParameter1(sensorid, out sensitivity, out formulaid))
            {
                err = string.Format("传感器 {0}-{1}-{2} 参数不存在", structid, module, channel);
                return(0);
            }

            double[] freq, ampl;
            var      org = new double[orgdata.Length];

            for (int i = 0; i < org.Length; i++)
            {
                org[i] = orgdata[i];
            }

            PhisicalTrans(ref org, sensitivity);

            if (formulaid == 21) // 包含滤波
            {
                org = RemoveDcAndFilterWave(org);
                TWFFT.FFTData(org, fs, 1024, out ampl, out freq);//带平均的FFT
            }
            else
            {
                var tmp = (double[])org.Clone();
                TWFFT.FFTData1(tmp, null, fs, out ampl, out freq);
                ampl[0] = 0;    // 消除频谱中的直流分量
            }

            CheckRedundancy(sensorid, acqTime);
#if USE_BULK_COPY
            affectCnt = InsertDataBulk(sensorid, (int)fs, acqTime, org, freq, ampl);
#else
            affectCnt = InsertData(sensorid, (int)fs, acqTime, org, freq, ampl);
#endif
            return(affectCnt);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 振动数据FFT计算/物理量转换
        /// -- 来自数据接收的计算请求
        /// </summary>
        /// <param name="sensorid">传感器ID</param>
        /// <param name="acqTime">采集时间</param>
        /// <param name="filepath">文件路径</param>
        /// <returns>共插入的振动数据个数(原始数据和FFT数据) -1:false </returns>
        public static int CalcAndSave(int sensorid, DateTime acqTime, string filepath)
        {
            int    affectCnt   = 0;
            double sensitivity = 1;         // 灵敏度系数
            int    formulaid   = 0;         // 计算公式
            var    structId    = DataAccessHelper.GetSensorStruct(sensorid);

            if (!DataAccessHelper.GetSensorParameter1(sensorid, out sensitivity, out formulaid))
            {
                _logger.Warn(string.Format("计算振动数据时发生错误,传感器{0}未能找到计算系数", sensorid));
                return(-1);
            }

            double[] freq, ampl;
            double   fs = ReadParam(filepath).diSampleFreq;

            double[] org = ReadDatum(filepath);
            PhisicalTrans(ref org, sensitivity);
            // --FILTER BEGIN--
            if (structId > 0)
            {
                var    filter = ConfigHelper.GetAccFilter(structId);
                string err    = "";
                if (filter != null && !filter.IsValid(org, out err))
                {
                    throw new Exception(err);
                }
            }
            // --FILTER END--

            if (formulaid == 21) // 包含滤波
            {
                org = RemoveDcAndFilterWave(org);
                TWFFT.FFTData(org, fs, 1024, out ampl, out freq);//带平均的FFT
            }
            else
            {
                var tmp = (double[])org.Clone();
                TWFFT.FFTData1(tmp, null, fs, out ampl, out freq);
                ampl[0] = 0;    // 消除频谱中的直流分量
            }

            CheckRedundancy(sensorid, acqTime); // 检查数据库中是否有重复数据

#if USE_BULK_COPY
            affectCnt = InsertDataBulk(sensorid, (int)fs, acqTime, org, freq, ampl);
#else
            affectCnt = InsertData(sensorid, (int)fs, acqTime, org, freq, ampl);
#endif
            return(affectCnt);
        }