public string GetMeasureSite(int id)
        {
            string                 result   = string.Empty;
            List <MonitorTree>     monitors = monitorTreeRepository.GetDatas <MonitorTree>(t => true, true).ToList();
            List <MonitorTreeType> mtTypes  = monitorTreeTypeRepository.GetDatas <MonitorTreeType>(t => true, true).ToList();

            MeasureSite msite = measureSiteRepository.GetByKey(id);

            if (msite != null)
            {
                int    serialNo = 0;
                string msName   = string.Empty;
                var    msType   = measureSiteTypeRepository.GetByKey(msite.MSiteName);
                if (msType != null)
                {
                    msName = msType.Name;
                    Int32.TryParse(msType.Describe, out serialNo);
                }

                var device = deviceRepository.GetByKey(msite.DevID);
                if (device != null)
                {
                    result = Json.Stringify(getdata.GetMeasuresite(msite, monitors, device, msName, serialNo, mtTypes));
                }
            }

            return(result);
        }
        /// <summary>
        /// 包络历史表中添加数据
        /// </summary>
        /// <param name="param">采集数据对象</param>
        /// <param name="site">测点信息</param>
        /// <param name="dev">设备信息</param>
        /// <param name="vibSignal">信号类型信息</param>
        /// <param name="peakWarnValue">峰值高报值</param>
        /// <param name="peakAlmValue">峰值高高报值</param>
        /// <param name="carpetWarnValue">地毯值高报值</param>
        /// <param name="carpetAlmValue">地毯值高高报值</param>
        private void InsterVibratingSingalHisEnvl(UploadWaveDataParameter param, MeasureSite site, Device dev, VibSingal vibSignal,
                                                  float?peakWarnValue, float?peakAlmValue, float?carpetWarnValue, float?carpetAlmValue, float realSamplingFrequency, bool isSaveWave = true)
        {
            int status = GetSignalStatus(vibSignal.SingalID);
            VibratingSingalCharHisEnvl vibSingalHisAcc = new VibratingSingalCharHisEnvl()
            {
                SingalID              = vibSignal.SingalID,
                MsiteID               = site.MSiteID,
                DevID                 = dev.DevID,
                SamplingDate          = param.SamplingDate,
                WaveDataPath          = isSaveWave ? GetWaveTxtFileName(vibSignal.SingalID, param.SamplingDate) : string.Empty,
                TransformCofe         = 1,
                SamplingPointData     = param.WaveData == null ? 0 : param.WaveData.Length,
                AlmStatus             = status,
                DAQStyle              = 1,
                PeakValue             = param.PeakValue,
                CarpetValue           = param.CarpetValue,
                PeakWarnValue         = peakWarnValue,
                PeakAlmValue          = peakAlmValue,
                CarpetWarnValue       = carpetWarnValue,
                CarpetAlmValue        = carpetAlmValue,
                MonthDate             = param.SamplingDate.Month,
                RealSamplingFrequency = realSamplingFrequency,
                Rotate                = GetRotationFrequency(site, param.SamplingDate, 1),

                SamplingDataType = (int)EnumSamplingDataType.WiredSensor
            };

            //vibSignalRepository.Update(vibSignal);
            vibratingSingalCharHisEnvlRepository.AddNew(vibSingalHisAcc);
        }
Example #3
0
        /// <summary>
        /// 创建新的报警记录对象
        /// </summary>
        /// <param name="dev">设备信息</param>
        /// <param name="msite">测量位置信息</param>
        /// <param name="signal">振动信号信息</param>
        /// <param name="signalAlmSet">振动信号报警设置信息</param>
        /// <param name="samplingData">采集时间</param>
        /// <param name="value">采集数据值</param>
        /// <returns></returns>
        private DevAlmRecord CreatNewVibrationAlmRecord(Device dev, MeasureSite msite, VibSingal signal,
                                                        SignalAlmSet signalAlmSet, DateTime samplingTime, float?value)
        {
            try
            {
                DevAlmRecord nRecord = new DevAlmRecord();
                //GetMonitorTree getMonitorTree = new GetMonitorTree(wgRepository, deviceRepository, monitorTreeRepository);
                nRecord.DevID   = dev.DevID;
                nRecord.DevName = dev.DevName;
                nRecord.DevNO   = dev.DevNO.ToString();
                nRecord.MSiteID = msite.MSiteID;

                string measureSiteName = string.Empty;
                var    measureSiteType = cacheDICT.GetInstance().GetCacheType <MeasureSiteType>(p => p.ID == msite.MSiteName).FirstOrDefault();
                //空判断 王颖辉  2016-08-30
                if (measureSiteType != null)
                {
                    measureSiteName = measureSiteType.Name;
                }

                nRecord.MSiteName = measureSiteName;
                nRecord.SingalID  = signal.SingalID;

                string singalName          = string.Empty;
                var    vibratingSingalType = cacheDICT.GetInstance().GetCacheType <VibratingSingalType>(p => p.ID == signal.SingalType).FirstOrDefault();
                if (vibratingSingalType != null)
                {
                    singalName = vibratingSingalType.Name;
                }
                nRecord.SingalName  = singalName;
                nRecord.SingalAlmID = signalAlmSet.SingalAlmID;
                string eigenValueName = string.Empty;
                var    eigenValueType = cacheDICT.GetInstance().GetCacheType <EigenValueType>(p => p.ID == signalAlmSet.ValueType).FirstOrDefault();
                if (eigenValueType != null)
                {
                    eigenValueName = eigenValueType.Name;
                }
                nRecord.SingalValue     = eigenValueName;
                nRecord.MSAlmID         = (int)EnumAlarmRecordType.DeviceVibration;
                nRecord.AlmStatus       = signalAlmSet.Status;
                nRecord.SamplingValue   = value;
                nRecord.WarningValue    = signalAlmSet.WarnValue;
                nRecord.DangerValue     = signalAlmSet.AlmValue;
                nRecord.BDate           = samplingTime;
                nRecord.EDate           = samplingTime;
                nRecord.LatestStartTime = samplingTime;
                nRecord.MonitorTreeID   = string.Empty;//getMonitorTree.ConvertMonitorTreeIDString(dev.DevID, null);
                nRecord.Content         = string.Format("{0}{1}{2}{3}{4}", nRecord.DevName, nRecord.MSiteName,
                                                        nRecord.SingalName, nRecord.SingalValue,
                                                        ConvertStatusToString(signalAlmSet.Status));

                return(nRecord);
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(ex);
                return(null);
            }
        }
        private AlarmThreshold GetVoltAlmSet(VoltageSetMSiteAlm voltAlmSet)
        {
            AlarmThreshold alarm = null;
            MeasureSite    site  = measureSiteRepository.GetByKey(voltAlmSet.MsiteID);

            if (site != null)
            {
                YunyiCloudDataType type      = YunyiCloudDataType.Sensor;
                string             valueType = CommonVariate.WS_VOLTAGE_SET;
                int objectid = (int)site.WSID;
                alarm = getdata.GetMeasureSiteAlmSet(voltAlmSet, type, objectid, valueType);
            }
            return(alarm);
        }
        private void VoltagePost(VoltageData voltage)
        {
            MeasureSite site = MeasureSiteRepository.GetByKey(voltage.MSiteID);

            if (site != null)
            {
                GetYunyiInterfaceData getData = new GetYunyiInterfaceData();
                SensorPerformance     perg    = getData.GetSensorPerformance(voltage, site);
                if (perg != null)
                {
                    List <SensorPerformance> lt = new List <SensorPerformance>();
                    lt.Add(perg);
                    string result   = iCMS.Common.Component.Tool.Extensions.Json.Stringify(lt);
                    string response = CommunicationHelper.SendData(result, CommonVariate.Cloud_URL_Sensorperfs);
                }
            }
        }
        private AlarmThreshold GetTempeAlmSet(TempeDeviceSetMSiteAlm almset)
        {
            AlarmThreshold        alarm   = null;
            GetYunyiInterfaceData getData = new GetYunyiInterfaceData();

            MeasureSite site = measureSiteRepository.GetByKey(almset.MsiteID);

            if (site != null)
            {
                YunyiCloudDataType type      = YunyiCloudDataType.MeasureSite;
                string             valueType = CommonVariate.DEVICE_TEMPE_SET;
                int objectid = almset.MsiteID;
                type = YunyiCloudDataType.MeasureSite;

                alarm = getData.GetMeasureSiteAlmSet(almset, type, objectid, valueType);
            }
            return(alarm);
        }
        private CloudSignal GetCloudSignal(VibSingal signal)
        {
            CloudSignal            cSignal  = null;
            List <MonitorTree>     monitors = monitorTreeRepository.GetDatas <MonitorTree>(t => true, true).ToList();
            MeasureSite            site     = measureSiteRepository.GetByKey(signal.MSiteID);
            List <MonitorTreeType> mtTypes  = monitorTreeTypeRepository.GetDatas <MonitorTreeType>(t => true, true).ToList();

            if (site != null)
            {
                Device device = deviceRepository.GetByKey(site.DevID);
                if (device != null)
                {
                    //将波长上下限,带宽,滤波等信息转换为实际的值
                    GetVibSignalPara(signal);

                    cSignal = getdata.GetSignal(signal, site, device, monitors, mtTypes);
                }
            }
            return(cSignal);
        }
        /// <summary>
        /// 速度历史表中添加数据
        /// </summary>
        /// <param name="param">采集数据对象</param>
        /// <param name="site">测点信息</param>
        /// <param name="dev">设备信息</param>
        /// <param name="vibSignal">信号类型信息</param>
        /// <param name="peakWarnValue">峰值高报值</param>
        /// <param name="peakAlmValue">峰值高高报值</param>
        /// <param name="peakPeakWarnValue">峰峰值高报值</param>
        /// <param name="peakPeakAlmValue">峰峰值高高报值</param>
        /// <param name="effWarnValue">有效值高报值</param>
        /// <param name="effAlmValue">有效值高高报值</param>
        private void InsterVibratingSingalHisVel(UploadWaveDataParameter param, MeasureSite site, Device dev, VibSingal vibSignal,
                                                 float?peakWarnValue, float?peakAlmValue, float?peakPeakWarnValue, float?peakPeakAlmValue,
                                                 float?effWarnValue, float?effAlmValue, float realSamplingFrequency, bool isWaveDataSaved = true)
        {
            string rotate = ConstObject.RotationFrequency_Default;

            if (dev.Rotate > 0)
            {
                rotate = CalculateRotationFrequencyByVelocityWave(param, dev.Rotate, vibSignal);
            }
            int status = GetSignalStatus(vibSignal.SingalID);
            VibratingSingalCharHisVel vibSingalHisVel = new VibratingSingalCharHisVel()
            {
                SingalID              = vibSignal.SingalID,
                MsiteID               = site.MSiteID,
                DevID                 = dev.DevID,
                SamplingDate          = param.SamplingDate,
                WaveDataPath          = isWaveDataSaved ? GetWaveTxtFileName(vibSignal.SingalID, param.SamplingDate) : null,
                TransformCofe         = 1,
                SamplingPointData     = param.WaveData == null ? 0 : param.WaveData.Length,
                AlmStatus             = status,
                DAQStyle              = 1,
                PeakValue             = param.PeakValue,
                PeakPeakValue         = param.PeakPeakValue,
                EffValue              = param.EffectiveValue,
                PeakWarnValue         = peakWarnValue,
                PeakAlmValue          = peakAlmValue,
                PeakPeakWarnValue     = peakPeakWarnValue,
                PeakPeakAlmValue      = peakPeakAlmValue,
                EffWarnValue          = effWarnValue,
                EffAlmValue           = effAlmValue,
                MonthDate             = param.SamplingDate.Month,
                RealSamplingFrequency = realSamplingFrequency,
                Rotate                = rotate,

                SamplingDataType = (int)EnumSamplingDataType.WiredSensor,
            };

            vibratingSingalCharHisVelRepository.AddNew(vibSingalHisVel);
        }
        private Sensor GetSensor(WS ws)
        {
            Sensor                 sensor   = null;
            List <MonitorTree>     monitors = monitorTreeRepository.GetDatas <MonitorTree>(t => true, true).ToList();
            List <MonitorTreeType> mtTypes  = monitorTreeTypeRepository.GetDatas <MonitorTreeType>(t => true, true).ToList();
            MeasureSite            site     = measureSiteRepository.GetDatas <MeasureSite>(t => t.WSID == ws.WSID, false).FirstOrDefault();

            if (site != null)
            {
                var msType = measureSiteTypeRepository.GetByKey(site.MSiteName);
                if (msType != null)
                {
                    string siteName = msType.Name;
                    Device device   = deviceRepository.GetDatas <Device>(t => t.DevID == site.DevID, false).FirstOrDefault();
                    if (device != null)
                    {
                        sensor = getdata.GetSensor(ws, site, device, monitors, siteName, mtTypes);
                    }
                }
            }
            return(sensor);
        }
        private Alarm GetWsnAlarmRecord(WSnAlmRecord record)
        {
            Alarm alarm = null;
            GetYunyiInterfaceData getData = new GetYunyiInterfaceData();
            MeasureSite           site    = measureSiteRepository.GetByKey(record.MSiteID);
            Device device = deviceRepository.GetByKey(record.DevID);

            if (site == null || device == null)
            {
                return(alarm);
            }

            switch (record.MSAlmID)
            {
            //传感器温度  不推送
            case 3:
                break;

            //传感器电池电压
            case 4:
                alarm = getData.GetWSAlarm(record, site, device);
                break;

            //传感器连接
            case 5:
                alarm = getData.GetWSAlarm(record, site, device);
                break;

            //6 网关连接
            case 6:
                alarm = getData.GetWGAlarm(record);
                break;

            default:
                break;
            }
            return(alarm);
        }
Example #11
0
        /// <summary>
        /// 创建新的报警记录对象
        /// </summary>
        /// <param name="dev">设备信息</param>
        /// <param name="msite">测量位置信息</param>
        /// <param name="msiteAlmSite">设备温度告警设置</param>
        /// <param name="samplingTime">采集时间</param>
        /// <param name="value">采集值</param>
        /// <returns></returns>
        private DevAlmRecord CreatNewTempAlmRecord(Device dev, MeasureSite msite, TempeDeviceSetMSiteAlm msiteAlmSite, DateTime samplingTime, float value)
        {
            try
            {
                DevAlmRecord nRecord = new DevAlmRecord();
                //GetMonitorTree getMonitorTree = new GetMonitorTree(wgRepository, deviceRepository, monitorTreeRepository);
                nRecord.DevID   = dev.DevID;
                nRecord.DevName = dev.DevName;
                nRecord.DevNO   = dev.DevNO.ToString();
                nRecord.MSiteID = msite.MSiteID;
                string measureSiteName = string.Empty;
                var    measureSiteType = cacheDICT.GetInstance().GetCacheType <MeasureSiteType>(p => p.ID == msite.MSiteName).FirstOrDefault();
                //空判断 王颖辉  2016-08-30
                if (measureSiteType != null)
                {
                    measureSiteName = measureSiteType.Name;
                }
                nRecord.MSiteName       = measureSiteName;
                nRecord.MSAlmID         = (int)EnumAlarmRecordType.DeviceTemperature;
                nRecord.AlmStatus       = msiteAlmSite.Status;
                nRecord.SamplingValue   = value;
                nRecord.WarningValue    = msiteAlmSite.WarnValue;
                nRecord.DangerValue     = msiteAlmSite.AlmValue;
                nRecord.BDate           = samplingTime;
                nRecord.EDate           = samplingTime;
                nRecord.LatestStartTime = samplingTime;
                nRecord.MonitorTreeID   = string.Empty; //getMonitorTree.ConvertMonitorTreeIDString(dev.DevID, null);
                nRecord.Content         = string.Format("{0}{1}{2}{3}", nRecord.DevName, nRecord.MSiteName,
                                                        "设备温度", ConvertStatusToString(msiteAlmSite.Status));

                return(nRecord);
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(ex);
                return(null);
            }
        }
        private Alarm GetDevAlmRecord(DevAlmRecord record)
        {
            Alarm       alarm  = null;
            MeasureSite site   = measureSiteRepository.GetByKey(record.MSiteID);
            Device      device = deviceRepository.GetByKey(record.DevID);

            switch (record.MSAlmID)
            {
            case 1:
                //振动信号报警
                VibSingal signal = vibSignalRepository.GetByKey(record.SingalID);
                //过滤掉位移,LQ振动信号的报警记录
                List <string> selectedVibsignalNames = new List <string> {
                    "加速度", "速度", "包络"
                };
                //取得佳讯需要的振动信号类型ID
                List <int> selectedTypeIDList = vibratingSingalTypeRepository.GetDatas <VibratingSingalType>
                                                    (t => selectedVibsignalNames.Contains(t.Name), true).Select(t => t.ID).ToList();
                if (signal != null && signal.DAQStyle == 1 && selectedTypeIDList.Contains(signal.SingalType))
                {
                    if (site != null && device != null)
                    {
                        alarm = getdata.GetVibrateionAlarm(record, signal, site, device);
                    }
                }
                break;

            case 2:
                //设备温度
                if (site != null && device != null)
                {
                    alarm = getdata.GetDevTempAlarm(record, site, device);
                }
                break;

            case 3:
                break;

            case 4:
                break;

            case 5:
                break;

            case 6:
                break;

            case 8:
                //趋势报警推送
                //趋势报警,慧萌新增报警类型,报警内容格式暂时不确定,暂定和之前一致
                //如果是临时测量定义 或者 LQ 不推送
                //VibSingal signalForThrend = DBServices.GetInstance().VibSingalProxy.GetByKey(record.SingalID);
                //过滤掉位移,LQ振动信号的报警记录

                //List<string> selectedVibsignalNamesForThrend = new List<string> { "加速度", "速度", "包络" };
                //取得佳讯需要的振动信号类型ID
                //List<int> selectedTypeIDListForThrend = DBServices.GetInstance().VibratingSingalTypeProxy.GetDatas<VibratingSingalType>
                //    (t => selectedVibsignalNamesForThrend.Contains(t.Name), true).Select(t => t.ID).ToList();

                //if (signalForThrend != null && signalForThrend.DAQStyle == 1 && selectedTypeIDListForThrend.Contains(signalForThrend.SingalType))
                //{
                //if (site != null && device != null)
                // {
                //    alarm = getData.GetThrendAlarm(record, signalForThrend, site, device);
                //}
                //  }
                break;
            }
            return(alarm);
        }
        /// <summary>
        /// 保存速度实时数据汇总
        /// </summary>
        /// <param name="param">上传数据对象</param>
        /// <param name="dev">设备信息</param>
        /// <param name="ws">WS信息</param>
        /// <param name="site">测量位置信息</param>
        /// <param name="vibSingal">振动信号信息</param>
        /// <param name="status">测量位置状态</param>
        private void SaveRealTimeCollectInfoWaveVel(UploadWaveDataParameter param, Device dev, MeasureSite site,
                                                    VibSingal vibSingal, int peakStatus, int peakPeakStatus, int effStatus,
                                                    DateTime peakSamplingDate, DateTime peakPeakSamplingDate, DateTime effSamplingDate)
        {
            try
            {
                //重新获取测点信息
                MeasureSite newMeasureSite = measureSiteRepository.GetByKey(site.MSiteID);

                //获取实时数据信息
                RealTimeCollectInfo realTimeCollectInfo = realTimeCollectInfoRepository
                                                          .GetDatas <RealTimeCollectInfo>(p => p.MSID == site.MSiteID, false)
                                                          .FirstOrDefault();
                if (realTimeCollectInfo == null)
                {
                    realTimeCollectInfo = new RealTimeCollectInfo();
                    MeasureSiteType siteType = cacheDICT.GetInstance().GetCacheType <MeasureSiteType>()
                                               .Where(p => p.ID == site.MSiteName).FirstOrDefault();
                    realTimeCollectInfo.DevID                 = dev.DevID;
                    realTimeCollectInfo.MSID                  = site.MSiteID;
                    realTimeCollectInfo.MSName                = siteType.Name;
                    realTimeCollectInfo.MSStatus              = newMeasureSite.MSiteStatus;
                    realTimeCollectInfo.MSDesInfo             = siteType.Describe;
                    realTimeCollectInfo.MSDataStatus          = 1;
                    realTimeCollectInfo.MSSpeedSingalID       = vibSingal.SingalID;
                    realTimeCollectInfo.MSSpeedVirtualValue   = param.EffectiveValue;
                    realTimeCollectInfo.MSSpeedPeakValue      = param.PeakValue;
                    realTimeCollectInfo.MSSpeedPeakPeakValue  = param.PeakPeakValue;
                    realTimeCollectInfo.MSSpeedVirtualStatus  = effStatus;
                    realTimeCollectInfo.MSSpeedPeakStatus     = peakStatus;
                    realTimeCollectInfo.MSSpeedPeakPeakStatus = peakPeakStatus;
                    realTimeCollectInfo.MSSpeedPeakTime       = (peakSamplingDate == DateTime.MinValue ? DateTime.Now : peakSamplingDate);
                    realTimeCollectInfo.MSSpeedPeakPeakTime   = (peakPeakSamplingDate == DateTime.MinValue ? DateTime.Now : peakPeakSamplingDate);
                    realTimeCollectInfo.MSSpeedVirtualTime    = (effSamplingDate == DateTime.MinValue ? DateTime.Now : effSamplingDate);

                    #region 添加网关连接状态 ADDED BY QXM, 2016/11/18
                    //var wg = gatewayRepository.GetByKey(ws.WGID);
                    //if (wg != null)
                    //{
                    //    realTimeCollectInfo.MSWGLinkStatus = wg.LinkStatus;
                    //}
                    #endregion

                    realTimeCollectInfoRepository.AddNew(realTimeCollectInfo);
                }
                else
                {
                    realTimeCollectInfo.MSStatus              = newMeasureSite.MSiteStatus;
                    realTimeCollectInfo.MSDataStatus          = 1;
                    realTimeCollectInfo.MSSpeedSingalID       = vibSingal.SingalID;
                    realTimeCollectInfo.MSSpeedVirtualValue   = param.EffectiveValue;
                    realTimeCollectInfo.MSSpeedPeakValue      = param.PeakValue;
                    realTimeCollectInfo.MSSpeedPeakPeakValue  = param.PeakPeakValue;
                    realTimeCollectInfo.MSSpeedVirtualStatus  = effStatus;
                    realTimeCollectInfo.MSSpeedPeakStatus     = peakStatus;
                    realTimeCollectInfo.MSSpeedPeakPeakStatus = peakPeakStatus;
                    realTimeCollectInfo.MSSpeedPeakTime       = (peakSamplingDate == DateTime.MinValue ? DateTime.Now : peakSamplingDate);
                    realTimeCollectInfo.MSSpeedPeakPeakTime   = (peakPeakSamplingDate == DateTime.MinValue ? DateTime.Now : peakPeakSamplingDate);
                    realTimeCollectInfo.MSSpeedVirtualTime    = (effSamplingDate == DateTime.MinValue ? DateTime.Now : effSamplingDate);
                    realTimeCollectInfoRepository.Update(realTimeCollectInfo);

                    #region 添加报警阈值在时实表中
                    List <EigenValueType> eigenValueTypeList = cacheDICT.GetInstance()
                                                               .GetCacheType <EigenValueType>()
                                                               .ToList();
                    //获取阈值
                    var alarmThresholdList = signalAlmSetRepository.GetDatas <SignalAlmSet>(item => item.SingalID == vibSingal.SingalID, true);
                    if (alarmThresholdList != null && alarmThresholdList.Any())
                    {
                        //阈值
                        foreach (var alarmThreshold in alarmThresholdList)
                        {
                            var eigenValue     = eigenValueTypeList.Where(item => item.ID == alarmThreshold.ValueType).FirstOrDefault();
                            var vibSignalType  = (int)EnumMeasureSiteThresholdType.VEL;
                            var eigenValueType = (int)EnumEigenType.EffectivityValue;
                            var samplingDate   = DateTime.Now;
                            switch (eigenValue.Code)
                            {
                            //有效值
                            case "EIGENVALUE_21_YXZ":
                            {
                                eigenValueType = (int)EnumEigenType.EffectivityValue;
                                samplingDate   = effSamplingDate;
                            }
                            break;

                            //峰值
                            case "EIGENVALUE_22_FZ":
                            {
                                eigenValueType = (int)EnumEigenType.PeakValue;
                                samplingDate   = peakSamplingDate;
                            }
                            break;

                            //峰峰值
                            case "EIGENVALUE_23_FFZ":
                            {
                                eigenValueType = (int)EnumEigenType.PeakPeakValue;
                                samplingDate   = peakPeakSamplingDate;
                            }
                            break;
                            }

                            var realTimeAlarmThreshold = realTimeAlarmThresholdRepository.GetDatas <RealTimeAlarmThreshold>(item =>
                                                                                                                            item.MeasureSiteID == site.MSiteID &&
                                                                                                                            item.MeasureSiteThresholdType == vibSignalType &&
                                                                                                                            item.EigenValueType == eigenValueType, true).FirstOrDefault();

                            //更新
                            if (realTimeAlarmThreshold != null)
                            {
                                //添加关联阈值表数据
                                realTimeAlarmThreshold.AlarmThresholdValue  = alarmThreshold.WarnValue;
                                realTimeAlarmThreshold.DangerThresholdValue = alarmThreshold.AlmValue;
                                realTimeAlarmThresholdRepository.Update(realTimeAlarmThreshold);
                            }
                            else
                            {
                                //添加关联阈值表数据
                                realTimeAlarmThreshold = new RealTimeAlarmThreshold();
                                realTimeAlarmThreshold.MeasureSiteID            = site.MSiteID;
                                realTimeAlarmThreshold.MeasureSiteThresholdType = vibSignalType;
                                realTimeAlarmThreshold.AddDate              = DateTime.Now;
                                realTimeAlarmThreshold.AlarmThresholdValue  = alarmThreshold.WarnValue;
                                realTimeAlarmThreshold.DangerThresholdValue = alarmThreshold.AlmValue;
                                realTimeAlarmThreshold.EigenValueType       = eigenValueType;
                                realTimeAlarmThreshold.SamplingDate         = samplingDate;
                                realTimeAlarmThresholdRepository.AddNew(realTimeAlarmThreshold);
                            }
                        }
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(ex);
            }
        }
        /// <summary>
        /// 保存和更新振动速度波形数据
        /// </summary>
        /// <param name="param">采集波形参数</param>
        /// <param name="site">测量位置信息</param>
        /// <param name="dev">设备信息</param>
        /// <param name="ws">WS信息</param>
        /// <param name="signalTypeName">振动信号类型名称</param>
        private void SaveAndUpdateSignalVelData(UploadWaveDataParameter param, MeasureSite site, Device dev, int signalTypeID)
        {
            int status = (int)EnumAlarmStatus.Normal;

            float?peakWarnValue     = null;
            float?peakAlmValue      = null;
            float?peakPeakWarnValue = null;
            float?peakPeakAlmValue  = null;
            float?effWarnValue      = null;
            float?effAlmValue       = null;

            int peakStatus     = 0;
            int peakPeakStatus = 0;
            int effStatus      = 0;

            DateTime peakSamplingDate     = DateTime.MinValue;
            DateTime peakPeakSamplingDate = DateTime.MinValue;
            DateTime effSamplingDate      = DateTime.MinValue;

            //特征值定义
            try
            {
                //根据信号类型ID获取振动信号信息
                VibSingal vibSignal = vibSignalRepository
                                      .GetDatas <VibSingal>(p => p.SingalType == signalTypeID && p.MSiteID == site.MSiteID, false)
                                      .FirstOrDefault();
                if (vibSignal == null)
                {
                    //此处可添加错误代码
                    return;
                }
                //判断振动波形数据是否重复
                bool isDataRepeat = vibratingSingalCharHisVelRepository
                                    .GetDatas <VibratingSingalCharHisVel>(p => p.SingalID == vibSignal.SingalID &&
                                                                          p.SamplingDate == param.SamplingDate && p.MonthDate == param.SamplingDate.Month, false).Any();
                if (isDataRepeat)
                {
                    //此处可添加错误代码
                    return;
                }

                //获取振动信号类型的警告和告警阈值
                List <SignalAlmSet> signalAlmList = signalAlmSetRepository
                                                    .GetDatas <SignalAlmSet>(p => p.SingalID == vibSignal.SingalID, false)
                                                    .ToList();
                //获取速度中的特征值类型信息
                List <EigenValueType> eigenValueTypeList = cacheDICT.GetInstance()
                                                           .GetCacheType <EigenValueType>(p => p.VibratingSignalTypeID == signalTypeID)
                                                           .ToList();
                float?hisDataValue = 0;
                if (signalAlmList != null)
                {
                    foreach (SignalAlmSet signalAlm in signalAlmList)
                    {
                        foreach (EigenValueType eigenValueType in eigenValueTypeList)
                        {
                            if (signalAlm.ValueType == eigenValueType.ID)
                            {
                                switch (eigenValueType.Name)
                                {
                                case ConstObject.Peak_Value:
                                {
                                    GetSamplingDataStatus(signalAlm.WarnValue, signalAlm.AlmValue,
                                                          param.PeakValue, ref status, vibSignal.SingalID, signalAlm.ValueType);
                                    peakWarnValue    = signalAlm.WarnValue;
                                    peakAlmValue     = signalAlm.AlmValue;
                                    peakStatus       = status;
                                    peakSamplingDate = param.SamplingDate;
                                    hisDataValue     = param.PeakValue;
                                    break;
                                }

                                case ConstObject.Peak_Peak_Value:
                                {
                                    GetSamplingDataStatus(signalAlm.WarnValue, signalAlm.AlmValue,
                                                          param.PeakPeakValue, ref status, vibSignal.SingalID, signalAlm.ValueType);
                                    peakPeakWarnValue    = signalAlm.WarnValue;
                                    peakPeakAlmValue     = signalAlm.AlmValue;
                                    peakPeakStatus       = status;
                                    peakPeakSamplingDate = param.SamplingDate;
                                    hisDataValue         = param.PeakPeakValue;
                                    break;
                                }

                                case ConstObject.Effectivity_Value:
                                {
                                    GetSamplingDataStatus(signalAlm.WarnValue, signalAlm.AlmValue,
                                                          param.EffectiveValue, ref status, vibSignal.SingalID, signalAlm.ValueType);
                                    effWarnValue    = signalAlm.WarnValue;
                                    effAlmValue     = signalAlm.AlmValue;
                                    effStatus       = status;
                                    effSamplingDate = param.SamplingDate;
                                    hisDataValue    = param.EffectiveValue;
                                    break;
                                }

                                default:
                                    break;
                                }
                                //判断上传临时采集数据时,不判断告警信息和入库
                                if (/*param.DAQStyle != "2"*/ true)
                                {
                                    if (ConstObject.AlarmsConfirmed && false)//此处添加持续报警判断条件
                                    {
                                        //RecordAlarmCount recordAlarmCout = CollectionsExtensions.recordAlmCountList
                                        //   .Where(p => p.SignalID == vibSignal.SingalID && p.EigenValueTypeID == signalAlm.ValueType).FirstOrDefault();
                                        //if (recordAlarmCout == null)
                                        //{
                                        //    continue;
                                        //}
                                        //if (recordAlarmCout.WarnCount == 3 || recordAlarmCout.AlarmCount == 3 || status == (int)EnumAlarmStatus.Normal)
                                        //{

                                        //    //更新振动信号特征值阈值设置表
                                        //    signalAlm.Status = status;
                                        //    signalAlmSetRepository.Update(signalAlm);

                                        //    #region QXM ADDED 2017/01/19
                                        //    ModifyStatusBeyondSignal(signalAlm.SingalID);
                                        //    #endregion

                                        //    UpdateVibratingSingalAlarmVel(signalAlm, dev, site, vibSignal, param.SamplingDate, hisDataValue);

                                        //    //vibSignal.SingalStatus = status;
                                        //}
                                    }
                                    else
                                    {
                                        if (signalAlm.Status != status || (signalAlm.Status == status && status != (int)EnumAlarmStatus.Normal))
                                        {
                                            //更新振动信号特征值阈值设置表
                                            signalAlm.Status = status;
                                            signalAlmSetRepository.Update(signalAlm);

                                            #region QXM ADDED 2017/01/19
                                            ModifyStatusBeyondSignal(signalAlm.SingalID);
                                            #endregion

                                            UpdateVibratingSingalAlarmVel(signalAlm, dev, site, vibSignal, param.SamplingDate, hisDataValue);

                                            //vibSignal.SingalStatus = status;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (FilterSamplingVel(ref param, peakAlmValue, peakPeakAlmValue, effAlmValue))
                {
                    if (param.IsWave)
                    {
                        RecordWaveToTxt(vibSignal.SingalID, param);
                    }

                    WaveUpperLimitValues waveValuesObject =
                        cacheDICT.GetCacheType <WaveUpperLimitValues>(item => item.ID == vibSignal.UpLimitFrequency)
                        .FirstOrDefault();
                    InsterVibratingSingalHisVel(param, site, dev, vibSignal, peakWarnValue,
                                                peakAlmValue, peakPeakWarnValue, peakPeakAlmValue, effWarnValue, effAlmValue,
                                                GetRealSamplingFrequency(waveValuesObject.WaveUpperLimitValue), param.IsWave);
                    SaveRealTimeCollectInfoWaveVel(param, dev, site, vibSignal, peakStatus,
                                                   peakPeakStatus, effStatus, peakSamplingDate, peakPeakSamplingDate, effSamplingDate);
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(ex);
            }
        }
        /// <summary>
        /// 更新速度振动信号特征值报警状态
        /// </summary>
        /// <param name="signalAlmSet">振动信号特征值告警设置</param>
        /// <param name="dev">设备信息</param>
        /// <param name="site">测量位置信息</param>
        /// <param name="vibsingal">振动信号信息</param>
        /// <param name="samplingData">采集时间</param>
        private void UpdateVibratingSingalAlarmVel(SignalAlmSet signalAlmSet, Device dev, MeasureSite site,
                                                   VibSingal vibsingal, DateTime samplingTime, float?hisDataValue)
        {
            DeviceVibtationAlarmParameter devVibtationAlarmParam = new DeviceVibtationAlarmParameter()
            {
                AlmSet       = signalAlmSet,
                Dev          = dev,
                MSite        = site,
                Signal       = vibsingal,
                SamplingTime = samplingTime,
                HisDataValue = hisDataValue
            };

            deviceVibrationAlarm.DevVibAlmRecordManager(devVibtationAlarmParam);
        }
Example #16
0
        public static bool CloudSend(ICMSTreeNode treeNode)
        {
            CloudDataProvider dataProvider = new CloudDataProvider();
            string            cloudData    = string.Empty;

            switch (treeNode.DataType)
            {
            case EnumCloudOperationType.Enterprise:
                cloudData = dataProvider.GetEnterprise(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_Enterprises);
                break;

            case EnumCloudOperationType.Workshop:
                cloudData = dataProvider.GetWorkshop(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_Workshops);
                break;

            case EnumCloudOperationType.Device:
                cloudData = dataProvider.GetDevice(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_Devices);
                break;

            case EnumCloudOperationType.Measuresite:
                //推送测点时候同时需要推送测点相应的WS
                cloudData = dataProvider.GetMeasureSite(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_Measuresites);

                ///推送MeasureSite时,同时推送相应的WS
                cloudData = string.Empty;
                IRepository <MeasureSite> measureSiteRepositiory = new Repository <MeasureSite>();
                MeasureSite msite = measureSiteRepositiory.GetByKey(treeNode.TableID);
                if (msite != null && msite.WSID.HasValue)
                {
                    cloudData = dataProvider.GetWS(msite.WSID.Value);
                    ExecSend(cloudData, CommonVariate.Cloud_URL_Sensors);
                }

                break;

            case EnumCloudOperationType.VibSignal:
                cloudData = dataProvider.GetVibSignal(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_Signals);
                break;

            case EnumCloudOperationType.BatteryVoltageAlarmSet:
                cloudData = dataProvider.GetVolateAlmSet(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_AlarmThresholds);
                break;

            case EnumCloudOperationType.DeviceTemperatureAlarmSet:
                cloudData = dataProvider.GetDeviceTempeAlmSet(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_AlarmThresholds);
                break;

            case EnumCloudOperationType.SignalAlarmSet:
                cloudData = dataProvider.GetVibSignalAlmSet(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_AlarmThresholds);
                break;

            case EnumCloudOperationType.WirelessGateway:
                cloudData = dataProvider.GetWG(treeNode.TableID);
                ExecSend(cloudData, CommonVariate.Cloud_URL_WirelessGateways);
                break;

            default:
                break;
            }

            //3.推送
            return(true);
        }