ShelfDoorBean.cs 4.9 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary.acSquareStore
{
    public class ShelfDoorBean
    {

        public bool IsRun = false;
        private string LastMoveDO = "";
        private string LastCheckDI = ""; 
        internal DateTime LastEndTime = DateTime.Now;

        public ShelfDoorBean( )
        { 
        }
        public void Stop()
        {
            if (IsRun)
            {
                IsRun = false;
            }
        }
        private bool Start(string moveDO, string checkDI, int timeOutMS = 30000)
        {
            if (IsRun)
            {
                LogUtil.error("启动[" + moveDO + "] [" + checkDI + "] 失败");
                return false;
            }
            IsRun = true;
            Task.Factory.StartNew(delegate
            {
                WriteAndWait(moveDO, checkDI, timeOutMS);
            });
            return true;
        }

        private string WriteAndWait(string moveDO, string checkDI, int timeOutMS = 30000)
        {
            LastMoveDO = moveDO;
            LastCheckDI = checkDI;
            LogUtil.debug("写入信号:" + moveDO + ",等待信号:" + checkDI + "");
            //if (moveDO.Equals(IO_Type.EntranceDoor_Open))
            //{
            //    IOManager.IOMove(IO_Type.EntranceDoor_Close, IO_VALUE.LOW );
            //}
            //else
            //{
            //    IOManager.IOMove(IO_Type.EntranceDoor_Open, IO_VALUE.LOW );
            //}
            IOManager.IOMove(moveDO, IO_VALUE.HIGH );

            Thread.Sleep(50);
            IsRun = true;
            DateTime startTime = DateTime.Now;
            string result = "";
            bool isStop = false;
            while (true)
            {
                Thread.Sleep(50);
                TimeSpan span = DateTime.Now - startTime;
                if (!IsRun)
                {
                    isStop = true;
                    result = "手动停止";
                }
                else if (span.TotalMilliseconds > timeOutMS)
                {
                    isStop = true;
                    result = "转动超时";
                }
                //判断Buzy及位置是否结束
                else if (IOManager.IOValue(checkDI).Equals(IO_VALUE.HIGH))
                {
                    isStop = true;
                }
                if (isStop)
                {
                    if (result.Equals(""))
                    {
                        LogUtil.info("停止运动:" + result + " [" + moveDO + "] [" + checkDI + "] ");
                    }
                    else
                    {
                        LogUtil.info("[" + moveDO + "] [" + checkDI + "] 停止运动:" + result + " " + moveDO);
                    }
                    LastEndTime = DateTime.Now;
                    IOManager.IOMove(moveDO, IO_VALUE.LOW);

                    IsRun = false;
                    return result;
                }
            }
        }

        public bool StartOpen(StoreMoveInfo moveInfo)
        {
            //bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
            //if (!UseDoor)
            //{
            //    return false;
            //}

            ////如果门已打开直接返回
            //if (IOManager.IOValue(IO_Type.EntranceDoor_Open ).Equals(IO_VALUE.HIGH) &&
            //    IOManager.IOValue(IO_Type.EntranceDoor_Close ).Equals(IO_VALUE.LOW))
            //{
            //    return true;
            //}

            //if (moveInfo != null)
            //{
            //    moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LeftDoor_Close, IO_VALUE.HIGH));
            //    moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Close, IO_VALUE.LOW));
            //}
            //return Start(IO_Type.EntranceDoor_Open, IO_Type.EntranceDoor_Open);
            return false;
        }
        public bool StartClose(StoreMoveInfo moveInfo)
        {
            //bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
            //if (!UseDoor)
            //{
            //    return false;
            //}

            ////如果门已关闭直接返回
            //if (IOManager.IOValue(IO_Type.EntranceDoor_Close ).Equals(IO_VALUE.HIGH) &&
            //    IOManager.IOValue(IO_Type.EntranceDoor_Open ).Equals(IO_VALUE.LOW))
            //{
            //    return true;
            //}
            //if (moveInfo != null)
            //{
            //    moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Close, IO_VALUE.HIGH));
            //    moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Open, IO_VALUE.LOW));
            //}
            //return Start(IO_Type.EntranceDoor_Close, IO_Type.EntranceDoor_Close);
            return false;
        }

    }
}