PSU2增加控制量输出上下限设定。

版本号升级至v1.6.0.15
This commit is contained in:
SL 2023-08-02 11:40:43 +08:00
parent 36a5efd620
commit c7acf1ce29
11 changed files with 318 additions and 31 deletions

View File

@ -74,6 +74,18 @@ namespace Aitex.Core.Common.DeviceData.IoDevice
[DataMember]
public float ConstantSetPoint { get; set; }
/// <summary>
/// 设置或返回输出限幅上限值。
/// </summary>
[DataMember]
public float OutputLimitHigh { get; set; }
/// <summary>
/// 设置或返回输出限幅下限值。
/// </summary>
[DataMember]
public float OutputLimitLow { get; set; }
/// <summary>
/// 设置或返回PSU总开关状态。
/// </summary>

View File

@ -59,6 +59,8 @@
aiOutputVoltage="AI_PSU2Voltage" aiOutputArms="AI_PSU2Arms" aiOutputPower="AI_PSU2Power"
aiSimVoltage="AI_PSU2SimVoltage" aiSimArms="AI_PSU2SimArms"
doStatus="DO_PSU2Enable" doReset="DO_PSU2Reset" aoConstant="AO_PSU2Constant"
aoOutputLimitHigh="AO_PSU2OutputLimitHigh"
aoOutputLimitLow="AO_PSU2OutputLimitLow"
diStatus="DI_MiddleHeaterEnable_FB" diAlarm="DI_PSU2Alarm" AlarmText="Alarm67 PSU2 Alarm[DI-321]"
diCommunicationError ="DI_PSU2dpCommunicationError" commAlarmText=""
doHeatEnable="DO_PSUEnable" diHeatEnable="DI_PSUEnable_FB" doRelatedEnable="DO_MiddleHeaterEnable" />

View File

@ -743,8 +743,8 @@
<AO_ITEM Index="208" Name="AO_PSUInnerRetedValue" BufferOffset="208" Addr="208" Description=""/>
<AO_ITEM Index="209" Name="AO_PSUMiddleRetedValue" BufferOffset="209" Addr="209" Description=""/>
<AO_ITEM Index="210" Name="AO_PSUOuterRetedValue" BufferOffset="210" Addr="210" Description=""/>
<AO_ITEM Index="211" Name="AO_PSUInnerVoltageLimited" BufferOffset="211" Addr="211" Description=""/>
<AO_ITEM Index="212" Name="AO_PSUMiddleVoltageLimited" BufferOffset="212" Addr="212" Description=""/>
<AO_ITEM Index="211" Name="AO_PSU2OutputLimitLow" BufferOffset="211" Addr="211" Description=""/>
<AO_ITEM Index="212" Name="AO_PSU2OutputLimitHigh" BufferOffset="212" Addr="212" Description=""/>
<AO_ITEM Index="213" Name="AO_PSUOuterVoltageLimited" BufferOffset="213" Addr="213" Description=""/>
<AO_ITEM Index="216" Name="AO_PSU1Enable" BufferOffset="216" Addr="216" Description=""/>
<AO_ITEM Index="217" Name="AO_PSU1Reset" BufferOffset="217" Addr="217" Description=""/>

View File

@ -29,6 +29,8 @@ namespace SicPM.Devices
//private AOAccessor _aoEnable = null;
//private AOAccessor _aoReset = null;
private readonly AOAccessor _aoConstant;
private readonly AOAccessor _aoOutputLimitHigh;
private readonly AOAccessor _aoOutputLimitLow;
private readonly DIAccessor _diStatus;
private readonly DIAccessor _diAlarm;
@ -66,7 +68,10 @@ namespace SicPM.Devices
_aiOutputPower = ParseAiNode("aiOutputPower", node, ioModule);
_aiSimVoltage = ParseAiNode("aiSimVoltage", node, ioModule);
_aiSimArms = ParseAiNode("aiSimArms", node, ioModule);
_aoConstant = ParseAoNode("aoConstant", node, ioModule);
_aoOutputLimitHigh = ParseAoNode("aoOutputLimitHigh", node, ioModule);
_aoOutputLimitLow = ParseAoNode("aoOutputLimitLow", node, ioModule);
_doReset = ParseDoNode("doReset", node, ioModule);
_doStatus = ParseDoNode("doStatus", node, ioModule);
@ -143,6 +148,8 @@ namespace SicPM.Devices
_deviceData.Resistance = Resistance;
_deviceData.IsResistanceOutOfRange = IsResistanceOutOfRange;
_deviceData.IsResistanceTooHigh = IsResistanceTooHigh;
_deviceData.OutputLimitHigh = _aoOutputLimitHigh?.FloatValue ?? 0;
_deviceData.OutputLimitLow = _aoOutputLimitLow?.FloatValue ?? 0;
return JsonConvert.SerializeObject(_deviceData);
}
}
@ -185,6 +192,7 @@ namespace SicPM.Devices
SetPSUEnable(isTrue, out _);
return true;
});
OP.Subscribe($"{Module}.{Name}.SetPSUReset", (function, args) =>
{
var isTrue = Convert.ToBoolean(args[0]);
@ -192,9 +200,43 @@ namespace SicPM.Devices
return true;
});
OP.Subscribe($"{Module}.{Name}.SetOutputLimitHigh", (function, args) =>
{
if (args.Length == 1 && args[0] is double value)
{
SetOutputLimitHigh(value);
return true;
}
EV.PostWarningLog(Module, $"SetOutputLimitHigh fail, args error");
return false;
});
OP.Subscribe($"{Module}.{Name}.SetOutputLimitLow", (function, args) =>
{
if (args.Length == 1 && args[0] is double value)
{
SetOutputLimitLow(value);
return true;
}
EV.PostWarningLog(Module, $"SetOutputLimitLow fail, args error");
return false;
});
return true;
}
public void SetOutputLimitHigh(double value)
{
SC.SetItemValue($"PM.{Module}.Heater.PSU2OutputLimitHigh", value);
}
public void SetOutputLimitLow(double value)
{
SC.SetItemValue($"PM.{Module}.Heater.PSU2OutputLimitLow", value);
}
public bool SetPSUEnable(bool setValue, out string reason)
{
if (!_doStatus.Check(setValue, out reason))
@ -277,16 +319,10 @@ namespace SicPM.Devices
{
try
{
MonitorPsu2OutputLimit();
MonitorEnableTimer();
MonitorAlarm();
if (_timResetPulse.IsTimeout())
{
_timResetPulse.Stop();
if (_doReset.Value)
_doReset.Value = false;
ResetResistanceMonitorResult();
}
MonitorDoResetDone();
}
catch (Exception ex)
{
@ -306,6 +342,19 @@ namespace SicPM.Devices
ResetResistanceMonitorResult();
}
private void MonitorDoResetDone()
{
if (_timResetPulse.IsTimeout())
{
_timResetPulse.Stop();
if (_doReset.Value)
_doReset.Value = false;
ResetResistanceMonitorResult();
}
}
/// <summary>
/// 复位加热器电阻监测结果。
/// </summary>
@ -358,20 +407,57 @@ namespace SicPM.Devices
}
}
}
private readonly R_TRIG _trigBelow1600 = new();
private readonly R_TRIG _trigAbove1600 = new();
private void MonitorPsu2OutputLimit()
{
if (Name == "PSU2")
{
var limitHigh = (float)SC.GetValue<double>($"PM.{Module}.Heater.PSU2OutputLimitHigh");
if(limitHigh > 100)
limitHigh = 100;
_trigAbove1600.CLK = AETemp >= 1600;
if (_trigAbove1600.Q)
EV.PostInfoLog(Module, $"Temp above 1600℃, limit PSU2 Output level to {limitHigh}%");
_trigBelow1600.CLK = AETemp < 1600;
if (_trigAbove1600.Q)
EV.PostInfoLog(Module, $"Temp below 1600℃, limit PSU2 Output level to 100%");
if (AETemp >= 1600)
{
if (Math.Abs(_aoOutputLimitHigh.FloatValue - limitHigh) > 1E-6)
_aoOutputLimitHigh.FloatValue = limitHigh;
}
else
{
_aoOutputLimitHigh.FloatValue = 100;
}
var limitLow = (float)SC.GetValue<double>($"PM.{Module}.Heater.PSU2OutputLimitLow");
if (Math.Abs(_aoOutputLimitLow.FloatValue - limitLow) > 1E-6)
_aoOutputLimitLow.FloatValue = limitLow;
}
}
public double AETemp
{
get
{
var temp = new object();
object temp = null;
if (SC.GetConfigItem("AETemp.EnableDevice").BoolValue)
{
temp = DATA.Poll($"{Module}.AETemp.Middle");
}
if (SC.GetConfigItem("AKunTemp.EnableDevice").BoolValue)
/*if (SC.GetConfigItem("AKunTemp.EnableDevice").BoolValue)
{
temp = DATA.Poll($"{Module}.AKunTemp.Middle");
}
}*/
return temp == null ? 0 : (double)temp;
}

View File

@ -193,6 +193,9 @@
<config default="900" name="PickPVInnerTempLimit" description="从PM取盘时,需要等待温度低于此数值" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="900" name="PickPVMiddleTempLimit" description="从PM取盘时,需要等待温度低于此数值" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="900" name="PickPVOuterTempLimit" description="从PM取盘时,需要等待温度低于此数值" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="100" name="PSU2OutputLimitHigh" description="PSU2输出限幅上限值" max="100" min="0" paramter="" tag="" unit="" visible="false" type="Double" />
<config default="0" name="PSU2OutputLimitLow" description="PSU2输出限幅下限值" max="100" min="0" paramter="" tag="" unit="" visible="false" type="Double" />
</configs>
<configs name="ProcessIdle">

View File

@ -52,6 +52,6 @@ using System.Windows;
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.5.6.14")]
[assembly: AssemblyVersion("1.6.0.15")]
//[assembly: AssemblyFileVersion("1.5.3.11")]

View File

@ -10,6 +10,10 @@
---------------------------------------------------------------------------------
Sic02 2023-08-02 Version 1.6.0.15
1. PSU2增加控制量输出上下限设定
Sic02 2023-08-02 Version 1.5.6.14
1. PM Operation视图中的Heater电阻值保留3位小数

View File

@ -741,8 +741,8 @@
<AO_ITEM Index="208" Name="AO_PSUInnerRetedValue" BufferOffset="208" Addr="208" Description=""/>
<AO_ITEM Index="209" Name="AO_PSUMiddleRetedValue" BufferOffset="209" Addr="209" Description=""/>
<AO_ITEM Index="210" Name="AO_PSUOuterRetedValue" BufferOffset="210" Addr="210" Description=""/>
<AO_ITEM Index="211" Name="AO_PSUInnerVoltageLimited" BufferOffset="211" Addr="211" Description=""/>
<AO_ITEM Index="212" Name="AO_PSUMiddleVoltageLimited" BufferOffset="212" Addr="212" Description=""/>
<AO_ITEM Index="211" Name="AO_PSU2OutputLimitLow" BufferOffset="211" Addr="211" Description=""/>
<AO_ITEM Index="212" Name="AO_PSU2OutputLimitHigh" BufferOffset="212" Addr="212" Description=""/>
<AO_ITEM Index="213" Name="AO_PSUOuterVoltageLimited" BufferOffset="213" Addr="213" Description=""/>
<AO_ITEM Index="216" Name="AO_PSU1Enable" BufferOffset="216" Addr="216" Description=""/>
<AO_ITEM Index="217" Name="AO_PSU1Reset" BufferOffset="217" Addr="217" Description=""/>

View File

@ -1194,7 +1194,7 @@
Visibility="{Binding TipsVisble}" />
</Grid>
<Grid Margin="520,308,0,0">
<Grid Margin="520,278,0,0" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="35" />
<RowDefinition Height="35" />
@ -1207,23 +1207,12 @@
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Border
@ -1582,6 +1571,118 @@
</Button>
</Border>
<Border
Grid.Row="8"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Label
HorizontalContentAlignment="Left"
Content="*Output Limit High(%)"
FontSize="13"
ToolTip="仅当温度大于1600°C时该值生效低于1600°C时输出上限恒定为100%"/>
</Border>
<Border
Grid.Row="8"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{Binding Psu2Data.OutputLimitHigh, StringFormat=0.0}" />
</Label>
</Border>
<Border
Grid.Row="8"
Grid.Column="2"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<OpenSEMI:TextBoxEx
Name="tbPsu2OutputLimitHigh"
FontFamily="Arial"
FontSize="14"
Text="{Binding PSU2OutputLimitHighSetting, Mode=OneTime}" />
</Border>
<Border
Grid.Row="8"
Grid.RowSpan="1"
Grid.Column="3"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<Button Content="Set" IsEnabled="{Binding IsActionEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOutputLimitHigh">
<cal:Parameter Value="PSU2"/>
<cal:Parameter Value="{Binding Path=Text, ElementName=tbPsu2OutputLimitHigh}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="9"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Label
HorizontalContentAlignment="Left"
Content="Output Limit Low(%)"
FontSize="14" />
</Border>
<Border
Grid.Row="9"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<Label HorizontalContentAlignment="Center" FontSize="14">
<TextBlock Text="{Binding Psu2Data.OutputLimitLow, StringFormat=0.0}" />
</Label>
</Border>
<Border
Grid.Row="9"
Grid.Column="2"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<OpenSEMI:TextBoxEx
Name="tbPsu2OutputLimitLow"
FontFamily="Arial"
FontSize="14"
Text="{Binding PSU2OutputLimitLowSetting, Mode=OneTime}" />
</Border>
<Border
Grid.Row="9"
Grid.Column="3"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<Button Content="Set" IsEnabled="{Binding IsActionEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOutputLimitLow">
<cal:Parameter Value="PSU2"/>
<cal:Parameter Value="{Binding Path=Text, ElementName=tbPsu2OutputLimitLow}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
</Grid>
</Grid>

View File

@ -1,4 +1,6 @@
using Aitex.Core.Common.DeviceData;
using Aitex.Core.Common.DeviceData.IoDevice;
using Aitex.Core.RT.Event;
using Aitex.Core.Util;
using Caliburn.Micro;
using MECF.Framework.Common.DataCenter;
@ -6,6 +8,7 @@ using MECF.Framework.Common.OperationCenter;
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
using MECF.Framework.UI.Client.ClientBase;
using OpenSEMI.ClientBase;
using RecipeEditorLib.DGExtension.CustomColumn;
using RecipeEditorLib.RecipeModel.Params;
using System;
@ -17,6 +20,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using Newtonsoft.Json;
namespace SicUI.Models.PMs
{
@ -1097,6 +1101,81 @@ namespace SicUI.Models.PMs
#endregion
#region PSU2 Output Limit High/Low
[Subscription("PSU2.DeviceData")]
public string Psu2DataJson { get; set; }
public IoPsuData Psu2Data =>
string.IsNullOrEmpty(Psu2DataJson)
? null
: JsonConvert.DeserializeObject<IoPsuData>(Psu2DataJson);
public double PSU2OutputLimitHighSetting
{
get
{
var sc = QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.Heater.PSU2OutputLimitHigh");
if (sc is double dValue)
{
return dValue;
}
return 0;
}
}
public double PSU2OutputLimitLowSetting
{
get
{
var sc = QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.Heater.PSU2OutputLimitLow");
if (sc is double dValue)
{
return dValue;
}
return 0;
}
}
public void SetOutputLimitHigh(string psu, string limit)
{
if (!double.TryParse(limit, out var dLimit))
{
DialogBox.ShowError("The limit value is not a number.");
return;
}
try
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{psu}.SetOutputLimitHigh", dLimit);
}
catch (Exception ex)
{
EV.PostWarningLog("PM1", "SetOutputLimitHigh exception:" + ex.Message);
}
}
public void SetOutputLimitLow(string psu, string limit)
{
if (!double.TryParse(limit, out var dLimit))
{
DialogBox.ShowError("The limit value is not a number.");
return;
}
try
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{psu}.SetOutputLimitLow", dLimit);
}
catch (Exception ex)
{
EV.PostWarningLog("PM1", "SetOutputLimitLow exception:" + ex.Message);
}
}
#endregion
#endregion

View File

@ -54,5 +54,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.5.6.14")]
[assembly: AssemblyVersion("1.6.0.15")]
//[assembly: AssemblyFileVersion("1.5.3.11")]