| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 | 
							- using Aitex.Core.RT.DataCenter;
 
- using Aitex.Core.RT.Device;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.RT.Log;
 
- using Aitex.Core.RT.OperationCenter;
 
- using Aitex.Core.RT.Routine;
 
- using Aitex.Core.RT.SCCore;
 
- using Aitex.Core.Util;
 
- using MECF.Framework.Common.Beckhoff.ModuleIO;
 
- using MECF.Framework.Common.CommonData;
 
- using MECF.Framework.Common.CommonData.Dryer;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.Common.Persistent.Dryer;
 
- using MECF.Framework.Common.TwinCat;
 
- using MECF.Framework.Common.Utilities;
 
- using CyberX8_Core;
 
- using CyberX8_RT.Devices.Facilities;
 
- using System.Collections.Generic;
 
- using System.Reflection;
 
- using CyberX8_RT.Modules.Dryer;
 
- using CyberX8_RT.Modules;
 
- using MECF.Framework.Common.IOCore;
 
- namespace CyberX8_RT.Devices.Dryer
 
- {
 
-     public class DryerDevice : BaseDevice, IDevice
 
-     {
 
-         #region 常量 
 
-         private const string POWER_CONTROL = "PowerControl";
 
-         private const string EXHAUST_PRESSURE = "ExhaustPressure";
 
-         private const string BLOWER_HIGH = "BlowerHigh";
 
-         private const string EXHAUST_LIMIT_DATA = "ExhaustLimitData";
 
-         private const string EXHAUST_PRESSURE_VALUE = "ExhaustPressure";
 
-         private const string COMMON_DATA = "CommonData";
 
-         private const string PERSISTENT_VALUE = "PersistentValue";
 
-         #endregion
 
-         /// <summary>
 
-         /// Dryer操作枚举
 
-         /// </summary>
 
-         private enum DryerCommonOperation
 
-         {
 
-             None,
 
-             ControlPowerOn,
 
-             ControlPowerOff,
 
-             BlowerHigh,
 
-             BlowerLow
 
-         }
 
-         #region 内部变量
 
-         /// <summary>
 
-         /// 公用数据
 
-         /// </summary>
 
-         private DryerCommonData _dryerCommonData;
 
-         /// <summary>
 
-         /// 状态
 
-         /// </summary>
 
-         private RState _status;
 
-         /// <summary>
 
-         /// 当前操作
 
-         /// </summary>
 
-         private DryerCommonOperation _currentOperation;
 
-         /// <summary>
 
-         /// Blower High Routine 
 
-         /// </summary>
 
-         private DryerBlowerHighRoutine _blowerHighRoutine;
 
-         /// <summary>
 
-         /// ByPass
 
-         /// </summary>
 
-         private bool _byPass = false;
 
-         /// <summary>
 
-         /// Facilities
 
-         /// </summary>
 
-         private SystemFacilities _facilities;
 
-         /// <summary>
 
-         /// 变量是否初始化字典
 
-         /// </summary>
 
-         private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
 
-         /// <summary>
 
-         /// 定时器Job
 
-         /// </summary>
 
-         PeriodicJob _periodicJob = null;
 
-         /// <summary>
 
-         /// Dryer 持久性数值对象
 
-         /// </summary>
 
-         private DryerPersistentValue _dryerPersistentValue;
 
-         #endregion
 
-         #region 属性
 
-         /// <summary>
 
-         /// 公用数据对象
 
-         /// </summary>
 
-         public DryerCommonData CommonData { get { return _dryerCommonData; } }
 
-         /// <summary>
 
-         /// 所有io变量是否初始化
 
-         /// </summary>
 
-         public bool IOInitialized { get { return IOVariableDictionaryUtil.AllIoVariableInitialized(eEvent.ERR_DRYER,Module,_variableInitializeDic); } }
 
-         /// <summary>
 
-         /// 状态
 
-         /// </summary>
 
-         public RState Status { get { return _status; } }
 
-         /// <summary>
 
-         /// ByPass
 
-         /// </summary>
 
-         public bool Bypass {  get { return _byPass; } }
 
-         /// <summary>
 
-         /// FacilityCommonLimitData
 
-         /// </summary>
 
-         public CommonLimitData FacilityCommonLimitData { get { return _facilities.GetCommonLimitDataByName(EXHAUST_PRESSURE_VALUE); } }
 
-         #endregion
 
-         /// <summary>
 
-         /// 构造函数
 
-         /// </summary>
 
-         /// <param name="moduleName"></param>
 
-         /// <param name="name"></param>
 
-         public DryerDevice(string moduleName) : base(moduleName, moduleName,moduleName,moduleName)
 
-         {
 
-             _periodicJob = new PeriodicJob(100, OnTimer, $"{Module}.OnTimer", true);
 
-             _dryerCommonData = new DryerCommonData();
 
-         }
 
-         /// <summary>
 
-         /// 初始化
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool Initialize()
 
-         {
 
-             InitializeRoutine();
 
-             SubscribeData();
 
-             SubscribeValueAction();
 
-             InitializeOperation();
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// 初始化Routine
 
-         /// </summary>
 
-         private void InitializeRoutine()
 
-         {
 
-             _blowerHighRoutine = new DryerBlowerHighRoutine(Module, this);
 
-         }
 
-         /// <summary>
 
-         /// 订阅数据
 
-         /// </summary>
 
-         private void SubscribeData()
 
-         {
 
-             _dryerPersistentValue = DryerPersistentManager.Instance.GetDryerPersistentValue(Module);
 
-             if (_dryerPersistentValue == null)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, "Persistent Value Object is not exist");
 
-             }
 
-             DATA.Subscribe($"{Module}.{EXHAUST_LIMIT_DATA}", ()=>GetExhaustLimitData(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-             DATA.Subscribe($"{Module}.{COMMON_DATA}", () => CommonData, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-             DATA.Subscribe($"{Module}.{PERSISTENT_VALUE}", () => _dryerPersistentValue,SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-             DATA.Subscribe($"{Module}.ExhaustPressure",()=>CommonData.ExhaustPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-             DATA.Subscribe($"{Module}.PowerControl", () => CommonData.PowerControl, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-             DATA.Subscribe($"{Module}.BlowerHigh", () => CommonData.BlowerHigh, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-         }
 
-         /// <summary>
 
-         /// 获取Exhaust Limit 数据
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         private CommonLimitData GetExhaustLimitData()
 
-         {
 
-             if (_facilities == null)
 
-             {
 
-                 _facilities = DEVICE.GetDevice<SystemFacilities>("System.Facilities");
 
-             }
 
-             if (_facilities == null)
 
-             {
 
-                 return null;
 
-             }
 
-             return _facilities.GetCommonLimitDataByName(EXHAUST_PRESSURE_VALUE);
 
-         }
 
-         /// <summary>
 
-         /// 订阅变量数值发生变化
 
-         /// </summary>
 
-         private void SubscribeValueAction()
 
-         {
 
-             _variableInitializeDic[POWER_CONTROL] = false;
 
-             IOModuleManager.Instance.SubscribeModuleVariable(Module, POWER_CONTROL, UpdateVariableValue);
 
-             _variableInitializeDic[BLOWER_HIGH] = false;
 
-             IOModuleManager.Instance.SubscribeModuleVariable(Module, BLOWER_HIGH, UpdateVariableValue);
 
-             _variableInitializeDic[EXHAUST_PRESSURE] = false;
 
-             IOModuleManager.Instance.SubscribeModuleVariable(Module, EXHAUST_PRESSURE, UpdateVariableValue);
 
-         }
 
-         /// 更新变量数值
 
-         /// </summary>
 
-         /// <param name="variable"></param>
 
-         /// <param name="value"></param>
 
-         private void UpdateVariableValue(string variable, object value)
 
-         {
 
-             if (!CommonData.IsDataInitialized)
 
-             {
 
-                 CommonData.IsDataInitialized = true;
 
-             }
 
-             PropertyInfo property = CommonData.GetType().GetProperty(variable);
 
-             if (property != null)
 
-             {               
 
-                 property.SetValue(CommonData, value);
 
-             }
 
-             if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
 
-             {
 
-                 _variableInitializeDic[variable] = true;
 
-             }
 
-             if(variable==BLOWER_HIGH)
 
-             {
 
-                 if (CommonData.BlowerHigh)
 
-                 {
 
-                     DryerAutoOff.Instance.Stop();
 
-                 }
 
-                 else if(CommonData.PowerControl)
 
-                 {
 
-                     DryerAutoOff.Instance.Start();
 
-                 }
 
-             }
 
-             else if(variable==POWER_CONTROL)
 
-             {
 
-                 if (CommonData.PowerControl)
 
-                 {
 
-                     DryerAutoOff.Instance.Start();
 
-                 }
 
-                 else
 
-                 {
 
-                     DryerAutoOff.Instance.Stop();
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 初始化操作
 
-         /// </summary>
 
-         private void InitializeOperation()
 
-         {
 
-             OP.Subscribe($"{Module}.PowerControlOn", PowerControlOnAction);
 
-             OP.Subscribe($"{Module}.PowerControlOff", PowerControlOffAction);
 
-             OP.Subscribe($"{Module}.BlowerHigh",BlowerHighAction);
 
-             OP.Subscribe($"{Module}.BlowerLow", BlowerLowOnAction);
 
-             OP.Subscribe($"{Module}.ByPass", (cmd, args) => { _byPass = (bool)args[0]; return true; });
 
-             
 
-             OP.Subscribe($"{Module}.DisabledAction", DisabledOperation);
 
-             OP.Subscribe($"{Module}.ManualAction", ManualOperation);
 
-             OP.Subscribe($"{Module}.AutoAction", AutoOperation);
 
-             OP.Subscribe($"{Module}.EngineeringModeAction", EngineeringModeOperation);
 
-             OP.Subscribe($"{Module}.ProductionModeAction", ProductionModeOperation);
 
-         }
 
-         /// <summary>
 
-         /// 定时器
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         private bool OnTimer()
 
-         {
 
-             if (_status == RState.Running)
 
-             {
 
-                 if (_currentOperation != DryerCommonOperation.None)
 
-                 {
 
-                     IRoutine routine = GetCurrentRoutine(_currentOperation);
 
-                     if (routine != null)
 
-                     {
 
-                         CheckRoutineState(routine, _currentOperation);
 
-                     }
 
-                     else
 
-                     {
 
-                         EndOperation(RState.End);
 
-                     }
 
-                 }
 
-             }
 
-             return true;
 
-         }
 
-         #region Action
 
-         #region Power Control
 
-         /// <summary>
 
-         /// Power Control On操作
 
-         /// </summary>
 
-         private bool PowerControlOnAction(string cmd, object[] args)
 
-         {
 
-             return PowerControlOn();
 
-         }
 
-         /// <summary>
 
-         /// Power Control Off操作
 
-         /// </summary>
 
-         private bool PowerControlOffAction(string cmd, object[] args)
 
-         {
 
-             return PowerControlOff();
 
-         }
 
-         /// <summary>
 
-         /// Power Control On
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool PowerControlOn()
 
-         {
 
-             string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{POWER_CONTROL}");
 
-             bool result= IOModuleManager.Instance.WriteIoValue(ioName, true);
 
-             if (result)
 
-             {
 
-                 LOG.WriteLog(eEvent.INFO_DRYER, Module, "Power Control On Success");
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// Power Control Off
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool PowerControlOff()
 
-         {
 
-             //检验任一HVD处于High On状态
 
-             if(CheckDryersIsInBlowerHigh())
 
-             {
 
-                 return false;
 
-             }
 
-             string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{POWER_CONTROL}");
 
-             bool result = IOModuleManager.Instance.WriteIoValue(ioName, false);
 
-             if(result)
 
-             {
 
-                 LOG.WriteLog(eEvent.INFO_DRYER, Module, "Power Control Off Success");
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 检验是否Dryers是否有处于BlowerHigh状态
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool CheckDryersIsInBlowerHigh(bool error=true)
 
-         {
 
-             bool dryer1High = CheckDryerModuleIsInBlowerHigh(ModuleName.Dryer1);
 
-             eEvent eEvent = eEvent.ERR_DRYER;
 
-             if(!error)
 
-             {
 
-                 eEvent = eEvent.INFO_DRYER;
 
-             }
 
-             if(dryer1High)
 
-             {
 
-                 LOG.WriteLog(eEvent, Module, "Dryer1 is high on");
 
-                 return true;
 
-             }
 
-             bool dryer2High = CheckDryerModuleIsInBlowerHigh(ModuleName.Dryer2);
 
-             if (dryer2High)
 
-             {
 
-                 LOG.WriteLog(eEvent, Module, "Dryer2 is high on");
 
-                 return true;
 
-             }
 
-             bool dryer3High = CheckDryerModuleIsInBlowerHigh(ModuleName.Dryer3);
 
-             if (dryer3High)
 
-             {
 
-                 LOG.WriteLog(eEvent, Module, "Dryer3 is high on");
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         /// <summary>
 
-         /// 检验Dryer模块是否处于Blower High
 
-         /// </summary>
 
-         /// <param name="moduleName"></param>
 
-         /// <returns></returns>
 
-         private bool CheckDryerModuleIsInBlowerHigh(ModuleName moduleName)
 
-         {
 
-             if (ModuleHelper.IsInstalled(moduleName))
 
-             {
 
-                 DryerDevice dryerDevice1 = DEVICE.GetDevice<DryerDevice>(moduleName.ToString());
 
-                 if (dryerDevice1 != null)
 
-                 {
 
-                     if (dryerDevice1.CommonData.BlowerHigh)
 
-                     {
 
-                         return true;
 
-                     }
 
-                 }
 
-             }
 
-             return false;
 
-         }
 
-         #endregion
 
-         #region Blower High
 
-         /// <summary>
 
-         /// Blow High动作
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="args"></param>
 
-         /// <returns></returns>
 
-         public bool BlowerHighAction(string cmd, object[] args)
 
-         {
 
-             if(JudgeRunningState(DryerCommonOperation.BlowerHigh))
 
-             {
 
-                 return false;
 
-             }
 
-             if(CheckDryerModulePowerOff(ModuleHelper.Converter(Module)))
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{Module} is Power off");
 
-                 return false;
 
-             }
 
-             _currentOperation = DryerCommonOperation.BlowerHigh;
 
-             _status = _blowerHighRoutine.Start(_byPass);
 
-             return _status == RState.Running;
 
-         }
 
-         /// <summary>
 
-         /// Blower High On
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool BlowerHighOn()
 
-         {
 
-             if(CheckDryerModulePowerOff(ModuleHelper.Converter(Module)))
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{Module} is Power off");
 
-                 return false;
 
-             }
 
-             CommonLimitData commonLimitData = GetExhaustLimitData();
 
-             if (commonLimitData.IsWarning || commonLimitData.IsError)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, "Exhuast Pressure is Abnormal");
 
-                 return false;
 
-             }
 
-             string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{BLOWER_HIGH}");
 
-             bool result = IOModuleManager.Instance.WriteIoValue(ioName, true);
 
-             if (result)
 
-             {
 
-                 LOG.WriteLog(eEvent.INFO_DRYER, Module, "Blower High On Success");
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 检验Dryer模块是否处于PowerOff
 
-         /// </summary>
 
-         /// <param name="moduleName"></param>
 
-         /// <returns></returns>
 
-         private bool CheckDryerModulePowerOff(ModuleName moduleName)
 
-         {
 
-             if (ModuleHelper.IsInstalled(moduleName))
 
-             {
 
-                 DryerDevice dryerDevice1 = DEVICE.GetDevice<DryerDevice>(moduleName.ToString());
 
-                 if (dryerDevice1 != null)
 
-                 {
 
-                     if (dryerDevice1.IOInitialized&&!dryerDevice1.CommonData.PowerControl)
 
-                     {
 
-                         return true;
 
-                     }
 
-                 }
 
-             }
 
-             return false;
 
-         }
 
-         /// <summary>
 
-         /// 检验是否Dryers是否有处于BlowerHigh状态
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         private bool CheckDryersPowerOff()
 
-         {
 
-             bool dryer1High = CheckDryerModulePowerOff(ModuleName.Dryer1);
 
-             if (dryer1High)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, "Dryer1 is power off");
 
-                 return true;
 
-             }
 
-             bool dryer2High = CheckDryerModulePowerOff(ModuleName.Dryer2);
 
-             if (dryer2High)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, "Dryer2 is power off");
 
-                 return true;
 
-             }
 
-             bool dryer3High = CheckDryerModulePowerOff(ModuleName.Dryer3);
 
-             if (dryer3High)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, "Dryer3 is power off");
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         #endregion
 
-         #region Blower Low
 
-         /// <summary>
 
-         /// Blower Low On Action
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="args"></param>
 
-         /// <returns></returns>
 
-         private bool BlowerLowOnAction(string cmd, object[] args)
 
-         {
 
-             return BlowerLowOn();
 
-         }
 
-         /// <summary>
 
-         /// Blower Low On
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool BlowerLowOn()
 
-         {
 
-             //High off
 
-             string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{BLOWER_HIGH}");
 
-             bool result= IOModuleManager.Instance.WriteIoValue(ioName, false);
 
-             if(result)
 
-             {
 
-                 string controlPowerOnName= BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{POWER_CONTROL}");
 
-                 result= IOModuleManager.Instance.WriteIoValue(controlPowerOnName, true);
 
-             }
 
-             return result;
 
-         }
 
-         #endregion
 
-         /// <summary>
 
-         /// 判定运行状态
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         private bool JudgeRunningState(DryerCommonOperation operation)
 
-         {
 
-             if (_status == RState.Running)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{Module} current execute {_currentOperation},cannot {operation}");
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         #endregion
 
-         /// <summary>
 
-         /// 获取当前操作对应的Routine
 
-         /// </summary>
 
-         /// <param name="currentOperation"></param>
 
-         /// <returns></returns>
 
-         private IRoutine GetCurrentRoutine(DryerCommonOperation currentOperation)
 
-         {
 
-             switch (currentOperation)
 
-             {
 
-                 case DryerCommonOperation.BlowerHigh:
 
-                     return _blowerHighRoutine;
 
-                 default:
 
-                     return null;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 检验Routine状态
 
-         /// </summary>
 
-         /// <param name="routine"></param>
 
-         /// <param name="currentOperation"></param>
 
-         private void CheckRoutineState(IRoutine routine, DryerCommonOperation currentOperation)
 
-         {
 
-             RState state = routine.Monitor();
 
-             if (state == RState.End)
 
-             {
 
-                 EndOperation(RState.End);
 
-             }
 
-             else if (state == RState.Failed || state == RState.Timeout)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, $"{Module}", $"{currentOperation} error");
 
-                 EndOperation(RState.Failed);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 结束操作
 
-         /// </summary>
 
-         private void EndOperation(RState state)
 
-         {
 
-             _status = state;
 
-             _currentOperation = DryerCommonOperation.None;
 
-         }
 
-         /// <summary>
 
-         /// DisabledAction
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="param"></param>
 
-         /// <returns></returns>
 
-         private bool DisabledOperation(string cmd, object[] args)
 
-         {
 
-             string currentOperation = "Disabled";
 
-             DryerEntity dryerEntity = Singleton<RouteManager>.Instance.GetModule<DryerEntity>(Module);
 
-             if(dryerEntity == null || _dryerPersistentValue == null) return false;
 
-             if (_dryerPersistentValue.OperatingMode != "Disabled") dryerEntity.EnterInit();
 
-             _dryerPersistentValue.OperatingMode = currentOperation;
 
-             DryerPersistentManager.Instance.UpdatePersistentValue(Module);
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// ManualAction
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="param"></param>
 
-         /// <returns></returns>
 
-         private bool ManualOperation(string cmd, object[] args)
 
-         {
 
-             string currentOperation = "Manual";
 
-             DryerEntity dryerEntity = Singleton<RouteManager>.Instance.GetModule<DryerEntity>(Module);
 
-             if (dryerEntity == null || _dryerPersistentValue == null) return false;
 
-             if(_dryerPersistentValue.OperatingMode == "Auto" && dryerEntity.IsBusy)
 
-             {
 
-                 LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{Module} is Busy, can't change to manual mode");
 
-                 return false;
 
-             }
 
-             if (_dryerPersistentValue.OperatingMode != "Manual") dryerEntity.EnterInit();
 
-             _dryerPersistentValue.OperatingMode = currentOperation;
 
-             DryerPersistentManager.Instance.UpdatePersistentValue(Module);
 
-             
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// AutoAction
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="param"></param>
 
-         /// <returns></returns>
 
-         private bool AutoOperation(string cmd, object[] args)
 
-         {
 
-             string currentOperation = "Auto";
 
-             DryerEntity dryerEntity = Singleton<RouteManager>.Instance.GetModule<DryerEntity>(Module);
 
-             if (dryerEntity == null || _dryerPersistentValue == null) return false;
 
-             if (_dryerPersistentValue.OperatingMode != "Auto") dryerEntity.EnterInit();
 
-             _dryerPersistentValue.OperatingMode= currentOperation;
 
-             DryerPersistentManager.Instance.UpdatePersistentValue(Module);
 
-             
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// EngineeringModeAction
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="param"></param>
 
-         /// <returns></returns>
 
-         private bool EngineeringModeOperation(string cmd, object[] args)
 
-         {
 
-             string currentRecipeOperation = "Engineering";
 
-             _dryerPersistentValue.RecipeOperatingMode = currentRecipeOperation;
 
-             DryerPersistentManager.Instance.UpdatePersistentValue(Module);
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// ProductionAction
 
-         /// </summary>
 
-         /// <param name="cmd"></param>
 
-         /// <param name="param"></param>
 
-         /// <returns></returns>
 
-         private bool ProductionModeOperation(string cmd, object[] args)
 
-         {
 
-             string currentRecipeOperation = "Production";
 
-             _dryerPersistentValue.RecipeOperatingMode= currentRecipeOperation;
 
-             DryerPersistentManager.Instance.UpdatePersistentValue(Module);
 
-             return true;
 
-         }
 
-         #region 设备接口
 
-         /// <summary>
 
-         /// 监控
 
-         /// </summary>
 
-         public void Monitor()
 
-         {
 
-         }
 
-         public void Reset()
 
-         {
 
-         }
 
-         /// <summary>
 
-         /// 中止
 
-         /// </summary>
 
-         public void Terminate()
 
-         {
 
-             _periodicJob.Stop(false);
 
-         }
 
-         #endregion
 
-     }
 
- }
 
 
  |