using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.Util;
using MECF.Framework.Common.Beckhoff.ModuleIO;
using MECF.Framework.Common.CommonData.Prewet;
using MECF.Framework.Common.CommonData.Vpw;
using MECF.Framework.Common.IOCore;
using MECF.Framework.Common.Persistent.Prewet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.VpwMain
{
public class VpwMainDevice : BaseDevice, IDevice
{
#region 常量
private const string COMMON_DATA = "CommonData1";
private const string PERSISTENT_VALUE = "CommonData";
private const string CHAMBER_CLOSED = "ChamberClosed";
private const string CHAMBER_OPENED = "ChamberOpened";
private const string CHAMBER_CLOSE = "ChamberClose";
private const string LEAK_DETECTED = "LeakDetected";
private const string VACUUM_PUMP_PRESSURE = "VacuumPumpPressure";
private const string VACUUM_PUMP_POWER = "VacuumPumpPower";
private const string VACUUM_PUMP_ENABLE = "VacuumPumpEnable";
private const string VACUUM_PUMP_SPEED_ENABLE = "VacuumPumpSpeedEnable";
private const string VACUUM_PUMP_SPEED = "VacuumPumpSpeed";
private const string BOOSTER_PUMP_SPEED = "BoosterPumpSpeed";
private const string BOOSTER_PUMP_ENABLE = "BoosterPumpEnable";
private const string BOOSTER_PUMP_STATUS = "BoosterPumpStatus";
private const string DIW_ENABLE = "DiwEnable";
private const string DIW_PROCESS = "DiwProcess";
private const string DIW_DEGAS = "DiwDegas";
private const string DIW_TOTAL_FLOW = "DiwTotalFlow";
private const string DIW_PRESSURE = "DiwPressure";
private const string DEGAS_ADJUST = "DegasAdjust";
private const string DEGAS_PURGE = "DegasPurge";
private const string DEGAS_PUMP_ENABLE = "DegasPumpEnable";
private const string DEGAS_PUMP_PRESSURE = "DegasPumpPressure";
#endregion
#region 内部变量
///
/// 变量是否初始化字典
///
private Dictionary _variableInitializeDic = new Dictionary();
///
/// 数据
///
private VpwMainCommonData _commonData=new VpwMainCommonData();
#endregion
#region 属性
///
/// 数据
///
public VpwMainCommonData CommonData { get { return _commonData; } }
#endregion
///
/// 构造函数
///
///
public VpwMainDevice(string moduleName) : base(moduleName, moduleName, moduleName, moduleName)
{
}
#region 初始化
///
/// 初始化
///
///
public bool Initialize()
{
InitializeParameter();
InitializeRoutine();
SubscribeData();
SubscribeValueAction();
InitializeOperation();
return true;
}
///
/// 初始化参数
///
private void InitializeParameter()
{
}
///
/// 初始化Routine
///
private void InitializeRoutine()
{
}
///
/// 订阅
///
private void SubscribeData()
{
DATA.Subscribe($"{Module}.{PERSISTENT_VALUE}", () => null, SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.{COMMON_DATA}", () => CommonData, SubscriptionAttribute.FLAG.IgnoreSaveDB);
}
///
/// 订阅数据
///
private void SubscribeValueAction()
{
IoSubscribeUpdateVariable(CHAMBER_CLOSED);
IoSubscribeUpdateVariable(CHAMBER_OPENED);
IoSubscribeUpdateVariable(BOOSTER_PUMP_STATUS);
IoSubscribeUpdateVariable(BOOSTER_PUMP_SPEED);
IoSubscribeUpdateVariable(BOOSTER_PUMP_ENABLE);
IoSubscribeUpdateVariable(DEGAS_PURGE);
IoSubscribeUpdateVariable(DEGAS_ADJUST);
IoSubscribeUpdateVariable(DEGAS_PUMP_ENABLE);
IoSubscribeUpdateVariable(DIW_ENABLE);
IoSubscribeUpdateVariable(DIW_PROCESS);
IoSubscribeUpdateVariable(DIW_PRESSURE);
IoSubscribeUpdateVariable(DIW_DEGAS);
IoSubscribeUpdateVariable(DIW_TOTAL_FLOW);
IoSubscribeUpdateVariable(VACUUM_PUMP_ENABLE);
IoSubscribeUpdateVariable(VACUUM_PUMP_POWER);
IoSubscribeUpdateVariable(VACUUM_PUMP_PRESSURE);
IoSubscribeUpdateVariable(VACUUM_PUMP_SPEED);
IoSubscribeUpdateVariable(VACUUM_PUMP_SPEED_ENABLE);
IoSubscribeUpdateVariable(LEAK_DETECTED);
}
///
/// 初始化变量
///
///
private void IoSubscribeUpdateVariable(string variable)
{
_variableInitializeDic[variable] = false;
IOModuleManager.Instance.SubscribeModuleVariable(Module, variable, UpdateVariableValue);
}
///
/// 更新变量数值
///
///
///
private void UpdateVariableValue(string variable, object value)
{
PropertyInfo property = _commonData.GetType().GetProperty(variable);
if (property != null)
{
property.SetValue(_commonData, value);
}
if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
{
_variableInitializeDic[variable] = true;
}
}
///
/// 初始化OP
///
private void InitializeOperation()
{
OP.Subscribe($"{Module}.VacuumPumpPowerOn", (cmd,para)=> { return VacuumPumpPowerOn(); });
OP.Subscribe($"{Module}.VacuumPumpPowerOff", (cmd, para) => { return VacuumPumpPowerOff(); });
OP.Subscribe($"{Module}.VacuumPumpEnable", (cmd, para) => { return VacuumPumpEnable(); });
OP.Subscribe($"{Module}.VacuumPumpDisable", (cmd, para) => { return VacuumPumpDisable(); });
OP.Subscribe($"{Module}.VacuumPumpSpeedEnable", (cmd, para) => { return VacuumSpeedEnable(); });
OP.Subscribe($"{Module}.VacuumPumpSpeedDisable", (cmd, para) => { return VacuumSpeedDisable(); });
OP.Subscribe($"{Module}.VacuumPumpSpeed", (cmd, para) =>{
short speed = short.Parse(para[0].ToString());
return WriteVacuumSpeed(speed); });
OP.Subscribe($"{Module}.DegasPumpEnable", (cmd, para) => { return DegasPumpEnable(); });
OP.Subscribe($"{Module}.DegasPumpDisable", (cmd, para) => { return DegasPumpDisable(); });
OP.Subscribe($"{Module}.DegasAdjustOn", (cmd, para) => { return DegasAdjustOn(); });
OP.Subscribe($"{Module}.DegasAdjustOff", (cmd, para) => { return DegasAdjustOff(); });
OP.Subscribe($"{Module}.DiwDegasValveOn", (cmd, para) => { return DiwDegasValveOn(); });
OP.Subscribe($"{Module}.DiwDegasValveOff", (cmd, para) => { return DiwDegasValveOff(); });
OP.Subscribe($"{Module}.BoosterPumpEnable", (cmd, para) => { return BoosterPumpEnable(); });
OP.Subscribe($"{Module}.BoosterPumpDisable", (cmd, para) => { return BoosterPumpDisable(); });
OP.Subscribe($"{Module}.BoosterPumpSpeed", (cmd, para) => {
short speed = short.Parse(para[0].ToString());
return BoosterPumpSpeed(speed);
});
OP.Subscribe($"{Module}.ChamberUp", (cmd, para) => { return ChamberUp(); });
OP.Subscribe($"{Module}.ChamberDown", (cmd, para) => { return ChamberDown(); });
OP.Subscribe($"{Module}.BoosterPumpSpeedAuto", (cmd, para) => { return BoosterPumpSpeedAuto(); });
OP.Subscribe($"{Module}.BoosterPumpSpeedManual", (cmd, para) => { return BoosterPumpSpeedManual(); });
}
#endregion
#region Action
#region Vacum Pump
///
/// Pump Power On
///
///
public bool VacuumPumpPowerOn()
{
return WriteVariableValue(VACUUM_PUMP_POWER, true);
}
///
/// Pump Power Off
///
///
public bool VacuumPumpPowerOff()
{
return WriteVariableValue(VACUUM_PUMP_POWER, false);
}
///
/// Pump Enable
///
///
public bool VacuumPumpEnable()
{
return WriteVariableValue(VACUUM_PUMP_ENABLE, true);
}
///
/// Pump Disable
///
///
public bool VacuumPumpDisable()
{
return WriteVariableValue(VACUUM_PUMP_ENABLE, false);
}
///
/// Speed Enable
///
///
public bool VacuumSpeedEnable()
{
return WriteVariableValue(VACUUM_PUMP_SPEED_ENABLE, true);
}
///
/// Speed disable
///
///
public bool VacuumSpeedDisable()
{
return WriteVariableValue(VACUUM_PUMP_SPEED_ENABLE, false);
}
///
/// 写入速度
///
///
///
public bool WriteVacuumSpeed(short speed)
{
return WriteVariableValue(VACUUM_PUMP_SPEED, speed);
}
#endregion
#region Degas Pump
///
/// Degas Pump Enable
///
///
public bool DegasPumpEnable()
{
return WriteVariableValue(DEGAS_PUMP_ENABLE, true);
}
///
/// Degas Pump disable
///
///
public bool DegasPumpDisable()
{
return WriteVariableValue(DEGAS_PUMP_ENABLE, false);
}
///
/// Degas Adjust On
///
///
private bool DegasAdjustOn()
{
return WriteVariableValue(DEGAS_ADJUST, true);
}
///
/// Degas Adjust Off
///
///
private bool DegasAdjustOff()
{
return WriteVariableValue(DEGAS_ADJUST, false);
}
///
/// DIW Degas Valve On
///
///
private bool DiwDegasValveOn()
{
return WriteVariableValue(DIW_DEGAS, true);
}
///
/// DIW Degas Valve Off
///
///
private bool DiwDegasValveOff()
{
return WriteVariableValue(DIW_DEGAS, false);
}
#endregion
#region Booster Pump
///
/// Booster Pump enable
///
///
public bool BoosterPumpEnable()
{
return WriteVariableValue(BOOSTER_PUMP_ENABLE, true);
}
///
/// Booster Pump Disable
///
///
public bool BoosterPumpDisable()
{
return WriteVariableValue(BOOSTER_PUMP_ENABLE, false);
}
///
/// 写入Booster泵速
///
///
///
public bool BoosterPumpSpeed(short speed)
{
return WriteVariableValue(BOOSTER_PUMP_SPEED, speed);
}
#endregion
#region Chamber
///
/// 上升
///
///
public bool ChamberUp()
{
return WriteVariableValue(CHAMBER_CLOSE, false);
}
///
/// 下降
///
///
public bool ChamberDown()
{
return WriteVariableValue(CHAMBER_CLOSE, true);
}
public bool BoosterPumpSpeedAuto()
{
_commonData.BoosterPumpIsAutoMode = true;
return true;
}
public bool BoosterPumpSpeedManual()
{
_commonData.BoosterPumpIsAutoMode = false;
return true;
}
#endregion
///
/// 写变量
///
///
///
///
private bool WriteVariableValue(string variable, object value)
{
string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{variable}");
return IOModuleManager.Instance.WriteIoValue(ioName, value);
}
#endregion
///
/// 监控
///
public void Monitor()
{
}
public void Reset()
{
}
public void Terminate()
{
}
}
}