IOControl.cs 11.2 KB
using DeviceLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using UserFromControl;

namespace AutoScanAndLabel
{
    using crc = OnlineStore.CodeResourceControl;
    public partial class IOControl : UserControl
    {
        readonly Timer t1 = new Timer();
        public IOControl()
        {
            InitializeComponent();
            t1.Stop();
            t1.Interval = 500;
            t1.Tick += T1_Tick;
            GC.KeepAlive(t1);

            RobotManage.LoadFinishEvent += RobotManage_LoadFinishEvent;
            crc.LanguageChangeEvent += Crc_LanguageChangeEvent;
        }

        private void Crc_LanguageChangeEvent(object sender, EventArgs e)
        {
            LoadIOList();
        }

        private void RobotManage_LoadFinishEvent(bool state, string msg)
        {
            if (state) { LoadIOList(); }
        }

        private void T1_Tick(object sender, EventArgs e)
        {
            if (this.Visible)
            {
                ReadIOList();
            }
        }

        Dictionary<string, IOTextControl> DIControlList = new Dictionary<string, IOTextControl>();
        Dictionary<string, IOTextControl> DOControlList = new Dictionary<string, IOTextControl>();
        private void IOControl_Load(object sender, EventArgs e)
        {

        }

        private void LoadIOList()
        {
            t1.Stop();
            this.SuspendLayout();
            DIControlList.Clear();
            DOControlList.Clear();
            int roleindex = 0;
            this.tableLayoutPanel1.Controls.Clear();
            this.tableLayoutPanel1.RowStyles.Clear();
            this.tableLayoutPanel1.RowCount = RobotManage.Config.DIList.Count;
            this.tableLayoutPanel1.Font = new Font("微软雅黑", 10, FontStyle.Bold);
            foreach (ConfigIO ioValue in RobotManage.Config.DIList.Values)
            {
                //if (ioValue.SubType.Equals(0))
                {
                    this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 26));
                    IOTextControl control = new IOTextControl(ioValue.ElectricalDefinition + "_" + crc.GetString(ioValue.ProName, ioValue.Explain), ioValue.ProName);
                    control.Dock= DockStyle.Top;
                    control.Width = 20;
                    this.tableLayoutPanel1.Controls.Add(control, 0, roleindex);
                    roleindex++;
                    DIControlList.Add(ioValue.ProName, control);
                }
            }
            this.tableLayoutPanel2.Controls.Clear();
            this.tableLayoutPanel2.RowStyles.Clear();
            this.tableLayoutPanel2.RowCount = RobotManage.Config.DOList.Count;
            this.tableLayoutPanel2.Font= new Font("微软雅黑", 10, FontStyle.Bold);
            roleindex = 0;
            foreach (ConfigIO ioValue in RobotManage.Config.DOList.Values)
            {
                //if (ioValue.SubType.Equals(0))
                {
                    this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 28));
                    IOTextControl control = new IOTextControl(ioValue.ElectricalDefinition + "_" + crc.GetString(ioValue.ProName, ioValue.Explain), ioValue.ProName);
                    control.Click += Control_Click;
                    control.Dock = DockStyle.Top;
                    this.tableLayoutPanel2.Controls.Add(control, 0, roleindex);
                    //this.tableLayoutPanel2.Controls.d
                    roleindex++;
                    DOControlList.Add(ioValue.ProName, control);
                }
            }


            cmbWriteIO.DataSource = new List<ConfigIO>(RobotManage.Config.DOList.Values);
            cmbWriteIO.ValueMember = "ProName";
            cmbWriteIO.DisplayMember = "DisplayStr";
            this.ResumeLayout(false);
            t1.Start();
        }

        private void ReadIOList()
        {
            foreach (string key in DIControlList.Keys)
            {
                IOTextControl control = DIControlList[key];
                ConfigIO io = RobotManage.Config.DIList[key];
                int iov = (int)IOManager.GetDIValue("", 0, io.GetIOAddr());
                if (iov != control.IOValue)
                {
                    control.IOValue = iov;
                    control.ShowData();
                }
            }
            foreach (string key in this.DOControlList.Keys)
            {
                IOTextControl control = DOControlList[key];
                ConfigIO io = RobotManage.Config.DOList[key];
                int iov = (int)IOManager.GetDOValue("", 0, io.GetIOAddr());
                if (iov != control.IOValue)
                {
                    control.IOValue = iov;
                    control.ShowData();
                }
            }

        }
        private void Control_Click(object sender, EventArgs e)
        {
            IOTextControl control = (IOTextControl)sender;
            string name = control.Name.Substring(3, control.Name.Length - 3);
            List<string> keyList = new List<string>(DOControlList.Keys);
            int index = keyList.IndexOf(name);
            if (index >= 0)
            {
                cmbWriteIO.SelectedIndex = index;
            }
        }
        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();
                    IOTextControl newControl = DOControlList[io.ProName];
                    if (selectControl != null) { selectControl.BackColor = Color.White; }
                    newControl.BackColor = Color.SkyBlue;
                    selectControl = newControl;
                }
            }
        }
        private ConfigIO GetSelectDO()
        {
            string text = cmbWriteIO.SelectedValue.ToString();
            if (RobotManage.Config.DOList.ContainsKey(text))
            {
                ConfigIO io = RobotManage.Config.DOList[text];
                return io;
            }
            return null;
        }

        private void btnOpenDo_Click(object sender, EventArgs e)
        {
            WriteDO(IO_VALUE.HIGH);
        }

        private void btnCloseDO_Click(object sender, EventArgs e)
        {
            WriteDO(IO_VALUE.LOW);
        }
        private void WriteDO(IO_VALUE value)
        {
            int index = FormUtil.GetIntValue(txtDOIndex);
            //   IO_VALUE value = checkBox1.Checked ? IO_VALUE.HIGH : IO_VALUE.LOW;
            int time = FormUtil.GetIntValue(txtWriteTime);
            int slaveId = 0;
            if (time > 0)
            {
                IOManager.WriteSingleDO("HC", (byte)slaveId, (ushort)index, (IO_VALUE)value, time);
            }
            else
            {
                IOManager.WriteSingleDO("HC", (byte)slaveId, (ushort)index, (IO_VALUE)value);
            }
        }

        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.ElectricalDefinition + "_" + crc.GetString(io.ProName, io.Explain), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y + 3);
            }
        }

        private void btnCloseAll_Click(object sender, EventArgs e)
        {
            IOManager.CloseAllDO();
        }
        public void CylinderMove(MoveInfo moveInfo, string IoLowType, string IoHighType)
        {
            IOManager.IOMove(IoLowType, IO_VALUE.LOW);
            IOManager.IOMove(IoHighType, IO_VALUE.HIGH);
        }
        private void btn左侧阻挡上升_Click(object sender, EventArgs e)
        {
            CylinderMove(null, IO_Type.LeftStopDown, IO_Type.LeftStopUP);
        }

        private void btn左侧阻挡下降_Click(object sender, EventArgs e)
        {
            CylinderMove(null, IO_Type.LeftStopUP, IO_Type.LeftStopDown);
        }

        private void btn右侧阻挡上升_Click(object sender, EventArgs e)
        {
            CylinderMove(null, IO_Type.RightStopDown, IO_Type.RightStopUP);
        }

        private void btn右侧阻挡下降_Click(object sender, EventArgs e)
        {
            CylinderMove(null, IO_Type.RightStopUP, IO_Type.RightStopDown);
        }

        private void btn左侧电滚筒进入_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.LeftMoto_Reverse, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.LeftMoto_Run, IO_VALUE.HIGH);
        }

        private void btn左侧电滚筒退出_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.LeftMoto_Run, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.LeftMoto_Reverse, IO_VALUE.HIGH);
        }
        private void btn左侧电滚筒停止_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.LeftMoto_Reverse, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.LeftMoto_Run, IO_VALUE.LOW);
        }
        private void btn右侧电滚筒进入_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.RightMoto_Reverse, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.RightMoto_Run, IO_VALUE.HIGH);
        }

        private void btn右侧电滚筒退出_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.RightMoto_Run, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.RightMoto_Reverse, IO_VALUE.HIGH);
        }

        private void btn右侧电滚筒停止_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.RightMoto_Reverse, IO_VALUE.LOW);
            IOManager.IOMove(IO_Type.RightMoto_Run, IO_VALUE.LOW);
        }

        private void btn夹爪夹紧_Click(object sender, EventArgs e)
        {
            RobotManage.clampTool.Clamp();
        }

        private void btn夹爪放松_Click(object sender, EventArgs e)
        {
            RobotManage.clampTool.Release();
        }

        private void btn打开相机光源_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
        }

        private void btn关闭相机光源_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
        }

        private void btn打开设备光源_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.Device_Led, IO_VALUE.HIGH);
        }

        private void btn关闭设备光源_Click(object sender, EventArgs e)
        {
            IOManager.IOMove(IO_Type.Device_Led, IO_VALUE.LOW);
        }

        private void btn夹爪回原_Click(object sender, EventArgs e)
        {
            RobotManage.clampTool.HomeReset();
        }
    }
}