gsz_fuction_OSP_Lidar()

 public  void gsz_fuction_OSP_Lidar()
        {
            m_total_MeasureResultV_t.Clear();//在List内移除所有元素
            m_total_tick.Clear();//在List内移除所有元素
            m_total_rem_angle.Clear();
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser,"开始清除缓存","black","",false );
           

            strLidarIp = new StringBuilder("192.168.1.2");// new StringBuilder(ReadString("Basic", "IPV4_1", "192.168.1.111", strConfigIniAddr));
            delegate_myc = new OSP_Lidar.MeasureModeCallback(myMeasureModeCallback);//之前实例化这个委托,现在给他赋值,就是回调函数
            //第一个正式的步骤:SDK的初始化
            int nBackId_device_init = 0;
            nBackId_device_init = OSP_Lidar.device_init();
            if (nBackId_device_init < 0)
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "device init error", "red", "", false);
                return;
            }
            //第二个正式的步骤:添加硬件
            int nBackId_device_add = 0;
            //参数1:设备输出句柄
            //参数2:设备的IP地址
            //参数3:设备数据信息回调函数
            //ref:该关键字用于按引用传递参数,这意味着方法内部对参数的修改会影响到方法外部的原始变量
            nBackId_device_add = OSP_Lidar.device_add(ref dHandler, strLidarIp, delegate_myc);
            if (0 == nBackId_device_add)
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "device1_add OK!", "green", "", false);
                //uint cc = 0;
                //设备初始化
                OSP_Lidar.device_general_init(dHandler);
                //   OSP_Lidar.device_write_fpga_reg(dHandler1, OSP_Fpga_Reg.B_transfer_down,31);
                //  uint transferdown = OSP_Lidar.device_read_fpga_reg(dHandler1, OSP_Fpga_Reg.B_transfer_down);//这些值读取了 dll会自己使用 不需要上层操作
                //cc = OSP_Lidar.device_read_fpga_reg(dHandler1, OSP_Fpga_Reg.B_dist_pow2);
                //cc = OSP_Lidar.device_read_fpga_reg(dHandler1, OSP_Fpga_Reg.B_rem_pow2);
                //cc = OSP_Lidar.device_read_fpga_reg(dHandler1, OSP_Fpga_Reg.B_out_amp_range_o);
                //cc = OSP_Lidar.device_read_fpga_reg(dHandler1, OSP_Fpga_Reg.B_output_phase_range);
                //设备信息结构体,可在设备连接之后通过device_get_info函数获取。
                OSP_Lidar.device_get_info(dHandler, ref p_device_inf);//必须要加否则数据结构不对

                //读寄存器。
                ////判断是否收敛 1为收敛
                uint nC = OSP_Lidar.device_read_fpga_reg(dHandler, OSP_Fpga_Reg.B_path_sel);
                int a = System.Environment.TickCount;//一个 32 位带符号整数,它包含自上次启动计算机以来所经过的时间(以毫秒为单位)
                for (int i = 0; i < 1024; i++)
                {
                    uint naddr = (uint)(0xc0000000 + 4 * i);
                    //Console.WriteLine(naddr.ToString("X") + "  " + OSP_Lidar.device_read_fpga_reg(dHandler1, naddr));
                }
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "初始化用时ms:"+ (System.Environment.TickCount - a), "black", "", false);
                //Console.WriteLine("耗时:" + (System.Environment.TickCount - a) + "ms");

                //进入测量模式,进入该模式后,数据将由用户注册的回调函数返回给用户。在测量期间,用户无法调用除停止测量之外的其他接口。
                OSP_Lidar.device_measure_mode_entry(dHandler);
            }
            else
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "device1_add failure!", "red", "", false);
            }
            int nSecWait2Stop = ReadInt("Basic", "preserve_time", 5, m_strConfigIniAddr);//从配置文件里面读取测试时间, 就是挚感传感器的采样用时
            while (nSecWait2Stop > 0)
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "采样倒计时:"+ nSecWait2Stop.ToString(), "black", "", false);
                System.Threading.Thread.Sleep(1000);
                nSecWait2Stop--;
            }
            //退出测量模式。
            OSP_Lidar.device_measure_mode_exit(dHandler);
            //SDK逆初始化函数,该函数必须优先调用。
            if (OSP_Lidar.device_deinit() != 0)
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "device deinit error", "red", "", false);
                return;
            }
            else
            {
                gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "device deinit success ! ", "green", "", false);
            }
            //以上数据采集,以下数据整理
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "开始整理数据", "black", "", false);
            foreach (MeasureResultV_t temp_MeasureResultV_t in m_total_MeasureResultV_t)
            {
                m_total_tick.Add(temp_MeasureResultV_t.tick);
                foreach (double temp_rem_angle in temp_MeasureResultV_t.rem_angle)
                {
                    m_total_rem_angle.Add(temp_rem_angle);
                }

            }
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "结束整理数据", "black", "", false);
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "采样tick总数:"+ m_total_tick.Count.ToString(), "black", "", false);
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "采样rem_angle总数:" + m_total_rem_angle.Count.ToString(), "black", "", false);
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "开始数据处理", "black", "", false);
            var matlabObj = new Class_dayang();
            MWNumericArray input_sampel_rate = 160000;
            MWNumericArray double_Arrays_rem_angle = ConvertToMWArray(m_total_rem_angle);
            MWArray[] result = matlabObj.fuction_dayang(2, input_sampel_rate, double_Arrays_rem_angle);
            double[] doubleResults = new double[10];
            for (int i = 0; i < 2; i++)
            {
                // 将MWArray元素转换为数值类型的MWNumericArray
                MWNumericArray numericElement = (MWNumericArray)result[i];

                // 将MWNumericArray转换为标量double值
                double convertedValue = numericElement.ToScalarDouble();

                // 将转换结果存入目标数组
                doubleResults[i] = convertedValue;
            }
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "数据处理结束", "black", "", false);
            gsz_delegate_log.Invoke(uiRichTextBox_log_laser, "查找曲线的窗口", "black", "", false);  
        }

 

posted @ 2025-02-20 16:53  wenluderen  阅读(2)  评论(0编辑  收藏  举报