/// <summary>
        /// 读取CIT文件
        /// </summary>
        /// <param name="citFilePath">cit文件路径----->来自里程快速校正中的选择cit文件的按钮</param
        /// <param name="numericUpDown1">跳变允许值----->来自里程快速校正中的  跳变容许值</param>
        private List <AutoIndex> _readCit(String citFilePath, int numericUpDown1)
        {
            List <AutoIndex> autoIndexClsList = new List <AutoIndex>();

            //autoIndexClsList.Max(p => p.meter_between);
            //autoIndexClsList.Min(p => p.meter_between);
            //double  count = citHelper.GetTotalSampleCount(citFilePath)/4/1000;
            //double tiaobian1=autoIndexClsList.Sum(p => p.meter_between)/count;
            //double tiaobian1i = autoIndexClsList.Sum(p => Math.Abs(p.meter_between))/autoIndexClsList.Count;
            if (numericUpDown1 <= 0)
            {
                ///MessageBox.Show("容许跳变值为 0");
                return(autoIndexClsList);
            }

            try
            {
                FileInformation          fileInfomation = citHelper.GetFileInformation(citFilePath);
                List <ChannelDefinition> channelList    = citHelper.GetChannelDefinitionList(citFilePath);

                FileStream   fs = new FileStream(citFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                BinaryReader br = new BinaryReader(fs, Encoding.Default);
                br.BaseStream.Position = 0;

                br.ReadBytes(120);


                br.ReadBytes(65 * fileInfomation.iChannelNumber);
                br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0));
                int    iChannelNumberSize = fileInfomation.iChannelNumber * 2;
                byte[] b = new byte[iChannelNumberSize];

                long milePos       = 0;
                int  km_pre        = 0;
                int  meter_pre     = 0;
                int  km_currrent   = 0;
                int  meter_current = 0;
                int  meter_between = 0;
                int  km_index      = 0;
                int  meter_index   = 2;

                long iArray = (br.BaseStream.Length - br.BaseStream.Position) / iChannelNumberSize;

                for (int i = 0; i < iArray; i++)
                {
                    milePos = br.BaseStream.Position;

                    b = br.ReadBytes(iChannelNumberSize);

                    if (Encryption.IsEncryption(fileInfomation.sDataVersion))
                    {
                        b = Encryption.Translate(b);
                    }

                    if (i == 0)
                    {
                        km_pre    = (int)(BitConverter.ToInt16(b, km_index));
                        meter_pre = (int)(BitConverter.ToInt16(b, meter_index));
                    }
                    else
                    {
                        km_currrent   = (int)(BitConverter.ToInt16(b, km_index));
                        meter_current = (int)(BitConverter.ToInt16(b, meter_index));
                        //第二个通道为采样点,换算为米就要除以4
                        meter_between = (km_currrent - km_pre) * 1000 + (meter_current - meter_pre) / 4;

                        if (Math.Abs(meter_between) > numericUpDown1)
                        {
                            AutoIndex autoIndexCls = new AutoIndex();
                            autoIndexCls.milePos       = milePos;
                            autoIndexCls.km_current    = km_currrent;
                            autoIndexCls.meter_current = meter_current;
                            autoIndexCls.km_pre        = km_pre;
                            autoIndexCls.meter_pre     = meter_pre;
                            autoIndexCls.meter_between = meter_between;

                            autoIndexClsList.Add(autoIndexCls);
                        }

                        km_pre    = km_currrent;
                        meter_pre = meter_current;
                    }
                }

                br.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("读取CIT文件跳变点失败:" + ex.Message + ",堆栈:" + ex.StackTrace);
            }
            return(autoIndexClsList);
        }
        /// <summary>
        /// 读取CIT文件
        /// </summary>
        /// <param name="citFilePath"></param>
        private void ReadCIT(String citFilePath)
        {
            if (numericUpDown1.Value <= 0)
            {
                MessageBox.Show("容许跳变值为 0");
                return;
            }

            try
            {
                autoIndexClsList.Clear();
                dataGridView1.Rows.Clear();

                FileInformation          fileInfomation = citHelper.GetFileInformation(citFilePath);
                List <ChannelDefinition> channelList    = citHelper.GetChannelDefinitionList(citFilePath);

                FileStream   fs = new FileStream(citFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                BinaryReader br = new BinaryReader(fs, Encoding.Default);
                br.BaseStream.Position = 0;

                br.ReadBytes(120);


                br.ReadBytes(65 * fileInfomation.iChannelNumber);
                br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0));
                int    iChannelNumberSize = fileInfomation.iChannelNumber * 2;
                byte[] b = new byte[iChannelNumberSize];

                long milePos       = 0;
                int  km_pre        = 0;
                int  meter_pre     = 0;
                int  km_currrent   = 0;
                int  meter_current = 0;
                int  meter_between = 0;
                int  km_index      = 0;
                int  meter_index   = 2;

                long iArray = (br.BaseStream.Length - br.BaseStream.Position) / iChannelNumberSize;

                for (int i = 0; i < iArray; i++)
                {
                    milePos = br.BaseStream.Position;

                    b = br.ReadBytes(iChannelNumberSize);

                    if (Encryption.IsEncryption(fileInfomation.sDataVersion))
                    {
                        b = Encryption.Translate(b);
                    }

                    if (i == 0)
                    {
                        km_pre    = (int)(BitConverter.ToInt16(b, km_index));
                        meter_pre = (int)(BitConverter.ToInt16(b, meter_index));
                    }
                    else
                    {
                        km_currrent   = (int)(BitConverter.ToInt16(b, km_index));
                        meter_current = (int)(BitConverter.ToInt16(b, meter_index));
                        //第二个通道为采样点,换算为米就要除以4
                        meter_between = (km_currrent - km_pre) * 1000 + (meter_current - meter_pre) / 4;

                        if (Math.Abs(meter_between) > numericUpDown1.Value)
                        {
                            AutoIndex autoIndexCls = new AutoIndex();
                            autoIndexCls.milePos       = milePos;
                            autoIndexCls.km_current    = km_currrent;
                            autoIndexCls.meter_current = meter_current;
                            autoIndexCls.km_pre        = km_pre;
                            autoIndexCls.meter_pre     = meter_pre;
                            autoIndexCls.meter_between = meter_between;

                            autoIndexClsList.Add(autoIndexCls);
                        }

                        km_pre    = km_currrent;
                        meter_pre = meter_current;
                    }
                }

                br.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MyLogger.logger.Error("读取CIT文件跳变点失败:" + ex.Message + ",堆栈:" + ex.StackTrace);

                MessageBox.Show(ex.Message);
            }
        }
示例#3
0
 public static T Idx <T>(this AutoIndex <T> autoIndex) where T : struct
 {
     return(autoIndex.Get());
 }