浏览代码

fix 优化ffu config 展示

jiangjy 1 周之前
父节点
当前提交
e5be95967b

+ 1 - 42
Furnace/FurnaceRT/Config/System.sccfg

@@ -460,48 +460,7 @@
 		<configs name="FFU4">
 			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
 		</configs>
-		<configs name="FFU5">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU6">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU7">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU8">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU9">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU10">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU11">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU12">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU13">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU14">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU15">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU16">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU17">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
-		<configs name="FFU18">
-			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
-		</configs>
+		
 		<configs name="BufferFFU1">
 			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
 		</configs>

+ 21 - 13
Furnace/FurnaceRT/Devices/IoFFU.cs

@@ -220,24 +220,32 @@ namespace FurnaceRT.Devices
 
         private FFUStatusEnum GetFFUStatusEnum()
         {
-
-            //和TIN不一致
-            if (_aiSwitch != null && _aiSwitch.FloatValue == 1)
-                return FFUStatusEnum.OFF;
-
-            if (_aiSwitch != null && _aiSwitch.FloatValue == 2)
-                return FFUStatusEnum.ON;
-
-            if (_aiStatus != null && (_aiStatus.FloatValue == 2 || _aiStatus.FloatValue == 3))
+            if (_aiSwitch != null)
             {
-                return FFUStatusEnum.OFF;
+                switch (_aiSwitch.FloatValue)
+                {
+                    case 1:
+                        return FFUStatusEnum.OFF;
+                    case 2:
+                        return FFUStatusEnum.ON;
+                    default:
+                        break;
+                }
             }
-            if (_aiStatus != null && (_aiStatus.FloatValue == 0))
+            if (_aiStatus != null)
             {
-                return FFUStatusEnum.ON;
+                switch (_aiStatus.FloatValue)
+                {
+                    case 0:
+                        return FFUStatusEnum.OFF;
+                    case 2:
+                    case 3:
+                        return FFUStatusEnum.OFF;
+                    default:
+                        break;
+                }
             }
 
-
             return FFUStatusEnum.Unknown;
 
         }

+ 94 - 52
Furnace/FurnaceUI/Views/Maintenances/FFUConfigView.xaml

@@ -15,7 +15,13 @@
              Width="800"
              >
     <Grid>
-        <Canvas IsEnabled="{Binding IsPermission}">
+
+        <Grid.RowDefinitions>
+            <RowDefinition Height="40"></RowDefinition>
+            <RowDefinition></RowDefinition>
+            <RowDefinition  Height="50"></RowDefinition>
+        </Grid.RowDefinitions>
+        <StackPanel   Orientation="Horizontal">
             <Button  Content="All Power ON" Visibility="{Binding PowerOnVisibility,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource bool2VisibilityConverter}}"  Foreground="{DynamicResource FG_Black}" Canvas.Left="10" Canvas.Top="10" FontSize="16" Height="40" Width="150" FontFamily="Arial" >
                 <i:Interaction.Triggers>
                     <i:EventTrigger EventName="Click">
@@ -34,69 +40,105 @@
                     </i:EventTrigger>
                 </i:Interaction.Triggers>
             </Button>
-            <DataGrid Margin="0,60,0,0" Width="800" ItemsSource="{Binding  FFUDataList}" AutoGenerateColumns="False" CanUserAddRows="False"  ScrollViewer.HorizontalScrollBarVisibility="Disabled">
-                <DataGrid.Columns>
-                    <DataGridTemplateColumn Width="*" Header="Name">
-                        <DataGridTemplateColumn.CellTemplate>
-                            <DataTemplate>
-                                <TextBlock Text="{Binding DisplayName}" FontSize="14" TextAlignment="Center"/>
-                            </DataTemplate>
-                        </DataGridTemplateColumn.CellTemplate>
-                    </DataGridTemplateColumn>
-                    <DataGridTemplateColumn Width="*" Header="Feedback">
-                        <DataGridTemplateColumn.CellTemplate>
-                            <DataTemplate>
-                                <TextBlock   Text="{Binding ActualValue, StringFormat={}{0:f3}}" FontSize="14" TextAlignment="Center"/>
-                            </DataTemplate>
-                        </DataGridTemplateColumn.CellTemplate>
-                    </DataGridTemplateColumn>
-                    <!--<DataGridTemplateColumn Width="100" Header="Min">
+
+            <Button  Content="All Set"    Foreground="{DynamicResource FG_Black}" Margin="20,0,0,0" FontSize="16" Height="40" Width="150" FontFamily="Arial" >
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="AllSetClick">
+                            <cal:Parameter Value="$source"/>
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+            </Button>
+
+
+        </StackPanel>
+
+        <DataGrid Grid.Row="1" Margin="0,10,0,0" Width="800" ItemsSource="{Binding  FFUDataList}" AutoGenerateColumns="False" CanUserAddRows="False"  ScrollViewer.HorizontalScrollBarVisibility="Disabled">
+            <DataGrid.Columns>
+                <DataGridTemplateColumn Width="*" Header="Name">
                     <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
-                            <TextBlock Text="{Binding MinValue}" FontSize="14" TextAlignment="Center"/>
+                            <TextBlock Text="{Binding DisplayName}" FontSize="14" TextAlignment="Center"/>
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
-                </DataGridTemplateColumn>-->
+                </DataGridTemplateColumn>
+                <DataGridTemplateColumn Width="*" Header="Feedback">
+                    <DataGridTemplateColumn.CellTemplate>
+                        <DataTemplate>
+                            <TextBlock   Text="{Binding ActualValue, StringFormat={}{0:f3}}" FontSize="14" TextAlignment="Center"/>
+                        </DataTemplate>
+                    </DataGridTemplateColumn.CellTemplate>
+                </DataGridTemplateColumn>
+                <!--<DataGridTemplateColumn Width="100" Header="Min">
+           <DataGridTemplateColumn.CellTemplate>
+               <DataTemplate>
+                   <TextBlock Text="{Binding MinValue}" FontSize="14" TextAlignment="Center"/>
+               </DataTemplate>
+           </DataGridTemplateColumn.CellTemplate>
+       </DataGridTemplateColumn>-->
+
+                <DataGridTemplateColumn Width="100" Header="Set">
+                    <DataGridTemplateColumn.CellTemplate>
+                        <DataTemplate>
+                            <controls:TextBoxEx Cursor="Hand" EditBoxMode="Decimal" KeepDecimals="3" ChangedColor="Yellow" Text="{Binding Value,UpdateSourceTrigger=PropertyChanged}" FontSize="14" TextAlignment="Center" Tag="Number">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="TextChanged">
+                                        <cal:ActionMessage MethodName="SetValueTextChanged">
+                                            <cal:Parameter Value="Value"></cal:Parameter>
+                                            <cal:Parameter Value="$source"></cal:Parameter>
+                                            <cal:Parameter Value="{Binding}"></cal:Parameter>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
 
-                    <DataGridTemplateColumn Width="100" Header="Set">
-                        <DataGridTemplateColumn.CellTemplate>
-                            <DataTemplate>
-                                <controls:TextBoxEx Cursor="Hand" EditBoxMode="Decimal" KeepDecimals="3" ChangedColor="Yellow" Text="{Binding Value,UpdateSourceTrigger=PropertyChanged}" FontSize="14" TextAlignment="Center" Tag="Number">
-                                    <i:Interaction.Triggers>
-                                        <i:EventTrigger EventName="TextChanged">
-                                            <cal:ActionMessage MethodName="SetValueTextChanged">
-                                                <cal:Parameter Value="Value"></cal:Parameter>
-                                                <cal:Parameter Value="$source"></cal:Parameter>
-                                                <cal:Parameter Value="{Binding}"></cal:Parameter>
-                                            </cal:ActionMessage>
-                                        </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </controls:TextBoxEx>
+                        </DataTemplate>
+                    </DataGridTemplateColumn.CellTemplate>
+                </DataGridTemplateColumn>
+                <!--<DataGridTemplateColumn Width="100" Header="Max">
+           <DataGridTemplateColumn.CellTemplate>
+               <DataTemplate>
+                   <TextBlock Text="{Binding MaxValue, StringFormat={}{0:f3}}" FontSize="14" TextAlignment="Center"/>
+               </DataTemplate>
+           </DataGridTemplateColumn.CellTemplate>
+       </DataGridTemplateColumn>-->
 
-                                    </i:Interaction.Triggers>
-                                </controls:TextBoxEx>
-                            </DataTemplate>
-                        </DataGridTemplateColumn.CellTemplate>
-                    </DataGridTemplateColumn>
-                    <!--<DataGridTemplateColumn Width="100" Header="Max">
+                <DataGridTemplateColumn Header="Status" Width="*" IsReadOnly="True">
                     <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
-                            <TextBlock Text="{Binding MaxValue, StringFormat={}{0:f3}}" FontSize="14" TextAlignment="Center"/>
+                            <Label   Width="150"  HorizontalContentAlignment="Center"  Grid.Column="0"    >
+                                <deviceControl:AITSensor CustomColorOn="Green" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding IsSwitch}" EnableToolTip="False"/>
+                            </Label>
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
-                </DataGridTemplateColumn>-->
+                </DataGridTemplateColumn>
+
+            </DataGrid.Columns>
+        </DataGrid>
+
+
 
-                    <DataGridTemplateColumn Header="Status" Width="*" IsReadOnly="True">
-                        <DataGridTemplateColumn.CellTemplate>
-                            <DataTemplate>
-                                <Label   Width="150"  HorizontalContentAlignment="Center"  Grid.Column="0"    >
-                                    <deviceControl:AITSensor CustomColorOn="Green" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding IsSwitch}" EnableToolTip="False"/>
-                                </Label>
-                            </DataTemplate>
-                        </DataGridTemplateColumn.CellTemplate>
-                    </DataGridTemplateColumn>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
+
+            <Button  Content="Save"    Foreground="{DynamicResource FG_Black}" Margin="20,0,0,0" FontSize="16" Height="40" Width="150" FontFamily="Arial" >
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="Save">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+            </Button>
 
-                </DataGrid.Columns>
-            </DataGrid>
-        </Canvas>
+            <Button  Content="Cancle"    Foreground="{DynamicResource FG_Black}" Margin="20,0,0,0" FontSize="16" Height="40" Width="150" FontFamily="Arial" >
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="Cancle">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+            </Button>
+        </StackPanel>
 
     </Grid>
 </UserControl>

+ 83 - 48
Furnace/FurnaceUI/Views/Maintenances/FFUConfigViewModel.cs

@@ -6,7 +6,9 @@ using System.Linq;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows;
 using System.Windows.Controls;
+using System.Windows.Shell;
 using Aitex.Core.Common.DeviceData;
 using Aitex.Core.RT.IOCore;
 using Aitex.Core.RT.Log;
@@ -19,6 +21,7 @@ using MECF.Framework.Common.CommonData.DeviceData;
 using MECF.Framework.Common.DataCenter;
 using MECF.Framework.Common.Device;
 using MECF.Framework.Common.OperationCenter;
+using MECF.Framework.UI.Client.CenterViews.Dialogs;
 using OpenSEMI.ClientBase;
 
 namespace FurnaceUI.Views.Maintenances
@@ -59,8 +62,7 @@ namespace FurnaceUI.Views.Maintenances
             get => _powerOnVisibility;
             set => SetField(ref _powerOnVisibility, value, nameof(PowerOnVisibility));
         }
-        Dictionary<string, FFUData> ffuDictionary = new Dictionary<string, FFUData>();
- 
+
         protected override void OnActivate()
         {
             base.OnActivate();
@@ -69,72 +71,42 @@ namespace FurnaceUI.Views.Maintenances
             foreach (var item in FFUKeyDict)
             {
                 var deviceName = item.Split('.').ToList()[1];
+                var ffuConfigData = QueryDataClient.Instance.Service.GetConfig($"FFU.{deviceName}.SetSpeed");
+
                 FFUDataList.Add(new FFUData()
                 {
                     RTName = deviceName,
-                    DisplayName = deviceName,
+                    Value = ffuConfigData.ToString(),
                 });
             }
-            ffuDictionary = FFUDataList.ToDictionary(a => a.RTName);
         }
         protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
         {
             base.InvokeAfterUpdateProperty(data);
-            var values = QueryDataClient.Instance.Service.PollData(FFUKeyDict).Values.Select(a => (a as AITFFUData)).ToList();
-            if (ffuDictionary != null)
+
+            if (FFUDataList != null && FFUDataList.Count > 0)
             {
-                foreach (var item in values)
+                var allFfuName = FFUDataList.Select(a => $"PM1.{a.RTName}.DeviceData").ToList();
+                var allRtData = QueryDataClient.Instance.Service.PollData(allFfuName);
+                foreach (var item in FFUDataList)
                 {
-                    if (item==null || !ffuDictionary.TryGetValue(item.RTName, out var ffu))
+                    var rtItem = allRtData.FirstOrDefault(a => a.Key == $"PM1.{item.RTName}.DeviceData");
+                    if (rtItem.Value == null)
                         continue;
 
-                    ffu.DisplayName = item.DisplayName;
-                    ffu.MaxValue = item.Max.ToString();
-                    ffu.MinValue = item.Min.ToString();
-                    ffu.ActualValue = item.Feedback;
-                    ffu.RTName = item.RTName;
-                    ffu.IsSwitch = item.IsSwitchOn;
-                    ffu.Value = item.SetPoint.ToString();
-                    ffu.LastSetValue = item.SetPoint;
+                    item.DisplayName = ((AITFFUData)rtItem.Value).DisplayName;
+                    item.ActualValue = ((AITFFUData)rtItem.Value).Feedback;
+                    item.IsSwitch = ((AITFFUData)rtItem.Value).IsSwitchOn;
 
-                }
-            }
-        }
-  
-        async void DelayData(string type, object sender, object item)
-        {
-            await WaitForResultsAsync();
-            if (!string.IsNullOrEmpty(type) && item != null && sender != null)
-            {
-                var dataItem = item as FFUData;
-                string value = ((TextBox)sender).Text;
-                var setValue = double.Parse(value);
-                var max = double.Parse(dataItem.MaxValue);
-                var min = double.Parse(dataItem.MinValue);
 
-                if (setValue != dataItem.LastSetValue)
-                {
-                    //if (setValue < min || setValue > max)
-                    //{
-                    //    DialogBox.ShowWarning($"{dataItem.DisplayName} setValue={setValue}, limit is ({min}, {max})");
-                    //    return;
-                    //}
-                    InvokeClient.Instance.Service.DoOperation($"PM1.{dataItem.RTName}.SetCurrectSpeed", value);
 
                 }
-
             }
 
         }
-        private async Task WaitForResultsAsync()
-        {
-            // Simulate waiting for results using a delay
-            // In a real-world scenario, you might wait for an event or a specific condition
-            await Task.Delay(10);
 
-            // Here you can add logic to check if the results are ready
-            // For example, polling or using a completion source
-        }
+
+
         public void AllFFUPower(string value)
         {
             var setValue = bool.Parse(value);
@@ -155,13 +127,76 @@ namespace FurnaceUI.Views.Maintenances
         {
             try
             {
-                DelayData(type,sender,item);
+
             }
             catch (Exception ex)
             {
                 LOG.Write(ex);
             }
         }
+
+        public void Save()
+        {
+            if (!DialogBox.Confirm("Are you sure Determine the speed parameters for  FFU"))
+                return;
+
+            foreach (var item in FFUDataList)
+            {
+                InvokeClient.Instance.Service.DoOperation($"PM1.{item.RTName}.SetCurrectSpeed", item.Value);
+            }
+
+            (GetView() as Window).Close();
+        }
+        public void Cancle()
+        {
+            (GetView() as Window).Close();
+        }
+        public void AllSetClick(object sender)
+        {
+            string stSetValue = ShowNumberKeyboard(sender as Button, "", 1);
+            var values = QueryDataClient.Instance.Service.PollData(FFUKeyDict).Values.Select(a => (a as AITFFUData)).ToList();
+
+            foreach (var item in FFUDataList)
+            {
+                var rtData = values.FirstOrDefault(a => a.RTName == item.RTName);
+                if (rtData == null)
+                    continue;
+
+                item.Value = stSetValue;
+
+            }
+
+        }
+
+        private string ShowNumberKeyboard(Control control, string defaultValue, int keepDecimals = -1)
+        {
+            NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue);
+            numberKeyboard.KeepDecimals = keepDecimals;
+            var point = control.PointFromScreen(new Point(0, 0));
+            double wx = SystemParameters.WorkArea.Width;
+            double hy = SystemParameters.WorkArea.Height;
+            if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy)
+            {
+                numberKeyboard.Top = -point.Y + control.ActualHeight + 5;
+            }
+            else
+            {
+                numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;
+            }
+            if (-point.X + numberKeyboard.Width < wx)
+            {
+                numberKeyboard.Left = -point.X;
+            }
+            else
+            {
+                numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);
+            }
+            if ((bool)numberKeyboard.ShowDialog())
+                return numberKeyboard.ValueString;
+            else
+                return "Cancel";
+        }
+
     }
     public class FFUData : PropertyChangedBase
     {