FrmProvidingEquip.cs 14.5 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.CompilerServices;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
using OnlineStore.DeviceLibrary;
using log4net;
using System.Reflection;
using UserFromControl;
using OnlineStore.LoadCSVLibrary;
using OnlineStore.Common;


namespace OnlineStore.AssemblyLine
{
    internal partial class FrmProvidingEquip : FrmEquipBase
    {
        private bool IsLoad = false; 
        private ProvidingEquip equipBean; 
        internal FrmProvidingEquip(ProvidingEquip moveEquip)
        {
            equipBase = moveEquip;
            this.equipBean = moveEquip;
            Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            LoadIOList();
        }
        private void FrmStoreIOStatus_Load(object sender, EventArgs e)
        {
            if (equipBean.UseAxis)
            {
                axisMoveControl1.LoadData(equipBean, new AxisBean[] { equipBean.UpdownAxis });
                cmbSizeList.Items.Clear();
                cmbSizeList.Items.Add("0=默认位置");
                for (int i = 8; i <= 48; i = i + 4)
                {
                    cmbSizeList.Items.Add(i.ToString());
                }
                cmbSizeList.SelectedIndex = 0;
            }
            else
            {
                tabControl1.TabPages.Remove(tabPage2);
                btnUpDownUp.Visible = true;
            }
            chbDebug.Checked = equipBean.IsDebug;

            lblStoreStatus.Text = KTK_Store.GetRunStr(equipBean.lineStatus, equipBean.runStatus);
            lblThisSta.Text = equipBean.WarnMsg;
            lblName.Text = equipBean.Name;
            txtP1.Text = equipBean.Config.UpDownAxisP1.ToString();
            IsLoad = true;
        }

        private void LoadIOList()
        {
            int roleindex = 0;
            this.tableLayoutPanel1.RowStyles.Clear();
            this.tableLayoutPanel1.RowCount = equipBean.Config.DIList.Count;
            foreach (ConfigIO ioValue in equipBean.Config.DIList.Values)
            {
                this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 28));
                IOTextControl control = new IOTextControl(ioValue.ElectricalDefinition + "_" + ioValue.Explain, ioValue.ProName);
                this.tableLayoutPanel1.Controls.Add(control, 0, roleindex);
                roleindex++;
                DIControlList.Add(ioValue.ProName, control);
            }

            tableLayoutPanel2.RowStyles.Clear();
            this.tableLayoutPanel2.RowCount = equipBean.Config.DOList.Count;
            roleindex = 0;
            foreach (ConfigIO ioValue in equipBean.Config.DOList.Values)
            {
                this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 28));
                IOTextControl control = new IOTextControl(ioValue.ElectricalDefinition + "_" + ioValue.Explain, ioValue.ProName);
                this.tableLayoutPanel2.Controls.Add(control, 0, roleindex);
                roleindex++;
                DOControlList.Add(ioValue.ProName, control);
            }
            this.SuspendLayout();    //此处为不闪屏,一定要有的! 

            cmbWriteIO.DataSource = new List<ConfigIO>(equipBean.Config.DOList.Values);
            cmbWriteIO.ValueMember = "ProName";
            cmbWriteIO.DisplayMember = "DisplayStr";

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (!this.Visible)
                {
                    return;
                }
                if (  this.Visible)
                {
                    ReadIOList();
                    //lblTrayNum.Text = "托盘编码:" + TrayManager.GetTrayNum(equipBean.DeviceID);
                }

                lblMoveInfo.Text = equipBean.GetMoveStr();
                // string canOut = LineManager.Line.CanOutStore(equipBean.DeviceID) ? "可出库":"不可出库" ;
                lblStoreStatus.Text = KTK_Store.GetRunStr(equipBean.lineStatus, equipBean.runStatus) ;
                lblThisSta.Text = equipBean.WarnMsg;
                //string text = "";
                //List<InOutParam> ps = new List<InOutParam>(equipBean.waitOutStoreList);
                //if (ps.Count > 0)
                //{
                //    text = "等待出料列表:\r";
                //    foreach (InOutParam param in ps)
                //    {
                //        text += param.ToStr() + "\r";
                //    }
                //}
                //if (!lblInstoreList.Text.Equals(text))
                //{
                //    lblInstoreList.Text = text;
                //}
            }catch(Exception ex)
            {
                LogUtil.error(equipBean.Name+ "界面定时器出错:"+ex.ToString());
            }

        }

        private void FrmTest_FormClosing(object sender, FormClosingEventArgs e)
        {
            // KNDAIManager.NeedShow = false;
            try
            {
                if (this.timer1.Enabled)
                {
                    this.timer1.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace, "Exception(异常)", MessageBoxButtons.OK, MessageBoxIcon.Error);
                LogUtil.error(LOGGER, ex.StackTrace);
            }
        }
        private void btnOpenDo_Click(object sender, EventArgs e)
        {
            WriteDO(IO_VALUE.HIGH);
        }
        private void btnWriteSingleDO_Click(object sender, EventArgs e)
        {
            WriteDO(IO_VALUE.LOW);
        }
        private void WriteDO(IO_VALUE value)
        {
            string deviceName = txtDoName.Text;
            int index = FormUtil.GetIntValue(txtDOIndex);
            //   IO_VALUE value = checkBox1.Checked ? IO_VALUE.HIGH : IO_VALUE.LOW;
            int time = FormUtil.GetIntValue(txtWriteTime);
            int slaveId = FormUtil.GetIntValue(txtSlaveId);
            if (time > 0)
            {
                IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value, time);
            }
            else
            {
                IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value);
            }
        }
        private ConfigIO GetSelectDO()
        {
            string text = cmbWriteIO.SelectedValue.ToString();
            if (equipBean.Config.DOList.ContainsKey(text))
            {
                ConfigIO io = equipBean.Config.DOList[text];
                return io;
            }
            return null;
        }
        IOTextControl selectControl = null;
        private void cmbWriteIO_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbWriteIO.SelectedIndex >= 0)
            {
                ConfigIO io = GetSelectDO();
                if (io != null)
                {
                    // txtIp.Text = io.DeviceName;
                    txtDOIndex.Text = io.GetIOAddr().ToString();
                    txtDoName.Text = io.IO_IP;
                    txtSlaveId.Text = io.SlaveID.ToString();
                    IOTextControl newControl = DOControlList[io.ProName];
                    if (selectControl != null) { selectControl.BackColor = Color.White; }
                    newControl.BackColor = Color.SkyBlue;
                    selectControl = newControl;
                }
            }
        } 
      

        private void cmbWriteIO_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index < 0)
            {
                return;
            }
            e.DrawBackground();
            e.DrawFocusRectangle();
            if (cmbWriteIO.Items.Count > e.Index)
            {
                ConfigIO io = (ConfigIO)cmbWriteIO.Items[e.Index];
                e.Graphics.DrawString(io.DisplayStr, e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y + 3);
            }
        }
         
        private void btnReadIO_Click(object sender, EventArgs e)
        {
            ReadIOList();
        } 

        internal override void FormStatus(bool isStart)
        {
            btnStart.Enabled = !isStart;
            btnStop.Enabled = true;
            btnReset.Enabled = isStart;
            //btnInStore.Enabled = isStart;
            btnOutStore.Enabled = isStart;
        }
         
        private void FrmIOStatus_Shown(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            StartDebug();
        } 
        private void btnStop_Click(object sender, EventArgs e)
        {
            StopRun();
        } 
        private void btnReset_Click(object sender, EventArgs e)
        {
            Reset();
        }
        private void chbDebug_CheckedChanged(object sender, EventArgs e)
        {
            if (!IsLoad)
            {
                return;
            }

            if (chbDebug.Checked)
            {
                if (!equipBean.IsDebug)
                {
                    DialogResult result = MessageBox.Show("是否切换到调试状态?", "是否确认切换", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (result.Equals(DialogResult.Yes))
                    {
                        equipBean.IsDebug = true;
                        equipBean.Config.IsDebug = 1; 
                        LineManager.SaveProvidingEquipConfig(equipBean.Config);
                        equipBean.ChangeDebug(true);
                        LogUtil.info(equipBean.Name+ "用户切换到调试状态 ");
                    }
                }
            }
            else
            {
                if (equipBean.IsDebug)
                {
                    DialogResult result = MessageBox.Show("是否切换到正常工作状态?", "是否确认切换", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (result.Equals(DialogResult.Yes))
                    {
                        equipBean.IsDebug = false;
                        equipBean.Config.IsDebug = 0;
                        LineManager.SaveProvidingEquipConfig(equipBean.Config);
                        equipBean.ChangeDebug(false);
                        LogUtil.info(equipBean.Name + "用户切换到正常工作状态 ");
                    }
                }
            }
        }

        private void btnOutStore_Click(object sender, EventArgs e)
        {
            if (equipBean.runStatus .Equals(LineRunStatus.Runing))
            { 
                equipBean.StartOutStoreMove(new InOutParam( ));
            }
            else
            {
                MessageBox.Show("未启动或不在空闲中,无法入库测试!");
            }
        } 

        private void btnStop1Up_Click(object sender, EventArgs e)
        {
            BtnMove(btnStop1Up, "阻挡1下降", "阻挡1上升", IO_Type.StopCylinder_Down1);
        }
        private void btnStop2Up_Click(object sender, EventArgs e)
        {
            BtnMove(btnStop2Up, "阻挡2下降", "阻挡2上升", IO_Type.StopCylinder_Down2);
        }
      
        private void btnTopUp_Click(object sender, EventArgs e)
        {
            BtnMove(btnTopUp, "顶升上升", "顶升下降", IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP);
        }

        private void btnBeforeAfterBefore_Click(object sender, EventArgs e)
        {
            BtnMove(btnBeforeAfterBefore, "横移前进", "横移后退", IO_Type.BeforeAfterCylinder_After, IO_Type.BeforeAfterCylinder_Before);
        }
        private void btnUpDownUp_Click(object sender, EventArgs e)
        {
            BtnMove(btnUpDownUp, "升降上升", "升降下降", IO_Type.UpDownCylinder_Down, IO_Type.UpDownCylinder_Up);
        }
        private void btnClampSlack_Click(object sender, EventArgs e)
        {
            BtnMove(btnClampSlack, "夹料夹紧", "夹料放松", IO_Type.ClampCylinder_Tighten, IO_Type.ClampCylinder_Slack);
        }
        private void btnCloseAll_Click(object sender, EventArgs e)
        {  
            foreach (Control con in groupBox5.Controls)
            {
                if (con is Button)
                {
                    con.BackColor = BackColor = Color.White;
                }
            }
            foreach (ConfigIO io in equipBase.baseConfig.DOList.Values)
            {
                IOManager.instance.WriteSingleDO(io.IO_IP, io.SlaveID, io.GetIOAddr(), IO_VALUE.LOW);
            }
        } 
        private void btnBoxP_Click(object sender, EventArgs e)
        {

            int position = FormUtil.GetIntValue(txtP3);
            if (position != -1)
            { 
                int speed = equipBean.Config.UpdownAxis_P3Speed;
                LogUtil.info("点击【出料皮带线位置P3】,料盘高度【" + cmbSizeList.Text + "】 位置【" + position + "】速度【" + speed + "】"); 
                equipBase.UpdownAxis.AbsMove(position, speed);
            }
        } 
        private void btnMoveto_Click(object sender, EventArgs e)
        {
            int position = FormUtil.GetIntValue(txtP2);
            if (position != -1)
            { 
                int speed = equipBean.Config.UpdownAxis_P2Speed;
                LogUtil.info("点击【移栽位置】,料盘高度【" + cmbSizeList.Text + "】 位置【" + position + "】速度【" + speed + "】"); 
                equipBase.UpdownAxis.AbsMove(position, speed);
            }
        } 
        private void btnMoveToP1_Click(object sender, EventArgs e)
        {
            int position = FormUtil.GetIntValue(txtP1);
            if (position != -1)
            { 
                int speed = equipBean.Config.UpdownAxis_P1Speed;
                LogUtil.info("点击【P1点测试】, 位置【" + position + "】速度【" + speed + "】");
                equipBase.UpdownAxis.AbsMove(position, speed);
            }
        } 
        private void cmbSizeList_SelectedIndexChanged(object sender, EventArgs e)
        { 
            if (cmbSizeList.SelectedIndex < 0)
            {
                return;
            }

            int size = 0;
            try { size = Convert.ToInt32(cmbSizeList.Text); } catch (Exception ex) { }
            txtP2.Text = equipBean.Config.GetUpdownP2(size).ToString();
            txtP3.Text = equipBean.Config.GetUpdownP3(size).ToString();
            btnP2.Text = size + "寸移栽位置P2 :";
            btnP3.Text = size + "寸料出料皮带线位置P3 :";
        }
    }

}