Jelajahi Sumber

更新测量线程和opencvsharp包

@wang_qi0307 5 tahun lalu
induk
melakukan
61519acfef

+ 4 - 0
AutoDo/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="OpenCvSharp3-AnyCPU" version="4.0.0.20181129" targetFramework="net461" />
+</packages>

+ 6 - 1
HOZProject/App.config

@@ -54,6 +54,11 @@
       <!--远程算法地址-->
       <add key="WebServerUrl" value="FIB_degree_recognize,test2,FIB_verify,test4,test5,test6,test7,test8"/>
 
-      <add key=""/>
+      <add key="" value=""/>
+      <add key="" value=""/>
+      <add key="" value=""/>
+      <add key="" value=""/>
+      <add key="" value=""/>
+      <add key="" value=""/>
     </appSettings>
 </configuration>

+ 2 - 2
HOZProject/MeasureXML/MeasureStructXml.xml

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <MeasureList>
   <MeasureFlow Name="测量流程">
-      <Step Index="0" Name="" Code="1-0" IsData="False" Type="Pt" Title="PT沉积" Details="自动根据样品类型参数确定是否需要PT沉积"></Step>
-      <Step Index="1" Name="" Code="1-1" IsData="False" Type="State" Title="移动至切割位置" Details="自动定位切割位置"></Step>
+      <Step Index="0" Name="" Code="1-0" IsData="False" Type="Pt" IsShow="True" Title="PT沉积" Details="自动根据样品类型参数确定是否需要PT沉积"></Step>
+      <Step Index="1" Name="" Code="1-1" IsData="False" Type="State" IsShow="False" Title="移动至切割位置" Details="自动定位切割位置"></Step>
       <Step Index="2" Name="" Code="1-2" IsData="False" Type="Photo" Title="设置放大倍数" Details="控制SEM放大倍数"></Step>
       <Step Index="3" Name="" Code="1-3" IsData="True" Type="Photo" Title="自动对焦" Details="控制SEM自动对焦、亮度、对比度"></Step>
       <Step Index="4" Name="" Code="1-4" IsData="False" Type="Photo" Title="角度补偿" Details="设置SEM进行角度补偿"></Step>

+ 1 - 1
ManulDo/MainForm.cs

@@ -258,7 +258,7 @@ namespace WindowsFormsApp1
                 m_MeasureFile.MParam.PT = this.cBIsPT.Checked;
                 m_MeasureFile.MParam.SampleName = this.tBSampleName.Text;
                 m_MeasureFile.MParam.FIBTemp = this.tBFIBTemp.Text;
-                m_MeasureFile.MParam.FocusMode = this.cBIsManul.Checked;
+                //m_MeasureFile.MParam.FocusMode = this.cBIsManul.Checked;
 
                 MessageBox.Show("参数设置成功");
             }

+ 4 - 0
ManulDo/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="OpenCvSharp3-AnyCPU" version="4.0.0.20181129" targetFramework="net461" />
+</packages>

+ 66 - 31
MeasureThread/Measure.cs

@@ -435,6 +435,8 @@ namespace MeasureThread
 
         const float fMin = (float)0.0000002; //单位是米
 
+        Boolean comm_state = false;
+
         int m_nWorkHoleNo = -1;
 
         //测量文件
@@ -596,7 +598,14 @@ namespace MeasureThread
             for (int i = 0; i < m_cutHoles.Count; i++)
             {
                 m_nWorkHoleNo = i;
-                arg.HoleName = cutHoles[m_nWorkHoleNo].HoleName;
+                arg.HoleName = m_cutHoles[i].HoleName;
+                //创建文件夹,孔名文件夹结构 
+
+                //判断孔状态
+                if(m_cutHoles[i].STATE != State.Unmeasured)
+                {
+                    continue;
+                }
                 if (i == 0)
                 {
                     SendMsg("第一个切孔开始测量");
@@ -779,29 +788,36 @@ namespace MeasureThread
                 else if (m_measureFile.MParam.FocusMode == 2)//自有自动
                 {
                     //郝工增加自动对焦算法
+                    //1、对焦参数类,2、输出工作距离
+                    //AutoFocus()
+                    //获取焦距,设置工作距离
                 }
-                else     //客户自动
+                else if(m_MsParam.FocusMode==3)     //客户自动
                 {
                     //后期和客户对接接口
                     List<string> filenames = new List<string>();
                     String retfilename = wr.Img_Auto_Focus(filenames);
                 }
+                else        //蔡司自动对焦
+                {
+
+                }
 
                 //3.第一次不需要进行角度补偿,其他需要设置SEM进行角度补偿54度
                 if (!isFirst)
                 {
-                    if (!TiltCorrection(m_measureFile.MParam.Correction_Angle))
+                    if (!TiltCorrection(54))
                     {
-                        arg.Message = "设置SEM进行角度补偿" + m_measureFile.MParam.Correction_Angle.ToString("0") + "度失败";
+                        arg.Message = "设置SEM进行角度补偿54度失败";
                         SendMsg("1-4");
                         return false;
                     }
-                    arg.Message = "设置SEM进行角度补偿" + m_measureFile.MParam.Correction_Angle.ToString("0") + "度成功";
+                    arg.Message = "设置SEM进行角度补偿54度成功";
                     SendMsg("1-4");
                     Thread.Sleep(5000);
                 }
 
-                //4.控制SEM拍照,5保存照片
+                //4.控制SEM拍照,5保存照片=====需要更改路径
                 String fileName1 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName1;
                 arg.Picture_Information.Picture_FullPath = fileName1;
                 arg.Picture_Information.Work_Status = "SEM";
@@ -831,7 +847,7 @@ namespace MeasureThread
                     Thread.Sleep(10000);
 
                     //8.控制FIB拍照
-                    //9.保存照片
+                    //9.保存照片======更改路径
                     String fileName2 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName2;
                     arg.Picture_Information.Picture_FullPath = fileName1;
                     arg.Picture_Information.Work_Status = "FIB";
@@ -845,8 +861,6 @@ namespace MeasureThread
                     SendMsg("1-7");
                     Thread.Sleep(3000);
 
-                    //这里需要确认是否对FIB的参数进行设置:电压和放大倍数等
-
                     //10.将照片传给客户,返回梯形位置坐标,及样品类型参数(是否需要PT沉积,PT坐标位置,PT宽度、PT高度、梯形上、下边及深度、扫描时间、束流、样品放大倍数1、样品放大倍数2等切割参数)
                     if (DialogResult.Yes == MessageBox.Show("是否手动移动样品台到指定位置?\n如果点击取消则会调用Web接口。", "确认消息", MessageBoxButtons.YesNo))
                     {
@@ -919,6 +933,12 @@ namespace MeasureThread
 
                 //14.保存样品1第1号孔中心位置6轴坐标1 XYZMRT到数据库,保存客户返回值信息到数据库
                 float[] firstPosition = iSEM.GetStagePosition();
+                m_cutHoles[0].Position.X = firstPosition[0];
+                m_cutHoles[0].Position.Y = firstPosition[1];
+                m_cutHoles[0].Position.Z = firstPosition[2];
+                m_cutHoles[0].Position.T = firstPosition[3];
+                m_cutHoles[0].Position.R = firstPosition[4];
+                m_cutHoles[0].Position.M = firstPosition[5];
                 //这里要调用文件保存功能
                 arg.Message = "坐标1(" + firstPosition[0].ToString() + ","
                     + firstPosition[1].ToString() + ","
@@ -938,6 +958,8 @@ namespace MeasureThread
         /// <returns></returns>
         public bool FIBCross()
         {
+            //切之前拍照保存,,
+
             //14.自动控制FIB切割
             //1.根据参数设置FIB草率时间(使图清晰),设置梯形上下边及深度、设置束流
             //2.控制FIB进行切割
@@ -954,7 +976,7 @@ namespace MeasureThread
             Thread.Sleep(5000);
 
             //3.控制FIB拍照600X
-            //这里如何控制
+            //底层没有控制方法。
             //4.保存图片
             String fileName3 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName3;
             arg.Picture_Information.Picture_FullPath = fileName3;
@@ -970,8 +992,9 @@ namespace MeasureThread
 
             Thread.Sleep(3000);
             //5.验证切割准确性:与切割前对比,如果对比误差大,则停止自动执行,进行报警
-
+            //和华为对接接口
             //6.设置FIB解冻:先读取状态,如果冻结状态则进行解冻
+            //拍完照自动解冻,这里不做处理。
             return true;
         }
 
@@ -985,17 +1008,28 @@ namespace MeasureThread
             float angle = 0;
             int direction = 0;
             int state = 0;
+            //切换到SEM模式
+            if (!iSEM.CmdFIBModeSEM())
+            {
+                //SendMsg("SEM模式切换失败");
+                return false;
+            }
+            arg.State = "SEM";
+            Thread.Sleep(10000);
+
             //1.控制SEM放大到300倍
             arg.State = "SEM";
-            if (!iSEM.SetMagnification(m_measureFile.MParam.Photograph_Magnification))
+            if (!iSEM.SetMagnification(m_measureFile.MParam.Location_Magnification/2))
             {
-                arg.Message = "放大" + m_measureFile.MParam.Photograph_Magnification.ToString("0.0") + "倍失败";
+                arg.Message = "放大" + (m_measureFile.MParam.Location_Magnification / 2).ToString("0.0") + "倍失败";
                 SendMsg("1-18");
                 return false;
             }
-            arg.Message = "放大" + m_measureFile.MParam.Photograph_Magnification.ToString("0.0") + "倍成功";
+            arg.Message = "放大" + (m_measureFile.MParam.Location_Magnification/2).ToString("0.0") + "倍成功";
             SendMsg("1-18");
-            //2.控制SEM自动对焦、亮度、对比度-接口
+
+            //2.控制SEM自动对焦、亮度、对比度-接口,,将自动对焦提出单独函数调用
+            //对焦前,先清理文件夹focus
             if (m_measureFile.MParam.FocusMode == 1)//手动
             {
                 if (DialogResult.Yes == MessageBox.Show("图像自动对焦已完成?", "确认消息", MessageBoxButtons.YesNo))
@@ -1024,8 +1058,6 @@ namespace MeasureThread
 
             Thread.Sleep(5000);
 
-            //原来这里有3是角度补偿
-
             //3.控制SEM拍照
             String fileName4 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName4;
             arg.Picture_Information.Picture_FullPath = fileName4;
@@ -1071,6 +1103,7 @@ namespace MeasureThread
                     }
                     arg.Message = "移动到新(" + x1.ToString() + "," + y1.ToString() + ")位置失败";
                     SendMsg("1-21");
+                    //拉直操作
                 }
                 else
                 {
@@ -1109,16 +1142,9 @@ namespace MeasureThread
         {
             float x0 = 0, y0 = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;
             int state = 0;
-            //切换到SEM模式
-            if (!iSEM.CmdFIBModeSEM())
-            {
-                //SendMsg("SEM模式切换失败");
-                return false;
-            }
-            arg.State = "SEM";
-            Thread.Sleep(10000);
+            
 
-            //1、放大6000倍
+            //1、放大6000倍,放大倍数参数photograph_
             if (!iSEM.SetMagnification(6000))
             {
                 arg.Message = "放大倍数调整失败";
@@ -1188,7 +1214,10 @@ namespace MeasureThread
             }
             else
             {
-               // wr.Img_Cut_Position(fileName5, m_MsParam.SampleName, m_MsParam.Firm, out x1, out y1, out x2, out y2, out state);
+                //8,图像T形
+                // wr.Img_Cut_Position(fileName5, m_MsParam.SampleName, m_MsParam.Firm, out x1, out y1, out x2, out y2, out state);
+                //接口返回像素,*pixelsize,得到坐标点。判断移动方式
+
                 if (state == 1)
                 {
                     //1. 根据客户PT沉积坐标控制FIB调整到中心位置???????
@@ -1219,10 +1248,12 @@ namespace MeasureThread
             }
 
             //8、验证移动准确性
+            //与之前验证相同
+            //9、-10不操作
+            //11、自动对焦。与之前操作相同
+            //12拍照
 
-            //9、
-
-
+            //14光束复位
             return true;
         }
 
@@ -1454,7 +1485,11 @@ namespace MeasureThread
                 SendMsg("1-33");
             }
 
-            
+            //18.自动层高分析
+            //将17图片传给华为
+
+            //最后保存测量数据-测量文件、测量状态,m_cutHoles[i].STATE!=MeasureData.CutHole.State.Success.
+            //中间停止更新状态为Unmeasured,过程中return false时,更新状态为failed,保存测量文件
 
             //if (DialogResult.Yes == MessageBox.Show("图像拍摄已完成?", "确认消息", MessageBoxButtons.YesNo))
             //{

+ 4 - 0
MeasureThread/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="OpenCvSharp3-AnyCPU" version="4.0.0.20181129" targetFramework="net461" />
+</packages>