Manual.cs 6.1 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DeviceLibrary;
using Common;

namespace AGVControl
{
    public partial class Manual : Form
    {
        public Manual(Agv_Info agv)
        {
            InitializeComponent();
            Agv = agv;
            chkBxAuto.Checked = agv.IsUse;
            btnReSendTask.Enabled = agv.IsUse;
            btnAssignTask.Enabled = !agv.IsUse;
        }
        Agv_Info Agv;
        private bool isIni = false;
        private void Manual_Load(object sender, EventArgs e)
        {
            lblInfo.Text = string.Format("[{0}]", Agv.IP);
            foreach (Mission mission in MissionSys.Missions)
            {
                cmbBxMission.Items.Add(mission.AliceName);
            }
            cmbBxMission.SelectedIndex = 0;
            isIni = true;
            timer1.Enabled = true;
        }

        private void chkBxAuto_CheckedChanged(object sender, EventArgs e)
        {
            if (!isIni) return;
            this.Invoke(new Action(() =>
            {

                btnReSendTask.Enabled = chkBxAuto.Checked;
                btnAssignTask.Enabled = !chkBxAuto.Checked;
                if (!chkBxAuto.Checked)
                {
                    AGVManager.Charge.DelOccupyInfo(Agv);
                    if (Agv.IsCon)
                    {
                        MiR_API.Del_Mission(Agv);
                        //添加Init任务
                        MissionSys.AssignMission(Agv, SettingString.Init);
                        LogUtil.info(string.Format("{0} 开启手动,取消当前自动任务:{1}", Agv.Name, Agv.Msg));
                        Agv.CurJob = null;
                        if (Agv.Place.Equals(SettingString.Standby) || Agv.Place.Equals(SettingString.AutoCharge))
                            Agv.Place = "";
                        //MiR_API.Del_Mission(Agv);
                        Agv.RFID = "";
                    }
                }
                else
                {
                    if (Agv.IsExistShelf)
                    {
                        LogUtil.error(string.Format("{0} 车上有料架,无法开启自动模式,请先清空小车负载!", Agv.Name));
                        MessageBox.Show(this,string.Format("{0} 车上有料架,无法开启自动模式,请先清空小车负载!", Agv.Name));
                        chkBxAuto.Checked = false;
                        Agv.IsUse = false;
                        return;
                    }
                  //  if (MessageBox.Show(this, "是否继续上一次的任务?\r\n" + Agv.Msg, "提示", MessageBoxButtons.YesNo).Equals(DialogResult.No))
                    {
                        //LogUtil.info(string.Format("{0} 取消上一次自动任务:{1}", Agv.Name, Agv.Msg));
                        //Agv.CurJob = null;
                        //if (Agv.Place.Equals(SettingString.Standby) || Agv.Place.Equals(SettingString.AutoCharge))
                        //    Agv.Place = "";
                        //MiR_API.Del_Mission(Agv);
                        //Agv.RFID = "";
                    }
                    //else
                    //{
                    //    Agv.Resend(false);

                    //}
                }
                Agv.IsUse = chkBxAuto.Checked;
            }));
        }

        private void btnReSendTask_Click(object sender, EventArgs e)
        {
            if (Agv.IsCon)
            {
                if (MessageBox.Show("确定对小车重发任务?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
                    return;
                Task.Factory.StartNew(new Action(() =>
                {
                    MiR_API.Clear_Error(Agv);
                    System.Threading.Thread.Sleep(1000);
                    MiR_API.State_Ready(Agv);
                    Agv.Resend(true);
                    LogUtil.info(string.Format("{0} 手动重发任务", Agv.Name));
                }));

            }
        }

        private void btnReady_Click(object sender, EventArgs e)
        {
            if (Agv.IsCon)
            {
                MiR_API.State_Ready(Agv);
                LogUtil.info(string.Format("{0} 手动点击运行", Agv.Name));
            }

        }

        private void btnPause_Click(object sender, EventArgs e)
        {
            if (Agv.IsCon)
            {
                MiR_API.State_Pause(Agv);
                LogUtil.info(string.Format("{0} 手动点击暂停", Agv.Name));
            }
        }

        private void btnClearErr_Click(object sender, EventArgs e)
        {
            if (Agv.IsCon)
            {
                MiR_API.Clear_Error(Agv);
                LogUtil.info(string.Format("{0} 手动点击清除按钮", Agv.Name));
            }

        }

        private void btnAssignTask_Click(object sender, EventArgs e)
        {
            try
            {
                if (Agv.IsCon)
                {
                    string taskName = MissionSys.GetTaskNameByAliceName(cmbBxMission.SelectedItem.ToString());
                    if (taskName.Equals(SettingString.Enter) || taskName.Equals(SettingString.Leave))
                        if (MessageBox.Show("确定对小车发送进/出任务?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
                            return;
                    Task.Factory.StartNew(delegate {
                        MissionSys.AssignMission(Agv, taskName);
                        LogUtil.info(string.Format("{0} 手动发任务 [{1}]", Agv.Name, taskName));
                    });
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("手动发任务 ", ex);
            }

        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Invoke(new Action(()=> {
                label1.Text = Agv.IOInState;
                label2.Text = Agv.IOOutState;
            }));
        }
    }
}