/// <summary> /// 过滤上传数据与配置采集定义是否一致 Add By LF /// </summary> /// <param name="param"></param> /// <returns></returns> private bool FilterSamplingVel(ref UploadWaveDataParameter param, float?peakAlmValue, float?peakPeakAlmValue, float?effAlmValue) { bool filter = false; if (peakAlmValue == null) { param.PeakValue = null; } else if (param.PeakValue != null) { filter = true; } if (peakPeakAlmValue == null) { param.PeakPeakValue = null; } else if (param.PeakPeakValue != null) { filter = true; } if (effAlmValue == null) { param.EffectiveValue = null; } else if (param.EffectiveValue != null) { filter = true; } return(filter); }
/// <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); }
/// <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); }
/// <summary> /// 过滤上传数据与配置采集定义是否一致 Add By LF /// </summary> /// <param name="param"></param> /// <returns></returns> private bool FilterSamplingEnvl(ref UploadWaveDataParameter param, float?peakAlmValue, float?carpetAlmValue) { bool filter = false; if (peakAlmValue == null) { param.PeakValue = null; } else if (param.PeakValue != null) { filter = true; } if (carpetAlmValue == null) { param.CarpetValue = null; } else if (param.CarpetValue != null) { filter = true; } return(filter); }
/// <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); } }