FrmAutoRunLocations.cs 4.6 KB
using CtuDeviceLib;
using DeviceLibrary.CtuService;
using Mushiny;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading;
using System.Windows.Forms;

namespace TheMachine
{
    public partial class FrmAutoRunLocations : Form
    {
        List<uint> StartPointCodes = new List<uint>();
        List<uint> EndPointCodes = new List<uint>();
        List<CTU> allCtus { get { return CTUManager.GetCTUs(); } }
        CTU curCtu = null;
        AutoInOutTestTask InOutTestTask = null;
        public FrmAutoRunLocations()
        {
            InitializeComponent();
            allCtus.ForEach(s => AGVList.Items.Add(s.Name));
            var pcs = LandMarks.GetPointCodes()?.Where(a => a.Type == LandmarkType.Shelves).Select(a => a.Id).ToList();
            StartPointCodes = pcs;
            EndPointCodes = pcs;
            StartPointCodes?.ForEach(s => StartLandCode.Items.Add(s));
            EndPointCodes?.ForEach(s => EndLandCode.Items.Add(s));
        }
        PosInfo curShelf = null;
        List<PathPoint> curPathPoint;
        DateTime lastSendTime = DateTime.MaxValue;

        /// <summary>
        /// 开始运行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StartRun_Click(object sender, EventArgs e)
        {
            if (isRun)
            {
                MessageBox.Show($"{curCtu.Name}已在跑库位,请先停止!");
                return;
            }
            curCtu = allCtus.Find(s => s.Name.Equals(AGVList.SelectedItem.ToString()));
            if (curCtu.Enabled)
            {
                MessageBox.Show($"{curCtu.Name}已启用,请先停用后再开始运行!");
                return;
            }
            if (curCtu.RunState != RunState.Executing)
            {
                MessageBox.Show($"{curCtu.Name}未回原,请先回原后再开始运行!");
                return;
            }
            InOutTestTask = new AutoInOutTestTask(curCtu);
            isRun = true;
            uint startcode = uint.Parse(StartLandCode.SelectedItem.ToString());
            uint endcode = uint.Parse(EndLandCode.SelectedItem.ToString());
            InOutTestTask.shelfCodes = GetShelvesList(startcode, endcode);
            editControl(false);

        }
        void editControl(bool edit)
        {
            AGVList.Enabled = edit;
            StartLandCode.Enabled = edit;
            EndLandCode.Enabled = edit;
        }
        private void EndTask_Click(object sender, EventArgs e)
        {
            isRun = false;
            logInfo("点击结束运行");
        }
        /// <summary>
        /// 获取货架信息
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public List<string> GetShelvesList(uint start, uint end)
        {
            List<string> landcodelist = new List<string>();
            var pos = PosInfos.GetAllPosInfos();

            bool left = rdbLeft.Checked;
            bool right = rbdRight.Checked;
            bool leftRight = rdbLeftRight.Checked;
            while (start <= end)
            {
                List<string> poslist = new List<string>();
                if (leftRight)
                    poslist = pos.Where(a => a.PointCode == start).OrderBy(s => s.Row).Select(a => a.Name).ToList();
                else if (left)
                {
                    poslist = pos.Where(a => a.PointCode == start && a.Dir == 1).OrderBy(s => s.Row).Select(a => a.Name).ToList();
                }
                else if (right)
                {
                    poslist = pos.Where(a => a.PointCode == start && a.Dir == 2).OrderBy(s => s.Row).Select(a => a.Name).ToList();
                }
                landcodelist.AddRange(poslist);
                start++;
            }
            logInfo($"本次共计算{landcodelist.Count}个出入库任务:");
            landcodelist.ForEach(s => logInfo(s));
            return landcodelist;
        }
        void logInfo(string msg)
        {
            LogUtil.info($"【{curCtu?.Name}】跑库位【{curShelf?.PointCode}】【{curShelf?.ShelveCode}】:{msg}");
        }

        bool isRun = false;
        CTU ctu;

        DateTime dateTime;

        private void FrmAutoRunLocations_FormClosed(object sender, FormClosedEventArgs e)
        {
            isRun = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            curCtu?.CtuTask?.ReSendCurPathPoint();
            logInfo("重发当前动作");
        }
    }
}