Exemple #1
0
 void WaitingPCIE(object LockWatingThread)
 {
     while (true)
     {
         pCH368 = CH368.CH367mOpenDevice(CH368Index, TRUE, TRUE, 0x00);
         if (pCH368 != (IntPtr)(-1))
         {
             this.Invoke((EventHandler)(delegate
             {
                 InitPCIE();
             }));
             return;
         }
         Thread.Sleep(1000);
         lock (LockWatingThread)
         {
             wp.SetProcessBarPerformStep();
             if (wp.HasBeenCancelled())
             {
                 this.Invoke((EventHandler)(delegate
                 {
                     this.Close();
                 }));
                 return;
             }
         }
     }
 }
 void WaitingStart(object LockWatingThread)
 {
     while (true)
     {
         TcpModbusPacket tp = form1.ReadPLC();
         if (tp != null)
         {
             ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]);
             if (BytesOP.GetBit(D100, 0))//系统已经启动
             {
                 form1.SetMotor(motorRev, motorTorque);
                 this.Invoke((EventHandler)(delegate
                 {
                     chart1.Series[0].Points.Clear();
                     waitTimer.Enabled = true;
                 }));
                 return;
             }
         }
         Thread.Sleep(1000);
         lock (LockWatingThread)
         {
             wpStart.SetProcessBarPerformStep();
             if (wpStart.HasBeenCancelled())
             {
                 return;
             }
         }
     }
 }
 void WaitingStart(object LockWatingThread)
 {
     while (true)
     {
         TcpModbusPacket tp = ReadPLC();
         if (tp != null)
         {
             ushort D100 = BytesOP.MakeByte(tp.Data[1], tp.Data[2]);
             if (BytesOP.GetBit(D100, 0))     //系统已经启动
             {
                 if (BytesOP.GetBit(D100, 1)) //判断正反转
                 {
                     bForeward = true;
                     this.Invoke((EventHandler)(delegate
                     {
                         listView1.Items[6].SubItems[1].Text = "正转";
                     }));
                 }
                 else
                 {
                     bForeward = false;
                     this.Invoke((EventHandler)(delegate
                     {
                         listView1.Items[6].SubItems[1].Text = "反转";
                     }));
                 }
                 SetMotor(openRev, NiuJuPID.sp);
                 motorRev    = openRev;
                 motorTorque = NiuJuPID.sp;
                 this.Invoke((EventHandler)(delegate
                 {
                     listView1.Items[6].SubItems[1].Text = openRev.ToString("F3");
                     listView2.Items[6].SubItems[1].Text = NiuJuPID.sp.ToString();
                     listView1.Items[1].SubItems[1].Text = "";
                     listView2.Items[1].SubItems[1].Text = "";
                     chart1.Series[0].Points.Clear();
                     chart1.Series[1].Points.Clear();
                     chart2.Series[0].Points.Clear();
                     chart2.Series[1].Points.Clear();
                     openTimes = 0;
                     openTimer.Enabled = true;
                 }));
                 return;
             }
         }
         Thread.Sleep(1000);
         lock (LockWatingThread)
         {
             wpStart.SetProcessBarPerformStep();
             if (wpStart.HasBeenCancelled())
             {
                 return;
             }
         }
     }
 }
 void WaitingExposureVerify(object LockWatingThread)
 {
     while (true)
     {
         double miu;
         double delta;
         double miuCC;
         this.Invoke((EventHandler)(delegate
         {
             exposureVerifyChart.Series["miu"].Points.Clear();
             exposureVerifyChart.Series["delta"].Points.Clear();
             exposureVerifyChart.Series["miuCC"].Points.Clear();
             for (int step = 0; step < SystemParam.n; step++)
             {
                 WFGlobal.WaitMS(1);
                 int ex = SystemParam.NTmin + step * SystemParam.NTexp;
                 tcpCCS.LightSet(SystemParam.lambda_Oe, SystemParam.Oe);
                 exposureVerifyListView.Items[4].SubItems[1].Text = step.ToString();
                 if (!UDPProc.CollectImage(this, ex, 2))
                 {
                     exposureVerifyWaitingProc.ExitWatting();
                     return;
                 }
                 UDPProc.ccdImageList[0].save(SystemParam.TempPicPath + "Ev" + step.ToString() + "_0.bin");
                 UDPProc.ccdImageList[1].save(SystemParam.TempPicPath + "Ev" + step.ToString() + "_1.bin");
                 ccdImage.Calc_miu_delta(UDPProc.ccdImageList[0], UDPProc.ccdImageList[1], out miu, out delta, out miuCC);
                 exposureVerifyChart.Series["miu"].Points.AddXY(step, miu);
                 exposureVerifyChart.Series["delta"].Points.AddXY(step, delta);
                 exposureVerifyChart.Series["miuCC"].Points.AddXY(step, miuCC);
                 if (exposureVerifyWaitingProc.HasBeenCancelled())
                 {
                     return;
                 }
                 exposureVerifyWaitingProc.SetProcessBarPerformStep();
             }
         }));
         if (exposureVerifyWaitingProc.HasBeenCancelled())
         {
             return;
         }
         if (MessageBox.Show("测试完毕,是否修改要修改参数", "测试完成", MessageBoxButtons.YesNo) == DialogResult.Yes)
         {
             FormParam f = new FormParam();
             f.ShowDialog();
         }
         else
         {
             return;
         }
     }
 }
        static void WaitingImageList(object LockWatingThread)
        {
            int        retry    = 5;
            IPEndPoint dIP      = new IPEndPoint(DeviceIP, DeviceDataPort);
            UdpClient  udpcSend = new UdpClient();
            UdpClient  udpcRecv = new UdpClient(PCDataPort);

            udpcRecv.Client.ReceiveTimeout = 2000;
            ushort ImageCount;
            ushort ImageIndex = 0;
            ushort RowCount;
            ushort rowIndex;

            lock (LockWatingThread)
            {
                while (retry != 0)
                {
                    try
                    {
                        while (true)
                        {
                            if (wp != null)
                            {
                                if (wp.HasBeenCancelled())
                                {
                                    return;
                                }
                            }
                            byte[] rxList = udpcRecv.Receive(ref dIP);
                            if (rxList[0] != 0x81)
                            {
                                continue;
                            }
                            ImageCount = BytesOP.MakeShort(rxList[1], rxList[2]);
                            ImageIndex = BytesOP.MakeShort(rxList[3], rxList[4]);
                            RowCount   = BytesOP.MakeShort(rxList[5], rxList[6]);
                            rowIndex   = BytesOP.MakeShort(rxList[7], rxList[8]);
                            //确认收到了某行
                            ccdImageList[ImageIndex].rxConfirm[rowIndex, rxList[9]] = true;
                            int dataAddr = rowIndex * SystemParam.CCD_N * 2 + 1440 * rxList[9];
                            Array.Copy(rxList, 10, ccdImageList[ImageIndex].byteList, dataAddr, 1440);
                            if (rowIndex == RowCount && rxList[9] == 11)//最后一帧
                            {
                                byte[] tx = new byte[34];
                                tx[0] = 0x05;
                                tx[1] = 0x01;//图像接收正确,无需重传
                                for (int i = 0; i < SystemParam.CCD_M; i++)
                                {
                                    for (int j = 0; j < 12; j++)
                                    {
                                        if (ccdImageList[ImageIndex].rxConfirm[i, j] == false)
                                        {
                                            tx[1] = 0x00;
                                            break;
                                        }
                                    }
                                    if (tx[1] == 0x00)
                                    {
                                        break;
                                    }
                                }
                                tx[2] = BytesOP.GetLowByte(ImageIndex);
                                tx[3] = BytesOP.GetHighByte(ImageIndex);
                                udpcSend.Send(tx, tx.Length, dIP);
                                if (tx[1] == 0x01)
                                {
                                    if (wp != null)
                                    {
                                        wp.SetProcessBarPerformStep();
                                    }
                                    ccdImageRxConfirm[ImageIndex]       = true;
                                    ccdImageList[ImageIndex].ImageCount = ImageCount;
                                    ccdImageList[ImageIndex].ImageIndex = ImageIndex;
                                    ccdImageList[ImageIndex].RowCount   = RowCount;
                                    if ((ImageIndex + 1) == ImageCount)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    retry--;
                                    break;
                                }
                            }
                        }
                    }
                    catch //(Exception ex)
                    {
                        //WFNetLib.WFGlobal.WaitMS(1);
                        //MessageBox.Show("读取数据失败");
                        //Application.DoEvents();
                        retry--;
                        continue;
                    }
                }
            }
            MessageBox.Show("采集图像失败:" + (ImageIndex + 1).ToString());
            return;
        }
        void WaitingExposureTest(object LockWatingThread)
        {
            Imin = 0;
            Imax = 100;
            while (true)
            {
                double[] miu   = new double[10];
                double[] delta = new double[10];
                double[] miuCC = new double[10];
                exposureWaitingProc.SetProcessBar(0);
                this.Invoke((EventHandler)(delegate
                {
                    WFGlobal.WaitMS(1);
                    exposureChart.Series["miu"].Points.Clear();
                    exposureChart.Series["delta"].Points.Clear();
                    double gap = (Imax - Imin) / 9;
                    for (int step = 0; step < 10; step++)
                    {
                        double oe_per = Imin + gap * step;
                        tcpCCS.LightSet(SystemParam.lambda_Oe, oe_per);
                        exposureListView.Items[2].SubItems[1].Text = (Imin.ToString("F2") + "-" + Imax.ToString("F2"));
                        exposureListView.Items[3].SubItems[1].Text = oe_per.ToString("F2");
                        if (!UDPProc.CollectImage(this, NT, 2))
                        {
                            exposureWaitingProc.ExitWatting();
                            return;
                        }
                        UDPProc.ccdImageList[0].save(SystemParam.TempPicPath + "E" + step.ToString() + "_0.bin");
                        UDPProc.ccdImageList[1].save(SystemParam.TempPicPath + "E" + step.ToString() + "_1.bin");
                        ccdImage.Calc_miu_delta(UDPProc.ccdImageList[0], UDPProc.ccdImageList[1], out miu[step], out delta[step], out miuCC[step]);
                        exposureChart.Series["miu"].Points.AddXY(oe_per, miu[step]);
                        exposureChart.Series["delta"].Points.AddXY(oe_per, delta[step]);
                        if (exposureWaitingProc.HasBeenCancelled())
                        {
                            return;
                        }
                        exposureWaitingProc.SetProcessBarPerformStep();
                    }
                }));
                if (exposureWaitingProc.HasBeenCancelled())
                {
                    return;
                }
                // 方差全部相等(且接近0),则在之前照度第一个区间分10个照度等级
                double close0 = 0.01;
                if (delta[0] < close0 && delta[1] < close0)
                {
                    Imax = (Imax - Imin) / 9;
                }
                //如果方差单调升则修改NT=10*NT_min
                else if (delta[0] < delta[1])//单调增
                {
                    bool bMonotonicity = true;
                    for (int i = 0; i < 9; i++)
                    {
                        if (delta[i + 1] < delta[i])//增减转折
                        {
                            Imin          = (Imax - Imin) * (i + 1);
                            bMonotonicity = false;
                            break;
                        }
                    }
                    if (bMonotonicity)
                    {
                        NT = NT * 10;
//                         while(true)
//                         {
//                             string strNTmin = InputBox.ShowInputBox("请重新设定最小曝光周期数", SystemParam.NTmin.ToString());
//                             if (!int.TryParse(strNTmin, out SystemParam.NTmin))
//                             {
//                                 MessageBox.Show("所设定的最小曝光周期数有误!!!");
//                             }
//                             break;
//                         }
                    }
                }
                else//第一个就是减,那应该都是减函数
                {
                    SystemParam.Oe = tcpCCS.Per2LX(Imin / (SystemParam.n - 5));
                    iniFileOP.Write("Light Param", "Oe", SystemParam.Oe.ToString());
                    SystemParam.Osat = tcpCCS.Per2LX(Imin);
                    iniFileOP.Write("CCD Param", "Osat", SystemParam.Osat.ToString(), strCCDINIPath);
                    SystemParam.miu_sat = miu[0];
                    iniFileOP.Write("CCD Param", "miu_sat", SystemParam.miu_sat.ToString(), strCCDINIPath);
                    SystemParam.NTexp = SystemParam.NTmin * (SystemParam.n - 5) / SystemParam.n;
                    iniFileOP.Write("Collect Param", "NTexp", SystemParam.NTexp.ToString());
                    this.Invoke((EventHandler)(delegate
                    {
                        exposureListView.Items[4].SubItems[1].Text = SystemParam.Oe.ToString("F2");
                        exposureListView.Items[5].SubItems[1].Text = miu[0].ToString("F2");
                        exposureListView.Items[6].SubItems[1].Text = SystemParam.NTexp.ToString("F2");
                    }));
                    MessageBox.Show("曝光步距测试完毕");
                    return;
                }
            }
        }