FrmIOStatus.cs 12.0 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.DUOStore
{
    public partial class FrmIOStatus : FrmBase
    {
        private int StoreId = 1; 
       
        public FrmIOStatus( )
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
       
            LoadIOList();
        }

        private void FrmStoreIOStatus_Load(object sender, EventArgs e)
        { 
        }
        Dictionary<string, IOTextControl> DIControlList = new Dictionary<string, IOTextControl>();
        Dictionary<string, IOTextControl> DOControlList = new Dictionary<string, IOTextControl>();
        private void LoadIOList()
        {
            int roleindex = 0;
            this.tableLayoutPanel1.RowStyles.Clear();
            this.tableLayoutPanel1.RowCount = StoreManager.Config.DIList.Count;
            foreach (ConfigIO ioValue in StoreManager.Config.DIList.Values)
            {
                //if (ioValue.SubType.Equals(0))
                {
                    this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 26));
                    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 = StoreManager.Config.DOList.Count;
            roleindex = 0;
            foreach (ConfigIO ioValue in StoreManager.Config.DOList.Values)
            {
                //if (ioValue.SubType.Equals(0))
                {
                    this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 28));
                    IOTextControl control = new IOTextControl(ioValue.ElectricalDefinition + "_" + ioValue.Explain, ioValue.ProName);
                    control.Click += Control_Click;
                    this.tableLayoutPanel2.Controls.Add(control, 0, roleindex);
                    roleindex++;
                    DOControlList.Add(ioValue.ProName, control);
                }
            }
            this.SuspendLayout();    //此处为不闪屏,一定要有的! 

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

        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;
            }
        }

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

        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(  ex.StackTrace);
            }
        }

        private ConfigIO GetSelectDO()
        {
            string text = cmbWriteIO.SelectedValue.ToString();
            if (StoreManager.Config.DOList.ContainsKey(text))
            {
                ConfigIO io = StoreManager.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; 
                    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();
        }

        private void ReadIOList()
        {
            foreach (string key in DIControlList.Keys)
            {
                IOTextControl control = DIControlList[key];
                ConfigIO io = StoreManager.Config.DIList[key];
                int iov = (int)IOManager.instance.GetDIValue(io.IO_IP,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 = StoreManager.Config.DOList[key];
                int iov = (int)IOManager.instance.GetDOValue(io.IO_IP, 0, io.GetIOAddr());
                if (iov != control.IOValue)
                {
                    control.IOValue = iov;
                    control.ShowData();
                }
            }

        }
        protected void BtnMove(Button btn, string defaultText, string targetText, string ioHighType)
        {
            LogUtil.info("点击【" + btn.Text + "】 ");
            if (btn.Text.Equals(defaultText))
            {
                StoreManager.Store.IOMove(ioHighType, IO_VALUE.HIGH);
                btn.Text = targetText;
                btn.BackColor = Color.Aqua;
            }
            else
            {
                StoreManager.Store.IOMove(ioHighType, IO_VALUE.LOW);
                btn.Text = defaultText;
                btn.BackColor = Color.White;
            }
        }

        protected void BtnMove(Button btn, string defaultText, string targetText, string ioLowType, string ioHighType)
        {
            LogUtil.info("点击【" + btn.Text + "】 ");
            if (btn.Text.Equals(defaultText))
            {
                StoreManager.Store.CylinderMove(null, ioLowType, ioHighType);
                btn.Text = targetText;
                btn.BackColor = Color.Aqua;
            }
            else
            {
                StoreManager.Store.CylinderMove(null, ioHighType, ioLowType);
                btn.Text = defaultText;
                btn.BackColor = Color.SkyBlue;
            }
        }


        private void btnLocationUp_Click(object sender, EventArgs e)
        {
            StoreManager.Store.hoisterCylinder.StartForward(null); 
        }

        private void btnLocationDown_Click(object sender, EventArgs e)
        {
            StoreManager.Store.hoisterCylinder.StartBack(null);
        }

        private void FrmIOStatus_Shown(object sender, EventArgs e)
        {
            timer1.Start();
        }
         
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        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 = 0;
            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 void btnTopUp_Click(object sender, EventArgs e)
        {
            StoreManager.Store.CylinderMove(null, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_Up);
        }

        private void btnTopDown_Click(object sender, EventArgs e)
        {
            StoreManager.Store.CylinderMove(null, IO_Type.TopCylinder_Up, IO_Type.TopCylinder_Down);
        } 
        private void btnCamerLed_Click(object sender, EventArgs e)
        {
            BtnMove(btnCamerLed, "打开相机光源", "关闭相机光源", IO_Type.Camera_Led);
        }
         
        private void btnStoreOn_Click(object sender, EventArgs e)
        {
            BtnMove(btnCamerLed, "打开设备电源", "关闭设备电源", IO_Type.Device_Led);
        }

        private void btnCloseCyDo_Click(object sender, EventArgs e)
        {
            foreach (ConfigIO io in StoreManager.Store.Config.DOList.Values)
            {
                if (io.SubType.Equals(0))
                {
                    IOManager.instance.WriteSingleDO(io.IO_IP, (byte)0, (ushort)io.GetIOAddr(), IO_VALUE.LOW);
                }
            }
        }

        private void btnClamp_Click(object sender, EventArgs e)
        {
            StoreManager.Store.CylinderMove(null, IO_Type.ClampCylinder_Relax, IO_Type.ClampCylinder_Clamp);
        }

        private void btnRelax_Click(object sender, EventArgs e)
        {
            StoreManager.Store.CylinderMove(null, IO_Type.ClampCylinder_Clamp, IO_Type.ClampCylinder_Relax);
        }

        private void btnLDoorUp_Click(object sender, EventArgs e)
        {
            StoreManager.Store.BoxMap[1].CylinderMove(null, IO_Type.OutDoor_Down, IO_Type.OutDoor_Up);
        }

        private void btnLDoorDown_Click(object sender, EventArgs e)
        { 
            StoreManager.Store.BoxMap[1].CylinderMove(null, IO_Type.OutDoor_Up, IO_Type.OutDoor_Down);
        }

        private void btnRDoorUp_Click(object sender, EventArgs e)
        { 
            StoreManager.Store.BoxMap[2].CylinderMove(null, IO_Type.OutDoor_Down, IO_Type.OutDoor_Up);
        }

        private void btnRDoorDown_Click(object sender, EventArgs e)
        { 
            StoreManager.Store.BoxMap[2].CylinderMove(null, IO_Type.OutDoor_Up, IO_Type.OutDoor_Down);
        }

        private void btnCloseDO_Click(object sender, EventArgs e)
        { 
            WriteDO(IO_VALUE.LOW);
        }

        private void btnLineRun_Click(object sender, EventArgs e)
        {
            StoreManager.Store.LineRun(null);
        }

        private void btnLineStop_Click(object sender, EventArgs e)
        {

            StoreManager.Store.LineStop(null);
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }
    }
}