Manual.cs 8.7 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(AgvInfo agv)
        {
            InitializeComponent();
            Agv = agv;
            chkBxAuto.Checked = agv.Auto;
            btnReSendTask.Enabled = agv.Auto;
            btnAssignTask.Enabled = !agv.Auto;
        }
        AgvInfo Agv;
        private bool isIni = false;
        private void Manual_Load(object sender, EventArgs e)
        {
            lblInfo.Text = string.Format("[{0}]", Agv.IP);
            AgvTaskManager.InitView(cmbBxMission,Agv);
            InState.AddRange(new PictureBox[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4 });
            OutState.AddRange(new PictureBox[] { pictureBox5, pictureBox6, pictureBox7, pictureBox8 });
            timer1.Enabled = true;
            isIni = true;
        }
        List<PictureBox> InState = new List<PictureBox>();
        List<PictureBox> OutState = new List<PictureBox>();
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!IsHandleCreated)
                return;
            this.Invoke(new Action(() =>
            {
                try
                {
                    if (Agv.IOStatus[0] != null && Agv.IOStatus[0].Inputs !=null)
                    {
                        for (int i = 0; i < Agv.IOStatus[0].Inputs.Length; i++)
                        {
                            if (Agv.GetInput(0,i))
                            {
                                InState[i].Image = AGVDispatch.Properties.Resources.green1;
                            }
                            else
                            {
                                InState[i].Image = AGVDispatch.Properties.Resources.gray2;
                            }
                        }
                    }
                    if(Agv.IOStatus[0]!=null && Agv.IOStatus[0].Inputs!=null)
                    {
                        for (int i = 0; i < Agv.IOStatus[0].Inputs.Length; i++)
                        {
                            if (Agv.GetOutput(0, i))
                            {
                                OutState[i].Image = AGVDispatch.Properties.Resources.green1;
                            }
                            else
                            {
                                OutState[i].Image = AGVDispatch.Properties.Resources.gray2;
                            }
                        }
                    }

                }
                catch { }
            }));
        }
        private void chkBxAuto_CheckedChanged(object sender, EventArgs e)
        {
            if (!isIni) return;
            this.Invoke(new Action(() =>
            {
                if (!chkBxAuto.Checked && !Agv.JobContext.MissionId.Equals(""))
                {
                    if(MessageBox.Show($"正在执行任务[{Agv.JobContext.MissionId}],切到手动后该任务无法继续执行,确定切到手动状态?", "警告",MessageBoxButtons.YesNo).Equals(
                        DialogResult.No))
                    {
                        chkBxAuto.Checked = true;
                        return;
                    }
                    LogUtil.info($"人员切换到手动,{Agv.Name}当前执行的任务为{Agv.JobContext.MissionId}");
                }
                btnReSendTask.Enabled = chkBxAuto.Checked;
                btnAssignTask.Enabled = !chkBxAuto.Checked;
                cmbBxMission.Enabled = !chkBxAuto.Checked;
                if (!chkBxAuto.Checked)
                {
                    Agv.Auto = false;
                    ChargePileManager.StopCharge(Agv);
                    if (Agv.IsCon)
                    {
                        LogUtil.info($"取消自动任务,当前运行信息是:{Agv.Msg}");
                        try
                        {
                            //Agv.CurJob != null && Agv.CurJob.JobParam != null &&
                            if ( Agv.CurJob.JobParam.GetMissionInfo() != null)
                            {
                                if (MessageBox.Show($"是否删除该任务[{Agv.JobContext.MissionId}]?", "提示", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
                                {
                                    DeviceLibrary.manager.MissionManager.SetMissionState(Agv.CurJob.JobParam.GetMissionInfo().missionId, DeviceLibrary.service.model.MissionState.中止, out string msg);
                                    LogUtil.info($"{Agv.Name}取消自动任务,并终止当前任务:{Common.JsonHelper.SerializeObject(Agv.CurJob.JobParam.GetMissionInfo())}");
                                }
                                else
                                {
                                    LogUtil.info($"{Agv.Name}取消自动任务,任务不中止:{Common.JsonHelper.SerializeObject(Agv.CurJob.JobParam.GetMissionInfo())}");
                                }
                            }
                        }
                        catch { }
                        //MiR_API.Del_Mission(Agv);
                        //添加Init任务
                       AgvTaskManager.AssignMission(Agv, $"{SettingString.Init}");
                    }
                    Agv.CurJob = null;
                    Agv.JobContext = new DeviceLibrary.bean.agv.JobContext();
                }
                else
                {
                    if (Agv.IsExistShelf)
                    {
                        chkBxAuto.Checked = false;
                        MessageBox.Show(this, string.Format("{0} 车上有负载,无法开启自动模式,请先清空小车负载!", Agv.Name), "警告");
                        LogUtil.error(string.Format("{0} 车上有负载,无法开启自动模式,请先清空小车负载!", Agv.Name));
                        return;
                    }
                    Agv.Auto = true;
                }
            }));
        }

        private void btnReSendTask_Click(object sender, EventArgs e)
        {
            if (Agv.IsCon)
            {
                if (Agv.CurJob.Task.Name.Equals(""))
                    return;
                if (MessageBox.Show($"确定对小车重发任务:{Agv.CurJob.Task.AliceName}?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
                    return;
                System.Threading.Tasks.Task.Factory.StartNew(new Action(() =>
                {
                    MiR_API.Clear_Error(Agv);
                    System.Threading.Thread.Sleep(1000);
                    MiR_API.State_Ready(Agv);
                    Agv.Resend();
                    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)
                {
                    DeviceLibrary.AgvTask task = AgvTaskManager.GetTaskByName((cmbBxMission.SelectedItem as DeviceLibrary.AgvTask).Name,Agv);
                    if (task.Type.Equals(TaskType.InOut))
                        if (MessageBox.Show("确定对小车发送进/出任务?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
                            return;
                    AgvTaskManager.AssignMission(Agv, task.Name);
                    AgvTask agvTask = cmbBxMission.SelectedItem as AgvTask;
                    LogUtil.info(string.Format("{0} 手动发任务 [{1}]", Agv.Name, agvTask.Name));
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("手动发任务 ", ex);
            }

        }

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