增加监控界面

This commit is contained in:
2024-07-12 10:39:55 +08:00
parent 1e0cba7b53
commit c9f4e88e04
11 changed files with 892 additions and 141 deletions

View File

@@ -0,0 +1,102 @@
<UserControl
x:Class="CapMachine.Shared.Controls.Meter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CapMachine.Shared.Controls"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="MeterInstance"
d:DesignHeight="160"
d:DesignWidth="160"
BorderBrush="Gray"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="5*" />
<RowDefinition Height="3*" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<Border
Margin="3,3,3,0"
Background="#404040"
CornerRadius="3" />
<StackPanel Margin="3,3,3,0">
<DockPanel Margin="5">
<TextBlock
VerticalAlignment="Center"
DockPanel.Dock="Left"
FontSize="24"
Foreground="White"
Text="PV" />
<TextBlock
Margin="10,0,5,0"
VerticalAlignment="Center"
FontSize="24"
Foreground="White"
Text="25.45" />
<TextBlock
Margin="5,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
DockPanel.Dock="Right"
FontSize="14"
Foreground="White"
Text="Kg" />
</DockPanel>
<DockPanel Margin="5,-3,5,0">
<TextBlock
VerticalAlignment="Center"
DockPanel.Dock="Left"
FontSize="22"
FontStyle="Italic"
Foreground="Gold"
Text="SV" />
<TextBlock
Margin="10,0,5,0"
VerticalAlignment="Center"
FontSize="20"
Foreground="Gold"
Text="25.45" />
<TextBlock
Margin="5,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
DockPanel.Dock="Right"
FontSize="12"
Foreground="Gold"
Text="Kg" />
</DockPanel>
</StackPanel>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Margin="0,5,0,0">
<ToggleButton Style="{StaticResource MaterialDesignSwitchToggleButton}" ToolTip="手自动" />
<TextBlock
Margin="0,5,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontWeight="Bold"
Foreground="CadetBlue"
Text="自动" />
</StackPanel>
</Grid>
<Border
Grid.Row="2"
Margin="3,3,3,3"
Background="Gray"
CornerRadius="3">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="20"
Foreground="White"
Text="吸气温度" />
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CapMachine.Shared.Controls
{
/// <summary>
/// Meter.xaml 的交互逻辑
/// </summary>
public partial class Meter : UserControl
{
public Meter()
{
InitializeComponent();
}
/// <summary>
/// 仪表名称
/// </summary>
public string MeterName
{
get
{
return (string)base.GetValue(MeterConfig.MeterNameProperty);
}
set
{
base.SetValue(MeterConfig.MeterNameProperty, value);
}
}
public static readonly DependencyProperty MeterNameProperty = DependencyProperty.Register("MeterName", typeof(string), typeof(MeterConfig), new PropertyMetadata("速度"));
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@@ -7,6 +7,16 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Remove="Assets\Images\参考工艺图.png" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\Images\参考工艺图.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" /> <PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="FreeSql" Version="3.2.808" /> <PackageReference Include="FreeSql" Version="3.2.808" />
@@ -25,7 +35,6 @@
<PackageReference Include="System.ComponentModel.Composition" Version="8.0.0" /> <PackageReference Include="System.ComponentModel.Composition" Version="8.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Assets\" />
<Folder Include="Dtos\" /> <Folder Include="Dtos\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -1,9 +1,11 @@
using Arction.Wpf.Charting; using Arction.Wpf.Charting;
using Arction.Wpf.Charting.Annotations; using Arction.Wpf.Charting.Annotations;
using Arction.Wpf.Charting.Axes; using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.Maps;
using Arction.Wpf.Charting.Series3D; using Arction.Wpf.Charting.Series3D;
using Arction.Wpf.Charting.SeriesXY; using Arction.Wpf.Charting.SeriesXY;
using Arction.Wpf.Charting.Views.ViewXY; using Arction.Wpf.Charting.Views.ViewXY;
using CapMachine.Model;
using ImTools; using ImTools;
using Prism.Mvvm; using Prism.Mvvm;
using System; using System;
@@ -18,60 +20,64 @@ namespace CapMachine.Wpf.Models
/// <summary> /// <summary>
/// 曲线实时系列模型 /// 曲线实时系列模型
/// </summary> /// </summary>
public class ChartRtSeries:BindableBase public class ChartRtSeries : BindableBase
{ {
public ChartRtSeries(AxisY axisY, LightningChart lightningChart, string SeriesName) /// <summary>
{ /// 实例化函数
//var CreateAxisY = new AxisY(); /// </summary>
//CreateAxisY.Title.Text = Name; /// <param name="axisY"></param>
//CreateAxisY.Title.AllowDragging = false; /// <param name="lightningChart"></param>
//CreateAxisY.SetRange(0, 100); /// <param name="SeriesName"></param>
//CreateAxisY.MajorGrid.Visible = false; //public ChartRtSeries(AxisY axisY, LightningChart lightningChart, string SeriesName)
////取消滚轮缩放 //{
//CreateAxisY.ZoomingEnabled = false; // //var CreateAxisY = new AxisY();
// //CreateAxisY.Title.Text = Name;
// //CreateAxisY.Title.AllowDragging = false;
// //CreateAxisY.SetRange(0, 100);
// //CreateAxisY.MajorGrid.Visible = false;
// ////取消滚轮缩放
// //CreateAxisY.ZoomingEnabled = false;
// //模型赋值
// LightningChartInstance = lightningChart;
// //ChartAxisY = axisY;
// ChartAxisX = lightningChart.ViewXY.XAxes[0];
// Name = SeriesName;
// //Unit = "℃";
// //判断别重复因为可能共用Y轴的信息
// //绑定lightningChart
// lightningChart.ViewXY.YAxes.Add(axisY);
// ChartPointLineSeries = new PointLineSeries(lightningChart.ViewXY, lightningChart.ViewXY.XAxes[0], axisY);
// ChartPointLineSeries.Title.Text = SeriesName;
// //绑定lightningChart
// lightningChart.ViewXY.PointLineSeries.Add(ChartPointLineSeries);
//}
/// <summary>
/// 实例化函数
/// </summary>
public ChartRtSeries(LightningChart lightningChart, ChartConfig chartConfig, List<ChartRtSeries> listchartRtSeries, ConfigChartSelect configChartSelect)
{
//模型赋值 //模型赋值
LightningChartInstance = lightningChart; LightningChartInstance = lightningChart;
ChartAxisY = axisY; ChartConfigInfo = chartConfig;
ChartAxisX = lightningChart.ViewXY.XAxes[0]; ChartAxisY = configChartSelect.ConfigChartYAxis;
Name = SeriesName; ChartAxisX = LightningChartInstance.ViewXY.XAxes[0];
Name = configChartSelect.Name;
ListChartRtSeries= listchartRtSeries;
Unit = "℃"; AddSeries(configChartSelect.Name!, configChartSelect.ConfigChartYAxis!);
//判断别重复因为可能共用Y轴的信息
//绑定lightningChart
lightningChart.ViewXY.YAxes.Add(axisY);
ChartPointLineSeries = new PointLineSeries(lightningChart.ViewXY, lightningChart.ViewXY.XAxes[0], axisY);
ChartPointLineSeries.Title.Text = SeriesName;
//绑定lightningChart
lightningChart.ViewXY.PointLineSeries.Add(ChartPointLineSeries);
} }
///// <summary>
///// 名称
///// </summary>
//public string? Name { get; set; }
///// <summary> #region
///// 值
///// </summary>
//public double Value { get; set; }
///// <summary>
///// Max
///// </summary>
//public double Max { get; set; }
///// <summary>
///// Min
///// </summary>
//public double Min { get; set; }
///// <summary>
///// 单位
///// </summary>
//public string? Unit { get; set; }
private string? _Name; private string? _Name;
/// <summary> /// <summary>
@@ -93,37 +99,159 @@ namespace CapMachine.Wpf.Models
set { _Value = value; RaisePropertyChanged(); } set { _Value = value; RaisePropertyChanged(); }
} }
private double _Max;
//private string? _Unit;
///// <summary>
///// 单位
///// </summary>
//public string? Unit
//{
// get { return _Unit; }
// set { _Unit = value; RaisePropertyChanged(); }
//}
#endregion
/// <summary> /// <summary>
/// Max /// 删除Y轴信息
/// </summary> /// </summary>
public double Max public void DeleteAxisY()
{ {
get { return _Max; } //删除Y轴信息
set { _Max = value; RaisePropertyChanged(); } LightningChartInstance.ViewXY.YAxes.Remove(LightningChartInstance.ViewXY.YAxes.FindFirst(a => a.Title.Text == ChartAxisY.Name));
} }
private double _Min;
/// <summary> /// <summary>
/// Min /// 删除系列
/// </summary> /// </summary>
public double Min public void DeleteSeries()
{ {
get { return _Min; } LightningChartInstance.BeginUpdate();
set { _Min = value; RaisePropertyChanged(); }
LightningChartInstance.ViewXY.PointLineSeries.Remove(ChartPointLineSeries);
LightningChartInstance.EndUpdate();
ListChartRtSeries.Remove(ListChartRtSeries.FindFirst(a=>a.Name== Name));
} }
private string? _Unit;
/// <summary> /// <summary>
/// 单位 /// 增加系列
/// </summary> /// </summary>
public string? Unit /// <param name="Name"></param>
private void AddSeries(string SeriesName, ConfigChartYAxis configChartYAxis)
{ {
get { return _Unit; } LightningChartInstance.BeginUpdate();
set { _Unit = value; RaisePropertyChanged(); }
//判断之前的系列是否已经存在(依据名称),存在使用之前的系列,否则新增
var AxisYInfo = GetAxisY(configChartYAxis.Name);
if (AxisYInfo == null)
{
//新增
AxisYInfo = new AxisY();
AxisYInfo.Title.Text = configChartYAxis.Name;
AxisYInfo.Title.AllowDragging = false;
AxisYInfo.SetRange(configChartYAxis.Min, configChartYAxis.Max);
AxisYInfo.MajorGrid.Visible = false;
//取消滚轮缩放
AxisYInfo.ZoomingEnabled = false;
LightningChartInstance.ViewXY.YAxes.Add(AxisYInfo);
}
else
{
//使用之前
AxisYInfo.SetRange(configChartYAxis.Min, configChartYAxis.Max);
}
var SeriesInfo = GetPointLineSeries(SeriesName);
if (SeriesInfo == null)
{
//新增
SeriesInfo = new PointLineSeries(LightningChartInstance.ViewXY, LightningChartInstance.ViewXY.XAxes[0], AxisYInfo);
SeriesInfo.Title.Text = SeriesName;
SeriesInfo.LineStyle.Color = ChartConfigInfo.ListColor[LightningChartInstance.ViewXY.YAxes.Count + 1];
SeriesInfo.AllowUserInteraction = false;
LightningChartInstance.ViewXY.PointLineSeries.Add(SeriesInfo);
}
else
{
//使用之前
SeriesInfo.AssignYAxisIndex = AxisYInfo.SegmentIndex;
}
//赋值给当前的模型
ChartPointLineSeries = SeriesInfo;
//Configure and add series to the chart
LightningChartInstance.EndUpdate();
} }
/// <summary>
/// 获取AxisY信息
/// </summary>
/// <param name="AxisName"></param>
/// <returns></returns>
private AxisY GetAxisY(string AxisName)
{
var AxisYs = LightningChartInstance.ViewXY.YAxes;
if (AxisYs != null)
{
var findAxis = AxisYs.FindFirst(a => a.Title.Text == AxisName);
if (findAxis != null)
{
return findAxis;
}
else
{
return null;
}
}
else
{
return null;
}
}
/// <summary>
/// 获取PointLineSeries信息
/// </summary>
/// <param name="AxisName"></param>
/// <returns></returns>
private PointLineSeries GetPointLineSeries(string SeriesName)
{
var PointLineSeries = LightningChartInstance.ViewXY.PointLineSeries;
if (PointLineSeries != null)
{
var findSeries = PointLineSeries.FindFirst(a => a.Title.Text == SeriesName);
if (findSeries != null)
{
return findSeries;
}
else
{
return null;
}
}
else
{
return null;
}
}
/// <summary>
/// 上层管理集合
/// </summary>
public List<ChartRtSeries> ListChartRtSeries { get; set; }
/// <summary> /// <summary>
/// 曲线 /// 曲线
/// </summary> /// </summary>
@@ -132,7 +260,7 @@ namespace CapMachine.Wpf.Models
/// <summary> /// <summary>
/// Y轴 /// Y轴
/// </summary> /// </summary>
public AxisY? ChartAxisY { get; set; } public ConfigChartYAxis? ChartAxisY { get; set; }
/// <summary> /// <summary>
/// X轴 /// X轴
@@ -144,6 +272,12 @@ namespace CapMachine.Wpf.Models
/// </summary> /// </summary>
public LightningChart LightningChartInstance { get; set; } public LightningChart LightningChartInstance { get; set; }
/// <summary>
/// 曲线配置信息
/// </summary>
public ChartConfig ChartConfigInfo { get; set; }
/// <summary> /// <summary>
/// X轴滚动 /// X轴滚动
/// </summary> /// </summary>
@@ -160,7 +294,7 @@ namespace CapMachine.Wpf.Models
/// </summary> /// </summary>
public void AddValue(double Data) public void AddValue(double Data)
{ {
//foreach (var item in lightningChart1.ViewXY.PointLineSeries) //foreach (var item in LightningChartInstance.ViewXY.PointLineSeries)
//{ //{
//Disable updates, to prevent several extra refreshes //Disable updates, to prevent several extra refreshes
LightningChartInstance.BeginUpdate(); LightningChartInstance.BeginUpdate();
@@ -183,10 +317,11 @@ namespace CapMachine.Wpf.Models
LightningChartInstance.ViewXY.XAxes[0].ScrollPosition = _previousX; LightningChartInstance.ViewXY.XAxes[0].ScrollPosition = _previousX;
} }
//Allow updates again, and update //Allow updates again, and update
LightningChartInstance.EndUpdate(); LightningChartInstance.EndUpdate();
Value = Data;
//} //}
} }

View File

@@ -1,5 +1,6 @@
using Arction.Wpf.Charting.Axes; using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.SeriesXY; using Arction.Wpf.Charting.SeriesXY;
using Prism.Mvvm;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -11,7 +12,7 @@ namespace CapMachine.Wpf.Models
/// <summary> /// <summary>
/// 曲线实时数据模型 /// 曲线实时数据模型
/// </summary> /// </summary>
public class ChartRtValue public class ChartRtValue:BindableBase
{ {
public ChartRtValue() public ChartRtValue()
{ {
@@ -23,10 +24,15 @@ namespace CapMachine.Wpf.Models
/// </summary> /// </summary>
public string? Name { get; set; } public string? Name { get; set; }
private double _Value;
/// <summary> /// <summary>
/// 值 /// 值
/// </summary> /// </summary>
public double Value { get; set; } public double Value
{
get { return _Value; }
set { _Value = value; RaisePropertyChanged(); }
}
/// <summary> /// <summary>
/// Max /// Max

View File

@@ -54,28 +54,28 @@ namespace CapMachine.Wpf.Services
Stopwatch stopwatch = new Stopwatch(); //Stopwatch stopwatch = new Stopwatch();
//第一次计时 ////第一次计时
stopwatch.Start(); //启动Stopwatch //stopwatch.Start(); //启动Stopwatch
for (var i = 0; i < 10000000; i++) //for (var i = 0; i < 10000000; i++)
{ //{
keyValuePairs.TryAdd(DateTime.UtcNow, new RecordInfo() // keyValuePairs.TryAdd(DateTime.UtcNow, new RecordInfo()
{ // {
CreateTime = DateTime.UtcNow, // CreateTime = DateTime.UtcNow,
WorkCondition = "dadf", // WorkCondition = "dadf",
Temp = 23.3 // Temp = 23.3
}); // });
//keyValuePairs.Add(new RecordInfo() // //keyValuePairs.Add(new RecordInfo()
//{ // //{
// CreateTime = DateTime.UtcNow, // // CreateTime = DateTime.UtcNow,
// WorkCondition = "dadf", // // WorkCondition = "dadf",
// Temp = 23.3 // // Temp = 23.3
//}); // //});
} //}
stopwatch.Stop(); //停止Stopwatch //stopwatch.Stop(); //停止Stopwatch
Console.WriteLine("Add Elapsed output runTime:{0}", stopwatch.Elapsed.ToString()); //Console.WriteLine("Add Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());
//事件服务 //事件服务
_EventAggregator = eventAggregator; _EventAggregator = eventAggregator;
@@ -216,12 +216,13 @@ namespace CapMachine.Wpf.Services
await Task.Delay(1000); await Task.Delay(1000);
_EventAggregator.GetEvent<ChartRtEvent>().Publish(new List<Models.ChartRtValue>() _EventAggregator.GetEvent<ChartRtEvent>().Publish(new List<Models.ChartRtValue>()
{ {
new Models.ChartRtValue(){Name="室温0",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="EVA风量",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="室温1",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="中间轴转速",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="室温2",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="加热电力",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="室温3",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="加湿电力",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="室温4",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="EMPCV电流",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="室温5",Value=random.NextDouble()*100,Unit="℃"}, new Models.ChartRtValue(){Name="INJ压力",Value=random.NextDouble()*100,Unit="℃"},
new Models.ChartRtValue(){Name="冷媒流量",Value=random.NextDouble()*100,Unit="℃"},
}); });
} }

View File

@@ -1,14 +1,39 @@
using CapMachine.Core; using CapMachine.Core;
using CapMachine.Wpf.Models;
using CapMachine.Wpf.PrismEvent;
using Prism.Events;
namespace CapMachine.Wpf.ViewModels namespace CapMachine.Wpf.ViewModels
{ {
public class MonitorViewModel : NavigationViewModel public class MonitorViewModel : NavigationViewModel
{ {
public MonitorViewModel() public MonitorViewModel(IEventAggregator eventAggregator)
{ {
//事件服务
_EventAggregator = eventAggregator;
_EventAggregator.GetEvent<ChartRtEvent>().Subscribe(GetChartRtEvent);
} }
private IEventAggregator _EventAggregator { get; set; }
public List<ChartRtValue> ListChartRtValue { get; set; } = new List<ChartRtValue>()
{
new ChartRtValue(){ Name="温度",Value=12.3,Unit="℃"},
new ChartRtValue(){ Name="压力",Value=12.3,Unit="bar"},
new ChartRtValue(){ Name="湿度",Value=12.3,Unit="%"},
};
/// <summary>
/// 获取曲线的实时值
/// 数据是发布过来
/// </summary>
/// <param name="value"></param>
/// <exception cref="NotImplementedException"></exception>
private void GetChartRtEvent(List<ChartRtValue> RtData)
{
//ListChartRtValue = RtData;
}
} }
} }

View File

@@ -17,6 +17,7 @@
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="50" /> <RowDefinition Height="50" />
<RowDefinition /> <RowDefinition />
<RowDefinition Height="32" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<md:ColorZone md:ElevationAssist.Elevation="Dp2" Mode="PrimaryDark"> <md:ColorZone md:ElevationAssist.Elevation="Dp2" Mode="PrimaryDark">
@@ -160,5 +161,74 @@
x:Name="MainViewContentControl" x:Name="MainViewContentControl"
prism:RegionManager.RegionName="MainViewContentRegion" prism:RegionManager.RegionName="MainViewContentRegion"
Visibility="Collapsed" /> Visibility="Collapsed" />
<Grid Grid.Row="2" Margin="4">
<Grid.Resources>
<Style x:Key="BoardStyle" TargetType="Border">
<Setter Property="Background" Value="AliceBlue" />
<Setter Property="Margin" Value="3,0" />
<Setter Property="CornerRadius" Value="3" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="PLC通信:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="1" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="仪表通信:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="服务器通信:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="3" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="用户登录:" />
<TextBlock FontSize="20" Text="Admin" />
</StackPanel>
</Border>
<Border Grid.Column="4" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="记录仪通信:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="5" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="高速记录:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="6" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="数据记录:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
<Border Grid.Column="7" Style="{StaticResource BoardStyle}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="20" Text="系统状态:" />
<TextBlock FontSize="20" Text="正常" />
</StackPanel>
</Border>
</Grid>
</Grid> </Grid>
</Window> </Window>

View File

@@ -2,42 +2,317 @@
x:Class="CapMachine.Wpf.Views.MonitorView" x:Class="CapMachine.Wpf.Views.MonitorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:CapMachine.Shared.Controls;assembly=CapMachine.Shared"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CapMachine.Wpf.Views" xmlns:local="clr-namespace:CapMachine.Wpf.Views"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="1000" d:DesignHeight="1000"
d:DesignWidth="1920" d:DesignWidth="1920"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid> <materialDesign:DrawerHost
<Grid.ColumnDefinitions> x:Name="DrawerHost"
<ColumnDefinition /> BorderBrush="{DynamicResource MaterialDesignDivider}"
<ColumnDefinition Width="220" /> BorderThickness="2"
</Grid.ColumnDefinitions> BottomDrawerBackground="{DynamicResource SecondaryHueLightBrush}"
<Grid.RowDefinitions> BottomDrawerCornerRadius="20 20 0 0">
<RowDefinition Height="140" /> <materialDesign:DrawerHost.Style>
<RowDefinition Height="120" /> <Style BasedOn="{StaticResource {x:Type materialDesign:DrawerHost}}" TargetType="materialDesign:DrawerHost">
<RowDefinition /> <Style.Triggers>
</Grid.RowDefinitions> <DataTrigger Binding="{Binding IsChecked, ElementName=BackgroundToggle}" Value="True">
<StackPanel Grid.Row="0"> <Setter Property="OverlayBackground" Value="{DynamicResource PrimaryHueMidBrush}" />
<TextBlock </DataTrigger>
FontSize="30" </Style.Triggers>
Text="调节器操作栏Hey TyroneChong! A third-party OAuth application (BotSharp) with user:email scopes was recently authorized to access your account. Visit https://github.com/settings/connections/applications/a1009924bfc48dbb7360 for more information. To see this and other security events for your account, visit https://github.com/settings/security-log If you run into problems, please contact support by visiting https://github.com/contact Thanks, The GitHub Team" </Style>
TextWrapping="Wrap" /> </materialDesign:DrawerHost.Style>
<materialDesign:DrawerHost.LeftDrawerContent>
<StackPanel Width="200" Margin="10">
<TextBlock
Margin="4"
HorizontalAlignment="Center"
Text="操作信息" />
<Button
Margin="4"
HorizontalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
CommandParameter="{x:Static Dock.Left}"
Content="操作1"
Style="{StaticResource MaterialDesignFlatButton}" />
<Button
Margin="4"
HorizontalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
Content="操作2"
Style="{StaticResource MaterialDesignFlatButton}" />
<Button
Margin="4"
HorizontalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
Content="操作3"
Style="{StaticResource MaterialDesignFlatButton}" />
</StackPanel>
</materialDesign:DrawerHost.LeftDrawerContent>
<materialDesign:DrawerHost.TopDrawerContent>
<StackPanel
Margin="16"
HorizontalAlignment="Center"
Orientation="Horizontal">
<TextBlock
Margin="4"
VerticalAlignment="Center"
Text="TOP BANANA" />
<Button
Margin="4"
VerticalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
Content="CLOSE ALL"
Style="{StaticResource MaterialDesignFlatButton}" />
<Button
Margin="4"
VerticalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
CommandParameter="{x:Static Dock.Top}"
Content="CLOSE THIS"
Style="{StaticResource MaterialDesignFlatButton}" />
</StackPanel>
</materialDesign:DrawerHost.TopDrawerContent>
<materialDesign:DrawerHost.RightDrawerContent>
<StackPanel Margin="16">
<TextBlock
Margin="4"
HorizontalAlignment="Center"
Text="THE RIGHT STUFF" />
<Button
Margin="4"
HorizontalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
CommandParameter="{x:Static Dock.Right}"
Content="CLOSE THIS"
Style="{StaticResource MaterialDesignFlatButton}" />
<Button
Margin="4"
HorizontalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
Content="CLOSE ALL"
Style="{StaticResource MaterialDesignFlatButton}" />
</StackPanel>
</materialDesign:DrawerHost.RightDrawerContent>
<materialDesign:DrawerHost.BottomDrawerContent>
<StackPanel
Margin="16"
HorizontalAlignment="Center"
Orientation="Horizontal">
<TextBlock
Margin="4"
VerticalAlignment="Center"
Foreground="{DynamicResource SecondaryHueMidForegroundBrush}"
Text="BOTTOM BRACKET" />
<Button
Margin="4"
VerticalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
Content="CLOSE ALL"
Style="{StaticResource MaterialDesignFlatButton}" />
<Button
Margin="4"
VerticalAlignment="Center"
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
CommandParameter="{x:Static Dock.Bottom}"
Content="CLOSE THIS"
Style="{StaticResource MaterialDesignFlatButton}" />
</StackPanel>
</materialDesign:DrawerHost.BottomDrawerContent>
</StackPanel>
<StackPanel Grid.Row="1">
<TextBlock FontSize="30" Text="控制启动区域" />
</StackPanel> <Grid>
<Canvas Grid.Row="2"> <Grid.ColumnDefinitions>
<TextBlock FontSize="30" Text="系统流程图" /> <ColumnDefinition />
</Canvas> <ColumnDefinition Width="280" />
<StackPanel </Grid.ColumnDefinitions>
Grid.Row="0" <Grid.RowDefinitions>
Grid.RowSpan="3" <RowDefinition Height="160" />
Grid.Column="1"> <RowDefinition Height="200" />
<TextBlock FontSize="30" Text="数据监视" /> <RowDefinition />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Controls:Meter Margin="5" />
<Controls:Meter Grid.Column="1" Margin="5" />
<Controls:Meter Grid.Column="2" Margin="3" />
<Controls:Meter Grid.Column="3" Margin="3" />
<Controls:Meter Grid.Column="4" Margin="3" />
<Controls:Meter Grid.Column="5" Margin="3" />
<Controls:Meter Grid.Column="6" Margin="3" />
<Controls:Meter Grid.Column="7" Margin="3" />
<Controls:Meter Grid.Column="8" Margin="3" />
<Controls:Meter Grid.Column="9" Margin="3" />
</Grid>
<Grid Grid.Row="1">
<Grid.Resources>
<Style x:Key="TitelStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="32" />
<Setter Property="Margin" Value="10,0" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style x:Key="btnStyle" TargetType="Button">
<Setter Property="Width" Value="80" />
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border
Grid.RowSpan="3"
Grid.ColumnSpan="6"
Margin="5"
Background="LightGray"
CornerRadius="3" />
<StackPanel Grid.ColumnSpan="3" Orientation="Horizontal">
<TextBlock Style="{StaticResource TitelStyle}" Text="工况名称:" />
<TextBlock
VerticalAlignment="Center"
FontSize="34"
FontWeight="Bold"
Text="耐久试验台测试工况-测试名称" />
</StackPanel>
<StackPanel
Grid.Column="3"
Grid.ColumnSpan="3"
Orientation="Horizontal">
<TextBlock Style="{StaticResource TitelStyle}" Text="当前进度:" />
<ProgressBar
Width="600"
Height="20"
Value="25" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.ColumnSpan="2"
Orientation="Horizontal">
<TextBlock Style="{StaticResource TitelStyle}" Text="总时间:" />
<TextBlock
VerticalAlignment="Center"
FontSize="30"
FontWeight="Bold"
Text="20天5时40分钟30秒" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="2"
Orientation="Horizontal">
<TextBlock Style="{StaticResource TitelStyle}" Text="剩余时间:" />
<TextBlock
VerticalAlignment="Center"
FontSize="30"
FontWeight="Bold"
Text="20天5时40分钟30秒" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="4"
Grid.ColumnSpan="2"
Orientation="Horizontal">
<TextBlock Style="{StaticResource TitelStyle}" Text="当前步骤:" />
<TextBlock
VerticalAlignment="Center"
FontSize="30"
FontWeight="Bold"
Text="124" />
</StackPanel>
<Button
Grid.Row="2"
Grid.Column="0"
Width="200"
Height="45"
Content="开始"
FontSize="30" />
<Button
Grid.Row="2"
Grid.Column="1"
Width="200"
Height="45"
Content="结束"
FontSize="30" />
<Button
Grid.Row="2"
Grid.Column="2"
Width="200"
Height="45"
Command="{x:Static materialDesign:DrawerHost.OpenDrawerCommand}"
CommandParameter="{x:Static Dock.Left}"
Content="{materialDesign:PackIcon Kind=ArrowUp}"
FontSize="30" />
<Button
Grid.Row="2"
Grid.Column="3"
Width="200"
Height="45"
Content="复位"
FontSize="30" />
<Button
Grid.Row="2"
Grid.Column="4"
Width="200"
Height="45"
Content="消音"
FontSize="30" />
<Button
Grid.Row="2"
Grid.Column="5"
Width="200"
Height="45"
Content="开始"
FontSize="30" />
</Grid>
<Border
Grid.Row="2"
Margin="5"
CornerRadius="3">
<Image Source="E:\MyTest\VS2022\CapMachine\CapMachine\CapMachine.Wpf\bin\Debug\net6.0-windows\Assets\Images/参考工艺图.png" Stretch="Fill" />
</Border>
<StackPanel
Grid.Row="0"
Grid.RowSpan="3"
Grid.Column="1">
<ListView ItemsSource="{Binding ListChartRtValue}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="名称" />
<GridViewColumn DisplayMemberBinding="{Binding Value}" Header="值" />
<GridViewColumn DisplayMemberBinding="{Binding Unit}" Header="单位" />
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</Grid>
</materialDesign:DrawerHost>
</StackPanel>
</Grid>
</UserControl> </UserControl>

View File

@@ -3,10 +3,12 @@ using Arction.Wpf.Charting.Annotations;
using Arction.Wpf.Charting.Axes; using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.SeriesXY; using Arction.Wpf.Charting.SeriesXY;
using Arction.Wpf.Charting.Views.ViewXY; using Arction.Wpf.Charting.Views.ViewXY;
using CapMachine.Model;
using CapMachine.Wpf.Models; using CapMachine.Wpf.Models;
using CapMachine.Wpf.PrismEvent; using CapMachine.Wpf.PrismEvent;
using CapMachine.Wpf.Services; using CapMachine.Wpf.Services;
using CapMachine.Wpf.ViewModels; using CapMachine.Wpf.ViewModels;
using ImTools;
using NLog; using NLog;
using Prism.Events; using Prism.Events;
using System.Text; using System.Text;
@@ -28,18 +30,19 @@ namespace CapMachine.Wpf.Views
private IEventAggregator _EventAggregator { get; set; } private IEventAggregator _EventAggregator { get; set; }
public MachineRtDataService MachineRtDataService { get; } public MachineRtDataService MachineRtDataService { get; }
public IFreeSql FreeSql { get; }
/// <summary> /// <summary>
/// 曲线配置 /// 曲线配置
/// </summary> /// </summary>
public ChartConfig ChartConfigInfo { get; set; } public ChartConfig ChartConfigInfo { get; set; } = new ChartConfig();
/// <summary> /// <summary>
/// 实例化函数 /// 实例化函数
/// </summary> /// </summary>
/// <param name="eventAggregator"></param> /// <param name="eventAggregator"></param>
/// <param name="machineRtDataService"></param> /// <param name="machineRtDataService"></param>
public RealTimeChartView(IEventAggregator eventAggregator, MachineRtDataService machineRtDataService) public RealTimeChartView(IEventAggregator eventAggregator, MachineRtDataService machineRtDataService, IFreeSql freeSql)
{ {
InitializeComponent(); InitializeComponent();
@@ -51,18 +54,10 @@ namespace CapMachine.Wpf.Views
//事件服务 //事件服务
_EventAggregator = eventAggregator; _EventAggregator = eventAggregator;
MachineRtDataService = machineRtDataService; MachineRtDataService = machineRtDataService;
FreeSql = freeSql;
_EventAggregator.GetEvent<ChartRtEvent>().Subscribe(GetChartRtEvent); _EventAggregator.GetEvent<ChartRtEvent>().Subscribe(GetChartRtEvent);
_EventAggregator.GetEvent<ChartRtActionEvent>().Subscribe(ReLoadData); _EventAggregator.GetEvent<ChartRtActionEvent>().Subscribe(ReLoadData);
var CreateAxisY = new AxisY();
CreateAxisY.Title.Text = Name;
CreateAxisY.Title.AllowDragging = false;
CreateAxisY.SetRange(0, 100);
CreateAxisY.MajorGrid.Visible = false;
//取消滚轮缩放
CreateAxisY.ZoomingEnabled = false;
ListChartRtSeries.Add(new ChartRtSeries(CreateAxisY, lightningChart1, "室温0"));
} }
/// <summary> /// <summary>
@@ -73,7 +68,17 @@ namespace CapMachine.Wpf.Views
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
private void ReLoadData(ChartActionType type) private void ReLoadData(ChartActionType type)
{ {
throw new NotImplementedException(); //
switch (type)
{
case ChartActionType.ReLoadChart:
var ChartSelectedData = FreeSql.Select<ConfigChartSelect>().Include(a => a.ConfigChartYAxis).ToList();
LoadChartConfigSelect(ChartSelectedData);
break;
default:
break;
}
} }
@@ -106,23 +111,97 @@ namespace CapMachine.Wpf.Views
} }
private void CurTimer2_Elapsed(object? sender, ElapsedEventArgs e) /// <summary>
{ /// 时间序列
/// </summary>
} /// <param name="sender"></param>
/// <param name="e"></param>
private void CurTimer_Elapsed(object? sender, ElapsedEventArgs e) private void CurTimer_Elapsed(object? sender, ElapsedEventArgs e)
{ {
} }
#region ListView配置 #region
#endregion #endregion
#region 线 #region 线
/// <summary>
/// 当前曲线配置信息
/// </summary>
public List<ConfigChartSelect> CurListConfigChartSelect { get; set; }
/// <summary>
/// 加载曲线配置信息
/// </summary>
private void LoadChartConfigSelect(List<ConfigChartSelect> configChartSelects)
{
//从配置入手对比目前的状态,针对配置新增
foreach (var itemConfig in configChartSelects)
{
//曲线增加时
var data = ListChartRtSeries.FindFirst(a => a.Name == itemConfig.Name);
if (data == null)
{
ListChartRtSeries.Add(new ChartRtSeries(lightningChart1, ChartConfigInfo, ListChartRtSeries, itemConfig));
}
else
{
//修改
}
}
////从目前的状态对比配置,针对删除项目
//foreach (var itemSeries in ListChartRtSeries)
//{
// var data = configChartSelects.FindFirst(a => a.Name == itemSeries.Name);
// if (data == null)
// {
// //查找删除的系列的Y轴是否还有其他的配置使用
// var configChartYAxis = configChartSelects.Find(a => a.ConfigChartYAxis.Name == itemSeries.ChartAxisY.Name);
// if (configChartYAxis == null)
// {
// //Y轴没有使用则删除
// itemSeries.DeleteAxisY();
// }
// //未找到,则删除
// ListChartRtSeries.Remove(itemSeries);
// }
// else
// {
// //存在就不需要操作
// }
//}
//从目前的状态对比配置,针对删除项目
for (int i = 0; i < ListChartRtSeries.Count; i++)
{
var data = configChartSelects.FindFirst(a => a.Name == ListChartRtSeries[i].Name);
if (data == null)
{
//查找删除的系列的Y轴是否还有其他的配置使用-先删除Y轴
var configChartYAxis = configChartSelects.Find(a => a.ConfigChartYAxis.Name == ListChartRtSeries[i].ChartAxisY.Name);
if (configChartYAxis == null)
{
//Y轴没有使用则删除
ListChartRtSeries[i].DeleteAxisY();
}
//未找到,则删除 曲线实例删除
ListChartRtSeries[i].DeleteSeries();
}
else
{
//存在就不需要操作
}
}
}
/// <summary> /// <summary>
/// 实时曲线数据集合 /// 实时曲线数据集合
/// </summary> /// </summary>
@@ -502,6 +581,7 @@ namespace CapMachine.Wpf.Views
MainRealTimeChartSeriesCount++; MainRealTimeChartSeriesCount++;
} }
private void DeleteYAxis(string Name) private void DeleteYAxis(string Name)
{ {
lightningChart1.BeginUpdate(); lightningChart1.BeginUpdate();