Merge branch 'master' of http://www.scserverddns.top:13000/sc/DyeingComputer
This commit is contained in:
commit
7649a77323
7 files changed
+344
-13
No files matched your search
@@ -145,6 +145,7 @@
|
||||
<Compile Include="UserClass\StrToInt.cs" />
|
||||
<Compile Include="UserClass\TCPServer.cs" />
|
||||
<Compile Include="ViewModel\CurveDiagramViewModel.cs" />
|
||||
<Compile Include="ViewModel\HistoryRecordsViewModel.cs" />
|
||||
<Compile Include="ViewModel\MainWindowViewModel.cs" />
|
||||
<Compile Include="ViewModel\ViewModelLocator.cs" />
|
||||
<Compile Include="ViewModel\WorkOrderViewModel.cs" />
|
||||
|
||||
@@ -480,4 +480,7 @@
|
||||
<data name="Dyelot" xml:space="preserve">
|
||||
<value>領料單</value>
|
||||
</data>
|
||||
<data name="Bottom" xml:space="preserve">
|
||||
<value>底</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -3,11 +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:local="clr-namespace:DyeingComputer.View"
|
||||
xmlns:viewmodel="clr-namespace:DyeingComputer.ViewModel"
|
||||
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="630" d:DesignWidth="1280" VerticalAlignment="Top">
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:HistoryRecordsViewModel}"
|
||||
d:DesignHeight="630" d:DesignWidth="1280">
|
||||
<Grid>
|
||||
<DataGrid HorizontalAlignment="Left" Height="264" Margin="783,195,0,0" VerticalAlignment="Top" Width="394" d:ItemsSource="{d:SampleData ItemCount=5}"/>
|
||||
|
||||
<lvc:CartesianChart x:Name="OscChart" MinWidth="1280" MinHeight="600" EasingFunction="{x:Null}"
|
||||
Series="{Binding Series}" YAxes="{Binding YAxes}" XAxes="{Binding XAxes}"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using DyeingComputer.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -23,6 +24,7 @@ namespace DyeingComputer.View
|
||||
public HistoryRecordsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = new HistoryRecordsViewModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,311 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using DyeingComputer.Properties;
|
||||
using LiveChartsCore.Defaults;
|
||||
using LiveChartsCore.Kernel.Sketches;
|
||||
using LiveChartsCore.SkiaSharpView.Painting;
|
||||
using LiveChartsCore.SkiaSharpView;
|
||||
using LiveChartsCore;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static DyeingComputer.UserClass.SqliteHelper;
|
||||
|
||||
namespace DyeingComputer.ViewModel
|
||||
{
|
||||
public partial class HistoryRecordsViewModel : ObservableObject
|
||||
{
|
||||
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<DateTimePoint> MTT_values;
|
||||
private readonly ObservableCollection<DateTimePoint> MTL_values;
|
||||
private readonly ObservableCollection<DateTimePoint> MTH_values;
|
||||
private readonly ObservableCollection<DateTimePoint> MST_values;
|
||||
private readonly ObservableCollection<DateTimePoint> MUT_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STTA_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STLA_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STTB_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STLB_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STTC_values;
|
||||
private readonly ObservableCollection<DateTimePoint> STLC_values;
|
||||
|
||||
private SQLiteHelper SQLiteHelpers = null; //定义数据库
|
||||
private readonly string ChartAdress = Environment.CurrentDirectory + "\\DataBase\\Chart.db"; //数据库路径
|
||||
DataTable CDB = new DataTable();
|
||||
private int CDB_Count;//长度
|
||||
|
||||
public HistoryRecordsViewModel()
|
||||
{
|
||||
if (MainWindowViewModel.WorkNumder.ToString() != "----------")
|
||||
{
|
||||
SQLiteHelpers = new SQLiteHelper(ChartAdress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
CDB = SQLiteHelpers.ExecuteDataSet("select * from Chart where DYELOT = '" + MainWindowViewModel.WorkNumder + "'order by Time", null).Tables[0];
|
||||
SQLiteHelpers.Close();
|
||||
CDB_Count = CDB.Rows.Count;
|
||||
|
||||
var MTT_items = new List<DateTimePoint>();
|
||||
var MTL_items = new List<DateTimePoint>();
|
||||
var MTH_items = new List<DateTimePoint>();
|
||||
var MST_items = new List<DateTimePoint>();
|
||||
var MUT_items = new List<DateTimePoint>();
|
||||
var STTA_items = new List<DateTimePoint>();
|
||||
var STLA_items = new List<DateTimePoint>();
|
||||
var STTB_items = new List<DateTimePoint>();
|
||||
var STLB_items = new List<DateTimePoint>();
|
||||
var STTC_items = new List<DateTimePoint>();
|
||||
var STLC_items = new List<DateTimePoint>();
|
||||
for (var i = 0; i < CDB_Count; i++)
|
||||
{
|
||||
DateTime TIME = Convert.ToDateTime(CDB.Rows[i].Field<string>("Time"));
|
||||
MTT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("MTT")));
|
||||
MTL_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("MTL")));
|
||||
MTH_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("MTH")));
|
||||
MST_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("MST")));
|
||||
MUT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("MUT")));
|
||||
if (MainWindowViewModel.SM01 == 1)
|
||||
{
|
||||
STTA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STTA")));
|
||||
STLA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STLA")));
|
||||
}
|
||||
if (MainWindowViewModel.SM02 == 1)
|
||||
{
|
||||
STTB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STTB")));
|
||||
STLB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STLB")));
|
||||
}
|
||||
if (MainWindowViewModel.SM03 == 1)
|
||||
{
|
||||
STTC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STTC")));
|
||||
STLC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field<double>("STLC")));
|
||||
}
|
||||
}
|
||||
|
||||
MTT_values = new ObservableCollection<DateTimePoint>(MTT_items);
|
||||
MTL_values = new ObservableCollection<DateTimePoint>(MTL_items);
|
||||
MTH_values = new ObservableCollection<DateTimePoint>(MTH_items);
|
||||
MST_values = new ObservableCollection<DateTimePoint>(MST_items);
|
||||
MUT_values = new ObservableCollection<DateTimePoint>(MUT_items);
|
||||
if (MainWindowViewModel.SM01 == 1)
|
||||
{
|
||||
STTA_values = new ObservableCollection<DateTimePoint>(STTA_items);
|
||||
STLA_values = new ObservableCollection<DateTimePoint>(STLA_items);
|
||||
}
|
||||
if (MainWindowViewModel.SM02 == 1)
|
||||
{
|
||||
STTB_values = new ObservableCollection<DateTimePoint>(STTB_items);
|
||||
STLB_values = new ObservableCollection<DateTimePoint>(STLB_items);
|
||||
}
|
||||
if (MainWindowViewModel.SM03 == 1)
|
||||
{
|
||||
STTC_values = new ObservableCollection<DateTimePoint>(STTC_items);
|
||||
STLC_values = new ObservableCollection<DateTimePoint>(STLC_items);
|
||||
}
|
||||
Series = new ISeries[]
|
||||
{
|
||||
new LineSeries<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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<DateTimePoint>
|
||||
{
|
||||
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 液位
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -483,27 +483,32 @@ namespace DyeingComputer.ViewModel
|
||||
double T = Selet_dtm("1010"); //实际温度
|
||||
if (THL_mode == 0) //保温
|
||||
{
|
||||
if (STEP_TIME == 0)
|
||||
{
|
||||
STEP_finish = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
STEP_TIME--;
|
||||
}
|
||||
TO = pid.PID_iterate(STEP_P1, T, ts);
|
||||
TEMP_co = STEP_P1;
|
||||
if (TO < 0) TO = 0;
|
||||
|
||||
TIME_H = STEP_TIME / 3600;
|
||||
TIME_M = (STEP_TIME - TIME_H * 3600) / 60;
|
||||
TIME_S = STEP_TIME - TIME_H * 3600 - TIME_M * 60;
|
||||
if (string.IsNullOrEmpty(Name_err.ToString())) Status_Str = Resources.Heat_insulating + ":" + Resources.Time + string.Format(" {0:D2}", TIME_H) + ":" + string.Format(" {0:D2}", TIME_M) + ":" + string.Format(" {0:D2}", TIME_S);
|
||||
if (STEP_TIME == 0)
|
||||
{
|
||||
STEP_finish = true;
|
||||
Updata_dtm("1004", 0);
|
||||
Updata_dtd("3009", false);
|
||||
Updata_dtd("3010", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
STEP_TIME--;
|
||||
}
|
||||
}
|
||||
else if (THL_mode == 1)//升温
|
||||
{
|
||||
if (STEP_P1 > TEMP_co) TEMP_co = TEMP_co + (STEP_P2 / 600);
|
||||
TO = pid.PID_iterate(TEMP_co, T, ts);
|
||||
if (TO < 0) TO = 0;
|
||||
if ((TEMP_co < T) || (T - TEMP_co > 3)) TO = 0;
|
||||
if (STEP_P1 < T)
|
||||
{
|
||||
THL_mode = 0;
|
||||
|
||||
@@ -33,5 +33,12 @@ namespace DyeingComputer.ViewModel
|
||||
return ServiceLocator.Current.GetInstance<CurveDiagramViewModel>();
|
||||
}
|
||||
}
|
||||
public HistoryRecordsViewModel History
|
||||
{
|
||||
get
|
||||
{
|
||||
return ServiceLocator.Current.GetInstance<HistoryRecordsViewModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user