using System; using System.Collections.Generic; using CRVM.Entity; namespace CRVM.SIDExcuter { //[DataContract] public class Stand { public double[] vib { get; set; } public double[] vib2 { get; set; } public double[] vibLow { get; set; } public double[] vibMid { get; set; } public double[] vibHig { get; set; } //分频段能量、速度 public double energy_All { get; set; } public double energy_L { get; set; } public double energy_M { get; set; } public double energy_H { get; set; } public double speed { get; set; } //能量 报警 曲线 [中,高,低]--2025-01-09 新增 public double[] VibRms { get; set; } public double[] AlarmRms { get; set; } public double[] DefectRms { get; set; } //用于绘制时域曲线 public double[] tVib { get; set; } //用于绘制能量曲线 public RollingArray list_Energy_All { get; set; } public RollingArray list_Energy_L { get; set; } public RollingArray list_Energy_M { get; set; } public RollingArray list_Energy_H { get; set; } public RollingArray list_Energy_Speed { get; set; } //用于绘制报警线 public RollingArray list_Alarm_L { set; get; } public RollingArray list_Alarm_M { set; get; } public RollingArray list_Alarm_H { set; get; } //用于绘制缺陷线 public RollingArray list_Defect_L { set; get; } public RollingArray list_Defect_M { set; get; } public RollingArray list_Defect_H { set; get; } #region 报警参数插值算法 private EntityAlarmSpeed[] _alarm_spd = new EntityAlarmSpeed[10]; public EntityAlarmSpeed[] alarm_spd { get { return _alarm_spd; } set { _alarm_spd = value; } } public int[] fre_l_S1 { get; set; } public int[] fre_l_S2 { get; set; } public double[] fre_l_V { get; set; } public double[] fre_l_D { get; set; } public int[] fre_m_S1 { get; set; } public int[] fre_m_S2 { get; set; } public double[] fre_m_V { get; set; } public double[] fre_m_D { get; set; } public int[] fre_h_S1 { get; set; } public int[] fre_h_S2 { get; set; } public double[] fre_h_V { get; set; } public double[] fre_h_D { get; set; } public void SetAlarmFred(EntityAlarmSpeed[] alarmspd) { _alarm_spd = alarmspd; if (_alarm_spd != null) { if (_alarm_spd.Length <= 1) { fre_l_S1 = new int[1]; fre_l_S2 = new int[1]; fre_l_V = new double[1]; fre_l_D = new double[1]; fre_m_S1 = new int[1]; fre_m_S2 = new int[1]; fre_m_V = new double[1]; fre_m_D = new double[1]; fre_h_S1 = new int[1]; fre_h_S2 = new int[1]; fre_h_V = new double[1]; fre_h_D = new double[1]; fre_l_S1[0] = _alarm_spd[0].lowPassL; fre_l_S2[0] = _alarm_spd[0].lowPassU; fre_l_V[0] = _alarm_spd[0].lowAlarmValue; fre_l_D[0] = _alarm_spd[0].lowDefectValue; fre_m_S1[0] = _alarm_spd[0].midPassL; fre_m_S2[0] = _alarm_spd[0].midPassU; fre_m_V[0] = _alarm_spd[0].midAlarmValue; fre_m_D[0] = _alarm_spd[0].midDefectValue; fre_h_S1[0] = _alarm_spd[0].highPassL; fre_h_S2[0] = _alarm_spd[0].highPassU; fre_h_V[0] = _alarm_spd[0].highAlarmValue; fre_h_D[0] = _alarm_spd[0].highDefectValue; } else { int iIndCount = _alarm_spd[_alarm_spd.Length - 1].alarmSpeed - _alarm_spd[0].alarmSpeed + 1; fre_l_S1 = new int[iIndCount]; fre_l_S2 = new int[iIndCount]; fre_l_V = new double[iIndCount]; fre_l_D = new double[iIndCount]; fre_m_S1 = new int[iIndCount]; fre_m_S2 = new int[iIndCount]; fre_m_V = new double[iIndCount]; fre_m_D = new double[iIndCount]; fre_h_S1 = new int[iIndCount]; fre_h_S2 = new int[iIndCount]; fre_h_V = new double[iIndCount]; fre_h_D = new double[iIndCount]; fre_l_S1[0] = _alarm_spd[0].lowPassL; fre_l_S2[0] = _alarm_spd[0].lowPassU; fre_l_V[0] = _alarm_spd[0].lowAlarmValue; fre_l_D[0] = _alarm_spd[0].lowDefectValue; fre_m_S1[0] = _alarm_spd[0].midPassL; fre_m_S2[0] = _alarm_spd[0].midPassU; fre_m_V[0] = _alarm_spd[0].midAlarmValue; fre_m_D[0] = _alarm_spd[0].midDefectValue; fre_h_S1[0] = _alarm_spd[0].highPassL; fre_h_S2[0] = _alarm_spd[0].highPassU; fre_h_V[0] = _alarm_spd[0].highAlarmValue; fre_h_D[0] = _alarm_spd[0].highDefectValue; int i_start_l_s1 = _alarm_spd[0].lowPassL; int i_start_l_s2 = _alarm_spd[0].lowPassU; double i_start_l_v = _alarm_spd[0].lowAlarmValue; double i_start_l_d = _alarm_spd[0].lowDefectValue; int i_start_m_s1 = _alarm_spd[0].midPassL; int i_start_m_s2 = _alarm_spd[0].midPassU; double i_start_m_v = _alarm_spd[0].midAlarmValue; double i_start_m_d = _alarm_spd[0].midDefectValue; int i_start_h_s1 = _alarm_spd[0].highPassL; int i_start_h_s2 = _alarm_spd[0].highPassU; double i_start_h_v = _alarm_spd[0].highAlarmValue; double i_start_h_d = _alarm_spd[0].highDefectValue; int i_start_spd = _alarm_spd[0].alarmSpeed; int i_end_l_s1, i_end_l_s2, i_end_m_s1, i_end_m_s2, i_end_h_s1, i_end_h_s2, i_end_spd; double i_end_l_v, i_end_m_v, i_end_h_v, i_end_l_d, i_end_m_d, i_end_h_d; double i_step_l_s1, i_step_l_s2, i_step_l_v, i_step_l_d, i_step_m_s1, i_step_m_s2, i_step_m_v, i_step_m_d, i_step_h_s1, i_step_h_s2, i_step_h_v, i_step_h_d; int i_sub_tmp = 0; int i_index = 0; for (int i = 1; i < _alarm_spd.Length; i++) { i_end_l_s1 = _alarm_spd[i].lowPassL; i_end_l_s2 = _alarm_spd[i].lowPassU; i_end_l_v = _alarm_spd[i].lowAlarmValue; i_end_l_d = _alarm_spd[i].lowDefectValue; i_end_m_s1 = _alarm_spd[i].midPassL; i_end_m_s2 = _alarm_spd[i].midPassU; i_end_m_v = _alarm_spd[i].midAlarmValue; i_end_m_d = _alarm_spd[i].midDefectValue; i_end_h_s1 = _alarm_spd[i].highPassL; i_end_h_s2 = _alarm_spd[i].highPassU; i_end_h_v = _alarm_spd[i].highAlarmValue; i_end_h_d = _alarm_spd[i].highDefectValue; i_end_spd = _alarm_spd[i].alarmSpeed; i_sub_tmp = i_end_spd - i_start_spd; i_step_l_s1 = ((i_end_l_s1 - i_start_l_s1) / (i_sub_tmp * 1.0f)); i_step_l_s2 = ((i_end_l_s2 - i_start_l_s2) / (i_sub_tmp * 1.0f)); i_step_l_v = ((i_end_l_v - i_start_l_v) / (i_sub_tmp * 1.0f)); i_step_l_d = ((i_end_l_d - i_start_l_d) / (i_sub_tmp * 1.0f)); i_step_m_s1 = ((i_end_m_s1 - i_start_m_s1) / (i_sub_tmp * 1.0f)); i_step_m_s2 = ((i_end_m_s2 - i_start_m_s2) / (i_sub_tmp * 1.0f)); i_step_m_v = ((i_end_m_v - i_start_m_v) / (i_sub_tmp * 1.0f)); i_step_m_d = ((i_end_m_d - i_start_m_d) / (i_sub_tmp * 1.0f)); i_step_h_s1 = ((i_end_h_s1 - i_start_h_s1) / (i_sub_tmp * 1.0f)); i_step_h_s2 = ((i_end_h_s2 - i_start_h_s2) / (i_sub_tmp * 1.0f)); i_step_h_v = ((i_end_h_v - i_start_h_v) / (i_sub_tmp * 1.0f)); i_step_h_d = ((i_end_h_d - i_start_h_d) / (i_sub_tmp * 1.0f)); for (int k = 1; k <= i_sub_tmp; k++) { fre_l_S1[k + i_index] = Convert.ToInt32(i_start_l_s1 + i_step_l_s1 * (k - 1)); fre_l_S2[k + i_index] = Convert.ToInt32(i_start_l_s2 + i_step_l_s2 * (k - 1)); fre_l_V[k + i_index] = (i_start_l_v + i_step_l_v * (k - 1)); fre_l_D[k + i_index] = (i_start_l_d + i_step_l_d * (k - 1)); fre_m_S1[k + i_index] = Convert.ToInt32(i_start_m_s1 + i_step_m_s1 * (k - 1)); fre_m_S2[k + i_index] = Convert.ToInt32(i_start_m_s2 + i_step_m_s2 * (k - 1)); fre_m_V[k + i_index] = (i_start_m_v + i_step_m_v * (k - 1)); fre_m_D[k + i_index] = (i_start_m_d + i_step_m_d * (k - 1)); fre_h_S1[k + i_index] = Convert.ToInt32(i_start_h_s1 + i_step_h_s1 * (k - 1)); fre_h_S2[k + i_index] = Convert.ToInt32(i_start_h_s2 + i_step_h_s2 * (k - 1)); fre_h_V[k + i_index] = (i_start_h_v + i_step_h_v * (k - 1)); fre_h_D[k + i_index] = (i_start_h_d + i_step_h_d * (k - 1)); } i_start_l_s1 = i_end_l_s1; i_start_l_s2 = i_end_l_s2; i_start_l_v = i_end_l_v; i_start_l_d = i_end_l_d; i_start_m_s1 = i_end_m_s1; i_start_m_s2 = i_end_m_s2; i_start_m_v = i_end_m_v; i_start_m_d = i_end_m_d; i_start_h_s1 = i_end_h_s1; i_start_h_s2 = i_end_h_s2; i_start_h_v = i_end_h_v; i_start_h_d = i_end_h_d; i_start_spd = i_end_spd; i_index += i_sub_tmp; fre_l_S1[i_index] = _alarm_spd[i].lowPassL; fre_l_S2[i_index] = _alarm_spd[i].lowPassU; fre_l_V[i_index] = _alarm_spd[i].lowAlarmValue; fre_l_D[i_index] = _alarm_spd[i].lowDefectValue; fre_m_S1[i_index] = _alarm_spd[i].midPassL; fre_m_S2[i_index] = _alarm_spd[i].midPassU; fre_m_V[i_index] = _alarm_spd[i].midAlarmValue; fre_m_D[i_index] = _alarm_spd[i].midDefectValue; fre_h_S1[i_index] = _alarm_spd[i].highPassL; fre_h_S2[i_index] = _alarm_spd[i].highPassU; fre_h_V[i_index] = _alarm_spd[i].highAlarmValue; fre_h_D[i_index] = _alarm_spd[i].highDefectValue; } fre_l_S1[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].lowPassL; fre_l_S2[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].lowPassU; fre_l_V[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].lowAlarmValue; fre_l_D[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].lowDefectValue; fre_m_S1[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].midPassL; fre_m_S2[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].midPassU; fre_m_V[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].midAlarmValue; fre_m_D[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].midDefectValue; fre_h_S1[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].highPassL; fre_h_S2[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].highPassU; fre_h_V[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].highAlarmValue; fre_h_D[iIndCount - 1] = _alarm_spd[_alarm_spd.Length - 1].highDefectValue; } } } #endregion #region 报警参数 //分频频率范围 public int band_Fre_L1 { get; set; } public int band_Fre_L2 { get; set; } public int band_Fre_M1 { get; set; } public int band_Fre_M2 { get; set; } public int band_Fre_H1 { get; set; } public int band_Fre_H2 { get; set; } //报警参考值 public double alarm_L_Value_ck { get; set; } public double alarm_M_Value_ck { get; set; } public double alarm_H_Value_ck { get; set; } public double defect_L_Value_ck { get; set; } public double defect_M_Value_ck { get; set; } public double defect_H_Value_ck { get; set; } //报警参考次数 public int alarm_L_Times_ck { get; set; } public int alarm_M_Times_ck { get; set; } public int alarm_H_Times_ck { get; set; } //记录能量值超过报警线次数 public int alarm_L_Times { get; set; } public int alarm_M_Times { get; set; } public int alarm_H_Times { get; set; } public class AlarmInfo { public DateTime time { set; get; } public int startPos { set; get; } public int endPos { set; get; } public double value { set; get; } } public int tempAlarmLowInfostart { set; get; } public int tempAlarmMidInfostart { set; get; } public int tempAlarmHighInfostart { set; get; } public List alarmLowInfo = new List(); public List alarmMidInfo = new List(); public List alarmHighInfo = new List(); //统计报警次数 public int indexLow { get; set; } public int indexMid { get; set; } public int indexHigh { get; set; } #endregion public double rollDiameterBU { set; get; } public double rollDiameterBL { set; get; } public double rollDiameterMU { set; get; } public double rollDiameterML { set; get; } public double rollDiameterWU { set; get; } public double rollDiameterWL { set; get; } public void Initial(int vibLength, int tvibLength, int energyLength) { vib = new double[vibLength]; vibLow = new double[vibLength]; vibMid = new double[vibLength]; vibHig = new double[vibLength]; tVib = new double[tvibLength]; list_Energy_Speed = new RollingArray(energyLength + 1); list_Energy_All = new RollingArray(energyLength + 1); list_Energy_L = new RollingArray(energyLength + 1); list_Energy_M = new RollingArray(energyLength + 1); list_Energy_H = new RollingArray(energyLength + 1); list_Alarm_L = new RollingArray(energyLength + 1); list_Alarm_M = new RollingArray(energyLength + 1); list_Alarm_H = new RollingArray(energyLength + 1); list_Defect_L = new RollingArray(energyLength + 1); list_Defect_M = new RollingArray(energyLength + 1); list_Defect_H = new RollingArray(energyLength + 1); for (int i = 0; i < energyLength + 1; i++) { list_Energy_Speed.Add(0.0); list_Energy_All.Add(0.0); list_Energy_L.Add(0.0); list_Energy_M.Add(0.0); list_Energy_H.Add(0.0); list_Alarm_L.Add(0.0); list_Alarm_M.Add(0.0); list_Alarm_H.Add(0.0); list_Defect_L.Add(0.0); list_Defect_M.Add(0.0); list_Defect_H.Add(0.0); } // 初始化2025-01-09 新增 VibRms = new double[] { 0, 0, 0 }; AlarmRms = new double[] { 0, 0, 0 }; DefectRms = new double[] { 0, 0, 0 }; } } }