using Aitex.Core.RT.Device;
using Aitex.Core.Util;
using CyberX8_RT.Devices.AXIS;
using MECF.Framework.Common.Equipment;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Devices.TransPorter
{
    public class TransporterDeviceTimer : BaseDevice, IDevice
    {
        #region 常量
        private const string TRANSPORTER = "Transporter";
        #endregion
        #region 内部变量
        private PeriodicJob _periodicJob;
        private JetAxisBase _loaderTransporterGantryAxis;
        private JetAxisBase _loaderTransporterElevatorAxis;
        private JetAxisBase _processTransporterGantryAxis;
        private JetAxisBase _processTransporterElevatorAxis;
        private TransporterCommon _loaderTransporterCommon;
        private TransporterCommon _processTransporterCommon;
        #endregion
        /// 
        /// 构造函数
        /// 
        public TransporterDeviceTimer() : base(TRANSPORTER, TRANSPORTER, TRANSPORTER, TRANSPORTER)
        {
            _periodicJob = new PeriodicJob(20, OnTimer, $"{TRANSPORTER}.OnTimer", false);
        }
        /// 
        /// 初始化
        /// 
        /// 
        public bool Initialize()
        {
            _loaderTransporterGantryAxis = DEVICE.GetDevice($"{ModuleName.Transporter2}.Gantry");
            _loaderTransporterElevatorAxis = DEVICE.GetDevice($"{ModuleName.Transporter2}.Elevator");
            _loaderTransporterCommon = DEVICE.GetDevice($"{ModuleName.Transporter2}.Common");
            _processTransporterGantryAxis = DEVICE.GetDevice($"{ModuleName.Transporter1}.Gantry");
            _processTransporterElevatorAxis = DEVICE.GetDevice($"{ModuleName.Transporter1}.Elevator");
            _processTransporterCommon = DEVICE.GetDevice($"{ModuleName.Transporter1}.Common");
            _periodicJob.Start();
            return true;
        }
        public void Monitor()
        {
        }
        public void Reset()
        {
        }
        /// 
        /// 中止
        /// 
        public void Terminate()
        {
            _periodicJob.Stop();
        }
        /// 
        /// 定时器执行
        /// 
        /// 
        private bool OnTimer()
        {
            if (_loaderTransporterGantryAxis != null)
            {
                _loaderTransporterGantryAxis.OnTimer();
            }
            if (_loaderTransporterElevatorAxis != null)
            {
                _loaderTransporterElevatorAxis.OnTimer();
            }
            if (_processTransporterGantryAxis != null)
            {
                _processTransporterGantryAxis.OnTimer();
            }
            if (_processTransporterElevatorAxis != null)
            {
                _processTransporterElevatorAxis.OnTimer();
            }
            if (_loaderTransporterCommon != null)
            {
                _loaderTransporterCommon.OnTimer();
            }
            if(_processTransporterCommon!=null)
            {
                _processTransporterCommon.OnTimer();
            }
            return true;
        }
    }
}