/// <summary> /// 接口函数:无效数据滤除---处理多个通道数据 /// </summary> /// <param name="FileName"></param> /// <param name="sAddFileName"></param> /// <returns></returns> private bool GetDataInfoMulti(string FileName, int pointCount, string sAddFileName) { // CIT文件相关操作类 CITFileProcess cfprocess = new CITFileProcess(); // 通道定义相关操作类 ChannelDefinitionList cdlist = new ChannelDefinitionList(); //matlab算法 PreproceingDeviationClass pdc = new PreproceingDeviationClass(); //获取文件信息 FileInformation fileinfo = new FileInformation(); try { long[] position = cfprocess.GetPositons(FileName); long startPos = position[0]; //开始位置、结束位置 long endPos = position[1]; cdlist.channelDefinitionList = cfprocess.GetChannelDefinitionList(FileName); //分段读取方法//////////////////// long totleSample = cfprocess.GetTotalSampleCount(FileName); //循环次数 int count = Convert.ToInt32(totleSample / pointCount); //是否有余点 int residue = Convert.ToInt32(totleSample % pointCount); bool iszero = false; //是否执行一次 if (count == 0) { iszero = true; } //如果有余数循环次数加1 if (residue > 0) { count++; } for (int z = 0; z < count; z++) { if (iszero) { endPos = cfprocess.GetAppointEndPostion(FileName, startPos, residue); } else { if (residue == 0) { endPos = cfprocess.GetAppointEndPostion(FileName, startPos, pointCount); } else { if (z == (count - 1)) { endPos = cfprocess.GetAppointEndPostion(FileName, startPos, residue); } else { endPos = cfprocess.GetAppointEndPostion(FileName, startPos, pointCount); } } } //分段读取方法//////////////////// //根据里程list获取里程数组 List <Milestone> dualmilelist = cfprocess.GetMileStoneByRange(FileName, startPos, endPos); double[] tt = new double[dualmilelist.Count]; for (int i = 0; i < dualmilelist.Count; i++) { double obj = dualmilelist[i].GetMeter() / 1000; tt[i] = obj; } double[] wvelo = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("Speed", "速度"), startPos, endPos); double[] L_Prof_SC = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("L_Prof_SC", "左高低_中波"), startPos, endPos); double[] R_Prof_SC = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("R_Prof_SC", "右高低_中波"), startPos, endPos); double[] L_Align_SC = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("L_Align_SC", "左轨向_中波"), startPos, endPos); double[] R_Align_SC = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("R_Align_SC", "右轨向_中波"), startPos, endPos); double[] Gage = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("Gage", "轨距"), startPos, endPos); double[] Crosslevel = cfprocess.GetOneChannelDataInRange(FileName, cdlist.GetChannelIdByName("Crosslevel", "水平"), startPos, endPos); int tmpChannelNumber = cdlist.GetChannelIdByName("Gage_L", "单边轨距左"); double[] Gage_L = null; if (tmpChannelNumber == -1) { Gage_L = new double[wvelo.Length]; } else { Gage_L = cfprocess.GetOneChannelDataInRange(FileName, tmpChannelNumber, startPos, endPos); } tmpChannelNumber = cdlist.GetChannelIdByName("Gage_R", "单边轨距右"); double[] Gage_R = null; if (tmpChannelNumber == -1) { Gage_R = new double[wvelo.Length]; } else { Gage_R = cfprocess.GetOneChannelDataInRange(FileName, tmpChannelNumber, startPos, endPos); } DataProcessing dp = new DataProcessing(); //调用刘博士的算法---处理多个通道 dp.preProcess(tt, L_Prof_SC, R_Prof_SC, L_Align_SC, R_Align_SC, Gage, Crosslevel, wvelo, Gage_L, Gage_R, FileName, sAddFileName, "自动标识", true); //分段读取方法//////////////////// startPos = endPos; } //分段读取方法//////////////////// } catch (Exception ex) { throw new Exception(ex.ToString()); } finally { } return(true); }