public void TestToleranceBand()
        {
            ToleranceBand band = new ToleranceBand();

            band.Color = ResistorTolerance.Gold;

            Assert.AreEqual(5, band.Value);
        }
        public void TestFourBands()
        {
            Band           firstBand  = new Band();
            Band           secondBand = new Band();
            MultiplierBand thirdBand  = new MultiplierBand();
            ToleranceBand  fourthBand = new ToleranceBand();

            //25000 +-25%
            firstBand.Color  = ResistorColor.Red;
            secondBand.Color = ResistorColor.Green;
            thirdBand.Color  = ResistorMultiplier.Orange;
            fourthBand.Color = ResistorTolerance.Silver;

            float value = ((10 * firstBand.Value) + secondBand.Value) * thirdBand.Value;

            Assert.AreEqual(25000, value);
        }
        public Resistor()
        {
            _firstBand = new ValueBand {
                BandNumber = 1
            };
            _secondBand = new ValueBand {
                BandNumber = 2
            };
            _thirdBand = new ValueBand {
                BandNumber = 3
            };
            _toleranceBand = new ToleranceBand();

            Bands = new List <AbstractBand> {
                _firstBand, _secondBand, _thirdBand, _toleranceBand
            };
        }
예제 #4
0
        private void HandleProtocol(string protocol, int i)
        {
            try
            {
                lock (this.tbandMonitor)
                {
                    if (curStatus != JetStatusEnum.Pause && !bManualTrigger)
                    {
                        return;
                    }
                    string[] temp = protocol.Split(new char[] { ';' });
                    //float X_OFFSET = 0;
                    float lXDistance = 0, rXDistance = 0, lYDistance = 0, rYDistance = 0, lWidth = 0, lHeight = 0;
                    float lXCellCount = 0, rXCellCount = 0, lYCellCount = 0, rYCellCount = 0, rWidth = 0, rHeight = 0;
                    #region 解析并处理返回的数据
                    switch (i)
                    {
                    case 0:
                        #region 左侧相机
                        Y_StepL = 0;
                        if (!this.tbandMonitor.bLeftUpdated)
                        {
                            lYDistance  = Convert.ToSingle(temp[6]);
                            lYCellCount = Convert.ToInt32(temp[5]);
                            lXDistance  = Convert.ToSingle(temp[8]);
                            lXCellCount = Convert.ToInt32(temp[7]);
                            lHeight     = Convert.ToSingle(temp[9]);
                            lWidth      = Convert.ToSingle(temp[10]);

                            // 如果x方向识别成功
                            if (Convert.ToInt32(temp[4]) == 1)
                            {
                                this.tBand.LeftTol_X = this.GetLeftTol_X(Convert.ToSingle(temp[2]));
                            }
                            else
                            {
                                tBand.LeftTol_X = PreBand.LeftTol_X;
                            }
                            // 如果y方向识别成功
                            if (Convert.ToInt32(temp[3]) == 1)
                            {
                                Y_StepL = this.GetY_Step(Convert.ToSingle(temp[1]), bandCount);
                            }
                            else
                            {
                                tBand.LeftTol_Y = PreBand.LeftTol_Y;
                            }
                        }
                        else
                        {
                            worker.ReportProgress(0, "Error:连续两次Left");
                        }
                        if (bManualTrigger)
                        {
                            bManualTrigger = false;
//								if(mTcpipRespondTimer.Enabled)
//								{
//									mTcpipRespondTimer.Stop();
//								}
                            worker.ReportProgress(1, this.tBand);
                        }
                        else
                        {
                            this.tbandMonitor.bLeftUpdated = true;
                        }
                        Debug.WriteLine(string.Format("bLeftUpdated = {0}: {1};bandCount={2}", tBand.LeftTol_X, protocol, bandCount));
                        if (worker != null)
                        {
                            worker.ReportProgress(0, string.Format("Left:{0};bandCount={1}", protocol, bandCount));
                            worker.ReportProgress(0, string.Format("Left offset point:{0};bandCount={1}", this.tBand.LeftTol_X, bandCount));
                        }
                        else
                        {
                            MessageBox.Show("worker is null");
                        }
                        #endregion
                        break;

                    case 1:
                        #region 右侧相机
                        Y_StepR     = 0;
                        rYDistance  = Convert.ToSingle(temp[6]);
                        rYCellCount = Convert.ToInt32(temp[5]);
                        rXDistance  = Convert.ToSingle(temp[8]);
                        rXCellCount = Convert.ToInt32(temp[7]);
                        rHeight     = Convert.ToSingle(temp[9]);
                        rWidth      = Convert.ToSingle(temp[10]);
                        if (!this.tbandMonitor.bRightUpdated)
                        {
                            this.tbandMonitor.bRightUpdated = true;
                            // 如果x方向识别成功
                            if (Convert.ToInt32(temp[4]) == 1)
                            {
                                this.tBand.RightTol_X = this.GetLeftTol_X(Convert.ToSingle(temp[2]));
                            }
                            else
                            {
                                tBand.RightTol_X = PreBand.RightTol_X;
                            }
                            // 如果y方向识别成功
                            if (Convert.ToInt32(temp[3]) == 1)
                            {
                                Y_StepR = this.GetY_Step(Convert.ToSingle(temp[1]), bandCount);
                            }
                            else
                            {
                                tBand.RightTol_Y = PreBand.RightTol_Y;
                            }
                        }
                        else
                        {
                            worker.ReportProgress(0, "Error:连续两次Right");
                        }
                        Debug.WriteLine(string.Format("bRightUpdated = {0}: {1}", tbandMonitor.bRightUpdated, protocol));
                        if (worker != null)
                        {
                            worker.ReportProgress(0, string.Format("Right:{0};bandCount={1}", protocol, bandCount));
                        }
                        else
                        {
                            MessageBox.Show("worker is null");
                        }
                        #endregion
                        break;
                    }
                    #endregion
                    if (tbandMonitor.HasReady)
                    {
                        int              pass = 0;
                        SPrinterSetting  ss   = this.m_iPrinterChange.GetAllParam().PrinterSetting;
                        SPrinterProperty sp   = this.m_iPrinterChange.GetAllParam().PrinterProperty;
                        UIPreference     up   = this.m_iPrinterChange.GetAllParam().Preference;
                        worker.ReportProgress(0, string.Format("CalibrationSetting.nStepPerHead={0}", ss.sCalibrationSetting.nStepPerHead));
                        int CellCountInBigCell = 10;

                        // 验证数据
                        if (lYDistance == 0 || lYCellCount == 0 || lHeight == 0)
                        {
                            lYDistance = lYCellCount = lHeight = 0;
                        }

                        if (rYDistance == 0 || rYCellCount == 0 || rHeight == 0)
                        {
                            rYDistance = rYCellCount = rHeight = 0;
                        }

                        if (lXDistance == 0 || lXCellCount == 0 || lWidth == 0)
                        {
                            lXDistance = lXCellCount = lWidth = 0;
                        }

                        if (rXDistance == 0 || rXCellCount == 0 || rWidth == 0)
                        {
                            rXDistance = rXCellCount = rWidth = 0;
                        }
                        #region 步进修正(方案1:隔一个pass重新修正一次步进;方案2:第一次修正,后面基于原始步进值动态调整)
                        worker.ReportProgress(0, string.Format("GetStepRevCrossStitch Y_StepL={0};bandCount={1}", Y_StepL, bandCount));
#if false
                        int step = CoreInterface.GetStepRevCrossStitch((Y_StepL + Y_StepR) / 2, ref pass);
#else
                        int step = CoreInterface.GetStepRevCrossStitch(Y_StepL, ref pass);
#endif
                        worker.ReportProgress(0, string.Format("GetStepRevCrossStitch return pass={0};step={1};Y_StepL={2};bandCount={2}", pass, step, Y_StepL, bandCount));


                        switch (bandCount)
                        {
//							case 0:
                        case 1:
                        {
                            if (bandCount == 0)
                            {
                                if (ss.nKillBiDirBanding != 0)
                                {
                                    this.CurStep = ss.sCalibrationSetting.nPassStepArray[pass / 2 - 1];
                                }
                                else
                                {
                                    this.CurStep = ss.sCalibrationSetting.nPassStepArray[pass - 1];
                                }
                            }
                            if (ss.nKillBiDirBanding != 0)
                            {
                                ss.sCalibrationSetting.nPassStepArray[pass / 2 - 1] = step;
                            }
                            else
                            {
                                ss.sCalibrationSetting.nPassStepArray[pass - 1] = step;
                            }
                            worker.ReportProgress(0, string.Format("y方向步进 newstep={0};CurStep={1};bandCount={2}", step, CurStep, bandCount));

                            CoreInterface.SetPrinterSetting(ref ss);
                            this.m_iPrinterChange.OnPrinterSettingChange(ss);
                            break;
                        }

//							case 2:
//							{
//								float y = up.YCoefficient;//1.0068027f;
//								if(ss.nKillBiDirBanding != 0)
//								{
//									ss.sCalibrationSetting.nPassStepArray[pass/2 -1] = CurStep;
//								}
//								else
//								{
//									ss.sCalibrationSetting.nPassStepArray[pass -1] = CurStep;
//								}
//								worker.ReportProgress(0,string.Format("y方向步进 newstep={0};CurStep={1};bandCount={2}",CurStep,CurStep,bandCount));
//								//								worker.ReportProgress(0,string.Format("y方向步进 缩放比例系数 y={0};delta={1};CurStep={2}",y,step - CurStep,CurStep));
//
//								CoreInterface.SetPrinterSetting(ref ss);
//								this.m_iPrinterChange.OnPrinterSettingChange(ss);
//								break;
//							}
                        default:
                        {
                            float y = up.YOffset;                                    //1.0068027f;
                            if (ss.nKillBiDirBanding != 0)
                            {
                                ss.sCalibrationSetting.nPassStepArray[pass / 2 - 1] = CurStep;
                            }
                            else
                            {
                                ss.sCalibrationSetting.nPassStepArray[pass - 1] = CurStep;
                            }
                            worker.ReportProgress(0, string.Format("y方向步进 newstep={0};CurStep={1};bandCount={2}", CurStep, CurStep, bandCount));
                            //								worker.ReportProgress(0,string.Format("y方向步进 缩放比例系数 y={0};delta={1};CurStep={2}",y,step - CurStep,CurStep));

                            CoreInterface.SetPrinterSetting(ref ss);
                            worker.ReportProgress(0, string.Format("GetStepRevCrossStitch Y_StepL={0};bandCount={1}", Y_StepL, bandCount));
#if false
                            int step = CoreInterface.GetStepRevCrossStitch((Y_StepL + Y_StepR) / 2, ref pass);
#else
                            step = CoreInterface.GetStepRevCrossStitch(Y_StepL, ref pass);
#endif
                            worker.ReportProgress(0, string.Format("GetStepRevCrossStitch return pass={0};step={1};Y_StepL={2};bandCount={3}", pass, step, Y_StepL, bandCount));

//								if(bandCount % 2 ==0)
                            {
                                if (ss.nKillBiDirBanding != 0)
                                {
                                    ss.sCalibrationSetting.nPassStepArray[pass / 2 - 1] = step;
                                }
                                else
                                {
                                    ss.sCalibrationSetting.nPassStepArray[pass - 1] = step;
                                }
                                worker.ReportProgress(0, string.Format("y方向步进 newstep={0};CurStep={1};bandCount={2}", step, CurStep, bandCount));

                                CoreInterface.SetPrinterSetting(ref ss);
                                this.m_iPrinterChange.OnPrinterSettingChange(ss);
                            }
                            break;
                        }
                            #region 注释掉的代码
                            //							default:
//							{
//								float y = up.YCoefficient;//1.0068027f;
//								if(ss.nKillBiDirBanding != 0)
//								{
//									ss.sCalibrationSetting.nPassStepArray[pass/2 -1] = CurStep;
//								}
//								else
//								{
//									ss.sCalibrationSetting.nPassStepArray[pass -1] = CurStep;
//								}
//								worker.ReportProgress(0,string.Format("y方向步进 newstep={0};CurStep={1};bandCount={2}",CurStep,CurStep,bandCount));
//								//								worker.ReportProgress(0,string.Format("y方向步进 缩放比例系数 y={0};delta={1};CurStep={2}",y,step - CurStep,CurStep));
//
//								CoreInterface.SetPrinterSetting(ref ss);
//								this.m_iPrinterChange.OnPrinterSettingChange(ss);
//								break;
//							}
//							default:
//							{
//																float y = up.YCoefficient;//1.0068027f;
//								#if false
//														int cellCountY = 0;
//														if(lYDistance!=0 &&lYCellCount!=0&&lHeight!=0)
//															cellCountY+=CellCountInBigCell;
//														if(rYDistance!=0 &&rYCellCount!=0&&rHeight!=0)
//															cellCountY+=CellCountInBigCell;
//
//														if(lYCellCount+rYCellCount!=0&&lHeight+rHeight!=0)
//														{
//															y =(lYDistance+rYDistance)*(lYCellCount+rYCellCount)/(lYCellCount+rYCellCount)/(lHeight+rHeight);
//														}
//														// 正的缩小,负的放大
//														step = CurStep + (int)(ss.sCalibrationSetting.nStepPerHead * (y-1f));
//
//														worker.ReportProgress(0,string.Format("y方向缩放比例系数 y={0};delta={1};",y,step - CurStep));
//
//														worker.ReportProgress(0,string.Format("GetStepRevCrossStitch return pass={0};step={1};",pass,step));
//														worker.ReportProgress(0,string.Format("old step:{0}; newstep={1};value:{2};basestep:{3}"
//															,CurStep,step,Y_StepL*2.54f/3.61f*ss.sCalibrationSetting.nStepPerHead,ss.sCalibrationSetting.nStepPerHead) );
//
//														if(Math.Abs(CurStep -step)!=Math.Abs(Y_StepL*2.54/3.61f*ss.sCalibrationSetting.nStepPerHead))
//															worker.ReportProgress(0,string.Format("step error!!!!!!{0}:{1}",Math.Abs(CurStep -step),Math.Abs(Y_StepL*2.54f/3.61f*ss.sCalibrationSetting.nStepPerHead)));
//														if(ss.nKillBiDirBanding != 0)
//															ss.sCalibrationSetting.nPassStepArray[pass/2 -1] = step;
//														else
//															ss.sCalibrationSetting.nPassStepArray[pass -1] = step;
//
//								#else
//																if(ss.nKillBiDirBanding != 0)
//																{
//								//									step = CurStep + step - ss.sCalibrationSetting.nPassStepArray[pass/2 -1];
//																	ss.sCalibrationSetting.nPassStepArray[pass/2 -1] = step;
//																}
//																else
//																{
//								//									step =  CurStep + step - ss.sCalibrationSetting.nPassStepArray[pass -1];
//																	ss.sCalibrationSetting.nPassStepArray[pass -1] = step;
//																}
//																worker.ReportProgress(0,string.Format("y方向缩放比例系数 y={0};delta={1};CurStep={2}",y,step - CurStep,CurStep));
//								#endif
//
//																CoreInterface.SetPrinterSetting(ref ss);
//																this.m_iPrinterChange.OnPrinterSettingChange(ss);
//								break;
//							}
                            #endregion
                        }
                        #endregion

                        #region x方向缩放修正(前2pass应用固定修正系数,之后根据采集值动态调整)
                        switch (bandCount)
                        {
                        case 0:
                        case 1:
//							{
//								ToleranceBand tBand_cur1 = new ToleranceBand();
//								tBand_cur1.LeftTol_X = this.tBand.LeftTol_X;
//								float x1 = up.XCoefficient;//0.998f;//1.0068027f;
//
//								// 正的缩小,负的放大
//								tBand_cur1.RightTol_X = (int)(this.m_iPrinterChange.GetPrintingJobInfo().sImageInfo.nImageWidth *(1f-x1));
//								worker.ReportProgress(0,string.Format("x方向缩放比例系数 x={0};delta={1};bandCount={2}",x1,tBand_cur1.RightTol_X,bandCount));
//								CoreInterface.SetToleranceBand(ref tBand_cur1);
//								break;
//							}
                        default:
                        {
                            worker.ReportProgress(0, string.Format("ss.sBaseSetting.eRev23={0};bandCount={1}", ss.sBaseSetting.eRev23, bandCount));

//								ToleranceBand tBand_cur = new ToleranceBand();
                            tBand_curX.LeftTol_X = this.tBand.LeftTol_X;
                            float x = up.XOffset;                                    //0.998f;//1.0068027f;
#if false
                            int cellCount = 0;
                            if (lXDistance != 0 && lXCellCount != 0 && lWidth != 0)
                            {
                                cellCount += CellCountInBigCell;
                            }
                            if (rXDistance != 0 && rXCellCount != 0 && rWidth != 0)
                            {
                                cellCount += CellCountInBigCell;
                            }

                            if (lXCellCount + rXCellCount != 0 && lWidth + rWidth != 0)
                            {
                                x = (lXDistance + rXDistance) * cellCount / (lXCellCount + rXCellCount) / (lWidth + rWidth);
                            }
#endif
                            // 正的缩小,负的放大
                            worker.ReportProgress(0, string.Format("left x={0};right x={1}", tBand.LeftTol_X, tBand.RightTol_X));
                            if (bandCount % 2 == 0)
                            {
                                tBand_curX.RightTol_X = (int)(-tBand.LeftTol_X + tBand.RightTol_X);
                            }
                            worker.ReportProgress(0, string.Format("x方向缩放比例系数 x={0};delta={1};bandCount={2}", x, tBand_curX.RightTol_X, bandCount));
                            CoreInterface.SetToleranceBand(ref tBand_curX);
                            break;
                        }
                        }
                        #endregion
                        bandCount++;
                        PreBand = tBand;
                        CoreInterface.Printer_PauseOrResume();
                        this.tbandMonitor.Reset();
//						if(mTcpipRespondTimer.Enabled)
//						{
//							mTcpipRespondTimer.Stop();
//						}
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                if (worker != null)
                {
                    worker.ReportProgress(0, ex.Message);
                }
            }
        }
예제 #5
0
        // 开始进行读取
        public void BeginRead(NetworkStream stream, byte[] buffer, int index)
        {
            try
            {
#if true
                AsyncCallback callBack = new AsyncCallback(OnReadComplete);
                stream.BeginRead(buffer, 0, BufferSize, callBack, stream);
#else
                // 从缓存buffer中读入到文件流中
                byte[] fileBuffer = new byte[BufferSize];                               // 每次传1KB
                int    bytesRead;
                int    totalBytes = 0;
                do
                {
                    bytesRead = stream.Read(buffer, 0, BufferSize);
                    Buffer.BlockCopy(buffer, 0, fileBuffer, totalBytes, bytesRead);
                    totalBytes += bytesRead;
                    Debug.WriteLine(string.Format("Receiving {0} bytes ...", totalBytes));

                    if (bytesRead != 0)
                    {
                        string msg = Encoding.Default.GetString(this.buffer, 0, bytesRead).ToLower();
                        //				string msg1 = Encoding.Default.GetString(this.buffer, 0, totalBytes).ToLower();
                        //				string msg2 = Encoding.ASCII.GetString(this.buffer, 0, totalBytes).ToLower();
                        Array.Clear(this.buffer, 0, this.buffer.Length);                         // 清空缓存,避免脏读

                        // 获取protocol数组
                        //ArrayList protocolArray = handler.GetProtocol(msg);
                        string []     protocolArray = handler.GetProtocol(msg);
                        ToleranceBand tolBand       = new ToleranceBand();
                        tolBand.LeftTol_X = (int)(Convert.ToSingle((string)protocolArray[2]) / 25.4f * 720.0f);

                        foreach (string pro in protocolArray)
                        {
                            // 这里异步调用,不然这里可能会比较耗时
                            //						CoreInterface.SetParasFromTcpIp(pro);
                            worker.ReportProgress(0, pro);
                        }
                        CoreInterface.SetToleranceBand(ref tolBand);
                        CoreInterface.Printer_PauseOrResume();
                    }
                    else
                    {
                        worker.ReportProgress(-1, ResString.GetResString("Shizixiu_UnConnected"));
                        return;
                        //throw new Exception("收到0字节");
                    }
                } while (bytesRead > 0);
#endif
            }
            catch (Exception ex)
            {
                if ((TcpClient)clients[index] != null)
                {
                    ((TcpClient)clients[index]).Close();
                }
                if (worker != null)
                {
                    worker.ReportProgress(0, ex.Message);
                }
                Debug.WriteLine(ex.Message);                            // 捕获异常时退出程序
                MessageBox.Show(ex.Message);
                this.Reset();
            }
        }