/// <summary>
        /// 数据接收 事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                string str = serialPort.ReadExisting();
                if (str != "!")
                {
                    //MessageBox.Show("光源控制失败!","系统提示",MessageBoxButton.OKCancel,MessageBoxImage.Question );
                }
                //int len = serialPort.BytesToRead;                    //获取输入缓冲区数组长度
                //byte[] RxData = new byte[len];
                //serialPort.Read(RxData, 0, len);                     //将数据读入缓存

                //if (RxData[0] == 38)
                //{
                //   // 控制器接收命令失败,则返回&
                //    ReceivedSuccess = false;
                //}
                //else
                //{
                //    //当命令字为1,2,3时,如控制器接收命令成功,则返回特征字$
                //    //当命令字为4时,如控制器接收命令成功,则返回对应通道的亮度设置参数(返回格式跟发送格式相同)
                //    ReceivedSuccess = true;
                //}
            }
            catch (Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("serialPort_DataReceived:\n" + ex.ToString());
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="str"></param>
        /// <returns>[-1异常,0成功,1无串口]</returns>
        private int Write2Device(string str)
        {
            if (openSuceess)
            {
                try
                {
                    //ReceivedSuccess = false;

                    //数据 +异或和
                    //string sendStr = str + XOR_XLen(str, 2);
                    byte[] sendData = System.Text.ASCIIEncoding.ASCII.GetBytes(str);
                    int    len      = sendData.Length;

                    serialPort.Write(sendData, 0, len);
                    //string str1= serialPort.ReadExisting();
                    System.Threading.Thread.Sleep(30);

                    return(0);
                }
                catch (Exception ex)
                {
                    SoftwareInfo.getInstance().WriteLog("Write2Device:\n" + ex.ToString());
                    return(-1);
                }
            }
            else
            {
                return(1);
            }
        }
 public GenerateModelParas()
 {
     //m_CreateChannel = SoftwareInfo.getInstance().DefaultCreateChannel;
     //m_DetectChannel = SoftwareInfo.getInstance().DefaultDetectChannel;
     m_LightOrDark   = SoftwareInfo.getInstance().HasBacklit;
     m_RangeProduct  = SoftwareInfo.getInstance().ProductGrayDefault;
     m_RangeLocation = SoftwareInfo.getInstance().HoleGrayDefault;
     m_MinScore      = SoftwareInfo.getInstance().MinScoreDefault;
 }
Exemple #4
0
 /// <summary>
 /// 获取单例对象
 /// </summary>
 /// <returns></returns>
 public static SoftwareInfo getInstance()
 {
     if (instance == null)
     {
         lock (typeof(SoftwareInfo))
         {
             if (instance == null)
             {
                 instance = new SoftwareInfo();
             }
         }
     }
     return(instance);
 }
Exemple #5
0
        //序列化用
        public Station()
        {
            ModelUnMatchAlarmNum = SoftwareInfo.getInstance().ModelUnMatchAlarmNum;
            CameraPhotoInterval  = SoftwareInfo.getInstance().CameraPhotoInterval;
            PhotoNumForOneSize   = SoftwareInfo.getInstance().PhotoNumForOneSize;

            CameraPhotoCount            = SoftwareInfo.getInstance().CameraPhotoCount;
            CameraStartPhotoPosition    = SoftwareInfo.getInstance().CameraStartPhotoPosition;
            CameraIntervalPhotoPosition = SoftwareInfo.getInstance().CameraIntervalPhotoPosition;
            //todo
            ExposureTimeRaw = 80;
            GainRaw         = 390;
            //PriorityStationModel = SoftwareInfo.getInstance().PriorityStationModel;
            isEnablePCRevise = false;
            hv_CorrectGray   = 0;
        }
Exemple #6
0
 /// <summary>
 /// 关闭所有 光源控制器串口
 /// </summary>
 public void ClosAllSerialPort()
 {
     if (dicLightControl == null)
     {
         return;
     }
     try
     {
         for (int i = 0; i < dicLightControl.Count; i++)
         {
             dicLightControl.ElementAt(i).Value.CloseSerialPort();
         }
     }
     catch (Exception ex)
     {
         SoftwareInfo.getInstance().WriteLog("ClosAllSerialPort:\n" + ex.ToString());
     }
 }
Exemple #7
0
        //读取相机参数信息
        public string ReadAndSetCameraParas(string xmlPath)
        {
            string xmlFileName = xmlPath + "\\CameraParas.xml";

            if (System.IO.File.Exists(xmlFileName))
            {
                System.Xml.Linq.XDocument xDoc = System.Xml.Linq.XDocument.Load(xmlFileName);

                try
                {
                    foreach (var camera in xDoc.Root.Descendants("CameraPara"))
                    {
                        int channelNo = Convert.ToInt32(camera.Attribute("ChannelNo").Value);
                        int stationNo = Convert.ToInt32(camera.Attribute("StationNo").Value);

                        Dictionary <string, Para4HTuple> dicParas = (from para in camera.Descendants("Para4HTuple")
                                                                     select new Para4HTuple
                        {
                            ParaNo = para.Attribute("ParaNo").Value,
                            ParaName = para.Attribute("ParaName").Value,
                            ParaValue = para.Attribute("ParaValue").Value,
                            ParaType = para.Attribute("ParaType").Value
                        }).ToDictionary(v => v.ParaNo);

                        Camera nowCamera = dicCamera[channelNo, stationNo];

                        if (nowCamera != null)
                        {
                            //设置参数信息
                            foreach (var vPara in dicParas.Values)
                            {
                                nowCamera.SetCameraPara(vPara);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    SoftwareInfo.getInstance().WriteLog("ReadAndSetCameraParas:\n" + ex.ToString());
                }
            }

            return("OK");
        }
 /// <summary>
 /// 关闭串口
 /// </summary>
 /// <returns>[-1异常,0成功,1已关闭]</returns>
 public int Close()
 {
     if (serialPort.IsOpen)
     {
         try
         {
             serialPort.Close();
             return(0);
         }
         catch (Exception ex)
         {
             SoftwareInfo.getInstance().WriteLog("Close:\n" + ex.ToString());
             return(-1);
         }
     }
     else
     {
         return(1);
     }
 }
Exemple #9
0
        public int load(string path, ref string exMessage)
        {
            int result = 0;

            try
            {
                using (Stream fStream = File.OpenRead(path))
                {
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ProductSet));
                    instance = serializer.Deserialize(fStream) as ProductSet;
                }
            }
            catch (System.Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("load:\n" + ex.ToString());
                exMessage = ex.Message;
                result    = 1;
            }
            return(result);
        }
Exemple #10
0
        /// <summary>
        /// 保存通道亮度
        /// </summary>
        /// <param name="xmlPath"></param>
        /// <param name="exMessage"></param>
        /// <returns></returns>
        public List <int> SaveChannelBrightnessParas(string xmlPath, ref string exMessage)
        {
            //int resultFLag = 0;
            List <int> brightList = new List <int>()
            {
            };

            try
            {
                XElement rootNode = new XElement("Channels");

                foreach (var para in dicChannelBrightness.Keys)
                {
                    //定义一个新节点 Channel
                    XElement newNode = new XElement("Channel",
                                                    new XAttribute("ControlNo", para.ControlNo),
                                                    new XAttribute("ChannelNo", para.ChannelNo),
                                                    new XAttribute("Brightness", para.Brightness)
                                                    );
                    rootNode.Add(newNode);
                    brightList.Add(para.Brightness);
                }



                XDocument parasXDoc = new XDocument();
                parasXDoc.Add(rootNode);

                parasXDoc.Save(xmlPath);
                exMessage = "保存成功!";
            }
            catch (Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("SaveChannelBrightnessParas:\n" + ex.ToString());
                //resultFLag = -1;
                exMessage = ex.Message;
            }

            return(brightList);
        }
 /// <summary>
 /// 打开串口
 /// </summary>
 /// <returns>[-1异常,0成功,1已打开]</returns>
 public int Open()
 {
     if (!serialPort.IsOpen)
     {
         try
         {
             serialPort.Open();
             openSuceess = true;
             return(0);
         }
         catch (Exception ex)
         {
             SoftwareInfo.getInstance().WriteLog("Open:\n" + ex.ToString());
             openSuceess = false;
             return(-1);
         }
     }
     else
     {
         return(1);
     }
 }
Exemple #12
0
        public Station(int ChannelNo, int StationNo, bool isEnable)
        {
            IsEnable       = isEnable;
            ModeList       = new ObservableCollection <Model>();
            this.ChannelNo = ChannelNo;
            this.StationNo = StationNo;
            for (int i = 0; i < 4; i++)
            {
                ModeList.Add(new Model(i + 1));
            }
            ModelUnMatchAlarmNum = SoftwareInfo.getInstance().ModelUnMatchAlarmNum;
            CameraPhotoInterval  = SoftwareInfo.getInstance().CameraPhotoInterval;
            PhotoNumForOneSize   = SoftwareInfo.getInstance().PhotoNumForOneSize;

            SetCameraPhotoCount(SoftwareInfo.getInstance().CameraPhotoCount);
            CameraStartPhotoPosition    = SoftwareInfo.getInstance().CameraStartPhotoPosition;
            CameraIntervalPhotoPosition = SoftwareInfo.getInstance().CameraIntervalPhotoPosition;

            //todo
            ExposureTimeRaw = 80;
            GainRaw         = 390;
            //PriorityStationModel =SoftwareInfo.getInstance().PriorityStationModel;
        }
Exemple #13
0
        /// <summary>
        /// 从配置文件中获取相机参数信息
        /// </summary>
        /// <param name="xmlPath"></param>
        /// <param name="exMessage"></param>
        /// <returns></returns>
        public int GetCameraS(string xmlPath, ref string exMessage)
        {
            if (!System.IO.File.Exists(xmlPath))
            {
                exMessage = "不存在文件=" + xmlPath;
                return(-1);
            }
            int resultFLag = 0;

            try
            {
                XDocument xDoc = XDocument.Load(xmlPath);
                foreach (var camera in xDoc.Descendants("Camera"))
                {
                    Camera cam = new Camera();
                    if (camera.Attributes("StationNo").Count() > 0)
                    {
                        cam.StationNo = Convert.ToInt32(camera.Attribute("StationNo").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少StationNo属性\r\n";
                    }

                    if (camera.Attributes("ChannelNo").Count() > 0)
                    {
                        cam.ChannelNo = Convert.ToInt32(camera.Attribute("ChannelNo").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少ChannelNo属性\r\n";
                    }

                    if (camera.Attributes("Name").Count() > 0)
                    {
                        cam.Name = camera.Attribute("Name").Value;
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少Name属性\r\n";
                    }

                    if (camera.Attributes("IsEnabled").Count() > 0)
                    {
                        cam.IsEnabled = camera.Attribute("IsEnabled").Value == "1" ? true : false;
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少IsEnabled属性\r\n";
                    }

                    if (camera.Attributes("AOIHeight").Count() > 0)
                    {
                        cam.AOIHeight = Convert.ToInt32(camera.Attribute("AOIHeight").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少AOIHeight属性\r\n";
                    }

                    if (camera.Attributes("AOIWidth").Count() > 0)
                    {
                        cam.AOIWidth = Convert.ToInt32(camera.Attribute("AOIWidth").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少AOIWidth属性\r\n";
                    }

                    if (camera.Attributes("AlarmDelayTime").Count() > 0)
                    {
                        cam.AlarmDelayTime = Convert.ToInt32(camera.Attribute("AlarmDelayTime").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少AlarmDelayTime属性\r\n";
                    }

                    if (camera.Attributes("AlarmDelayCode").Count() > 0)
                    {
                        cam.AlarmDelayCode = Convert.ToInt32(camera.Attribute("AlarmDelayCode").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少AlarmDelayCode属性\r\n";
                    }

                    if (camera.Attributes("IsImageRotate").Count() > 0)
                    {
                        cam.IsImageRotate = Convert.ToInt32(camera.Attribute("IsImageRotate").Value);
                    }
                    else
                    {
                        resultFLag = -1;
                        exMessage += "相机缺少IsImageRotate属性\r\n";
                    }

                    //打开相机参数
                    cam.dicOpenFramegrabber_00_15 = (from para4 in camera.Element("OpenFramegrabber").Descendants("Para4HTuple")
                                                     select new Para4HTuple
                    {
                        ParaNo = para4.Attribute("ParaNo").Value,
                        ParaName = para4.Attribute("ParaName").Value,
                        ParaType = para4.Attribute("ParaType").Value,
                        ParaValue = para4.Value
                    }).ToDictionary(v4 => v4.ParaNo);

                    //设置参数
                    cam.dicSetFramegrabberParam = (from para7 in camera.Element("SetFramegrabberParam").Descendants("Para7HTuple")
                                                   select new Para7HTuple
                    {
                        ParaNo = para7.Attribute("ParaNo").Value,
                        ParaName = para7.Attribute("ParaName").Value,
                        ParaType = para7.Attribute("ParaType").Value,
                        ParaValue = para7.Value,
                        ShowName = para7.Attribute("ShowName").Value,
                        Des = para7.Attribute("Des").Value,
                        DefaultValue = para7.Attribute("DefaultValue").Value,
                        Level = Convert.ToInt32(para7.Attribute("Level").Value)
                    }).ToDictionary(v7 => v7.ParaNo);

                    cam.CameraParameters = (from paraString in camera.Element("CameraCalibration").Element("CameraParameters").Value.Split(',')
                                            select Convert.ToDouble(paraString)).ToList();
                    cam.CameraPose = (from PoseString in camera.Element("CameraCalibration").Element("CameraPose").Value.Split(',')
                                      select Convert.ToDouble(PoseString)).ToList();
                    cam.PixelToSizeRatio = Convert.ToDouble(camera.Element("CameraCalibration").Element("PixelToSizeRatio").Value);

                    int channelNo = Convert.ToInt32(camera.Attribute("ChannelNo").Value);
                    int stationNo = Convert.ToInt32(camera.Attribute("StationNo").Value);


                    dicCamera[channelNo, stationNo] = cam;
                }
            }
            catch (Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("GetCameraS:\n" + ex.ToString());
                resultFLag = -1;
                exMessage += ex.Message;
            }

            return(resultFLag);
        }
Exemple #14
0
        public int GenerateHalconParas(int AlgorithmNormalParasNum, int AlgorithmSeniorParasNum, Station station)
        {
            int ret = 0;

            try
            {
                //用户框选的检测单元ROI
                List <double> Region_Array_UnitList = new List <double>();
                Region_Array_UnitList.Add(detectionArea.HRectList[0].Row);
                Region_Array_UnitList.Add(detectionArea.HRectList[0].Column);
                Region_Array_UnitList.Add(detectionArea.HRectList[0].Phi);
                Region_Array_UnitList.Add(detectionArea.HRectList[0].Length1);
                Region_Array_UnitList.Add(detectionArea.HRectList[0].Length2);

                //用户框选的定位区域ROI
                List <double> Region_Array_LHolesList = new List <double>();
                foreach (var item in locationArea.HRectList)
                {
                    Region_Array_LHolesList.Add(item.Row);
                    Region_Array_LHolesList.Add(item.Column);
                    Region_Array_LHolesList.Add(item.Phi);
                    Region_Array_LHolesList.Add(item.Length1);
                    Region_Array_LHolesList.Add(item.Length2);
                }
                Region_Array_Unit   = Region_Array_UnitList.ToArray();
                Region_Array_LHoles = Region_Array_LHolesList.ToArray();

                //定位区域的坐标位置
                List <double> Array_location_holes_List = new List <double>();
                foreach (var v in Array_location_holes_String.Split(';'))
                {
                    Array_location_holes_List.Add(Convert.ToDouble(v));
                }
                Array_location_holes = Array_location_holes_List.ToArray();

                //定位区域的坐标位置与模板的坐标位置的位置仿射变换关系
                List <double> HomMat2D_LocationHoles2SampleXLD_List = new List <double>();
                foreach (var v in HomMat2D_LocationHoles2SampleXLD_String.Split(';'))
                {
                    HomMat2D_LocationHoles2SampleXLD_List.Add(Convert.ToDouble(v));
                }
                HomMat2D_LocationHoles2SampleXLD = HomMat2D_LocationHoles2SampleXLD_List.ToArray();


                //普通参数列表
                List <double> parasTypeList = new List <double>();
                List <double> DefectList    = new List <double>();
                //高级参数列表
                List <double> AssistList = new List <double>();
                //框个数列表
                List <double> defectRectNumList = new List <double>();
                //框数据列表
                List <double> defectRectList = new List <double>();
                //框转换图像数据列表
                //List<HObject > defectxldList = new List<HObject>();
                //HObject Defect_xldArray_Temp = null;
                HObject ContOut = null;
                ////框数据列表
                //List<double> defectRectList = new List<double>();
                //框图形数据
                HObject defect_xldArray      = null;
                HObject defect_xldArray_Temp = null;
                HObject ContourTemp          = null;

                parasTypeList.Add(MeasureDefectList.Count);
                defectRectNumList.Add(MeasureDefectList.Count);
                foreach (var defect in MeasureDefectList)
                {
                    parasTypeList.Add(defect.DefectAlgorithm.m_AlgId);
                    defectRectNumList.Add(defect.HRectList.Count + defect.HCircleList.Count + defect.HPolygonList.Count);

                    //普通参数个数
                    int NormalParasNum = 0;
                    //1、连续出现几次报警
                    DefectList.Add(defect.DefectAlgorithm.TimesToAlarm);
                    NormalParasNum++;
                    //2、精度等级
                    DefectList.Add(defect.DefectAlgorithm.PrecisionLevel);
                    NormalParasNum++;
                    //3、是否连续报警
                    DefectList.Add(Convert.ToInt32(defect.DefectAlgorithm.IsContinuousAlarm));
                    NormalParasNum++;
                    //4、单元总数量
                    DefectList.Add(Convert.ToInt32(defect.DefectAlgorithm.GroupNumAlarm));
                    NormalParasNum++;

                    //高级参数个数
                    int SeniorParasNum = 0;

                    //第一个参数作为报警计数不计入计算参数
                    for (int i = 0; i < defect.DefectAlgorithm.GenericAlgorithmParasList.Count; i++)
                    {
                        AlgorithmParas paras = defect.DefectAlgorithm.GenericAlgorithmParasList[i];

                        if (paras.IsSenior)
                        {
                            AssistList.Add(Convert.ToDouble(paras.Value));
                            SeniorParasNum++;
                        }
                    }

                    //foreach (var paras in defect.DefectAlgorithm.GenericAlgorithmParasList)
                    //{
                    //    if (!paras.IsSenior)
                    //    {
                    //        DefectList.Add(Convert.ToDouble(paras.Value));
                    //        NormalParasNum++;
                    //    }
                    //    else
                    //    {
                    //        AssistList.Add(Convert.ToDouble(paras.Value));
                    //        SeniorParasNum++;
                    //    }
                    //}
                    for (int i = NormalParasNum; i < AlgorithmNormalParasNum; i++)
                    {
                        DefectList.Add(0);
                    }
                    for (int i = SeniorParasNum; i < AlgorithmSeniorParasNum; i++)
                    {
                        AssistList.Add(0);
                    }

                    foreach (var rect in defect.HRectList)
                    {
                        HOperatorSet.GenRectangle2ContourXld(out ContOut, rect.Row, rect.Column, rect.Phi, rect.Length1, rect.Length2);
                        rect.Rect_xld = ContOut;
                        defectRectList.Add(1);
                        if (defect_xldArray == null)
                        {
                            defect_xldArray = rect.Rect_xld;
                        }
                        else
                        {
                            //defect_xldArray.ConcatObj(rect.Rect_xld);
                            defect_xldArray_Temp = defect_xldArray;
                            HOperatorSet.ConcatObj(defect_xldArray_Temp, rect.Rect_xld, out defect_xldArray);
                        }
                    }
                    foreach (var circle in defect.HCircleList)
                    {
                        HOperatorSet.GenCircleContourXld(out ContOut, circle.Row, circle.Column, circle.Radius, 0, 6.28318, "positive", 1);
                        circle.Circle_xld = ContOut;
                        defectRectList.Add(0);
                        if (defect_xldArray == null)
                        {
                            defect_xldArray = circle.Circle_xld;
                        }
                        else
                        {
                            defect_xldArray_Temp = defect_xldArray;
                            HOperatorSet.ConcatObj(defect_xldArray_Temp, circle.Circle_xld, out defect_xldArray);
                        }
                    }
                    foreach (var polygon in defect.HPolygonList)
                    {
                        HOperatorSet.GenContourPolygonXld(out ContOut, polygon.Row.ToArray(), polygon.Column.ToArray());
                        polygon.Polygon_xld = ContOut;
                        defectRectList.Add(2);
                        if (defect_xldArray == null)
                        {
                            defect_xldArray = polygon.Polygon_xld;
                        }
                        else
                        {
                            defect_xldArray_Temp = defect_xldArray;
                            HOperatorSet.ConcatObj(defect_xldArray_Temp, polygon.Polygon_xld, out defect_xldArray);
                        }
                    }
                    ContourTemp = defect.Hcontour;
                }
                //缺陷参数数组
                List <double> Defect_SetArray_List = new List <double>();
                Defect_SetArray_List.AddRange(parasTypeList);
                Defect_SetArray_List.AddRange(DefectList);
                Defect_SetArray = Defect_SetArray_List.ToArray();

                //高级参数
                List <double> Assistant_Array_List = new List <double>();
                Assistant_Array_List.AddRange(parasTypeList);
                Assistant_Array_List.AddRange(AssistList);
                Defect_Assistant_Array = Assistant_Array_List.ToArray();

                //缺陷框列表
                List <double> Defect_RectArray_List = new List <double>();
                Defect_RectArray_List.AddRange(defectRectNumList);
                Defect_RectArray_List.AddRange(defectRectList);
                Defect_RectArray = Defect_RectArray_List.ToArray();
                Defect_xldArray  = defect_xldArray;
                Contour          = ContourTemp;
                //Defect_xldArray = defectxldList.ToArray();
                ////特殊区域类型列表
                //List<double> specialParasTypeList = new List<double>();
                ////特殊区域参数列表
                //List<double> specialParasList = new List<double>();

                ////特殊区域框个数列表
                //List<double> specialRectNumList = new List<double>();
                ////特殊区域框数据列表
                //List<double> specialRectList = new List<double>();

                //specialParasTypeList.Add(MeasureSpecialRegionList.Count);
                //specialRectNumList.Add(MeasureSpecialRegionList.Count);
                //foreach (var special in MeasureSpecialRegionList)
                //{
                //    specialParasList.Add(special.SpecialRegionAlgorithm.m_AlgId);
                //    specialRectNumList.Add(special.HRectList.Count);

                //    //普通参数个数
                //    int NormalParasNum = 0;
                //    foreach (var paras in special.SpecialRegionAlgorithm.GenericAlgorithmParasList)
                //    {
                //        if (!paras.IsSenior)
                //        {
                //            specialParasList.Add(Convert.ToDouble(paras.Value));
                //            NormalParasNum++;
                //        }
                //        else
                //        {
                //        }
                //    }
                //    for (int i = NormalParasNum; i < AlgorithmNormalParasNum; i++)
                //    {
                //        specialParasList.Add(0);
                //    }

                //    foreach (var rect in special.HRectList)
                //    {
                //        specialRectList.Add(rect.Row);
                //        specialRectList.Add(rect.Column);
                //        specialRectList.Add(rect.Phi);
                //        specialRectList.Add(rect.Length1);
                //        specialRectList.Add(rect.Length2);
                //    }

                //}
                ////特殊区域参数数组
                //List<double> SpecialRegion_SetArray_List = new List<double>();
                //SpecialRegion_SetArray_List.AddRange(specialParasTypeList);
                //SpecialRegion_SetArray_List.AddRange(specialParasList);
                //SpecialRegion_SetArray = SpecialRegion_SetArray_List.ToArray();


                ////特殊区域框列表
                //List<double> SpecialRegion_RectArray_List = new List<double>();
                //SpecialRegion_RectArray_List.AddRange(specialRectNumList);
                //SpecialRegion_RectArray_List.AddRange(specialRectList);
                //SpecialRegion_RectArray = SpecialRegion_RectArray_List.ToArray();


                List <double> CreateParaList = new List <double>();
                CreateParaList.Add(generateModeParas.LightOrDark);
                CreateParaList.Add(station.ImageChannel);
                CreateParaList.Add(generateModeParas.RangeProduct);
                CreateParaList.Add(generateModeParas.Angle_Modle);
                CreateParaList.Add(generateModeParas.Select_MD);
                CreateParaList.Add(generateModeParas.IsClosedZone);
                CreateParaList.Add(generateModeParas.MinScore);
                CreateParaList.Add(generateModeParas.RangeLocation);
                CreateParaList.Add(generateModeParas.ModelPriority);
                CreateParaList.Add(generateModeParas.DetectionOver);
                CreateParaList.Add(generateModeParas.LocationType);
                CreateParaList.Add(generateModeParas.DirectionY);
                CreateParaList.Add(generateModeParas.DirectionX);
                CreateParaList.Add(generateModeParas.StretchY);
                CreateParaList.Add(generateModeParas.StretchX);

                hv_Create_Range_Tuple = CreateParaList.ToArray();


                List <double> ROIParaList = new List <double>();
                ROIParaList.Add(detectionArea.OffCenters_X / PixelToSizeRatio);
                ROIParaList.Add(detectionArea.OffCenters_Y / PixelToSizeRatio);
                ROIParaList.Add(detectionArea.Height / PixelToSizeRatio);
                ROIParaList.Add(detectionArea.Width / PixelToSizeRatio);
                hv_Rect_ROI = ROIParaList.ToArray();

                //灰度值
                List <double> Gray_Set_List = new List <double>();
                foreach (var v in hv_Gray_Set_String.Split(';'))
                {
                    Gray_Set_List.Add(Convert.ToDouble(v));
                }
                Gray_Set = Gray_Set_List.ToArray();

                //标定值
                List <double> CalibList = new List <double>();
                CalibList.AddRange(CameraParameters);
                CalibList.AddRange(CameraPose);
                CalibList.Add(PixelToSizeRatio);
                Calib_Tuple = CalibList.ToArray();

                //尺寸类型列表
                List <int> Size_Type_List = new List <int>();
                //公称值列表
                List <double> Size_NominalValue_List = new List <double>();
                //上下公差列表
                List <double> Size_UpDownTolerance_List = new List <double>();
                //补偿值列表
                List <double> Size_Compensation_List = new List <double>();
                //测量个数列表
                List <int> Size_MeasureNums_List = new List <int>();
                //尺寸是否显示列表
                List <int> Size_IsShow_List = new List <int>();
                //框个数列表
                List <double> SizeRectNumList = new List <double>();
                //框数据列表
                List <double> SizeRectList = new List <double>();
                //尺寸参数列表
                List <double> SizeParaList = new List <double>();


                foreach (var size in MeasureSizeList)
                {
                    Size_Type_List.Add(size.SizeAlgorithm.m_AlgId);
                    Size_NominalValue_List.Add(size.SizeAlgorithm.Std);
                    Size_UpDownTolerance_List.Add(size.SizeAlgorithm.Up);
                    Size_UpDownTolerance_List.Add(size.SizeAlgorithm.Down);
                    Size_Compensation_List.Add(size.SizeAlgorithm.Compensate);
                    Size_MeasureNums_List.Add(size.SizeAlgorithm.SizeNum);
                    Size_IsShow_List.Add(size.SizeAlgorithm.IsShow);

                    SizeRectNumList.Add(size.HRectList.Count);
                    foreach (var rect in size.HRectList)
                    {
                        SizeRectList.Add(rect.Row);
                        SizeRectList.Add(rect.Column);
                        SizeRectList.Add(rect.Phi);
                        SizeRectList.Add(rect.Length1);
                        SizeRectList.Add(rect.Length2);
                    }


                    int SizeParaNum = 0;
                    foreach (var paras in size.SizeAlgorithm.GenericAlgorithmParasList)
                    {
                        SizeParaList.Add(Convert.ToDouble(paras.Value));
                        SizeParaNum++;
                    }
                    for (int i = SizeParaNum; i < SoftwareInfo.getInstance().AlgorithmSizeParasNum; i++)
                    {
                        SizeParaList.Add(0);
                    }
                }

                Size_Type_Array            = Size_Type_List.ToArray();
                Size_NominalValue_Array    = Size_NominalValue_List.ToArray();
                Size_UpDownTolerance_Array = Size_UpDownTolerance_List.ToArray();
                Size_Compensation_Array    = Size_Compensation_List.ToArray();
                Size_MeasureNums_Array     = Size_MeasureNums_List.ToArray();
                Size_IsShow_Array          = Size_IsShow_List.ToArray();


                List <double> Size_Rects_Array_List = new List <double>();
                Size_Rects_Array_List.AddRange(SizeRectNumList);
                Size_Rects_Array_List.AddRange(SizeRectList);
                Size_Rects_Array = Size_Rects_Array_List.ToArray();



                Size_Algorithm_SetArray = SizeParaList.ToArray();
            }
            catch (Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("GenerateHalconParas:\n" + ex.ToString());
                ret = 1;
            }
            return(ret);
        }
Exemple #15
0
        /// <summary>
        /// 从文件中 获取 光源通道参数
        /// </summary>
        /// <param name="xmlPath"></param>
        /// <param name="exMessage"></param>
        /// <returns></returns>
        public List <int> ReadAndSetLightParas(string xmlPath)
        {
            List <int> brightList = new List <int>()
            {
            };
            //InfoPath .getInstance ().ChannelBrightness
            string xmlFileName = xmlPath;

            //if (!System.IO.File.Exists(xmlFileName))
            //{
            //    return "不存在文件=" + xmlFileName;
            //}

            string resultOK = "OK";

            try
            {
                XDocument xDoc = XDocument.Load(xmlFileName);

                var listChannelBrightness = from para in xDoc.Descendants("Channel")
                                            select new ChannelBrightness
                {
                    ControlNo  = para.Attribute("ControlNo").Value,
                    ChannelNo  = para.Attribute("ChannelNo").Value,
                    Brightness = Convert.ToInt32(para.Attribute("Brightness").Value)
                };

                KeyValuePair <ChannelBrightness, Channel> keyvalue;
                ChannelBrightness cb = null;

                foreach (var para in listChannelBrightness)
                {
                    //try
                    //{
                    //修改 光源亮度值
                    keyvalue = dicChannelBrightness.First(v => { return((v.Key.ChannelNo == para.ChannelNo) && (v.Key.ControlNo == para.ControlNo)); });

                    keyvalue.Key.Brightness = para.Brightness;

                    if (!instance.dicChannelBrightness.ContainsKey(keyvalue.Key))
                    {
                        Channel channel = keyvalue.Value;
                        channel.NewDefaultValue = keyvalue.Key.Brightness;
                        instance.dicChannelBrightness.Add(keyvalue.Key, channel);
                    }
                    //else
                    //{
                    //    resultFlag = ERR_EXT_ChannelNo;
                    //    exMessage = "光源通道已存在" + controlChannelNo.ControlNo + "->" + controlChannelNo.ChannelNo;
                    //    break;
                    //}

                    brightList.Add(keyvalue.Key.Brightness);
                    cb = keyvalue.Key;
                    //设置光源亮度

                    //}
                    //catch
                    //{
                    //}
                }
                SendBrightness(brightList, cb);
            }
            catch (Exception ex)
            {
                SoftwareInfo.getInstance().WriteLog("ReadAndSetLightParas:\n" + ex.ToString());
                SaveChannelBrightness(xmlPath);
                //MessageBox.Show("请检查当前程序ChannelBrightness文件配置是否正确!","系统提示",MessageBoxButtons.YesNo);
                resultOK = ex.Message;
            }

            return(brightList);
        }
Exemple #16
0
        /// <summary>
        /// 加载XML 文档并 注册串口
        /// </summary>
        /// <param name="filePath"></param>
        public int GetControlsByLoadXML(string filePath, ref string exMessage)
        {
            if (haveLoadXml)
            {
                return(ERR_HaveLoadedXML);
            }

            int resultFlag = 0;

            //if(File.Ex

            if (System.IO.File.Exists(filePath))
            {
                //读取XML 文件并解析
                List <LightControl> listLC = new List <LightControl>();


                try
                {
                    XDocument doc = XDocument.Load(filePath);

                    instance.dicLightControl =
                        (
                            from LC in doc.Descendants("LightControl")
                            select new LightControl
                    {
                        //控制器编号
                        ControlNo = LC.Element("ControlNo").Value.Trim(),
                        IsEnabled = LC.Element("IsEnabled").Value == "0" ? false : true,
                        //窗口参数
                        SerialPortPara = new SerialPortPara
                        {
                            PortName = LC.Element("SerialPortPara").Element("PortName").Value.Trim(),

                            BaudRate = Convert.ToInt32(LC.Element("SerialPortPara").Element("BaudRate").Value),

                            DataBits = Convert.ToInt32(LC.Element("SerialPortPara").Element("DataBits").Value),

                            StopBits = (StopBits)Enum.Parse(typeof(StopBits), LC.Element("SerialPortPara").Element("StopBits").Value, true),

                            Parity = (Parity)Enum.Parse(typeof(StopBits), LC.Element("SerialPortPara").Element("Parity").Value, true),
                        },
                        //通道列表
                        DicChannel = (
                            from channel in LC.Element("Channels").Descendants("Channel")
                            select new Channel
                        {
                            ChannelNo = channel.Element("ChannelNo").Value,
                            Name = channel.Element("Name").Value,
                            DefaultValue = Convert.ToInt32(channel.Element("DefaultValue").Value),
                            NewDefaultValue = Convert.ToInt32(channel.Element("NewDefaultValue").Value),
                            Des = channel.Element("Des").Value
                        }
                            ).ToDictionary(v => v.ChannelNo)
                    }
                        ).ToDictionary(v => v.ControlNo);
                }
                catch (Exception ex)
                {
                    SoftwareInfo.getInstance().WriteLog("GetControlsByLoadXML:\n" + ex.ToString());
                    resultFlag = ERR_ReadXML;

                    exMessage = "光源配置文件错误:" + ex.Message;
                }


                if (resultFlag == 0 && instance.dicLightControl.Count > 0)
                {
                    foreach (var lc in instance.dicLightControl.Values)
                    {
                        //打开串口
                        if (0 != lc.OpenSerialPort())
                        {
                            resultFlag = ERR_OpenSerialPort;
                            exMessage  = "打开串口异常:" + lc.SerialPortPara.PortName;
                            break;
                        }

                        foreach (var ch in lc.DicChannel.Values)
                        {
                            ChannelBrightness controlChannelNo = new ChannelBrightness {
                                ControlNo = lc.ControlNo, ChannelNo = ch.ChannelNo, Brightness = -1
                            };

                            if (!instance.dicChannelBrightness.ContainsKey(controlChannelNo))
                            {
                                instance.dicChannelBrightness.Add(controlChannelNo, ch);
                            }
                            else
                            {
                                resultFlag = ERR_EXT_ChannelNo;
                                exMessage  = "光源通道已存在" + controlChannelNo.ControlNo + "->" + controlChannelNo.ChannelNo;
                                break;
                            }
                        }

                        //if (System.IO.File.Exists(brightPath))
                        //{

                        //    ReadAndSetLightParas(brightPath);

                        //}


                        if (resultFlag != 0)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                exMessage = "无XML文件:" + filePath;
                //无XML 文件
                resultFlag = ERR_NoXML;
            }

            return(resultFlag);
        }
Exemple #17
0
        public void WriteLog(string str)
        {
            try
            {
                List <string> ListErrLogFileName = new List <string>()
                {
                };
                List <string> timeList = new List <string>()
                {
                };
                string[] strArray = new string[] { };
                if (File.Exists(SoftwareInfo.getInstance().ErrorLogPath))
                {
                    ListErrLogFileName = Directory.GetFiles(SoftwareInfo.getInstance().ErrorLogPath).ToList();
                }
                int count = 0;

                foreach (string ErrLogFileName in ListErrLogFileName)
                {
                    strArray = ErrLogFileName.Split(' ');
                    timeList.Add(strArray[strArray.Length - 1].Split('.')[0].Split('_')[0]);
                }
                foreach (string time in timeList)
                {
                    //相等:0 小于today:1 大于today:-1
                    DateTime fileTime    = Convert.ToDateTime(time);
                    DateTime fileTimeNew = fileTime.AddDays(SoftwareInfo.getInstance().SaveErrorLogTime);

                    if (DateTime.Today.CompareTo(fileTimeNew) == 1)
                    {
                        File.Delete(ListErrLogFileName[count]);
                    }
                    //dates t = DateTime.Today-fileTime;
                    count++;
                }

                rowCnt++;
                string path    = SoftwareInfo.getInstance().ErrorLogPath;
                string pathtxt = path + "\\ErrLog " + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                if (rowCnt > 20)
                {
                    rowCnt = 0;
                    rowCntTimes++;
                }

                int cntTemp = 0;
                while (File.Exists(pathtxt) && cntTemp < 10 && rowCntTimes != 0)
                {
                    cntTemp++;
                    pathtxt = path + "\\" + rowCntTimes + "_" + "ErrLog " + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                }


                using (StreamWriter sw = new StreamWriter(pathtxt, true))
                {
                    sw.WriteLine(DateTime.Now.ToString());
                    sw.WriteLine(str);
                    sw.WriteLine("---------------------------------------------------------");
                    sw.Close();
                }
            }
            catch
            { }
        }