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;
}
}
}