|
@@ -161,6 +161,8 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
private bool _isVotlageWarningB = false;
|
|
|
private bool _isCurrentWarningA = false;
|
|
|
private bool _isCurrentWarningB = false;
|
|
|
+ private bool _isZeroCurrent = false;
|
|
|
+ private int _totalMicrosecond = 0;
|
|
|
#endregion
|
|
|
#region 属性
|
|
|
/// <summary>
|
|
@@ -369,6 +371,11 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
/// <returns></returns>
|
|
|
private bool StartPowerStep()
|
|
|
{
|
|
|
+ if (_isZeroCurrent)
|
|
|
+ {
|
|
|
+ _startStepTime = DateTime.Now;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
if (string.IsNullOrEmpty(_side))
|
|
|
{
|
|
|
bool result = StartPowerStep(_device.SideAPowerSupplier);
|
|
@@ -418,6 +425,10 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
/// <returns></returns>
|
|
|
private bool CheckRecipeStepEndStatus()
|
|
|
{
|
|
|
+ if (_isZeroCurrent)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
if (_startRecipeStep)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(_side))
|
|
@@ -441,6 +452,10 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
/// <returns></returns>
|
|
|
private bool CheckRecipeStepStopStatus()
|
|
|
{
|
|
|
+ if (_isZeroCurrent)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
if (_startRecipeStep)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(_side))
|
|
@@ -517,6 +532,9 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
/// </summary>
|
|
|
private void UpdatePowerStepDatas()
|
|
|
{
|
|
|
+ _isZeroCurrent = false;
|
|
|
+ double current = 0;
|
|
|
+ _totalMicrosecond = 0;
|
|
|
_powerSupplierStepPeriodDatas.Clear();
|
|
|
foreach (var item in _recipe.CurrentRampProfileSteps)
|
|
|
{
|
|
@@ -528,6 +546,12 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
step.Microsecond = 0;
|
|
|
step.Voltage = _recipe.VoltageWarningLevel;
|
|
|
_powerSupplierStepPeriodDatas.Add(step);
|
|
|
+ current += step.Current;
|
|
|
+ _totalMicrosecond += item.CurrentRampDurartionSeconds * 1000;
|
|
|
+ }
|
|
|
+ if (current == 0)
|
|
|
+ {
|
|
|
+ _isZeroCurrent = true;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -611,20 +635,42 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
/// <returns></returns>
|
|
|
private bool CheckMetalDisable()
|
|
|
{
|
|
|
-
|
|
|
+ if (!_device.IsLinmotMotorOn)
|
|
|
+ {
|
|
|
+ LOG.WriteLog(eEvent.ERR_METAL, Module, "Linmot is not motor on");
|
|
|
+ Abort();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ //CheckVotlageAndCurrent();
|
|
|
+ if (!CheckVoltageAndCurrentValid())
|
|
|
+ {
|
|
|
+ Abort();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 检验电压电流的合理性
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ private bool CheckVoltageAndCurrentValid()
|
|
|
+ {
|
|
|
+ //零电流不检验
|
|
|
+ if (_isZeroCurrent)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
if (string.IsNullOrEmpty(_side))
|
|
|
{
|
|
|
if (!_device.SideAPowerSupplier.PowerSupplierData.Enabled)
|
|
|
{
|
|
|
LOG.WriteLog(eEvent.ERR_METAL, Module, "PowerA disable");
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
if (!_device.SideBPowerSupplier.PowerSupplierData.Enabled)
|
|
|
{
|
|
|
LOG.WriteLog(eEvent.ERR_METAL, Module, "PowerB disable");
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -632,36 +678,14 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
if (_side == SIDE_A && !_device.SideAPowerSupplier.PowerSupplierData.Enabled)
|
|
|
{
|
|
|
LOG.WriteLog(eEvent.ERR_METAL, Module, "PowerA disable");
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
if (_side == SIDE_B && !_device.SideBPowerSupplier.PowerSupplierData.Enabled)
|
|
|
{
|
|
|
LOG.WriteLog(eEvent.ERR_METAL, Module, "PowerB disable");
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
- if (!_device.IsLinmotMotorOn)
|
|
|
- {
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, "Linmot is not motor on");
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
- }
|
|
|
- //CheckVotlageAndCurrent();
|
|
|
- if (!CheckVoltageAndCurrentValid())
|
|
|
- {
|
|
|
- Abort();
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 检验电压电流的合理性
|
|
|
- /// </summary>
|
|
|
- /// <returns></returns>
|
|
|
- private bool CheckVoltageAndCurrentValid()
|
|
|
- {
|
|
|
double sideACurrent = _device.SideAPowerSupplier.PowerSupplierData.Current;
|
|
|
double sideAVoltage = _device.SideAPowerSupplier.PowerSupplierData.Voltage;
|
|
|
double sideBCurrent = _device.SideBPowerSupplier.PowerSupplierData.Current;
|
|
@@ -701,206 +725,6 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
return true;
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 监控电流和电压
|
|
|
- /// </summary>
|
|
|
- private void CheckVotlageAndCurrent()
|
|
|
- {
|
|
|
- if (string.IsNullOrEmpty(_side))
|
|
|
- {
|
|
|
- //监控电压A面
|
|
|
- MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(Module);
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage > _recipe.VoltageWarningLevel && _device.SideAPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMax && !_isVotlageWarningA)
|
|
|
- {
|
|
|
- _isVotlageWarningA = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageWarningLevel {_recipe.VoltageWarningLevel}");
|
|
|
- }
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMin)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is lower than recipe VolatageLimitMin {_recipe.VolatageLimitMin}");
|
|
|
- }
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage > _recipe.VolatageLimitMax)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageLimitMin {_recipe.VolatageLimitMax}");
|
|
|
- }
|
|
|
- //监控电流A面
|
|
|
- double currentWarningFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.CurrentWarningLevel * 0.01;
|
|
|
- double currentErrorFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.FaultPercent * 0.01;
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault
|
|
|
- || _device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Current {_device.SideAPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault}");
|
|
|
- }
|
|
|
- if (!_isCurrentWarningA && ((_device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault && _device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault)
|
|
|
- || (_device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault && _device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)))
|
|
|
- {
|
|
|
- _isCurrentWarningA = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideA Current {_device.SideAPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault}");
|
|
|
- }
|
|
|
-
|
|
|
- //监控电压B面
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Voltage > _recipe.VoltageWarningLevel && _device.SideBPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMax && !_isVotlageWarningB)
|
|
|
- {
|
|
|
- _isVotlageWarningB = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageWarningLevel {_recipe.VoltageWarningLevel}");
|
|
|
- }
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMin)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is lower than recipe VolatageLimitMin {_recipe.VolatageLimitMin}");
|
|
|
- }
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Voltage > _recipe.VolatageLimitMax)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageLimitMin{_recipe.VolatageLimitMax}");
|
|
|
- }
|
|
|
- //监控电流B面
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault
|
|
|
- || _device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Current {_device.SideBPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault}");
|
|
|
- }
|
|
|
- if (!_isCurrentWarningB && ((_device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault && _device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault)
|
|
|
- || (_device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault && _device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)))
|
|
|
- {
|
|
|
- _isCurrentWarningB = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideB Current {_device.SideBPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault}");
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (_side == SIDE_A)
|
|
|
- {
|
|
|
- //监控电压A面
|
|
|
- MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(Module);
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage > _recipe.VoltageWarningLevel && _device.SideAPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMax && !_isVotlageWarningA)
|
|
|
- {
|
|
|
- _isVotlageWarningA = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageWarningLevel {_recipe.VoltageWarningLevel}");
|
|
|
- }
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMin)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is lower than recipe VolatageLimitMin {_recipe.VolatageLimitMin}");
|
|
|
- }
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Voltage > _recipe.VolatageLimitMax)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Votlage {_device.SideAPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageLimitMin {_recipe.VolatageLimitMax}");
|
|
|
- }
|
|
|
- //监控电流A面
|
|
|
- double currentWarningFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.CurrentWarningLevel * 0.01;
|
|
|
- double currentErrorFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.FaultPercent * 0.01;
|
|
|
- if (_device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault
|
|
|
- || _device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideA Current {_device.SideAPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault}");
|
|
|
- }
|
|
|
- if (!_isCurrentWarningA && ((_device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault && _device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault)
|
|
|
- || (_device.SideAPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault && _device.SideAPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)))
|
|
|
- {
|
|
|
- _isCurrentWarningA = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideA Current {_device.SideAPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range{_powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault}");
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //监控电压B面
|
|
|
- MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(Module);
|
|
|
- if (!_isVotlageWarningB && _device.SideBPowerSupplier.PowerSupplierData.Voltage > _recipe.VoltageWarningLevel && _device.SideBPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMax)
|
|
|
- {
|
|
|
- _isVotlageWarningB = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageWarningLevel {_recipe.VoltageWarningLevel}");
|
|
|
- }
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Voltage < _recipe.VolatageLimitMin)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is lower than recipe VolatageLimitMin {_recipe.VolatageLimitMin}");
|
|
|
- }
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Voltage > _recipe.VolatageLimitMax)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Votlage {_device.SideBPowerSupplier.PowerSupplierData.Voltage} is large than recipe VolatageLimitMin {_recipe.VolatageLimitMax}");
|
|
|
- }
|
|
|
- //监控电流B面
|
|
|
- double currentWarningFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.CurrentWarningLevel * 0.01;
|
|
|
- double currentErrorFault = _powerSupplierStepPeriodDatas[_stepIndex].Current * _recipe.FaultPercent * 0.01;
|
|
|
- if (_device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault
|
|
|
- || _device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)
|
|
|
- {
|
|
|
- if (metalEntity != null)
|
|
|
- {
|
|
|
- metalEntity.PostMsg(MetalMsg.Error);
|
|
|
- }
|
|
|
- Abort();
|
|
|
- LOG.WriteLog(eEvent.ERR_METAL, Module, $"Current SideB Current {_device.SideBPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range{_powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault}");
|
|
|
- }
|
|
|
- if (!_isCurrentWarningB && ((_device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault && _device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current + currentErrorFault)
|
|
|
- || (_device.SideBPowerSupplier.PowerSupplierData.Current < _powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault && _device.SideBPowerSupplier.PowerSupplierData.Current > _powerSupplierStepPeriodDatas[_stepIndex].Current - currentErrorFault)))
|
|
|
- {
|
|
|
- _isCurrentWarningB = true;
|
|
|
- LOG.WriteLog(eEvent.WARN_METAL, Module, $"Current SideB Current {_device.SideBPowerSupplier.PowerSupplierData.Current} is not in " +
|
|
|
- $"recipe Range {_powerSupplierStepPeriodDatas[_stepIndex].Current - currentWarningFault} ~ {_powerSupplierStepPeriodDatas[_stepIndex].Current + currentWarningFault}");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
/// 检验电流和电压合理性
|
|
|
/// </summary>
|
|
|
/// <param name="current"></param>
|