FrmAutoFindPos.cs 15.7 KB
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OnlineStore.XLRStore
{
    internal partial class FrmAutoFindPos : FrmBase
    {
        internal FrmAutoFindPos()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            SetState(false);
        }
        BoxEquip boxEquip;
        string posSide = "AA";
        private void SetState(bool state)
        {
            button1.Enabled = state;
            button2.Enabled = state;
            button3.Enabled = state;
            button4.Enabled = state;
            tabControl1.Enabled = state;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 0;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 1;
            label3.Text = string.Format("需要配置的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
            label5.Text = string.Format("更新其他抽屉使用的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 2;
            label3.Text = string.Format("需要配置的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
            label5.Text = string.Format("更新其他抽屉使用的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 3;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            label3.Text = string.Format("需要配置的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
            label5.Text = string.Format("更新其他抽屉使用的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
            boxEquip.Config.Column_Spacing = int.Parse(txtColumnSpacing.Text);
            boxEquip.Config.Row_Spacing = int.Parse(txtRowSpacing.Text);
            boxEquip.Config.Drawer_Rows = int.Parse(txtDrawerRows.Text);
            boxEquip.Config.Drawer_Columns = int.Parse(txtDrawerColumns.Text);
            txtColumnSpacing.Text = boxEquip.Config.Column_Spacing.ToString();
            txtRowSpacing.Text = boxEquip.Config.Row_Spacing.ToString();
            txtDrawerRows.Text = boxEquip.Config.Drawer_Rows.ToString();
            txtDrawerColumns.Text = boxEquip.Config.Drawer_Columns.ToString();
            StoreManager.SaveBoxConfig(boxEquip.Config);
            button2.Enabled = true;
        }

        private void FrmAutoFindPos_Load(object sender, EventArgs e)
        {
            boxEquip = StoreManager.XLRStore.boxEquip;
            txtColumnSpacing.Text = boxEquip.Config.Column_Spacing.ToString();
            txtRowSpacing.Text = boxEquip.Config.Row_Spacing.ToString();
            txtDrawerRows.Text = boxEquip.Config.Drawer_Rows.ToString();
            txtDrawerColumns.Text = boxEquip.Config.Drawer_Columns.ToString();
            txtMark_X.Text = boxEquip.Config.Drawer_X.ToString();
            txtMark_Y.Text = boxEquip.Config.Drawer_Y.ToString();
            txtMark_X_err.Text = boxEquip.Config.Drawer_X_Error.ToString();
            txtMark_Y_err.Text = boxEquip.Config.Drawer_Y_Error.ToString();
            button9.Enabled = false;
            button11.Enabled = false;
            button12.Enabled = false;
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            posSide = "AA";
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            posSide = "BB";
        }
        FrmAxisMove frmAxisMove = null;
        private void button6_Click(object sender, EventArgs e)
        {
            if (frmAxisMove == null)
            {
                frmAxisMove = new FrmAxisMove(true);
                frmAxisMove.Show();
            }
            else
            {
                if (frmAxisMove.IsDisposed)
                {
                    frmAxisMove = new FrmAxisMove(true);
                    frmAxisMove.Show();
                }
                else
                {
                    frmAxisMove.Activate();
                }
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            button3.Enabled = true;
        }

        int rows_in_drawer = 0;
        int colmns_in_drawer = 0;
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button7_Click_1(object sender, EventArgs e)
        {
            label5.Text = string.Format("更新其他抽屉使用的模板抽屉为:{0}面,{1}行,{2}列", posSide, textBox1.Text, textBox2.Text);
            int.TryParse(textBox4.Text, out rows_in_drawer);
            int.TryParse(textBox3.Text, out colmns_in_drawer);

            progressBar1.Maximum = boxEquip.Config.Drawer_Rows * boxEquip.Config.Drawer_Columns * rows_in_drawer * colmns_in_drawer;
            progressBar1.Minimum = 0;
            int count = 0;
            //位置配置
            string appPath = Application.StartupPath;
            //如果总配置文件存在,保存到总的配置文件
            string positionConfigFile = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_BoxPosition);
            if (!File.Exists(positionConfigFile))
            {
                string nameStr = boxEquip.DeviceID.ToString();
                positionConfigFile = positionConfigFile.Replace(".csv", "_" + nameStr + ".csv");
            }
            string info = "";
            bool ok = false;
            isBreak = false;
            if (listBox1.Items.Count > 0)
                listBox1.Items.Clear();
            Task.Factory.StartNew(new Action(() =>
            {

                for (int i = 1; i <= boxEquip.Config.Drawer_Rows; i++)
                {
                    for (int j = 1; j <= boxEquip.Config.Drawer_Columns; j++)
                    {
                        for (int d = 1; d <= rows_in_drawer; d++)
                        {
                            for (int k = 1; k <= colmns_in_drawer; k++)
                            {
                                StringBuilder head1 = new StringBuilder(boxEquip.CID + posSide);
                                head1.Append(i.ToString().PadLeft(2, '0'));
                                head1.Append(j.ToString().PadLeft(2, '0'));
                                head1.Append(d.ToString().PadLeft(2, '0'));
                                head1.Append(k.ToString().PadLeft(2, '0'));
                                BoxPosition ktkPosition = CSVPositionReader<BoxPosition>.GetPositon(head1.ToString());
                                StringBuilder head2 = new StringBuilder(boxEquip.CID + posSide + textBox1.Text.PadLeft(2, '0') + textBox2.Text.PadLeft(2, '0'));
                                head2.Append(d.ToString().PadLeft(2, '0'));
                                head2.Append(k.ToString().PadLeft(2, '0'));
                                BoxPosition srcPosition = CSVPositionReader<BoxPosition>.GetPositon(head2.ToString());
                                if (ktkPosition != null && srcPosition != null)
                                {
                                    ktkPosition.ComAxis_AB_P2 = srcPosition.ComAxis_AB_P2;
                                    ktkPosition.ComAxis_AB_P3 = srcPosition.ComAxis_AB_P3;
                                    ktkPosition.PullAxis_Inout_P2_P4 = srcPosition.PullAxis_Inout_P2_P4;
                                    ktkPosition.PullAxis_Inout_P3_P5 = srcPosition.PullAxis_Inout_P3_P5;
                                    //ktkPosition.PullAxis_Updown_P3 = srcPosition.PullAxis_Updown_P3;
                                    //ktkPosition.PullAxis_Updown_P4 = srcPosition.PullAxis_Updown_P4;
                                    //ktkPosition.Updown_P6_P12 = srcPosition.Updown_P6_P12;
                                    //ktkPosition.Updown_P7_P13 = srcPosition.Updown_P7_P13;
                                    ktkPosition.XAxis_AB_P3 = srcPosition.XAxis_AB_P3;
                                    bool result = CSVPositionReader<BoxPosition>.SavePostion(positionConfigFile, ktkPosition);
                                    if (result)
                                        info = $"{head2.ToString()}->{head1.ToString()} 成功...{(count * 100 / progressBar1.Maximum).ToString("d")}%";
                                    else
                                        info = $"{head2.ToString()}->{head1.ToString()} 保存失败...{(count * 100 / progressBar1.Maximum).ToString("d")}%";
                                    ok = result;
                                }
                                else if (ktkPosition == null)
                                {
                                    info = $"{head2.ToString()}->{head1.ToString()} 失败,目标仓位不存在...{(count * 100 / progressBar1.Maximum).ToString("d")}%";
                                    ok = false;
                                }
                                else if (srcPosition == null)
                                {
                                    info = $"{head2.ToString()}->{head1.ToString()} 失败,源仓位不存在...{(count * 100 / progressBar1.Maximum).ToString("d")}%";
                                    ok = false;
                                }
                                label8.Text = info;
                                label8.BackColor = ok ? Color.Green : Color.Red;
                                if (!ok)
                                    listBox1.Items.Add(info);
                                count++;
                                progressBar1.Value = count; ;
                                System.Threading.Thread.Sleep(50);
                                if (isBreak)
                                    return;
                            }
                        }

                    }
                }
                info = $"更新完成!";
                label8.Text = info;
                label8.BackColor =Color.Green;
            }));

        }
        bool isBreak = false;
        private void button8_Click(object sender, EventArgs e)
        {
            isBreak = true;
        }

        private void button9_Click(object sender, EventArgs e)
        {
            button9.Enabled = false;
            button11.Enabled = true;
            timer1.Enabled = true;
            timer1.Start();
            StringBuilder head2 = new StringBuilder(boxEquip.CID + posSide + textBox6.Text.PadLeft(2, '0') + textBox5.Text.PadLeft(2, '0') + "0101");
            boxEquip.autoFindPosMode = true;
            boxEquip.StartFindPos(new InOutParam(new InOutPosInfo("AutoFindPos", head2.ToString())));

        }

        private void button10_Click(object sender, EventArgs e)
        {
            boxEquip.autoFindPos.SetParam(int.Parse(textBox6.Text), int.Parse(textBox5.Text), float.Parse(textBox8.Text), float.Parse(textBox7.Text));
            StringBuilder head2 = new StringBuilder(boxEquip.CID + posSide + textBox6.Text.PadLeft(2, '0') + textBox5.Text.PadLeft(2, '0'));
            head2.Append("0101");
            LineMoveP lineMoveP = new LineMoveP();
            lineMoveP.UpdatePosById(head2.ToString());
            boxEquip.autoFindPos.PullUpdown_Diff_mid = lineMoveP.PullAxis_Updown_P2 - lineMoveP.PullAxis_Updown_P4;
            boxEquip.autoFindPos.PullUpdown_Diff_high = lineMoveP.PullAxis_Updown_P3 - lineMoveP.PullAxis_Updown_P4;
            boxEquip.autoFindPos.UpdownAxis_Diff_Upper_Low = lineMoveP.Updown_P7_P13 - lineMoveP.Updown_P6_P12;
            boxEquip.autoFindPos.Startposition_MoveAxis = lineMoveP.MoveAxis_P3;
            boxEquip.autoFindPos.Startposition_PullUpdpwnAxis = lineMoveP.PullAxis_Updown_P4;
            boxEquip.autoFindPos.Startposition_UpDownAxis = lineMoveP.Updown_P6_P12;
            int.TryParse(textBox4.Text, out rows_in_drawer);
            int.TryParse(textBox3.Text, out colmns_in_drawer);
            boxEquip.autoFindPos.RowsInDraw = rows_in_drawer;
            boxEquip.autoFindPos.ColumnsInDraw = colmns_in_drawer;
            button9.Enabled = true;
            boxEquip.autoFindPosMode = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label18.Text = $"当前抽屉的行:{boxEquip.autoFindPos.CurRow},列:{boxEquip.autoFindPos.CurColumn}";
        }

        private void button11_Click(object sender, EventArgs e)
        {
            if (button11.Text.Equals("暂停"))
            {
                boxEquip.autoFindPosMode = false;
                button11.Text = "继续";
                button12.Enabled = true;

            }
            else
            {
                boxEquip.autoFindPosMode = true;
                button11.Text = "暂停";
                button12.Enabled = false;
            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            boxEquip.FindPosEnd();
            button11.Enabled = false;
            button12.Enabled = false;
        }
        /// <summary>
        /// 取像并获取mark点坐标
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button13_Click(object sender, EventArgs e)
        {
            Bitmap bitmap = null;
            bool rtn = false;
            eyemLib_Sharp.EyemLibDemo.EyemOcsFXYR eyemOcsFXYR;
            if (posSide.Equals("AA"))
            {
                bitmap = boxEquip.AcqImage("box_A");
            }
            else
            {
                bitmap = boxEquip.AcqImage("box_B");
            }
            pictureBox1.Image = null;
            if (bitmap != null)
            {
                int res = AutoFindPos.GetMarkInfo(bitmap, boxEquip.CID + posSide + "_Manual", string.Format("{0}", DateTime.Now.ToString("yyyyMMddhhmmss")), out eyemOcsFXYR, out Bitmap bitmap1);
                if (bitmap1 != null)
                    pictureBox1.Image = bitmap1;
                else
                    pictureBox1.Image = bitmap;
                if (res == 0)
                {
                    txtMark_X.Text = eyemOcsFXYR.fX.ToString("f2");
                    txtMark_Y.Text = eyemOcsFXYR.fY.ToString("f2");
                    label22.Text = "获取mark点信息成功";
                    label22.BackColor = Color.Green;
                }
                else
                {
                    label22.Text = "获取mark点信息失败,异常码:" + res;
                    label22.BackColor = Color.Red;
                }
            }
            else
            {
                label22.Text = "取像失败,请检查相机参数";
                label22.BackColor = Color.Red;
            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            boxEquip.Config.Drawer_X = float.Parse(txtMark_X.Text);
            boxEquip.Config.Drawer_Y = float.Parse(txtMark_Y.Text);
            boxEquip.Config.Drawer_X_Error = float.Parse(txtMark_X_err.Text);
            boxEquip.Config.Drawer_Y_Error = float.Parse(txtMark_Y_err.Text);
            StoreManager.SaveBoxConfig(boxEquip.Config);
        }

        private void checkBoxOpenAuto_CheckedChanged(object sender, EventArgs e)
        {
            SetState(checkBoxOpenAuto.Checked);
        }
    }
}