| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 处理历史数据 |
| | | /// </summary> |
| | | /// <param name="monitor">测点</param> |
| | | /// <param name="signal">信号</param> |
| | | /// <param name="receiveRecord">接收记录</param> |
| | | /// <param name="dataTime">数据时间</param> |
| | | /// <returns>为null则不需要后续处理</returns> |
| | | public static Model.MonitorBasicRecord HandleHistory |
| | | ( |
| | | Model.MonitorPoint monitor, |
| | | Model.Signal_SignalType signal, |
| | | Model.MonitorDataDockingReceiveRecord receiveRecord, |
| | | DateTime dataTime |
| | | ) |
| | | { |
| | | Model.MonitorBasicRecord record = null;//监测记录 |
| | | var dataStatus = receiveRecord.DataStatus;//数据状态 |
| | | if (dataStatus == null) |
| | | dataStatus = new List<string>(); |
| | | var dataValue = receiveRecord.SrcValue;//数据值 |
| | | |
| | | |
| | | #region 通过信号类型的值类型和信号的数据类型进行相关的换算 |
| | | |
| | | switch (signal.SignalType.ValueType) |
| | | { |
| | | case Model.Monitor.eValueType.Numeric: |
| | | { |
| | | //数值验证 |
| | | if (!double.TryParse(dataValue, out double dataValueNumeric)) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_DataFormatError); |
| | | break; |
| | | } |
| | | |
| | | //数据转换 |
| | | if (signal.ConvertParas != null) |
| | | { |
| | | dataValueNumeric = signal.ConvertParas.Convert(dataValueNumeric, out bool succed); |
| | | if (!succed) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_ConvertFailed); |
| | | } |
| | | } |
| | | |
| | | //数据修正 |
| | | if (signal.CorrectParas != null) |
| | | { |
| | | dataValueNumeric = signal.CorrectParas.Correct(dataValueNumeric); |
| | | } |
| | | |
| | | |
| | | //数据过滤 |
| | | if (signal.FilterParas != null) |
| | | { |
| | | if (!signal.FilterParas.Filter(dataValueNumeric, null)) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_FilterFailed); |
| | | } |
| | | } |
| | | |
| | | //保留小数位数 |
| | | if (signal.SignalType.DecimalPlaces != null) |
| | | { |
| | | dataValueNumeric = Math.Round(dataValueNumeric, signal.SignalType.DecimalPlaces.Value); |
| | | } |
| | | |
| | | dataValue = dataValueNumeric.ToString(); |
| | | } |
| | | break; |
| | | case Model.Monitor.eValueType.Enum: |
| | | { |
| | | //数值转换 |
| | | if (!double.TryParse(dataValue, out double dataValueEnum)) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_DataFormatError); |
| | | break; |
| | | } |
| | | |
| | | //数据转换 |
| | | if (signal.ConvertParas != null) |
| | | { |
| | | dataValueEnum = signal.ConvertParas.Convert(dataValueEnum, out bool succed); |
| | | if (!succed) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_ConvertFailed); |
| | | } |
| | | } |
| | | |
| | | //数据修正 |
| | | if (signal.CorrectParas != null) |
| | | { |
| | | dataValueEnum = signal.CorrectParas.Correct(dataValueEnum); |
| | | } |
| | | |
| | | //数据过滤 |
| | | if (signal.FilterParas != null) |
| | | { |
| | | if (!signal.FilterParas.Filter(dataValueEnum, null)) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_FilterFailed); |
| | | } |
| | | } |
| | | |
| | | //保留小数位数 |
| | | if (signal.SignalType.DecimalPlaces != null) |
| | | { |
| | | dataValueEnum = Math.Round(dataValueEnum, signal.SignalType.DecimalPlaces.Value); |
| | | } |
| | | |
| | | dataValue = dataValueEnum.ToString(); |
| | | } |
| | | break; |
| | | case Model.Monitor.eValueType.Array: |
| | | { |
| | | //数据格式验证 |
| | | var dataValueArray = DoubleListHelper.ToList(dataValue); |
| | | if (dataValueArray == null || dataValueArray.Count < 1) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_DataFormatError); |
| | | break; |
| | | } |
| | | |
| | | //数据转换、修正、保留小数位数 |
| | | var dataValueArrayNew = new List<double>(); |
| | | foreach (var dataValueNumeric in dataValueArray) |
| | | { |
| | | var dataValueNumericNew = dataValueNumeric; |
| | | |
| | | //数据转换 |
| | | if (signal.ConvertParas != null) |
| | | { |
| | | dataValueNumericNew = signal.ConvertParas.Convert(dataValueNumericNew, out bool succed); |
| | | if (!succed) |
| | | { |
| | | dataStatus.Add(MonitorRecord.Status_ConvertFailed); |
| | | } |
| | | } |
| | | |
| | | //数值修正 |
| | | if (signal.CorrectParas != null) |
| | | { |
| | | dataValueNumericNew = signal.CorrectParas.Correct(dataValueNumericNew); |
| | | } |
| | | |
| | | //保留小数位数 |
| | | if (signal.SignalType.DecimalPlaces != null) |
| | | { |
| | | dataValueNumericNew = Math.Round(dataValueNumericNew, signal.SignalType.DecimalPlaces.Value); |
| | | } |
| | | |
| | | dataValueArrayNew.Add(dataValueNumericNew); |
| | | } |
| | | dataValue = DoubleListHelper.ToString(dataValueArrayNew); |
| | | } |
| | | break; |
| | | case Model.Monitor.eValueType.Integration: |
| | | { |
| | | |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 监测记录生成 |
| | | |
| | | record = BuildMonitorRecord(monitor,signal,receiveRecord.SrcTime,receiveRecord.SrcValue,dataTime,dataValue,dataStatus); |
| | | |
| | | #endregion |
| | | |
| | | return record; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 处理 |
| | | /// </summary> |
| | | /// <param name="monitor">测点</param> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成最近一条记录 |
| | | /// 生成监测记录 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static Model.MonitorBasicRecord BuildLastRecord |
| | | public static Model.MonitorBasicRecord BuildMonitorRecord |
| | | ( |
| | | Model.MonitorPoint monitor, |
| | | Model.Signal_SignalType signal, |