浏览代码

add EDS to measure thread

HaoShuang 4 年之前
父节点
当前提交
f6c2364427

+ 12 - 6
ExtenderControl/Extender.cs

@@ -922,10 +922,16 @@ namespace Extender
             //EdSpectrumAcquisitionController.ExperimentStarted -= this.OnEdSpectrumExperimentStarted;
             //EdSpectrumAcquisitionController.ExperimentStarted -= this.OnEdSpectrumExperimentStarted;
         }
         }
 
 
-        void SetXrayAcquisitionParam()
+        void SetXrayAcquisitionParam(double a_dMilliSecondsTime)
         {
         {
             EdSpectrumSettings.EdSettings.AcquisitionMode = EdAcquireMode.LiveTime; // RealTime or LiveTime
             EdSpectrumSettings.EdSettings.AcquisitionMode = EdAcquireMode.LiveTime; // RealTime or LiveTime
-            EdSpectrumSettings.EdSettings.AcquisitionTime = TimeSpan.FromMilliseconds(200);
+
+            if (a_dMilliSecondsTime < 200)
+            {
+                a_dMilliSecondsTime = 200;
+            }
+
+            EdSpectrumSettings.EdSettings.AcquisitionTime = TimeSpan.FromMilliseconds(a_dMilliSecondsTime);
 
 
             EdSpectrumSettings.EdSettings.ProcessTime = 1;
             EdSpectrumSettings.EdSettings.ProcessTime = 1;
             EdSpectrumSettings.EdSettings.EnergyRange = 20;
             EdSpectrumSettings.EdSettings.EnergyRange = 20;
@@ -1103,14 +1109,14 @@ namespace Extender
 
 
         //点扫描
         //点扫描
         //X-ray
         //X-ray
-        public Boolean XrayPointCollectiong(int x, int y, out long[] XrayData, out Dictionary<string, double> a_listElement)
+        public Boolean XrayPointCollectiong(double dMilliSecondsTime, int x, int y, out long[] XrayData, out Dictionary<string, double> a_listElement)
         {
         {
             XrayParamInit();
             XrayParamInit();
 
 
             XrayData = new long[XRayChannelLength];
             XrayData = new long[XRayChannelLength];
             a_listElement = new Dictionary<string, double>();
             a_listElement = new Dictionary<string, double>();
 
 
-            SetXrayAcquisitionParam();
+            SetXrayAcquisitionParam(dMilliSecondsTime);
             SetPointAcquistionRegion(x, y);
             SetPointAcquistionRegion(x, y);
            
            
             // IEdSpectrumSettings.EdCapabilities will validate settings and hardware availability.
             // IEdSpectrumSettings.EdCapabilities will validate settings and hardware availability.
@@ -1157,14 +1163,14 @@ namespace Extender
             return true;
             return true;
         }
         }
         //面扫描
         //面扫描
-        public Boolean XrayAreaCollectiong(List<Segment> a_listChord, out long[] XrayData, out Dictionary<string, double> a_listElement)
+        public Boolean XrayAreaCollectiong(double dMilliSecondsTime, List<Segment> a_listChord, out long[] XrayData, out Dictionary<string, double> a_listElement)
         {
         {
             XrayParamInit();
             XrayParamInit();
 
 
             XrayData = new long[XRayChannelLength];
             XrayData = new long[XRayChannelLength];
             a_listElement = new Dictionary<string, double>();
             a_listElement = new Dictionary<string, double>();
 
 
-            SetXrayAcquisitionParam();
+            SetXrayAcquisitionParam(dMilliSecondsTime);
             List<Chord> Chords = new List<Chord>();
             List<Chord> Chords = new List<Chord>();
 
 
             foreach (Segment seg in a_listChord)
             foreach (Segment seg in a_listChord)

+ 2 - 2
ExtenderControl/ExtenderInterface.cs

@@ -137,9 +137,9 @@ namespace Extender
 
 
         //X-ray
         //X-ray
         //点采集
         //点采集
-        Boolean XrayPointCollectiong(int x, int y, out long[] XrayData, out Dictionary<string, double> a_listElement);        
+        Boolean XrayPointCollectiong(double dMilliSecondsTime, int x, int y, out long[] XrayData, out Dictionary<string, double> a_listElement);
 
 
         //面采集
         //面采集
-        Boolean XrayAreaCollectiong(List<Segment> a_listChord, out long[] XrayData, out Dictionary<string, double> a_listElement);
+        Boolean XrayAreaCollectiong(double dMilliSecondsTime, List<Segment> a_listChord, out long[] XrayData, out Dictionary<string, double> a_listElement);
     }
     }
 }
 }

+ 1 - 1
HOZProject/App.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
 <configuration>
     <startup> 
     <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
     </startup>
     </startup>
     <appSettings>
     <appSettings>
       <!--厂商_数据源-->
       <!--厂商_数据源-->

+ 1 - 1
HOZProject/UnitControl.csproj

@@ -8,7 +8,7 @@
     <OutputType>WinExe</OutputType>
     <OutputType>WinExe</OutputType>
     <RootNamespace>HOZProject</RootNamespace>
     <RootNamespace>HOZProject</RootNamespace>
     <AssemblyName>HOZProject</AssemblyName>
     <AssemblyName>HOZProject</AssemblyName>
-    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Deterministic>true</Deterministic>
     <Deterministic>true</Deterministic>

+ 1 - 0
HOZProject/UserControls/UControl_Init.cs

@@ -343,6 +343,7 @@ namespace HOZProject
             cfm.Is_Photograph = chkWIsP.Checked;//是否仅拍照
             cfm.Is_Photograph = chkWIsP.Checked;//是否仅拍照
             cfm.PT = chkWPT.Checked;//是否有PT
             cfm.PT = chkWPT.Checked;//是否有PT
             cfm.Title = chkWqxkc.Checked;//是否倾斜样品台
             cfm.Title = chkWqxkc.Checked;//是否倾斜样品台
+            //cfm.EDS = 
             //自动对焦模式
             //自动对焦模式
             //cfm.FocusMode = chkManul.Checked;
             //cfm.FocusMode = chkManul.Checked;
             cfm.PTTemp = txtWPTF.Text;//PT文件路径
             cfm.PTTemp = txtWPTF.Text;//PT文件路径

+ 1 - 0
MeasureData/MeasureData.csproj

@@ -50,6 +50,7 @@
   <ItemGroup>
   <ItemGroup>
     <Compile Include="ConfigFile.cs" />
     <Compile Include="ConfigFile.cs" />
     <Compile Include="CutHole.cs" />
     <Compile Include="CutHole.cs" />
+    <Compile Include="EDSParam.cs" />
     <Compile Include="FocusParam.cs" />
     <Compile Include="FocusParam.cs" />
     <Compile Include="MeasureFile.cs" />
     <Compile Include="MeasureFile.cs" />
     <Compile Include="MeasureParam.cs" />
     <Compile Include="MeasureParam.cs" />

+ 24 - 2
MeasureData/MeasureParam.cs

@@ -51,6 +51,14 @@ namespace MeasureData
             set { this.m_Title = value; }
             set { this.m_Title = value; }
         }
         }
 
 
+        //是否有EDS
+        private Boolean m_EDS;
+        public Boolean EDS
+        {
+            get { return this.m_EDS; }
+            set { this.m_EDS = value; }
+        }
+
         //Z轴移动的范围
         //Z轴移动的范围
         private float m_dZ;
         private float m_dZ;
         public float ZDistance
         public float ZDistance
@@ -179,6 +187,15 @@ namespace MeasureData
             set { this.StigY = value; }
             set { this.StigY = value; }
         }
         }
 
 
+        //EDS参数
+        private EDSParam EdsParam;
+        public EDSParam EDSP
+        {
+            get { return this.EdsParam; }
+            set { this.EdsParam = value; }
+        }
+
+
 
 
         //能谱参数
         //能谱参数
 
 
@@ -207,7 +224,8 @@ namespace MeasureData
             this.FIBFocus.TYPE = 4;
             this.FIBFocus.TYPE = 4;
             this.Title = false;
             this.Title = false;
             this.ZDistance = 0;
             this.ZDistance = 0;
-
+            this.EDS = false;
+            this.EDSP = new EDSParam();
         }
         }
 
 
         //XML文件保存测量参数
         //XML文件保存测量参数
@@ -219,12 +237,15 @@ namespace MeasureData
             xBool isPhotograph = new xBool();
             xBool isPhotograph = new xBool();
             xBool ptDepostion = new xBool();
             xBool ptDepostion = new xBool();
             xBool isTilt = new xBool();
             xBool isTilt = new xBool();
+            xBool isEDS = new xBool();
             isTilt.AssignValue(this.Title);
             isTilt.AssignValue(this.Title);
+            isEDS.AssignValue(this.EDS);
             isPhotograph.AssignValue(this.is_Photograph);
             isPhotograph.AssignValue(this.is_Photograph);
             ptDepostion.AssignValue(this.m_pt);
             ptDepostion.AssignValue(this.m_pt);
             sFile.Register("Is_Title", isTilt);
             sFile.Register("Is_Title", isTilt);
             sFile.Register("Is_Photograph", isPhotograph);
             sFile.Register("Is_Photograph", isPhotograph);
             sFile.Register("PT_Depostion", ptDepostion);
             sFile.Register("PT_Depostion", ptDepostion);
+            sFile.Register("Is_EDS", isEDS);
 
 
             //ELY文件
             //ELY文件
             xString ptELYFile = new xString();
             xString ptELYFile = new xString();
@@ -281,6 +302,7 @@ namespace MeasureData
             sFile.Register("FIBFocus_Param", this.FIBFocus);
             sFile.Register("FIBFocus_Param", this.FIBFocus);
             sFile.Register("StigX_Param", this.AutoStigX);
             sFile.Register("StigX_Param", this.AutoStigX);
             sFile.Register("StigY_Param", this.AutoStigY);
             sFile.Register("StigY_Param", this.AutoStigY);
+            sFile.Register("EDS_Param", this.EDSP);
 
 
             if (isStoring)
             if (isStoring)
             {
             {
@@ -293,7 +315,7 @@ namespace MeasureData
                 this.is_Photograph = isPhotograph.value();
                 this.is_Photograph = isPhotograph.value();
                 this.m_pt = ptDepostion.value();
                 this.m_pt = ptDepostion.value();
                 this.Title = isTilt.value();
                 this.Title = isTilt.value();
-
+                this.EDS = isEDS.value();
                 this.m_ptTemp = ptELYFile.value();
                 this.m_ptTemp = ptELYFile.value();
                 this.m_fibTemp = fibELYFile.value();
                 this.m_fibTemp = fibELYFile.value();
 
 

+ 76 - 6
MeasureThread/Measure.cs

@@ -17,6 +17,7 @@ using FileManager;
 using WebManager;
 using WebManager;
 
 
 using OpenCvSharp;
 using OpenCvSharp;
+using Extender;
 
 
 namespace MeasureThread
 namespace MeasureThread
 {
 {
@@ -442,6 +443,10 @@ namespace MeasureThread
         static FactoryHardware factorySEM = FactoryHardware.Instance;
         static FactoryHardware factorySEM = FactoryHardware.Instance;
         ISEMControl iSEM = factorySEM.ISEM;
         ISEMControl iSEM = factorySEM.ISEM;
 
 
+        //全局只有一个Extender
+        static ExtenderInterface factoryExtender = null;// ExtenderInterface.Instance;
+        IExtenderControl iExtender = null;// factoryExtender.IExtender;
+
         //@的作用是不用转义字符\\只打一个就行
         //@的作用是不用转义字符\\只打一个就行
         const String ImageName0 = @"Straighten.tif"; //传给客户,原始图像,为拉直操作
         const String ImageName0 = @"Straighten.tif"; //传给客户,原始图像,为拉直操作
         const String ImageName1 = @"FindCutPostion.tif"; //传给客户,作水平校正
         const String ImageName1 = @"FindCutPostion.tif"; //传给客户,作水平校正
@@ -451,6 +456,7 @@ namespace MeasureThread
         const String ImageName4 = @"SEMTrapCP.tif";//传给客户,找到已经切割点
         const String ImageName4 = @"SEMTrapCP.tif";//传给客户,找到已经切割点
         const String ImageName5 = @"SEMDegreeTrap.tif";//传给客户,水平校正
         const String ImageName5 = @"SEMDegreeTrap.tif";//传给客户,水平校正
         const String ImageName6 = @"SEMMagEnd.tif";//传给客户,测量层高
         const String ImageName6 = @"SEMMagEnd.tif";//传给客户,测量层高
+        const String ImageName7 = @"EDSImage.tif";//计算感兴趣的区域
 
 
         const String MacoInsertPt = "GIS Insert.MLF"; //传入PT针
         const String MacoInsertPt = "GIS Insert.MLF"; //传入PT针
         const String MacoRetractPt = "GIS Retract.MLF"; //退出PT针
         const String MacoRetractPt = "GIS Retract.MLF"; //退出PT针
@@ -469,6 +475,7 @@ namespace MeasureThread
         String FIBfocus_path = "";
         String FIBfocus_path = "";
         String StigX_path = "";
         String StigX_path = "";
         String StigY_path = "";
         String StigY_path = "";
+        String EDS_path = "";
         String data_path = "";
         String data_path = "";
 
 
         int m_nWorkHoleNo = -1;
         int m_nWorkHoleNo = -1;
@@ -545,6 +552,12 @@ namespace MeasureThread
 
 
             this.m_MsParam = m_measureFile.MParam;
             this.m_MsParam = m_measureFile.MParam;
 
 
+            if(m_measureFile.MParam.EDS == true)
+            {
+                factoryExtender = ExtenderInterface.Instance;
+                iExtender = factoryExtender.IExtender;
+            }
+
             return true;
             return true;
         }
         }
 
 
@@ -563,6 +576,51 @@ namespace MeasureThread
             SendCutHolesStatus(this, arg);
             SendCutHolesStatus(this, arg);
         }
         }
 
 
+        public bool DoEDS()
+        {
+            EDSParam param = m_measureFile.MParam.EDSP;
+            double dDwellTime = param.DwellTime;
+            int nImageType = param.ImageType;
+            double dScanSizes = param.ScanSize;
+            iExtender.SetImageAcquistionSetting(dDwellTime, nImageType, dScanSizes);
+
+            string path = EDS_path;
+            iExtender.GrabImage(path + "\\EDSImage.tif", 0, 0, 0, 0, 0);
+
+            //送给客户,计算感兴趣的区域
+            if (param.PointMode == true)
+            {
+                //点采集
+                List<Point> listPoints = new List<Point>();
+
+                foreach (Point pt in listPoints)
+                {
+                    long[] XrayData = new long[2000];
+                    Dictionary<string, double> listElement = new Dictionary<string, double>();
+                    iExtender.XrayPointCollectiong(param.PointTime, pt.X, pt.Y, out XrayData, out listElement);
+
+                    //写入数据库
+                }
+            }
+            if (param.AreaMode == true)
+            {
+                //面采集
+                long[] XrayData = new long[2000];
+                Dictionary<string, double> listElement = new Dictionary<string, double>();
+
+                List<List<Segment>> listFeature = new List<List<Segment>>();
+
+                foreach (List < Segment> listSeg in listFeature)
+                {
+                    iExtender.XrayAreaCollectiong(param.AreaTime, listSeg, out XrayData, out listElement);
+
+                    //写入数据库
+                }
+            }
+
+            return true;
+        }
+
         //测量流程
         //测量流程
         public void DoMeasure()
         public void DoMeasure()
         {
         {
@@ -592,6 +650,8 @@ namespace MeasureThread
                 return;
                 return;
             }
             }
 
 
+            //增加EDS控制
+
             //将停止键复位
             //将停止键复位
             key_stop = false;
             key_stop = false;
 
 
@@ -637,23 +697,33 @@ namespace MeasureThread
                 //FIB对焦数据存放目录
                 //FIB对焦数据存放目录
                 FIBfocus_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\FIBFocus";
                 FIBfocus_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\FIBFocus";
                 m_MsParam.FIBFocus.Path = FIBfocus_path;
                 m_MsParam.FIBFocus.Path = FIBfocus_path;
-                if (!Directory.Exists(focus_path))
+                if (!Directory.Exists(FIBfocus_path))
                 {
                 {
-                    Directory.CreateDirectory(focus_path);
+                    Directory.CreateDirectory(FIBfocus_path);
                 }
                 }
                 //StigX数据存放目录
                 //StigX数据存放目录
                 StigX_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\StigX";
                 StigX_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\StigX";
                 m_MsParam.AutoStigX.Path = StigX_path;
                 m_MsParam.AutoStigX.Path = StigX_path;
-                if (!Directory.Exists(focus_path))
+                if (!Directory.Exists(StigX_path))
                 {
                 {
-                    Directory.CreateDirectory(focus_path);
+                    Directory.CreateDirectory(StigX_path);
                 }
                 }
                 //StigY数据存放目录
                 //StigY数据存放目录
                 StigY_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\StigY";
                 StigY_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\StigY";
                 m_MsParam.AutoStigY.Path = StigY_path;
                 m_MsParam.AutoStigY.Path = StigY_path;
-                if (!Directory.Exists(focus_path))
+                if (!Directory.Exists(StigY_path))
                 {
                 {
-                    Directory.CreateDirectory(focus_path);
+                    Directory.CreateDirectory(StigY_path);
+                }
+                //EDS数据存放路径
+                if (m_measureFile.MParam.EDS == true)
+                {
+                    EDS_path = WorkingFolder + "\\" + m_cutHoles[i].HoleName + "\\EDS";
+                    m_MsParam.AutoStigY.Path = EDS_path;
+                    if (!Directory.Exists(EDS_path))
+                    {
+                        Directory.CreateDirectory(EDS_path);
+                    }
                 }
                 }
                 //判断孔状态
                 //判断孔状态
                 if (m_cutHoles[i].STATE != State.Ready)
                 if (m_cutHoles[i].STATE != State.Ready)

+ 5 - 1
MeasureThread/MeasureThread.csproj

@@ -10,7 +10,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>MeasureThread</RootNamespace>
     <RootNamespace>MeasureThread</RootNamespace>
     <AssemblyName>MeasureThread</AssemblyName>
     <AssemblyName>MeasureThread</AssemblyName>
-    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <FileAlignment>512</FileAlignment>
     <Deterministic>true</Deterministic>
     <Deterministic>true</Deterministic>
     <TargetFrameworkProfile />
     <TargetFrameworkProfile />
@@ -63,6 +63,10 @@
     <Compile Include="ThreadStatus.cs" />
     <Compile Include="ThreadStatus.cs" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\ExtenderControl\Extender.csproj">
+      <Project>{f5092f52-1fbd-4882-bb9c-399809d87779}</Project>
+      <Name>Extender</Name>
+    </ProjectReference>
     <ProjectReference Include="..\FileManager\FileManager.csproj">
     <ProjectReference Include="..\FileManager\FileManager.csproj">
       <Project>{14c99f54-b3c2-47cf-adb3-e79fdd2d382f}</Project>
       <Project>{14c99f54-b3c2-47cf-adb3-e79fdd2d382f}</Project>
       <Name>FileManager</Name>
       <Name>FileManager</Name>

+ 2 - 2
OxfordTest/Form1.cs

@@ -277,7 +277,7 @@ namespace OxfordTest
         {
         {
             long[] XrayData = new long[2000];
             long[] XrayData = new long[2000];
             Dictionary<string, double> listElement = new Dictionary<string, double>();
             Dictionary<string, double> listElement = new Dictionary<string, double>();
-            iExtender.XrayPointCollectiong(1, 1, out XrayData, out listElement);
+            iExtender.XrayPointCollectiong(200,1, 1, out XrayData, out listElement);
 
 
             ShowData(XrayData, listElement);
             ShowData(XrayData, listElement);
         }
         }
@@ -326,7 +326,7 @@ namespace OxfordTest
 
 
             listSeg.Add(seg2);
             listSeg.Add(seg2);
 
 
-            iExtender.XrayAreaCollectiong(listSeg, out XrayData, out listElement);
+            iExtender.XrayAreaCollectiong(200, listSeg, out XrayData, out listElement);
             ShowData(XrayData, listElement);
             ShowData(XrayData, listElement);
         }
         }
     }
     }