diff --git a/App.xaml b/App.xaml index 6a1a9a5..77e5345 100644 --- a/App.xaml +++ b/App.xaml @@ -4,13 +4,13 @@ xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_" StartupUri="MainWindow.xaml"> - - - - - - - - - + + + + + + + + + diff --git a/App.xaml.cs b/App.xaml.cs index bc6b951..ab7e58d 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -1,4 +1,7 @@ -using System; +using LiveChartsCore; +using LiveChartsCore.SkiaSharpView; +using SkiaSharp; +using System; using System.Collections.Generic; using System.Configuration; using System.Data; @@ -9,6 +12,7 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows; +using System.Windows.Markup; namespace SunlightCentralizedControlManagement_SCCM_ { @@ -47,6 +51,22 @@ namespace SunlightCentralizedControlManagement_SCCM_ return Assembly.Load(assemblyRawBytes); } } + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; + this.DispatcherUnhandledException += App_DispatcherUnhandledException; + + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('温'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('度'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('水'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('位'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('主'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('附'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('料'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('药'))); + LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('缸'))); + } private UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini"); public App() diff --git a/MainWindow.xaml b/MainWindow.xaml index 5c347d8..2db6f39 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -117,180 +117,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 7c43825..25fc16d 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -501,6 +501,15 @@ namespace SunlightCentralizedControlManagement_SCCM_.Properties { } } + /// + /// 查找类似 Date 的本地化字符串。 + /// + public static string Date { + get { + return ResourceManager.GetString("Date", resourceCulture); + } + } + /// /// 查找类似 Delete 的本地化字符串。 /// @@ -663,6 +672,15 @@ namespace SunlightCentralizedControlManagement_SCCM_.Properties { } } + /// + /// 查找类似 EndDate 的本地化字符串。 + /// + public static string Enddate { + get { + return ResourceManager.GetString("Enddate", resourceCulture); + } + } + /// /// 查找类似 EndTime 的本地化字符串。 /// @@ -2013,6 +2031,15 @@ namespace SunlightCentralizedControlManagement_SCCM_.Properties { } } + /// + /// 查找类似 StartDate 的本地化字符串。 + /// + public static string Startdate { + get { + return ResourceManager.GetString("Startdate", resourceCulture); + } + } + /// /// 查找类似 StartTime 的本地化字符串。 /// diff --git a/Properties/Resources.en-US.resx b/Properties/Resources.en-US.resx index 2c245bf..599ae59 100644 --- a/Properties/Resources.en-US.resx +++ b/Properties/Resources.en-US.resx @@ -897,4 +897,13 @@ Conveyor + + Date + + + Start Date + + + End Date + \ No newline at end of file diff --git a/Properties/Resources.resx b/Properties/Resources.resx index b573d15..6ea7c44 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -897,4 +897,13 @@ Conveyor + + Date + + + StartDate + + + EndDate + \ No newline at end of file diff --git a/Properties/Resources.zh-CN.resx b/Properties/Resources.zh-CN.resx index e8cb61d..c866da8 100644 --- a/Properties/Resources.zh-CN.resx +++ b/Properties/Resources.zh-CN.resx @@ -897,4 +897,13 @@ 输送 + + 日期 + + + 开始日期 + + + 结束日期 + \ No newline at end of file diff --git a/Properties/Resources.zh-TW.resx b/Properties/Resources.zh-TW.resx index 61387dd..fc6354e 100644 --- a/Properties/Resources.zh-TW.resx +++ b/Properties/Resources.zh-TW.resx @@ -897,4 +897,13 @@ 單據 + + 日期 + + + 開始日期 + + + 結束日期 + \ No newline at end of file diff --git a/SunlightCentralizedControlManagement_SCCM_.csproj b/SunlightCentralizedControlManagement_SCCM_.csproj index d6dcb95..2dfb8e4 100644 --- a/SunlightCentralizedControlManagement_SCCM_.csproj +++ b/SunlightCentralizedControlManagement_SCCM_.csproj @@ -95,6 +95,7 @@ + @@ -236,7 +237,10 @@ 8.3.2 - + + 2.0.0-rc4.5 + + 2.0.0-rc4.5 diff --git a/View/CurveView.xaml b/View/CurveView.xaml index 90667c9..d30554c 100644 --- a/View/CurveView.xaml +++ b/View/CurveView.xaml @@ -3,10 +3,13 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF" + xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel" xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View" - xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties" + xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" mc:Ignorable="d" + d:DataContext="{d:DesignInstance Type=viewmodel:CurveDiagramViewModel}" d:DesignHeight="900" d:DesignWidth="1800"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/CurveView.xaml.cs b/View/CurveView.xaml.cs index f876be4..35f44fb 100644 --- a/View/CurveView.xaml.cs +++ b/View/CurveView.xaml.cs @@ -24,6 +24,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View public CurveView() { InitializeComponent(); + DataContext = new CurveDiagramViewModel(); Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView; } @@ -32,5 +33,15 @@ namespace SunlightCentralizedControlManagement_SCCM_.View { } + + private void Resume_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + + } + + private void Paused_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + + } } } diff --git a/View/MonitorView.xaml b/View/MonitorView.xaml index d91050d..bb06fc9 100644 --- a/View/MonitorView.xaml +++ b/View/MonitorView.xaml @@ -3,9 +3,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View" - xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View" + xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" mc:Ignorable="d" d:DesignHeight="1000" d:DesignWidth="1900"> @@ -132,7 +132,6 @@ - diff --git a/ViewModel/CurveDiagramViewModel.cs b/ViewModel/CurveDiagramViewModel.cs new file mode 100644 index 0000000..5cf6f4e --- /dev/null +++ b/ViewModel/CurveDiagramViewModel.cs @@ -0,0 +1,320 @@ +using LiveChartsCore.SkiaSharpView; +using LiveChartsCore; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommunityToolkit.Mvvm.ComponentModel; +using LiveChartsCore.Kernel.Sketches; +using LiveChartsCore.SkiaSharpView.Painting; +using ScottPlot.Colormaps; +using System.Drawing; +using System.Windows.Media.TextFormatting; +using System.Xml.Linq; +using SkiaSharp; +using LiveChartsCore.Defaults; +using static System.Net.WebRequestMethods; +using System.Collections.ObjectModel; +using DyeingComputer.Properties; +using LiveChartsCore.Measure; +using LiveChartsCore.Motion; +using SunlightCentralizedControlManagement_SCCM_.Properties; +using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper; +using TouchSocket.Core; + +namespace SunlightCentralizedControlManagement_SCCM_.ViewModel +{ + public partial class CurveDiagramViewModel : ObservableObject//ViewModelBase + { + public ISeries[] Series { get; set; } + //x轴时间格式 + public Axis[] XAxes { get; set; } = + { + new DateTimeAxis(TimeSpan.FromSeconds(5) , date => date.ToString("yyyy-MM-dd HH:mm")) + { + CrosshairLabelsBackground = SKColors.DarkGray.AsLvcColor(), + CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkSlateBlue, 1), + CrosshairPaint = new SolidColorPaint(SKColors.DarkSlateGray, 1), + }, + }; + //颜色 + private static readonly SKColor s_blue = new SKColor(25, 118, 210); + private static readonly SKColor s_blue_0 = new SKColor(25, 18, 210); + private static readonly SKColor s_blue_1 = new SKColor(25, 118, 170); + private static readonly SKColor s_blue_2 = new SKColor(25, 118, 130); + private static readonly SKColor s_blue_3 = new SKColor(25, 118, 90); + private static readonly SKColor s_blue_4 = new SKColor(25, 118, 50); + private static readonly SKColor s_red = new SKColor(229, 57, 53); + private static readonly SKColor s_red_1 = new SKColor(189, 57, 53); + private static readonly SKColor s_red_2 = new SKColor(149, 57, 53); + private static readonly SKColor s_red_3 = new SKColor(109, 57, 53); + private static readonly SKColor s_yellow = new SKColor(198, 167, 0); + public ICartesianAxis[] YAxes { get; set; } ={ + new Axis //y在此轴上缩放 + { + MinLimit =0, + MaxLimit =150, + Name = Properties.Resources.Temperature +" ( °C )", + NameTextSize = 24, + NamePaint = new SolidColorPaint(s_blue), + NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), + Padding = new LiveChartsCore.Drawing.Padding(0, 0, 20, 0), + TextSize = 16, + LabelsPaint = new SolidColorPaint(s_blue), + TicksPaint = new SolidColorPaint(s_blue), + SubticksPaint = new SolidColorPaint(s_blue), + DrawTicksPath = true, + CrosshairSnapEnabled = true, + Position = LiveChartsCore.Measure.AxisPosition.Start + },//温度轴 + new Axis // the "hundreds" series will be scaled on this axis + { + MinLimit =0, + Name = Properties.Resources.WaterLevel +" ( L )", + NameTextSize = 24, + NamePaint = new SolidColorPaint(s_red), + NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), + Padding = new LiveChartsCore.Drawing.Padding(20, 0, 0, 0), + TextSize = 16, + LabelsPaint = new SolidColorPaint(s_red), + TicksPaint = new SolidColorPaint(s_red), + SubticksPaint = new SolidColorPaint(s_red), + DrawTicksPath = true, + CrosshairSnapEnabled = true, + Position = LiveChartsCore.Measure.AxisPosition.End + }, //液位轴 + new Axis // + { + MinLimit =0, + MaxLimit =14, + Name = "PH ( pH )", + NameTextSize = 16, + NamePaint = new SolidColorPaint(s_yellow), + NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), + Padding = new LiveChartsCore.Drawing.Padding(20, 0, 0, 0), + TextSize = 16, + LabelsPaint = new SolidColorPaint(s_yellow), + TicksPaint = new SolidColorPaint(s_yellow), + SubticksPaint = new SolidColorPaint(s_yellow), + DrawTicksPath = true, + CrosshairSnapEnabled = true, + Position = LiveChartsCore.Measure.AxisPosition.End + }, //PH轴 + + //new AnimatableAxisBounds + }; + + private readonly Random _r = new Random(); + private readonly ObservableCollection MTT_values; + private readonly ObservableCollection MTL_values; + private readonly ObservableCollection MTH_values; + private readonly ObservableCollection MST_values; + private readonly ObservableCollection MUT_values; + private readonly ObservableCollection STTA_values; + private readonly ObservableCollection STLA_values; + private readonly ObservableCollection STTB_values; + private readonly ObservableCollection STLB_values; + private readonly ObservableCollection STTC_values; + private readonly ObservableCollection STLC_values; + + private SQLiteHelper SQLiteHelpers = null; //定义数据库 + private readonly string ChartAdress = Environment.CurrentDirectory + "\\DataBase\\Chart.db"; //数据库路径 + DataTable CDB = new DataTable(); + private int CDB_Count;//长度 + + public CurveDiagramViewModel() + { + if (!string.IsNullOrEmpty(MainWindowViewModel.SYS_WorkNumder)) + { + SQLiteHelpers = new SQLiteHelper(ChartAdress); //数据库连接路径 + SQLiteHelpers.Open(); //打开数据库 + CDB = SQLiteHelpers.ExecuteDataSet("select * from Chart where DYELOT = '" + MainWindowViewModel.SYS_WorkNumder + "'order by Time", null).Tables[0]; + SQLiteHelpers.Close(); + CDB_Count = CDB.Rows.Count; + + var MTT_items = new List(); + var MTL_items = new List(); + var MTH_items = new List(); + var MST_items = new List(); + var MUT_items = new List(); + var STTA_items = new List(); + var STLA_items = new List(); + var STTB_items = new List(); + var STLB_items = new List(); + var STTC_items = new List(); + var STLC_items = new List(); + for (var i = 0; i < CDB_Count; i++) + { + DateTime TIME = Convert.ToDateTime(CDB.Rows[i].Field("Time")); + MTT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTT"))); + MTL_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTL"))); + MTH_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTH"))); + MST_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MST"))); + MUT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MUT"))); + if (MainWindowViewModel.SYS_AT1 == 1) + { + STTA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTA"))); + STLA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLA"))); + } + if (MainWindowViewModel.SYS_AT2 == 1) + { + STTB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTB"))); + STLB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLB"))); + } + if (MainWindowViewModel.SYS_AT3 == 1) + { + STTC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTC"))); + STLC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLC"))); + } + } + + MTT_values = new ObservableCollection(MTT_items); + MTL_values = new ObservableCollection(MTL_items); + MTH_values = new ObservableCollection(MTH_items); + MST_values = new ObservableCollection(MST_items); + MUT_values = new ObservableCollection(MUT_items); + if (MainWindowViewModel.SYS_AT1 == 1) + { + STTA_values = new ObservableCollection(STTA_items); + STLA_values = new ObservableCollection(STLA_items); + } + if (MainWindowViewModel.SYS_AT2 == 1) + { + STTB_values = new ObservableCollection(STTB_items); + STLB_values = new ObservableCollection(STLB_items); + } + if (MainWindowViewModel.SYS_AT3 == 1) + { + STTC_values = new ObservableCollection(STTC_items); + STLC_values = new ObservableCollection(STLC_items); + } + Series = new ISeries[] + { + new LineSeries + { + Name = Properties.Resources.MasterCylinder +"PH", + Values = MTH_values, + Stroke = new SolidColorPaint(s_yellow, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_yellow, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 2, + }, //PH + new LineSeries + { + Name = Resources.Target + Resources.Temperature, + Values = MST_values, + Stroke = new SolidColorPaint(s_blue_0, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue_0, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //目标温度 + new LineSeries + { + Name = Properties.Resources.Temperature +"1("+Properties.Resources.MasterCylinder+")", + Values = MTT_values, + Stroke = new SolidColorPaint(s_blue, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //主缸 + new LineSeries + { + Name = Properties.Resources.Temperature +"2("+Properties.Resources.MasterCylinder+Properties.Resources.Bottom+")", + Values = MUT_values, + Stroke = new SolidColorPaint(s_blue_4, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue_4, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //缸底 + new LineSeries + { + Name = Properties.Resources.Temperature +"3("+Resources.Medicine + Resources.Tank +"1)", + Values = STTA_values, + Stroke = new SolidColorPaint(s_blue_1, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue_1, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //附缸1 + new LineSeries + { + Name = Properties.Resources.Temperature +"4("+Resources.Medicine + Resources.Tank +"2)", + Values = STTB_values, + Stroke = new SolidColorPaint(s_blue_2, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue_2, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //附缸2 + new LineSeries + { + Name = Properties.Resources.Temperature +"5("+Resources.Medicine + Resources.Tank +"3)", + Values = STTC_values, + Stroke = new SolidColorPaint(s_blue_3, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_blue_3, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 0, + }, //附缸3 + new LineSeries + { + Name = Properties.Resources.WaterLevel +"("+Properties.Resources.MasterCylinder+")", + Values = MTL_values, + Stroke = new SolidColorPaint(s_red, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_red, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 1, + }, //主缸液位 + new LineSeries + { + Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"1)", + Values = STLA_values, + Stroke = new SolidColorPaint(s_red_1, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_red_1, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 1, + }, //附缸1液位 + new LineSeries + { + Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"2)", + Values = STLB_values, + Stroke = new SolidColorPaint(s_red_2, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_red_2, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 1, + }, //附缸2液位 + new LineSeries + { + Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"3)", + Values = STLC_values, + Stroke = new SolidColorPaint(s_red_3, 2), + GeometrySize = 0, + GeometryStroke = new SolidColorPaint(s_red_3, 2), + Fill = null, + LineSmoothness = 0, + ScalesYAt = 1, + }, //附缸3 液位 + }; + } + } + } +} diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index 25c491a..0a63c61 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -77,7 +77,6 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel { } - private SQLiteHelper SQLiteHelpers = null; //定义数据库 private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径 public static DataTable Machines = new DataTable(); //设备表缓存 @@ -92,8 +91,10 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel CountDown(); } - - + public static string SYS_WorkNumder = "738891980000"; //工单号 + public static int SYS_AT1; //附缸1-3 + public static int SYS_AT2; + public static int SYS_AT3; diff --git a/ViewModel/ViewModelLocator.cs b/ViewModel/ViewModelLocator.cs index 802b519..169bf3d 100644 --- a/ViewModel/ViewModelLocator.cs +++ b/ViewModel/ViewModelLocator.cs @@ -23,5 +23,13 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel return ServiceLocator.Current.GetInstance(); } } + public CurveDiagramViewModel Curve + { + get + { + return ServiceLocator.Current.GetInstance(); + } + } + } }