| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | using Aitex.Core.RT.Device;using Aitex.Core.RT.Log;using PunkHPX8_Core;using PunkHPX8_RT.Devices.Reservoir;using PunkHPX8_RT.Modules.Reservoir;using MECF.Framework.Common.Persistent.Reservoirs;using MECF.Framework.Common.Persistent.Temperature;using MECF.Framework.Common.RecipeCenter;using System;using System.Collections.Generic;using System.Reflection;using static PunkHPX8_RT.Devices.Reservoir.DosingSystemHelper;namespace PunkHPX8_RT.Devices.Dose{    public class DosingCommonHelper    {        public enum DoseState        {            Init,            Idle,            Error,            Initializing        }        #region 内部变量        /// <summary>        /// ModuleName        /// </summary>        private string _moduleName;        /// <summary>        /// ReplenID        /// </summary>        private int _replenNum;        /// <summary>        /// 当前操作        /// </summary>        private List<DosingOperation> _currentDosingOperation;        /// <summary>        /// Replen Persistent Value        /// </summary>        private Dictionary<string, ReplenPersistentValue> _persistentValue = new Dictionary<string, ReplenPersistentValue>();        /// <summary>        /// DosingSystem初始化状态        /// </summary>        private RState _initializeRState;        /// <summary>        /// DosingSystemState        /// </summary>        private string _dosingSystemState;        /// <summary>        /// DosingSystemInitializeRoutine        /// </summary>        private DosingSystemInitializeRoutine _dosingSystemInitializeRoutine;        /// <summary>        /// DosingSystem是否已初始化        /// </summary>        private bool _isDosingSystemInitialized;        #endregion        #region 属性        /// <summary>        /// DosingSystem是否已经Initialized        /// </summary>        public bool IsDosingSystemInitialized { get { return _isDosingSystemInitialized; } }        /// <summary>        /// DosingSystem State        /// </summary>        public string DosingSystemState { get { return _dosingSystemState; } }        /// <summary>        /// DosingSystem Initialize State        /// </summary>        public RState InitializeState { get { return _initializeRState; } }        #endregion        /// <summary>        /// 构造函数        /// </summary>        /// <param name="moduleName"></param>        public DosingCommonHelper(string moduleName, int replenNum)        {            _moduleName = moduleName;            _replenNum = replenNum;            for (int i = 0; i < _replenNum; i++)            {                string replenName = "Replen" + (i + 1).ToString();                _currentDosingOperation.Add(DosingOperation.None);                _persistentValue[replenName] = ReplenPersistentManager.Instance.GetReplenPersistentValue(_moduleName, replenName);            }            _dosingSystemInitializeRoutine = new DosingSystemInitializeRoutine(_moduleName);            _dosingSystemState = DoseState.Init.ToString();        }        /// <summary>        /// ManualDose监控        /// </summary>        public void ManualDoseSystemMonitor()        {            for (int i = 0; i < _replenNum; i++)            {                string replenName = "Replen" + (i + 1).ToString();                if (_currentDosingOperation[i] == DosingOperation.ManualDosing && !_persistentValue[replenName].IsDosingRunning)                {                    _currentDosingOperation[i] = DosingOperation.None;                }                else if (_currentDosingOperation[i] == DosingOperation.ManualDosing && _persistentValue[replenName].IsDosingRunning)                {                    continue;                }            }        }        public void CheckDoseOperation()        {            for (int i = 0; i < _replenNum; i++)            {                if (_currentDosingOperation[i] == DosingOperation.AutoDosing)                {                    _currentDosingOperation[i] = DosingOperation.None;                }            }        }        /// <summary>        /// Dose状态监控        /// </summary>        public void DoseStatusMonitor()        {            //DosingSystem Initialize监控            if (_initializeRState == RState.Running)            {                DosingInitializingMonitor();            }        }        /// <summary>        /// 监控DosingSystem初始化        /// </summary>        /// <returns></returns>        public void DosingInitializingMonitor()        {            _initializeRState = _dosingSystemInitializeRoutine.Monitor();            if (_initializeRState == RState.Failed || _initializeRState == RState.Timeout)            {                _dosingSystemState = DoseState.Error.ToString();            }            if (_initializeRState == RState.End)            {                _isDosingSystemInitialized = true;                _dosingSystemState = DoseState.Idle.ToString();            }        }        /// <summary>        /// DosingSystem初始化        /// </summary>        /// <param name="cmd"></param>        /// <param name="args"></param>        /// <returns></returns>        public bool DosingInitialize()        {            _dosingSystemState = DoseState.Initializing.ToString();            _isDosingSystemInitialized = false;            _initializeRState = _dosingSystemInitializeRoutine.Start();            if (_initializeRState == RState.Running) return true;            return false;        }        /// <summary>        /// Enetr Init State        /// </summary>        /// <param name="cmd"></param>        /// <param name="args"></param>        /// <returns></returns>        public bool DosingEnterInit()        {            if (_dosingSystemState == DoseState.Idle.ToString())            {                _dosingSystemState = DoseState.Init.ToString();            }            _isDosingSystemInitialized = false;            return true;        }    }}
 |