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 内部变量 /// /// ModuleName /// private string _moduleName; /// /// ReplenID /// private int _replenNum; /// /// 当前操作 /// private List _currentDosingOperation; /// /// Replen Persistent Value /// private Dictionary _persistentValue = new Dictionary(); /// /// DosingSystem初始化状态 /// private RState _initializeRState; /// /// DosingSystemState /// private string _dosingSystemState; /// /// DosingSystemInitializeRoutine /// private DosingSystemInitializeRoutine _dosingSystemInitializeRoutine; /// /// DosingSystem是否已初始化 /// private bool _isDosingSystemInitialized; #endregion #region 属性 /// /// DosingSystem是否已经Initialized /// public bool IsDosingSystemInitialized { get { return _isDosingSystemInitialized; } } /// /// DosingSystem State /// public string DosingSystemState { get { return _dosingSystemState; } } /// /// DosingSystem Initialize State /// public RState InitializeState { get { return _initializeRState; } } #endregion /// /// 构造函数 /// /// 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(); } /// /// ManualDose监控 /// 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; } } } /// /// Dose状态监控 /// public void DoseStatusMonitor() { //DosingSystem Initialize监控 if (_initializeRState == RState.Running) { DosingInitializingMonitor(); } } /// /// 监控DosingSystem初始化 /// /// 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(); } } /// /// DosingSystem初始化 /// /// /// /// public bool DosingInitialize() { _dosingSystemState = DoseState.Initializing.ToString(); _isDosingSystemInitialized = false; _initializeRState = _dosingSystemInitializeRoutine.Start(); if (_initializeRState == RState.Running) return true; return false; } /// /// Enetr Init State /// /// /// /// public bool DosingEnterInit() { if (_dosingSystemState == DoseState.Idle.ToString()) { _dosingSystemState = DoseState.Init.ToString(); } _isDosingSystemInitialized = false; return true; } } }