FrmMain.cs 7.8 KB
using System;
using System.CodeDom;
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;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common;
using DeviceLibrary;
namespace AGVControl
{
    public partial class FrmMain : Form
    {
        private bool exit = false;
        private NotifyIcon notify;
        private ContextMenuStrip notifyMenu;
        private System.Timers.Timer showTimer;
        //private string[] agvRunStep;
        public FrmMain()
        {
            InitializeComponent();
            showTimer = new System.Timers.Timer();
            showTimer.Interval = 5000;
            //showTimer.Enabled = true;
            showTimer.AutoReset = true;
            showTimer.Elapsed += ShowTimer_Elapsed;
            showTimer.Start();
            LogUtil.logBox = richTextBox1;
        }

        private void ShowConfig()
        {
            int n;
            //agvRunStep = new string[Common.agvInfo.Count];
            for (int i = 0; i < AGVManager.agvInfo.Count; i++)
            {
                MiR_API.Get_IO_Status(AGVManager.agvInfo[i], out bool[] input, out bool[] output);
                if (input != null && input.Length == 4)
                    AGVManager.agvInfo[i].IsExistShelf = input[3];
                flowLayoutPanel1.Controls.Add(AGVManager.agvInfo[i].StateKanban);
                AddForm(AGVManager.agvInfo[i].Name,new Manual(AGVManager.agvInfo[i]));
                AGVManager.agvInfo[i].StateKanban.Init();
            }

            for (int i = 0; i < AGVManager.nodeInfo.Count; i++)
            {
                if (AGVManager.nodeInfo[i].IP.Trim().Equals(""))
                    continue;
                n = DgvNode.Rows.Add(AGVManager.nodeInfo[i].ToRow());
                DgvNode.Rows[n].HeaderCell.Value = (n + 1).ToString();
                if (i % 2 == 0)
                    DgvNode.Rows[n].DefaultCellStyle.BackColor = Color.LightBlue;
                if (!AGVManager.nodeInfo[i].Online)
                    DgvNode.Rows[n].DefaultCellStyle.ForeColor = Color.Red;
            }
        }

        private void Server_NodeChanged(int nodeIndex)
        {
            Invoke(new Action(() =>
            {
                DgvNode.Rows[nodeIndex].DefaultCellStyle.ForeColor = AGVManager.nodeInfo[nodeIndex].Online && AGVManager.nodeInfo[nodeIndex].IsUse ? Color.Black : Color.Red;
                DgvNode.Rows[nodeIndex].SetValues(AGVManager.nodeInfo[nodeIndex].ToRow());
            }));
            System.GC.Collect();
        }

        private void Server_NodeOnline(int nodeIndex)
        {
            Invoke(new Action(() =>
            {
                DgvNode.Rows[nodeIndex].DefaultCellStyle.ForeColor = AGVManager.nodeInfo[nodeIndex].Online ? Color.Black : Color.Red;
                DgvNode.Rows[nodeIndex].SetValues(AGVManager.nodeInfo[nodeIndex].ToRow());
            }));
            System.GC.Collect();
        }

        private void ItemShow_Click(object sender, EventArgs e)
        {
            Show();
            if (WindowState == FormWindowState.Minimized)
                WindowState = FormWindowState.Normal;
        }

        private void ItemExit_Click(object sender, EventArgs e)
        {
            foreach (var item in AGVManager.agvInfo)
            {
                AGVManager.WriteIni(item.Name, SettingString.RFID, item.RFID);
            }
            notify.Dispose();
            exit = true;
            Close();
        }

        private void Notify_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Show();
            if (WindowState == FormWindowState.Minimized)
                WindowState = FormWindowState.Normal;
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //托盘菜单
            notifyMenu = new ContextMenuStrip();
            ToolStripMenuItem itemShow = new ToolStripMenuItem("显示(&S)");
            itemShow.Click += ItemShow_Click;
            ToolStripMenuItem itemExit = new ToolStripMenuItem("退出(&X)");
            itemExit.Click += ItemExit_Click;
            notifyMenu.Items.Add(itemShow);
            notifyMenu.Items.Add(itemExit);

            //托盘控件
            notify = new NotifyIcon { Icon = Icon, Visible = true, ContextMenuStrip = notifyMenu, Text = Text };
            notify.MouseDoubleClick += Notify_MouseDoubleClick;

            ShowConfig();
            AGVManager.server.NodeChanged += Server_NodeChanged;
            AGVManager.control.NodeChangedEvent += Server_NodeChanged;
            AGVManager.server.NodeOnline += Server_NodeOnline;
        }

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!exit)
            {
                e.Cancel = true;
                Hide();
            }
            foreach (var item in AGVManager.agvInfo)
            {
                AGVManager.WriteIni(item.Name, SettingString.RFID, item.RFID);
            }
            LogUtil.logBox = null;
           //showTimer.Enabled = false;
           showTimer.Stop();
            AGVManager.server.NodeChanged -= Server_NodeChanged;
            AGVManager.server.NodeOnline -= Server_NodeOnline;
        }

        private void DgvNode_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1) return;

            if (e.ColumnIndex == 6)  //调用
            {
                AGVManager.nodeInfo[e.RowIndex].IsUse = !AGVManager.nodeInfo[e.RowIndex].IsUse;
                DgvNode.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = AGVManager.nodeInfo[e.RowIndex].IsUse.ToString();
                AGVManager.WriteIni(AGVManager.nodeInfo[e.RowIndex].Name, SettingString.IsUse, AGVManager.nodeInfo[e.RowIndex].IsUse.ToString());
                DgvNode.Rows[e.RowIndex].SetValues(AGVManager.nodeInfo[e.RowIndex].ToRow());
            }
        }





        bool InShhow = false;

        private void ShowTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //ShowEmptyTask();
            if (InShhow)
                return;
            InShhow = true;

            Invoke(new Action(() =>
            {

                Application.DoEvents();
                //if (!Common.doubleLine_WO.Equals(""))
                lblWO.Text = AGVManager.doubleLine_WO;
                // if (!AGVManager.A6_Target.Equals(""))
                //lblDestInfo.Text = HttpManager.A6_Target;
                lblCharge1.Text = "充电桩1:" ;
                lblCharge2.Text = "充电桩2:" ;
                lblWarn.Text = AGVManager.warnMsg;
            }));

            InShhow = false;
        }

        private void AddForm(string text, Form form)
        {
            text = text.PadLeft(10, ' ');
            TabPage lineTabPage = new TabPage(text);
            // lineTabPage.AutoScroll = true;
            // lineTabPage.Tag = lineBean;
            Panel linePan = new Panel();
            linePan.Dock = DockStyle.Fill;
            linePan.AutoScroll = true;
            lineTabPage.Controls.Add(linePan);
            form.FormBorderStyle = FormBorderStyle.None;
            form.TopLevel = false;
            linePan.Controls.Add(form);
            //form.Dock = DockStyle.Fill;
            //linePan.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left)));
            //form.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left)));
            form.Show();
            // tabPageList.Add(lineTabPage);
            tabControlManual.Controls.Add(lineTabPage);
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 1)
            {
                LogUtil.logBox = this.richTextBox1;
            }
        }

    }
}