Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb2828aab0 | ||
|
|
33b970eff9 | ||
|
|
5caf92be59 | ||
|
|
437b8957ce | ||
|
|
a68fb9ae01 | ||
|
|
68b98ac7e4 | ||
|
|
2329ac9abc | ||
|
|
b062420be1 | ||
|
|
a248c41163 | ||
|
|
2b676adbba | ||
|
|
00a5cd3ec7 | ||
|
|
abfcf6e36a | ||
|
|
1df7212414 | ||
|
|
751a2b092f | ||
|
|
8a5e0ecfd9 | ||
|
|
ebcd5b7182 | ||
|
|
7f905617fa | ||
|
|
54d8cc7266 | ||
|
|
33e83fa5d6 | ||
|
|
927c38853d | ||
|
|
552d45485d | ||
|
|
17a5d6b718 | ||
|
|
34d3e6c292 | ||
|
|
5b60ea4765 | ||
|
|
b2817d1b01 | ||
|
|
7403914ba5 | ||
|
|
878d49c4a0 | ||
|
|
e457b0ab21 | ||
|
|
b0ce5bc8f9 | ||
|
|
d3375fd6ac | ||
|
|
7671f0ef08 | ||
|
|
25e6ae1563 | ||
|
|
e020333b82 | ||
|
|
8914ea3660 | ||
|
|
c1da97611d | ||
|
|
daaa2b5514 | ||
|
|
2c40ac5be0 | ||
|
|
21500886f0 | ||
|
|
c5e1978f6a | ||
|
|
9a374a0a87 | ||
|
|
f9949c5ec5 | ||
|
|
91212f03d2 | ||
|
|
31a84a640d | ||
|
|
9bdf575674 | ||
|
|
8adea70012 | ||
|
|
3f9730507e | ||
|
|
7fad98f58b | ||
|
|
61dbaa3c33 | ||
|
|
5e063092cf | ||
|
|
574f468a5e | ||
|
|
e9f83ea182 | ||
|
|
ab5dfa85e1 | ||
|
|
8512e720dd | ||
|
|
81ab1623ba | ||
|
|
6cbed8fa62 | ||
|
|
60baf3554a | ||
|
|
1ef9b8517c | ||
|
|
d5042d92ff | ||
|
|
4a1c5b7eac | ||
|
|
896c2bdf9c | ||
|
|
99217977ec | ||
|
|
8d0b37f0e2 | ||
|
|
898cde7329 | ||
|
|
4cf411dc10 | ||
|
|
3c5e8cd129 | ||
|
|
818d0e5a3a | ||
|
|
e2b48ecc84 | ||
|
|
2c0f06a83a | ||
|
|
a1b128757d | ||
|
|
7c744f72f6 | ||
|
|
7177673a4c | ||
|
|
a0ac4e094c | ||
|
|
d85d458edb | ||
|
|
4f9195c552 | ||
|
|
ec6bab3b56 | ||
|
|
11b9b99d3e | ||
|
|
13c64092a0 | ||
|
|
48eb8a0ad1 | ||
|
|
9c10e1c2cc | ||
|
|
baa921ea20 | ||
|
|
0c5666ddd4 | ||
|
|
157666d836 | ||
|
|
ab655a94e0 | ||
|
|
4af9042d5f | ||
|
|
fc799a2510 | ||
|
|
22c061db9e | ||
|
|
737c5e7e71 | ||
|
|
6120fe283a | ||
|
|
cedd2c189b | ||
|
|
379db4b738 | ||
|
|
908a7ce56e | ||
|
|
243cb6126b | ||
|
|
963f514bac | ||
|
|
2120a1e1ea | ||
|
|
5b8aa656e4 | ||
|
|
0311582679 | ||
|
|
951765de9a | ||
|
|
70b04e0892 | ||
|
|
151251586c | ||
|
|
8ade983214 | ||
|
|
e3370c0b63 | ||
|
|
8091b3dcc4 | ||
|
|
ff4ab5b349 | ||
|
|
206204711b | ||
|
|
aeaba92942 | ||
|
|
6e690b78b7 | ||
|
|
4d6619944c | ||
|
|
acdfc68def | ||
|
|
b307aa433c | ||
|
|
c235d91a8b | ||
|
|
72d513fdfe | ||
|
|
7ba38facc2 | ||
|
|
d3583311e2 | ||
|
|
8b7593dceb | ||
|
|
3ba1a7e6c4 | ||
|
|
4449530bb7 | ||
|
|
6bfef306be | ||
|
|
e4e7853624 | ||
|
|
7416bc332b | ||
|
|
435a54a61a | ||
|
|
54d6ddd918 | ||
|
|
2659b01329 | ||
|
|
2866dddbd9 | ||
|
|
1fff37ad63 | ||
|
|
2e6d18b719 | ||
|
|
bfba0f15d3 | ||
|
|
539d2763ee | ||
|
|
ce84169794 | ||
|
|
1d2c749642 | ||
|
|
d13edd4070 | ||
|
|
52b09f4a8f | ||
|
|
c32e34df73 | ||
|
|
dc4161337b | ||
|
|
ce603a9afd | ||
|
|
a1c16815d1 | ||
|
|
3d501babf9 | ||
|
|
f29817be05 | ||
|
|
1d2d97bd65 | ||
|
|
b14643bc31 | ||
|
|
9a0a60793e | ||
|
|
6556e469cd | ||
|
|
9ce3d975b4 | ||
|
|
76c0f41fde | ||
|
|
993d43951e | ||
|
|
b08e53ee04 | ||
|
|
cd74fb8103 | ||
|
|
4ac748f002 | ||
|
|
cdc7b896d9 | ||
|
|
7e61d7bd9d | ||
|
|
ac86200576 | ||
|
|
c9d576bf99 | ||
|
|
9bcffdc6df | ||
|
|
c30a2e7a01 | ||
|
|
8d5631a651 | ||
|
|
ab324d65bb | ||
|
|
3d64a4474d | ||
|
|
6d18349fc7 | ||
|
|
d047a4f23e | ||
|
|
91584c0d8c | ||
|
|
7d7ed08f96 | ||
|
|
ea3073eae0 | ||
|
|
586e5cb69e | ||
|
|
5b09426c59 | ||
|
|
37435ca60c | ||
|
|
bb736e2c0d | ||
|
|
85ec4fdbc4 | ||
|
|
a5e46708b6 | ||
|
|
60e8a5699b | ||
|
|
dd58e05c35 | ||
|
|
3c4761aed4 | ||
|
|
707850a551 | ||
|
|
7242195f45 | ||
|
|
4442397069 | ||
|
|
ce2a80c50b | ||
|
|
734649fa57 | ||
|
|
3c3b608bfb | ||
|
|
6b82f3b3ce | ||
|
|
6eae137bd1 | ||
|
|
74225cea5f | ||
|
|
54addaff17 | ||
|
|
35ca13ded3 | ||
|
|
5f7c6bee47 | ||
|
|
0345229416 | ||
|
|
de843f4e90 | ||
|
|
98afe7a263 | ||
|
|
76178b40b4 | ||
|
|
115449a736 | ||
|
|
7fa6f2c53b | ||
|
|
14ae9d34a7 | ||
|
|
b7df741f08 | ||
|
|
79833989b5 | ||
|
|
db1ac43edb | ||
|
|
bfc15cca8b | ||
|
|
224a97cba4 | ||
|
|
51510fd83a | ||
|
|
b3d2884ffa | ||
|
|
30de321875 | ||
|
|
4d2a10a870 | ||
|
|
cfc64511f8 | ||
|
|
4d7fccc878 | ||
|
|
786c770914 | ||
|
|
49a3da7967 | ||
|
|
26c41a0c10 | ||
|
|
7f0b030f13 | ||
|
|
3b6ab69a71 | ||
|
|
195389db98 | ||
|
|
a9f505e960 | ||
|
|
f253d11902 | ||
|
|
41350cbd12 | ||
|
|
122f548e9c | ||
|
|
0a80ae9db4 | ||
|
|
144cb73d26 | ||
|
|
2cf6b0ab6a | ||
|
|
23e461b85d | ||
|
|
24c4daf4f7 | ||
|
|
7cc54d8e33 | ||
|
|
18d6aa3e87 | ||
|
|
feaaa47e86 | ||
|
|
e11373d5f8 | ||
|
|
fd669617d8 | ||
|
|
289a9fbf81 | ||
|
|
1fb7986213 | ||
|
|
982b9a8f28 | ||
|
|
5f73676b92 | ||
|
|
2d4cba6cc4 | ||
|
|
0297cd7136 | ||
|
|
35852e08a9 | ||
|
|
7fbc98f832 | ||
|
|
65d0504c68 | ||
|
|
17ae98aa02 | ||
|
|
9001efee9c | ||
|
|
fbf01a04fe | ||
|
|
acd37a8245 | ||
|
|
c375c05d6b | ||
|
|
ea95535612 | ||
|
|
33a92747ed | ||
|
|
ed94ddb180 | ||
|
|
63ee0e68af | ||
|
|
f9ba766711 | ||
|
|
e477d6de59 | ||
|
|
a2bb445e1d | ||
|
|
797d7e0123 | ||
|
|
4ea3785f05 | ||
|
|
c568c45c01 | ||
|
|
ba202dcd61 | ||
|
|
e2b112b049 | ||
|
|
3f2fb3d2e8 | ||
|
|
ebf24d5895 | ||
|
|
4ec1505bc5 | ||
|
|
8f6f5edf14 | ||
|
|
1eb54327db | ||
|
|
a43f871946 | ||
|
|
6188bfb6ef | ||
|
|
083278d7bf | ||
|
|
5e64b1a3cb | ||
|
|
11a064dd23 | ||
|
|
81f05cec06 | ||
|
|
4a270b87b6 | ||
|
|
cd5a2f0541 | ||
|
|
fa8777f9a7 | ||
|
|
0cf31e6a3c | ||
|
|
32b0050b4f | ||
|
|
d33ba004bb | ||
|
|
6e6809b020 | ||
|
|
c42fe16a7e | ||
|
|
f4127b1510 | ||
|
|
89c7868ad0 | ||
|
|
280df807d1 | ||
|
|
0b6e394a61 | ||
|
|
20edc08763 | ||
|
|
78b5ebafdb | ||
|
|
194dc40515 | ||
|
|
e2267d7e38 | ||
|
|
09cb79fb14 | ||
|
|
1cccf3efc4 | ||
|
|
b373c452c0 | ||
|
|
b6f065a19d | ||
|
|
c20c095bf8 | ||
|
|
e2c76d7780 | ||
|
|
e911eb2e0e | ||
|
|
967734d644 | ||
|
|
7d93249975 | ||
|
|
80e5fece0e | ||
|
|
66cccfddcd | ||
|
|
64c2403a32 | ||
|
|
f0b4966f2a | ||
|
|
63aeca284e | ||
|
|
69e9c1c501 | ||
|
|
bb1c3e01e5 | ||
|
|
fb4c0cb9b8 | ||
|
|
80717953c5 | ||
|
|
04f0798c17 | ||
|
|
d4334451f1 | ||
|
|
4d2506ca7f | ||
|
|
86e2e78fb6 | ||
|
|
051c015b05 | ||
|
|
23725f7f37 | ||
|
|
82360f9ac2 | ||
|
|
653b359796 | ||
|
|
65fc78f092 | ||
|
|
b75711171b | ||
|
|
d8dad60041 | ||
|
|
e633cee220 | ||
|
|
e56ca33ecb | ||
|
|
7e54fba210 | ||
|
|
8210f4aeda | ||
|
|
6da9aa6475 | ||
|
|
e91b536ba4 | ||
|
|
d374f2f83e | ||
|
|
8b64370bb3 | ||
|
|
dfd8f31419 | ||
|
|
0c6bc3105f | ||
|
|
baf7a060ab | ||
|
|
f2eb7902d0 | ||
|
|
58454b38a7 | ||
|
|
e940649023 | ||
|
|
c0e3070294 | ||
|
|
b278a10f9f | ||
|
|
6e00adc64b | ||
|
|
523faf4392 | ||
|
|
95450d8e52 | ||
|
|
2c2867ae69 | ||
|
|
e67b5729de | ||
|
|
4d101da1ff | ||
|
|
d32b74b31e | ||
|
|
2263777da5 | ||
|
|
28bb2c9603 | ||
|
|
62b448ccee | ||
|
|
38f85dcfea | ||
|
|
1e75144916 | ||
|
|
d59a828ce8 | ||
|
|
ab52f71bd5 | ||
|
|
0e56ac4198 | ||
|
|
dce1c2b478 | ||
|
|
5484736fa1 | ||
|
|
ff1bf70124 | ||
|
|
014f0b0627 | ||
|
|
4116d04d5c | ||
|
|
6f276ecbce | ||
|
|
76c2fa65a5 | ||
|
|
6f5365813d | ||
|
|
bcf69999d9 | ||
|
|
7237f7a696 | ||
|
|
f1b310c10d | ||
|
|
4075649b03 | ||
|
|
68c6401d9f | ||
|
|
67e8af1919 | ||
|
|
a1c1f182fe | ||
|
|
2473f7b77d | ||
|
|
b8e9f17d2b | ||
|
|
d701d27bc6 | ||
|
|
649b595936 | ||
|
|
4e88c69cce | ||
|
|
3a3e2abd34 | ||
|
|
3624aef0d5 | ||
|
|
b1065c0396 | ||
|
|
8879c3f4dd | ||
|
|
11f0ffd0ea | ||
|
|
1872aa0267 | ||
|
|
a8c7fd9272 | ||
|
|
6750031e36 | ||
|
|
ac3d12b899 | ||
|
|
c1b32eae92 | ||
|
|
c7a29d81d2 | ||
|
|
93c54dbf6c | ||
|
|
c80895c4ff | ||
|
|
105341ada6 | ||
|
|
5bdc3f7087 | ||
|
|
2b3bd7fad9 | ||
|
|
c70c5ce1fb | ||
|
|
5a89929c1d | ||
|
|
b9f6e9f108 | ||
|
|
0e8af339ae | ||
|
|
418f9203de | ||
|
|
8a0c2a6bd1 | ||
|
|
959f3fd243 | ||
|
|
593fc93f4a | ||
|
|
605976c73a | ||
|
|
67522f0449 | ||
|
|
6fbee6ed43 | ||
|
|
e36a728a2a | ||
|
|
2f6d0cdd5a | ||
|
|
33fca54030 | ||
|
|
256978d87c | ||
|
|
0bdcb138cd | ||
|
|
2192be7434 | ||
|
|
582a941b51 | ||
|
|
4ff0f9dc54 | ||
|
|
97cf51ecf2 | ||
|
|
bb7c87b36c | ||
|
|
a1ec197573 | ||
|
|
f09554240c | ||
|
|
c7c8a7195a | ||
|
|
c6513fb20c | ||
|
|
45101f65d1 | ||
|
|
85b3f8a7bc | ||
|
|
7995aed1a5 | ||
|
|
1a0b10015c | ||
|
|
b52be456a2 | ||
|
|
5741892b2c | ||
|
|
0867211569 | ||
|
|
387f42577b | ||
|
|
b188854ddd | ||
|
|
c6b48d3054 | ||
|
|
0fe10d4cce | ||
|
|
915aedd87b | ||
|
|
2b132c2e1f | ||
|
|
a1ca8a3665 | ||
|
|
b71a5da10a | ||
|
|
549700ee2d | ||
|
|
c025aeb24b | ||
|
|
f226938084 | ||
|
|
ca725f1b57 | ||
|
|
b15d8a1eab | ||
|
|
d8c898dd57 | ||
|
|
d551ed4cd2 | ||
|
|
1386244ff1 | ||
|
|
63efc5e436 |
No files matched your search
@@ -2,6 +2,7 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_"
|
||||
Startup="Application_Startup"
|
||||
StartupUri="MainWindow.xaml">
|
||||
<Application.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using LiveChartsCore;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using LiveChartsCore;
|
||||
using LiveChartsCore.SkiaSharpView;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
@@ -21,6 +22,10 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
/// </summary>
|
||||
public partial class App : Application
|
||||
{
|
||||
/// <summary>
|
||||
///公共变量来自Login的用户名
|
||||
/// </summary>
|
||||
public static string USER_Purview { get; set; }
|
||||
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
|
||||
{
|
||||
Assembly executingAssembly = Assembly.GetExecutingAssembly();
|
||||
@@ -84,7 +89,7 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
mutex = new System.Threading.Mutex(true, "SCCM", out ret);//程序只允许启动一次
|
||||
if (!ret)
|
||||
{
|
||||
// LogGing.LogGingDATA("800_The program has been launched");
|
||||
LogGing.LogGingDATA("800_The program has been launched");
|
||||
MessageBox.Show("The program has been launched");
|
||||
Environment.Exit(0);
|
||||
}
|
||||
@@ -118,16 +123,16 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
{
|
||||
MessageBox.Show("发生了一个无法处理的错误!请联系SUNLIGHT处理!"
|
||||
+ "(1)错误" + Environment.NewLine
|
||||
// + "(2)错误源:" + e.Exception.InnerException.Source + Environment.NewLine
|
||||
+ "(2)错误源:" + e.Exception.InnerException.Source + Environment.NewLine
|
||||
+ "(3)错误信息:" + e.Exception.Message + Environment.NewLine
|
||||
// + "(4)详细信息:" + e.Exception.InnerException.Message + Environment.NewLine
|
||||
// + "(5)报错区域:" + e.Exception.InnerException.StackTrace
|
||||
+ "(4)详细信息:" + e.Exception.InnerException.Message + Environment.NewLine
|
||||
+ "(5)报错区域:" + e.Exception.InnerException.StackTrace
|
||||
);
|
||||
}
|
||||
|
||||
string Log_time = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
string logpath = System.Environment.CurrentDirectory + "\\ERR";//日志文件目录
|
||||
//string logPathtxt = "" + System.Environment.CurrentDirectory + "\\Log\\"+ Log_time + "Log.txt";//日志文件
|
||||
// string logPathtxt = "" + System.Environment.CurrentDirectory + "\\Log\\"+ Log_time + "Log.txt";//日志文件
|
||||
// System.IO.DirectoryInfo log = new System.IO.DirectoryInfo();//生成日志文件目录
|
||||
string log_path = logpath + "\\ERR" + Log_time + ".txt";
|
||||
string Log_timehms = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
@@ -168,7 +173,8 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
/// </summary>
|
||||
private void Application_Startup(object sender, StartupEventArgs e)
|
||||
{
|
||||
Application.Current.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);//和MainWindwo同一目录
|
||||
Current.StartupUri = new Uri("Login.xaml", UriKind.Relative);
|
||||
//Current.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);//和MainWindwo同一目录
|
||||
}
|
||||
|
||||
public static class SystemSleepTool
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class BoolRBConvert : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
bool G =(Boolean) value;
|
||||
// bool G = (bool)value;
|
||||
if (!G)//判断单元格值是否为零
|
||||
{
|
||||
return "";//零返回
|
||||
}
|
||||
else
|
||||
{
|
||||
return "red";//非零返回红色
|
||||
}
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class BoolToVisidilityConvert : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
return (value is bool boolvalue && boolvalue) ?
|
||||
Visibility.Visible:
|
||||
Visibility.Collapsed;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace DyeingComputer.ConvertMoels
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class IORBConvert : IValueConverter
|
||||
{
|
||||
|
||||
@@ -21,16 +21,17 @@ namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
string i = value.ToString();
|
||||
|
||||
if (i == "101") return "Gray";
|
||||
else if (i == "201") return "green";
|
||||
else if (i == "202") return "yellow";
|
||||
else return "Red";
|
||||
if (i == "201") return "#FF00FF00";
|
||||
else if (i == "202") return "Green";
|
||||
else if (i == "309") return "#FF000000";
|
||||
else if (i == "800") return "Red";
|
||||
else return "#FF000000";
|
||||
}
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return "Gray";
|
||||
return "#FFF0F0F0";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class StatenClassConvert
|
||||
{
|
||||
public static string Convert(object value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
string Staten = null;
|
||||
string i = value.ToString();
|
||||
|
||||
if (i == "100") Staten = Properties.Resources.NotSent;//等待
|
||||
else if (i == "101") Staten = Properties.Resources.Ready;//准备
|
||||
else if (i == "102") Staten = Properties.Resources.Measure;//计量
|
||||
else if (i == "109") Staten = Properties.Resources.ERR;//错误
|
||||
else if (i == "110") Staten = Properties.Resources.NotSent;//未发送
|
||||
else if (i == "111") Staten = Properties.Resources.LtemizedSending;//发送明细
|
||||
else if (i == "112") Staten = Properties.Resources.DNotSent;//未发送明细
|
||||
else if (i == "119") Staten = Properties.Resources.Fail;//失败
|
||||
else if (i == "201") Staten = Properties.Resources.Auto;//自动
|
||||
else if (i == "202") Staten = Properties.Resources.LineUp;//排队
|
||||
else if (i == "203") Staten = Properties.Resources.Await;//等待
|
||||
else if (i == "301") Staten = Properties.Resources.Finish;//完成
|
||||
else if (i == "309") Staten = Properties.Resources.Abnormal;//错误
|
||||
else if (i == "800") Staten = Properties.Resources.Notimplementation;//未连接
|
||||
else if (i == "801") Staten = Properties.Resources.Implementation;//连接成功
|
||||
else if (i == "802") Staten = Properties.Resources.Online;//在线
|
||||
else if (i == "899") Staten = Properties.Resources.CloseTheConnection;//关闭连接
|
||||
else if (i == "1") Staten = Properties.Resources.dye;//染料
|
||||
else if (i == "2") Staten = Properties.Resources.chemicals;//助剂
|
||||
else if (i == "3") Staten = Properties.Resources.powder;//粉体
|
||||
else Staten = "null";
|
||||
|
||||
return Staten;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -21,16 +21,27 @@ namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
string Staten = null;
|
||||
string i = value.ToString();
|
||||
|
||||
if (i == "101") Staten = Properties.Resources.Ready;
|
||||
else if (i == "102") Staten = Properties.Resources.Measure;
|
||||
else if (i == "201") Staten = Properties.Resources.Auto;
|
||||
else if (i == "202") Staten = Properties.Resources.LineUp;
|
||||
else if (i == "203") Staten = Properties.Resources.Await;
|
||||
else if (i == "301") Staten = Properties.Resources.Finish;
|
||||
else if (i == "309") Staten = Properties.Resources.Abnormal;
|
||||
else if (i == "800") Staten = Properties.Resources.Notimplementation;
|
||||
else if (i == "801") Staten = Properties.Resources.Implementation;
|
||||
else Staten = "null";
|
||||
if (i == "100") Staten = Properties.Resources.Await;//等待
|
||||
else if (i == "101") Staten = Properties.Resources.Ready;//准备
|
||||
else if (i == "102") Staten = Properties.Resources.Measure;//计量
|
||||
else if (i == "109") Staten = Properties.Resources.ERR;//错误
|
||||
else if (i == "110") Staten = Properties.Resources.NotSent;//未发送
|
||||
else if (i == "111") Staten = Properties.Resources.LtemizedSending;//发送明细
|
||||
else if (i == "112") Staten = Properties.Resources.DNotSent;//未发送明细
|
||||
else if (i == "119") Staten = Properties.Resources.Fail;//失败
|
||||
else if (i == "201") Staten = Properties.Resources.Auto;//自动
|
||||
else if (i == "202") Staten = Properties.Resources.LineUp;//排队
|
||||
else if (i == "203") Staten = Properties.Resources.Await;//等待
|
||||
else if (i == "301") Staten = Properties.Resources.Finish;//完成
|
||||
else if (i == "309") Staten = Properties.Resources.Abnormal;//错误
|
||||
else if (i == "800") Staten = Properties.Resources.Notimplementation;//未连接
|
||||
else if (i == "801") Staten = Properties.Resources.Implementation;//连接成功
|
||||
else if (i == "801") Staten = Properties.Resources.Online;//在线
|
||||
else if (i == "899") Staten = Properties.Resources.CloseTheConnection;//关闭连接
|
||||
else if (i == "1") Staten = Properties.Resources.dye;//染料
|
||||
else if (i == "2") Staten = Properties.Resources.chemicals;//助剂
|
||||
else if (i == "3") Staten = Properties.Resources.powder;//粉体
|
||||
else Staten = "";
|
||||
|
||||
return Staten;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class StatenToImageConvert : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case "001":
|
||||
return new BitmapImage(new Uri("/Lmage/ID001.png", UriKind.Relative));//功能模块001温度控制
|
||||
case "007":
|
||||
return new BitmapImage(new Uri("/Lmage/ID007.png", UriKind.Relative));//液位入水
|
||||
case "008":
|
||||
return new BitmapImage(new Uri("/Lmage/ID008.png", UriKind.Relative));//流量入水
|
||||
case "013":
|
||||
return new BitmapImage(new Uri("/Lmage/ID013.png", UriKind.Relative));//批次水位水洗
|
||||
case "015":
|
||||
return new BitmapImage(new Uri("/Lmage/ID015.png", UriKind.Relative));//溢流水洗
|
||||
case "017":
|
||||
return new BitmapImage(new Uri("/Lmage/ID017.png", UriKind.Relative));//降温水洗
|
||||
case "020":
|
||||
return new BitmapImage(new Uri("/Lmage/ID020.png", UriKind.Relative));//排水
|
||||
case "022":
|
||||
return new BitmapImage(new Uri("/Lmage/ID022.png", UriKind.Relative));//动力排水
|
||||
case "031":
|
||||
return new BitmapImage(new Uri("/Lmage/ID031.png", UriKind.Relative));//运转时间
|
||||
case "035":
|
||||
return new BitmapImage(new Uri("/Lmage/ID035.png", UriKind.Relative));//准备入布
|
||||
case "036":
|
||||
return new BitmapImage(new Uri("/Lmage/ID036.png", UriKind.Relative));//准备出布
|
||||
case "039":
|
||||
return new BitmapImage(new Uri("/Lmage/ID039.png", UriKind.Relative));//呼叫人工
|
||||
case "040":
|
||||
return new BitmapImage(new Uri("/Lmage/ID040.png", UriKind.Relative));//取样
|
||||
case "041":
|
||||
return new BitmapImage(new Uri("/Lmage/ID041.png", UriKind.Relative));//结束
|
||||
case "049":
|
||||
return new BitmapImage(new Uri("/Lmage/ID049.png", UriKind.Relative));//等待
|
||||
case "050":
|
||||
return new BitmapImage(new Uri("/Lmage/ID050.png", UriKind.Relative));//主缸加压
|
||||
case "051":
|
||||
return new BitmapImage(new Uri("/Lmage/ID051.png", UriKind.Relative));//主缸减压
|
||||
case "054":
|
||||
return new BitmapImage(new Uri("/Lmage/ID054.png", UriKind.Relative));//主泵/风机速度
|
||||
case "055":
|
||||
return new BitmapImage(new Uri("/Lmage/ID055.png", UriKind.Relative));//主泵启动
|
||||
case "056":
|
||||
return new BitmapImage(new Uri("/Lmage/ID056.png", UriKind.Relative));//
|
||||
case "064":
|
||||
return new BitmapImage(new Uri("/Lmage/ID064.png", UriKind.Relative));//
|
||||
case "065":
|
||||
return new BitmapImage(new Uri("/Lmage/ID065.png", UriKind.Relative));//
|
||||
case "066":
|
||||
return new BitmapImage(new Uri("/Lmage/ID066.png", UriKind.Relative));//
|
||||
case "067":
|
||||
return new BitmapImage(new Uri("/Lmage/ID067.png", UriKind.Relative));//
|
||||
case "090":
|
||||
return new BitmapImage(new Uri("/Lmage/ID090.png", UriKind.Relative));//
|
||||
case "091":
|
||||
return new BitmapImage(new Uri("/Lmage/ID091.png", UriKind.Relative));//
|
||||
case "093":
|
||||
return new BitmapImage(new Uri("/Lmage/ID093.png", UriKind.Relative));//
|
||||
case "094":
|
||||
return new BitmapImage(new Uri("/Lmage/ID094.png", UriKind.Relative));//
|
||||
default:
|
||||
return new BitmapImage(new Uri("", UriKind.Relative));
|
||||
}
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using ScottPlot.TickGenerators.Financial;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
|
||||
{
|
||||
internal class StatexmlConvert : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
string Staten = "None";
|
||||
string i = value.ToString();
|
||||
if (i == "101") Staten = "Walk";//运行
|
||||
else if (i == "202") Staten = "RunFast";//运行
|
||||
else if (i == "301") Staten = "Stop";//完成
|
||||
else if (i == "309") Staten = "ErrorOutline";//错误
|
||||
else if (i == "800") Staten = "LinkOff";//未连接
|
||||
else if (i == "801") Staten = "Link";//连接成功
|
||||
else if (i == "899") Staten = "LinkOff";//关闭连接
|
||||
else if (i == "True") Staten = "Visible";//
|
||||
else if (i == "False") Staten = "Collapsed";//
|
||||
|
||||
return Staten;
|
||||
}
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
[SYS]
|
||||
Language=zh-CN
|
||||
DyelotsDispenser=True
|
||||
COMP1=COM7
|
||||
COMP2=COM8
|
||||
COMP3=COM9
|
||||
COMP4=COM10
|
||||
BAUD1 = 57600
|
||||
BAUD2= 57600
|
||||
BAUD3 =57600
|
||||
BAUD4 =57600
|
||||
[SQL_SERVER]
|
||||
SQL1=www.scserverddns.top\EXPRESS ,21344
|
||||
SQL2=BatchDyeingCentral
|
||||
SQL3=SQL SERVER
|
||||
SQL4=sa
|
||||
SQL5=SC971216@server
|
||||
[SN]
|
||||
SN3=5BEE2D9CF3E1A8DD
|
||||
SN2=BED2E58B6EBB4BD4
|
||||
SN1=5BEE2D9CF3E1A8DD
|
||||
[VOICE]
|
||||
V1=-2
|
||||
V2=100
|
||||
@@ -0,0 +1,59 @@
|
||||
[2025-07-02 21:49:42];[Error] ||
|
||||
|
||||
[2025-07-02 21:49:42];[Error source] ||.Net SqlClient Data Provider
|
||||
|
||||
[2025-07-02 21:49:42];[Error message] ||在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
|
||||
|
||||
[2025-07-02 21:49:42];[Error area] || 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
|
||||
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.Open()
|
||||
在 SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel..ctor() 位置 C:\Users\Administrator\source\repos\SunlightCentralizedControlManagement(SCCM)\ViewModel\ManualDyelotModel.cs:行号 35
|
||||
[2025-07-02 21:50:08];[Error] ||
|
||||
|
||||
[2025-07-02 21:50:08];[Error source] ||System.Data.SqlClient.SqlException (0x80131904): 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) ---> System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
|
||||
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
|
||||
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.Open()
|
||||
在 SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel..ctor() 位置 C:\Users\Administrator\source\repos\SunlightCentralizedControlManagement(SCCM)\ViewModel\ManualDyelotModel.cs:行号 35
|
||||
ClientConnectionId:00000000-0000-0000-0000-000000000000
|
||||
Error Number:2,State:0,Class:20
|
||||
|
||||
[2025-07-02 21:50:08];[Error message] ||在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
|
||||
|
||||
[2025-07-02 21:50:08];[Error area] ||System.Data.SqlClient.SqlException (0x80131904): 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) ---> System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
|
||||
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
|
||||
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.Open()
|
||||
在 SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel..ctor() 位置 C:\Users\Administrator\source\repos\SunlightCentralizedControlManagement(SCCM)\ViewModel\ManualDyelotModel.cs:行号 35
|
||||
ClientConnectionId:00000000-0000-0000-0000-000000000000
|
||||
Error Number:2,State:0,Class:20
|
||||
@@ -0,0 +1,20 @@
|
||||
[2025-07-24 21:48:12];[Error] ||
|
||||
|
||||
[2025-07-24 21:48:12];[Error source] ||.Net SqlClient Data Provider
|
||||
|
||||
[2025-07-24 21:48:12];[Error message] ||在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
|
||||
|
||||
[2025-07-24 21:48:12];[Error area] || 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
|
||||
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.Open()
|
||||
在 SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel..ctor() 位置 C:\Users\Administrator\source\repos\SunlightCentralizedControlManagement(SCCM)\ViewModel\ManualDyelotModel.cs:行号 35
|
||||
@@ -0,0 +1,20 @@
|
||||
[2025-08-28 17:45:02];[Error] ||
|
||||
|
||||
[2025-08-28 17:45:02];[Error source] ||.Net SqlClient Data Provider
|
||||
|
||||
[2025-08-28 17:45:02];[Error message] ||在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
|
||||
|
||||
[2025-08-28 17:45:02];[Error area] || 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
|
||||
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
|
||||
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
|
||||
在 System.Data.SqlClient.SqlConnection.Open()
|
||||
在 SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel..ctor() 位置 C:\Users\Administrator\source\repos\SunlightCentralizedControlManagement(SCCM)\ViewModel\ManualDyelotModel.cs:行号 35
|
||||
@@ -0,0 +1,64 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.EX.DispenseState"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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_.EX"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<Grid>
|
||||
<DataGrid x:Name="Grid_data" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=99}"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single" BorderBrush="#FFC9C9C9" FontSize="16" BorderThickness="5,5,5,5" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="25" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ID}" Binding="{Binding ID}" Width="80" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Machine}" Binding="{Binding Machine}" Width="100" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Dyelot}" Binding="{Binding Dyelot}" Width="200" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Redye}" Binding="{Binding ReDye}" Width="80" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding StepNumber}" Width="80" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Time}" Binding="{Binding CreationTime}" Width="200" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ProductCode}" Binding="{Binding ProductCode}" Width="200" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ProductName}" Binding="{Binding ProductName}" Width="200" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Grams}" Binding="{Binding Weight}" Width="200" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.State}" Binding="{Binding State}" Width="100" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Volume}" Binding="{Binding Volume}" Width="100" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.DispenseModule}" Binding="{Binding DispenseModule}" Width="100" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.StartTime}" Binding="{Binding DispenseStartTime}" Width="200" IsReadOnly="True" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,69 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Data;
|
||||
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 SunlightCentralizedControlManagement_SCCM_.EX
|
||||
{
|
||||
/// <summary>
|
||||
/// DispenseState.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DispenseState : UserControl
|
||||
{
|
||||
public DispenseState()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
public async void State(object dat,string mac)
|
||||
{
|
||||
string Connstr_SC;
|
||||
string WaitChemical_WaitDispenseDyestuff;
|
||||
string DAT = mac.Substring(0,3);
|
||||
if (DAT == "252")
|
||||
{
|
||||
WaitChemical_WaitDispenseDyestuff = "SELECT * FROM [dbo].[WaitDispenseDyestuff] WHERE DispenseMachine = '" + dat + "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
WaitChemical_WaitDispenseDyestuff = "SELECT * FROM [dbo].[WaitChemical] WHERE DispenseMachine = '" + dat + "'";
|
||||
}
|
||||
try
|
||||
{
|
||||
if (MainWindowViewModel.SQMOD == "Windows Authentication")
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";User ID=" + MainWindowViewModel.SQLUSER + ";Password=" + MainWindowViewModel.SQLPASWORD;
|
||||
}
|
||||
SqlConnection conn_SC = new SqlConnection(Connstr_SC);
|
||||
await conn_SC.OpenAsync(); //连接数据库
|
||||
SqlDataAdapter WaitChemical_data = new SqlDataAdapter(WaitChemical_WaitDispenseDyestuff, Connstr_SC); //查询
|
||||
conn_SC.Close();
|
||||
|
||||
DataTable ds = new DataTable();//载入信息
|
||||
WaitChemical_data.Fill(ds);
|
||||
Grid_data.ItemsSource = ds.DefaultView;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
using LiveChartsCore.Kernel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.IO;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Runtime.Remoting.Contexts;
|
||||
using System.Security.Principal;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Core;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.EX.Exchange
|
||||
{
|
||||
public class BDC_SQL
|
||||
{
|
||||
public class BDCSqlHelper
|
||||
{
|
||||
// SqlConnection conn_SC = new SqlConnection();//数据库
|
||||
string db;
|
||||
public void Config(string IP, string DATABASE, string USER, string PAWSSD, bool MODE)//连接dbc数据库
|
||||
{
|
||||
if (MODE) //连接数据库测试
|
||||
{
|
||||
db="server=" + IP + ";database=" + DATABASE + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
db="server=" + IP + ";database=" + DATABASE + ";User ID=" + USER + ";Password=" + PAWSSD;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> UPDATA(string name,string where,DataRow entity)//dbc数据库
|
||||
{
|
||||
string DAT = null;
|
||||
int rowsAffected = 0;
|
||||
int type = 0;
|
||||
try { type = entity.Field<int>("Type"); } catch { }
|
||||
try
|
||||
{
|
||||
|
||||
DAT = "DispenseDyelot='" + entity.Field<string>("Dyelot") + "',DispenseReDye='" + entity.Field<int>("Redye")+"',";
|
||||
if (type == 2)
|
||||
{
|
||||
DAT = DAT+"DyeCallOff=" + entity.Field<int>("Step") + ",DyeState = 201,DyeTank=" +
|
||||
entity.Field<int>("Tank");
|
||||
}
|
||||
else if (type == 3)
|
||||
{
|
||||
DAT = DAT+"PowderCallOff=" + entity.Field<int>("Step") +",PowderState=201,PowderTank=" +
|
||||
entity.Field<int>("Tank");
|
||||
}
|
||||
else
|
||||
{
|
||||
DAT = DAT+"ChemicalCallOff=" + entity.Field<int>("Step") +",ChemicalState=201,ChemicalTank=" +
|
||||
entity.Field<int>("Tank");
|
||||
}
|
||||
|
||||
using (var connection = new SqlConnection(db))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
var command = connection.CreateCommand();
|
||||
command.CommandText = "UPDATE "+ name + " SET "+ DAT + " WHERE "+ where;
|
||||
// command.Parameters.AddWithValue("@table", name);
|
||||
// command.Parameters.AddWithValue("@Id", where);
|
||||
// command.Parameters.AddWithValue("@data", DAT);
|
||||
rowsAffected = await command.ExecuteNonQueryAsync();
|
||||
|
||||
LogGing.ExchangeDATA( command.CommandText.ToString());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
return rowsAffected;
|
||||
}
|
||||
|
||||
public async Task<DataTable> SELECT(string name, string where)//dbc数据库
|
||||
{
|
||||
DataTable rowsAffected = new DataTable();
|
||||
try
|
||||
{
|
||||
using (var connection = new SqlConnection(db))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
var command = connection.CreateCommand();
|
||||
command.CommandText = "SELECT * FROM " + name + " WHERE " + where;
|
||||
var dat = await command.ExecuteReaderAsync();
|
||||
rowsAffected.Load(dat);
|
||||
|
||||
LogGing.ExchangeDATA(command.CommandText.ToString());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
return rowsAffected;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<Window x:Class="SunlightCentralizedControlManagement_SCCM_.EX.ManualDyelot"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.EX"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
xmlns:System="clr-namespace:System;assembly=mscorlib"
|
||||
xmlns:core="clr-namespace:System;assembly=netstandard"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:ManualDyelotModel}"
|
||||
mc:Ignorable="d" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen"
|
||||
Title="ManualDyelot" Height="960" Width="1280">
|
||||
<Window.Resources>
|
||||
<viewmodel:ManualDyelotModel x:Key="ManualDyelotModel"/>
|
||||
</Window.Resources>
|
||||
<Grid Background="#FFC9C9C9">
|
||||
<Grid Margin="5,5,5,5" Background="White">
|
||||
<DataGrid x:Name="Grid_data" AlternationCount="2" d:ItemsSource="{d:SampleData ItemCount=99}"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="50" BorderThickness="0,0,5,0"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column"
|
||||
SelectionMode="Single" FontSize="20" Margin="5,5,500,5">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="35" />
|
||||
<Setter Property="FontSize" Value="20" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.ProductCode}" Width="200" MaxWidth="400" MinWidth="100" IsReadOnly="False">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<ComboBox x:Name="CP_PRODUCT_CODE" BorderThickness="0,0,0,0"
|
||||
ItemsSource="{Binding stuff_Product, Source={StaticResource ManualDyelotModel}}"
|
||||
DisplayMemberPath="ProductCode"
|
||||
Text="{Binding PRODUCT_CODE}" IsTextSearchEnabled="True" StaysOpenOnEdit="True"
|
||||
BorderBrush="{x:Null}" Background="{x:Null}"
|
||||
DropDownClosed="CP_PRODUCT_CODE_DropDownClosed">
|
||||
</ComboBox>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.ProcessName}" Width="200" MaxWidth="400" MinWidth="100" >
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<ComboBox x:Name="CP_PRODUCT_NAME" BorderThickness="0,0,0,0"
|
||||
ItemsSource="{Binding stuff_Product, Source={StaticResource ManualDyelotModel}}"
|
||||
DisplayMemberPath="ProductName"
|
||||
Text="{Binding PRODUCT_NAME}"
|
||||
DropDownClosed="CP_PRODUCT_NAME_DropDownClosed"
|
||||
BorderBrush="{x:Null}" Background="{x:Null}" Focusable="True" IsTabStop="False"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Grams}" Width="200" MaxWidth="400" MinWidth="100" >
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBox x:Name="CP_CONC" BorderThickness="0,0,0,0" Text="{Binding CONC}"
|
||||
BorderBrush="{x:Null}" Background="{x:Null}"
|
||||
KeyDown="CP_CONC_KeyDown" />
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
|
||||
<Button x:Name="State" Content="{x:Static lang:Resources.YES}" HorizontalAlignment="Right" Height="55" Margin="0,0,280,10" VerticalAlignment="Bottom" Width="200" Click="State_Click" Padding="0,4,0,4" FontSize="20"/>
|
||||
<Button x:Name="Cancel" Content="{x:Static lang:Resources.Cancel}" HorizontalAlignment="Right" Height="55" Margin="0,0,15,10" VerticalAlignment="Bottom" Width="200" Click="Cancel_Click" Padding="0,4,0,4" FontSize="20"/>
|
||||
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,100,365,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.orders}"
|
||||
VerticalAlignment="Top" Width="130" FontSize="35" Background="#FFEAEAEA"/>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,100,15,0" TextWrapping="Wrap" x:Name="orders"
|
||||
VerticalAlignment="Top" Width="350" FontSize="35"/>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,150,365,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Dyelot}"
|
||||
VerticalAlignment="Top" Width="130" FontSize="35" Background="#FFEAEAEA"/>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,150,15,0" TextWrapping="Wrap" x:Name="dyelot"
|
||||
VerticalAlignment="Top" Width="350" FontSize="35"/>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="50" VerticalAlignment="Top" Margin="150,200,15,0" HorizontalAlignment="Right" Width="350">
|
||||
<ComboBox Height="50" x:Name="comboBoxMachine" VerticalAlignment="Stretch"
|
||||
FontSize="35" DropDownClosed="comboBoxMachine_DropDownClosed" />
|
||||
</Border>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,200,365,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}"
|
||||
VerticalAlignment="Top" Width="130" FontSize="35" Background="#FFEAEAEA"/>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="50" VerticalAlignment="Top" Margin="150,250,15,0" HorizontalAlignment="Right" Width="350">
|
||||
<ComboBox Height="50" x:Name="comboBoxtank" VerticalAlignment="Stretch" FontSize="35" />
|
||||
</Border>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,250,365,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Tank}"
|
||||
VerticalAlignment="Top" Width="130" FontSize="35" Background="#FFEAEAEA"/>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="50" VerticalAlignment="Top" Margin="150,300,15,0" HorizontalAlignment="Right" Width="350">
|
||||
<TextBox Height="50" x:Name="comboBoxTotal" VerticalAlignment="Stretch" FontSize="35" />
|
||||
</Border>
|
||||
<TextBlock HorizontalAlignment="Right" Height="50" Margin="10,300,365,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Total}"
|
||||
VerticalAlignment="Top" Width="130" FontSize="35" Background="#FFEAEAEA"/>
|
||||
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,334 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
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.Shapes;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Reflection;
|
||||
using System.Xml.Linq;
|
||||
using DyeingComputer.UserClass;
|
||||
using System.Windows.Forms;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using ScottPlot.TickGenerators.TimeUnits;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.EX
|
||||
{
|
||||
/// <summary>
|
||||
/// ManualDyelot.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ManualDyelot : Window
|
||||
{
|
||||
|
||||
DataTable dyelotdat = new DataTable();
|
||||
public static string Machines;
|
||||
DataTable mach = new DataTable();
|
||||
DataTable RRODUCTdataTable = new DataTable(); //建立RRODUCT缓存
|
||||
int ID_N = 1;
|
||||
int type_;
|
||||
DateTime time = DateTime.Now;
|
||||
public ManualDyelot()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
State.IsEnabled = false;
|
||||
string[] strings = { "0", "1", "2", "3" };
|
||||
comboBoxtank.ItemsSource = strings;
|
||||
comboBoxtank.Text = "0";
|
||||
comboBoxTotal.Text = "0";
|
||||
int mrc = MainWindowViewModel.Machines.Rows.Count;
|
||||
string[] stringsM = new string[mrc];
|
||||
for (int i = 0; i < mrc; i++)
|
||||
{
|
||||
stringsM[i] = MainWindowViewModel.Machines.Rows[i]["name"].ToString();
|
||||
}
|
||||
comboBoxMachine.ItemsSource = stringsM;
|
||||
dyelot.Text = "00_" + DateTime.Now.ToString("yyMMddHHmmss");
|
||||
RRODUCTdataTable.Columns.Add("ID", typeof(int));
|
||||
RRODUCTdataTable.Columns.Add("DYELOT", typeof(string));
|
||||
RRODUCTdataTable.Columns.Add("ReDye", typeof(int));
|
||||
RRODUCTdataTable.Columns.Add("STEP", typeof(int));
|
||||
RRODUCTdataTable.Columns.Add("ProductType", typeof(int));
|
||||
RRODUCTdataTable.Columns.Add("Created", typeof(string));
|
||||
RRODUCTdataTable.Columns.Add("PRODUCT_CODE", typeof(string));
|
||||
RRODUCTdataTable.Columns.Add("PRODUCT_NAME", typeof(string));
|
||||
RRODUCTdataTable.Columns.Add("TARGET_WT", typeof(float));
|
||||
RRODUCTdataTable.Columns.Add("Amount", typeof(string));
|
||||
RRODUCTdataTable.Columns.Add("UNIT", typeof(string));
|
||||
DataRow row = RRODUCTdataTable.NewRow(); //ID列
|
||||
row["ID"] = ID_N;
|
||||
row["DYELOT"] = dyelot.Text;
|
||||
row["ReDye"] = 0;
|
||||
row["STEP"] = "1";
|
||||
row["ProductType"] = type_;
|
||||
row["Created"] = time;
|
||||
row["UNIT"] = "g";
|
||||
RRODUCTdataTable.Rows.Add(row);
|
||||
Grid_data.ItemsSource = RRODUCTdataTable.DefaultView;
|
||||
}
|
||||
public void MAC(object Mac,int t)
|
||||
{
|
||||
Machines = Mac.ToString();
|
||||
type_ = t;
|
||||
/* string Connstr_SC;
|
||||
string sql = "SELECT * FROM [dbo].[Pipes] WHERE Dispenser = '" + Machines + "'";
|
||||
|
||||
try
|
||||
{
|
||||
if (MainWindowViewModel.SQMOD == "Windows Authentication")
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";User ID=" + MainWindowViewModel.SQLUSER + ";Password=" + MainWindowViewModel.SQLPASWORD;
|
||||
}
|
||||
SqlConnection conn_SC = new SqlConnection(Connstr_SC);
|
||||
await conn_SC.OpenAsync(); //连接数据库
|
||||
new SqlDataAdapter(sql, Connstr_SC).Fill(dyelotdat);
|
||||
// SqlDataAdapter _data = new SqlDataAdapter(sql, Connstr_SC); //查询
|
||||
conn_SC.Close();
|
||||
|
||||
for (int i = 0; i < dyelotdat.Rows.Count; i++)
|
||||
{
|
||||
SelectProductCode.Add(dyelotdat.Rows[i].Field<string>("ProductCode"));
|
||||
SelectProductName.Add(dyelotdat.Rows[i].Field<string>("ProductName"));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}*/
|
||||
}
|
||||
|
||||
private async void State_Click(object sender, RoutedEventArgs e)//确认按键
|
||||
{
|
||||
int t = RRODUCTdataTable.Rows.Count; //获取数据行包含空白行
|
||||
RRODUCTdataTable.Rows[t - 1].Delete();
|
||||
RRODUCTdataTable.AcceptChanges();
|
||||
if (string.IsNullOrEmpty(comboBoxMachine.Text)) return;//未输入机台时返回
|
||||
try
|
||||
{
|
||||
Dictionary<string, object> Dyelot_DAT = new Dictionary<string, object>();//缓存函数
|
||||
for (int x = 0; x < RRODUCTdataTable.Rows.Count; x++)
|
||||
{
|
||||
Dyelot_DAT.Add("WorkOrder", orders.Text);
|
||||
Dyelot_DAT.Add("Dyelot", RRODUCTdataTable.Rows[x]["Dyelot"]);
|
||||
Dyelot_DAT.Add("Redye", RRODUCTdataTable.Rows[x]["Redye"]);
|
||||
Dyelot_DAT.Add("Step", RRODUCTdataTable.Rows[x]["Step"]);
|
||||
Dyelot_DAT.Add("TIME", RRODUCTdataTable.Rows[x]["Created"]);
|
||||
Dyelot_DAT.Add("Tank", comboBoxtank.Text);
|
||||
Dyelot_DAT.Add("State", "201");
|
||||
Dyelot_DAT.Add("Machine", comboBoxMachine.Text);
|
||||
Dyelot_DAT.Add("ProductCode", RRODUCTdataTable.Rows[x]["PRODUCT_CODE"]);
|
||||
Dyelot_DAT.Add("ProductName", RRODUCTdataTable.Rows[x]["PRODUCT_NAME"]);
|
||||
Dyelot_DAT.Add("ProductType", RRODUCTdataTable.Rows[x]["ProductType"]);
|
||||
Dyelot_DAT.Add("DispenseStartTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
Dyelot_DAT.Add("Grams", RRODUCTdataTable.Rows[x]["TARGET_WT"]);
|
||||
Dyelot_DAT.Add("Amount", RRODUCTdataTable.Rows[x]["Amount"]);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("Dyelot", Dyelot_DAT);//行插入
|
||||
Dyelot_DAT.Clear();
|
||||
}
|
||||
|
||||
LogGing.ExchangeDATA("Dyelot=" + dyelot.Text + ";Machine=" + comboBoxMachine.Text +
|
||||
";Program=------;User=" + MainWindowViewModel.USER_data + ";");
|
||||
|
||||
|
||||
string Connstr_SC;
|
||||
if (MainWindowViewModel.SQMOD == "Windows Authentication")
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";User ID=" + MainWindowViewModel.SQLUSER + ";Password=" + MainWindowViewModel.SQLPASWORD;
|
||||
}
|
||||
SqlConnection destinationConnection = new SqlConnection(Connstr_SC); //创建一个数据库连接;
|
||||
await destinationConnection.OpenAsync(); //打开连接
|
||||
|
||||
//写总览
|
||||
string dyelots_sql = string.Format("INSERT INTO [dbo].[DYELOTS]([Dyelot] ,[ReDye] , [OrderNo] , [Machine] ,[DispenseMachine] ,[UserAccount] ) " +
|
||||
"VALUES ('" + dyelot.Text + "','0','" + orders.Text + "','" + comboBoxMachine.Text + "','" + comboBoxMachine.Text + "','" + MainWindow.user_ + "')");
|
||||
SqlCommand INSERT_cmd = new SqlCommand(dyelots_sql, destinationConnection);
|
||||
int dyelots_sqlIN = INSERT_cmd.ExecuteNonQuery(); //执行语句
|
||||
|
||||
//写明细
|
||||
SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection);// 实例化 sqlbulkcopy;
|
||||
bulkCopy.DestinationTableName = "dbo.DyelotsBulkedRecipe";// 目标表名称/
|
||||
bulkCopy.ColumnMappings.Add("DYELOT", "Dyelot");
|
||||
bulkCopy.ColumnMappings.Add("ReDye", "ReDye");
|
||||
bulkCopy.ColumnMappings.Add("STEP", "StepNumber");
|
||||
bulkCopy.ColumnMappings.Add("PRODUCT_CODE", "ProductCode");
|
||||
bulkCopy.ColumnMappings.Add("PRODUCT_NAME", "ProductName");
|
||||
bulkCopy.ColumnMappings.Add("ProductType", "ProductType");
|
||||
bulkCopy.ColumnMappings.Add("Created", "Created");
|
||||
bulkCopy.ColumnMappings.Add("Amount", "Amount");
|
||||
bulkCopy.ColumnMappings.Add("TARGET_WT", "Grams");
|
||||
bulkCopy.WriteToServer(RRODUCTdataTable); //将传入的数据写到数据库;
|
||||
|
||||
string mac_sql = string.Format("UPDATE [dbo].[Machines] SET DispenseDyelot='" + dyelot.Text
|
||||
+ "',DispenseReDye='0',ChemicalCallOff=1,ChemicalState=201,ChemicalTank='" + comboBoxtank.Text
|
||||
+ "' WHERE NAME='" + comboBoxMachine.Text + "'");
|
||||
SqlCommand UPDATE_mac = new SqlCommand(mac_sql, destinationConnection);
|
||||
int mac_ = UPDATE_mac.ExecuteNonQuery(); //执行语句
|
||||
if (mac_ == 0) System.Windows.Forms.MessageBox.Show(Properties.Resources.Not_M);
|
||||
destinationConnection.Close();
|
||||
|
||||
this.Close();//退出页面
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
System.Windows.Forms.MessageBox.Show(ex.Message.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void comboBoxMachine_DropDownClosed(object sender, EventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
string Macht= MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "WorkOrder", "NAME = '" + comboBoxMachine.Text + "'").ToString();
|
||||
|
||||
if (Macht != "------")
|
||||
{
|
||||
orders.Text = Macht;
|
||||
}
|
||||
else
|
||||
{
|
||||
orders.Text = dyelot.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Cancel_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
public ObservableCollection<string> SelectProductCode
|
||||
{
|
||||
get { return _selectProductCode; }
|
||||
set { _selectProductCode = value; }
|
||||
}
|
||||
private ObservableCollection<string> _selectProductCode = new ObservableCollection<string>();
|
||||
public ObservableCollection<string> SelectProductName
|
||||
{
|
||||
get { return _selectProductName; }
|
||||
set { _selectProductName = value; }
|
||||
}
|
||||
private ObservableCollection<string> _selectProductName = new ObservableCollection<string>();
|
||||
|
||||
string Code_;
|
||||
string Name_;
|
||||
|
||||
private void CP_PRODUCT_CODE_DropDownClosed(object sender, EventArgs e)//代码选择事件
|
||||
{
|
||||
State.IsEnabled = false;
|
||||
System.Windows.Controls.ComboBox curComboBox = sender as System.Windows.Controls.ComboBox;
|
||||
int grid_row = Grid_data.SelectedIndex; //获取当前行
|
||||
|
||||
Code_ = curComboBox.Text.TrimEnd();
|
||||
|
||||
DataRow[] r = ManualDyelotModel.STUFFdataTable.Select("ProductCode ='" + Code_ + "'"); //查询判断原料代码是否有效
|
||||
if (!r.Any()) //检查原料信息
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int ID_ = grid_row + 1;
|
||||
DataRow[] c = RRODUCTdataTable.Select("PRODUCT_CODE ='" + Code_ + "'and ID <> '" + ID_ + "'");//查询判断原料代码是否重复
|
||||
if (c.Any())
|
||||
{
|
||||
curComboBox.Text = null;
|
||||
System.Windows.MessageBox.Show(Properties.Resources.RTRM);
|
||||
return;
|
||||
}
|
||||
|
||||
Name_ = r[0].ItemArray[1].ToString();
|
||||
|
||||
if (grid_row == -1) grid_row = 0;
|
||||
DataRow row = RRODUCTdataTable.Rows[grid_row]; //ID列
|
||||
row.BeginEdit();
|
||||
row["PRODUCT_CODE"] = Code_;
|
||||
row["PRODUCT_NAME"] = Name_;
|
||||
row.EndEdit();
|
||||
DataGridHelper.SetRealTimeCommit(Grid_data, true); //实时更新datagrid
|
||||
}
|
||||
|
||||
private void CP_PRODUCT_NAME_DropDownClosed(object sender, EventArgs e)//选择原料事件
|
||||
{
|
||||
State.IsEnabled = false;
|
||||
System.Windows.Controls.ComboBox curComboBox = sender as System.Windows.Controls.ComboBox;
|
||||
int grid_row = Grid_data.SelectedIndex; //获取当前行
|
||||
|
||||
if (curComboBox.Text != "")
|
||||
{
|
||||
Name_ = curComboBox.Text.TrimEnd();
|
||||
|
||||
DataRow[] r = ManualDyelotModel.STUFFdataTable.Select("ProductName ='" + Name_ + "'"); //查询判断原料代码是否有效
|
||||
|
||||
DataRow[] c = RRODUCTdataTable.Select("PRODUCT_NAME ='" + Name_ + "'");//查询判断原料代码是否重复
|
||||
if (c.Any())
|
||||
{
|
||||
curComboBox.Text = null;
|
||||
System.Windows.MessageBox.Show(Properties.Resources.RTRM);
|
||||
return;
|
||||
}
|
||||
Code_ = r[0].ItemArray[0].ToString();
|
||||
|
||||
if (grid_row == -1) grid_row = 0;
|
||||
DataRow row = RRODUCTdataTable.Rows[grid_row]; //ID列
|
||||
row.BeginEdit();
|
||||
row["PRODUCT_CODE"] = Code_;
|
||||
row["PRODUCT_NAME"] = Name_;
|
||||
row.EndEdit();
|
||||
}
|
||||
}
|
||||
|
||||
private void CP_CONC_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)//输入目标量事件
|
||||
{
|
||||
System.Windows.Controls.TextBox textBox = sender as System.Windows.Controls.TextBox;
|
||||
int grid_row = Grid_data.SelectedIndex; //获取当前行
|
||||
if (string.IsNullOrEmpty(textBox.Text)) return;
|
||||
if (e.Key == Key.Enter)
|
||||
{
|
||||
if (grid_row == -1) grid_row = 0;
|
||||
DataRow row = RRODUCTdataTable.Rows[grid_row];
|
||||
if (string.IsNullOrEmpty(row["PRODUCT_CODE"].ToString()))
|
||||
{
|
||||
textBox.Text = null;
|
||||
return;
|
||||
}
|
||||
row.BeginEdit();
|
||||
row["Amount"] = textBox.Text + "g";
|
||||
row["TARGET_WT"] = textBox.Text;
|
||||
row.EndEdit();
|
||||
|
||||
ID_N++;
|
||||
DataRow rowadd = RRODUCTdataTable.NewRow(); //ID列
|
||||
rowadd["ID"] = ID_N;
|
||||
rowadd["DYELOT"] = dyelot.Text;
|
||||
rowadd["ReDye"] = 0;
|
||||
rowadd["STEP"] = "1";
|
||||
row["ProductType"] = type_;
|
||||
rowadd["Created"] = time;
|
||||
rowadd["UNIT"] = "g";
|
||||
RRODUCTdataTable.Rows.Add(rowadd);
|
||||
State.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<Window x:Class="SunlightCentralizedControlManagement_SCCM_.EX.VNC"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.EX"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
|
||||
xmlns:rdp="clr-namespace:VncSharpWpf;assembly=VncSharpWpf"
|
||||
mc:Ignorable="d" Loaded="Window_Loaded"
|
||||
Title="VNC" Height="1140" Width="1920">
|
||||
<Grid Margin="0,0,0,0">
|
||||
<Button x:Name="Save" Content="{x:Static lang:Resources.Cancel}" HorizontalAlignment="Right" Height="35" Margin="450,0,50,10" VerticalAlignment="Bottom" Width="80" Click="Save_Click"/>
|
||||
<TextBlock x:Name="log" VerticalAlignment="Bottom" Text="LINK-------" Margin="0,0,0,10" HorizontalAlignment="Left" Width="600" Height="35" FontSize="24" FontWeight="Bold" FontStyle="Italic" />
|
||||
<Grid Margin="0,0,0,60">
|
||||
<rdp:RemoteDesktopWpf x:Name="rdp" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
</Window>
|
||||
@@ -0,0 +1,96 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.View;
|
||||
using SunlightCentralizedControlManagement_SCCM_.EX;
|
||||
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.Shapes;
|
||||
using System.Net.NetworkInformation;
|
||||
using VncSharpWpf;
|
||||
using System.Net.Sockets;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.EX
|
||||
{
|
||||
/// <summary>
|
||||
/// UserMessage.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class VNC : Window
|
||||
{
|
||||
string host = "127.0.0.1"; // 替换为你的 VNC 服务器地址
|
||||
int port = 5901; // 替换为你的 VNC 服务器端口
|
||||
string password = "123456"; // 替换为你的 VNC 服务器密码
|
||||
|
||||
public VNC()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void Save_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (rdp.IsConnected) { rdp.Disconnect(); }//断开连接
|
||||
this.Close();
|
||||
}
|
||||
|
||||
public void Parameter(object IP, object PROT, object USER, object PASSWD)
|
||||
{
|
||||
host = IP.ToString();
|
||||
port = Convert.ToInt16(PROT);
|
||||
password = PASSWD.ToString();
|
||||
}
|
||||
|
||||
private async void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (await PingTest(host))
|
||||
{
|
||||
if (!rdp.IsConnected)
|
||||
{
|
||||
log.Text = host + " OK";
|
||||
try
|
||||
{
|
||||
rdp.VncPort = port;
|
||||
rdp.Passwd = password;
|
||||
rdp.Connect(host, false, false);
|
||||
|
||||
//rdp.SetScalingMode(false);//自动缩放全屏
|
||||
// rdp.SetInputMode(false);//可交互
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> PingTest(string ip)
|
||||
{
|
||||
bool result = false;
|
||||
Ping pingSender = new Ping();
|
||||
|
||||
try
|
||||
{
|
||||
PingReply reply = await pingSender.SendPingAsync(ip, 3000);
|
||||
|
||||
if (reply.Status == IPStatus.Success)
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
catch (PingException)
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
<Window x:Class="SunlightCentralizedControlManagement_SCCM_.KEY.TouchKeyboard"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.WindowsView"
|
||||
mc:Ignorable="d" WindowStyle="None" ResizeMode="NoResize" Topmost="True"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Title="TouchKeyboard" Height="500" Width="750">
|
||||
<Window.Resources>
|
||||
<Style x:Key="KeyButtonStyle" TargetType="Button">
|
||||
<Setter Property="Background" Value="#FFF0F0F0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFCCCCCC"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="FontSize" Value="20"/>
|
||||
<Setter Property="FontWeight" Value="Bold"/>
|
||||
<Setter Property="Margin" Value="2"/>
|
||||
<Setter Property="MinWidth" Value="60"/>
|
||||
<Setter Property="MinHeight" Value="40"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="border"
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
CornerRadius="4">
|
||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsPressed" Value="True">
|
||||
<Setter Property="Background" Value="#FFDDDDDD"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SpecialKeyButtonStyle" BasedOn="{StaticResource KeyButtonStyle}" TargetType="Button">
|
||||
<Setter Property="Background" Value="#FFE0E0E0"/>
|
||||
<Setter Property="FontSize" Value="16"/>
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 预览区域 -->
|
||||
<TextBox x:Name="PreviewTextBox" Grid.Row="0" Height="60" Margin="10"
|
||||
FontSize="24" VerticalContentAlignment="Center" IsReadOnly="False"/>
|
||||
|
||||
<!-- 键盘主体区域 -->
|
||||
<Grid Grid.Row="1" Margin="10">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 数字行 -->
|
||||
<StackPanel Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Center">
|
||||
<Button Content="1" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="2" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="3" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="4" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="5" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="6" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="7" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="8" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="9" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="0" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="DEL" Style="{StaticResource SpecialKeyButtonStyle}" Click="Backspace_Click" Width="60"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 第一行字母 -->
|
||||
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
|
||||
<Button Content="Q" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="W" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="E" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="R" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="T" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="Y" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="U" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="I" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="O" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="P" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 第二行字母 -->
|
||||
<StackPanel Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Center">
|
||||
<Button Content="A" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="S" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="D" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="F" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="G" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="H" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="J" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="K" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="L" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="/" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="HIDE" Style="{StaticResource SpecialKeyButtonStyle}" Click="Hide_Click" Width="60"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 第三行字母 -->
|
||||
<StackPanel Orientation="Horizontal" Grid.Row="3" HorizontalAlignment="Center">
|
||||
<Button x:Name="ShiftButton" Content="⇧" Style="{StaticResource SpecialKeyButtonStyle}" Click="Shift_Click" Width="60"/>
|
||||
<Button Content="Z" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="X" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="C" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="V" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="B" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="N" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="M" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="." Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="ENTER" Style="{StaticResource SpecialKeyButtonStyle}" Click="Enter_Click" Width="120"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- 状态栏 -->
|
||||
<StatusBar Grid.Row="2">
|
||||
<StatusBarItem>
|
||||
<TextBlock x:Name="StatusTextBlock" Text="就绪"/>
|
||||
</StatusBarItem>
|
||||
</StatusBar>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,116 @@
|
||||
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.Shapes;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.KEY.TouchKeyboardNumeral;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.KEY
|
||||
{
|
||||
/// <summary>
|
||||
/// TouchKeyboard.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class TouchKeyboard : Window
|
||||
{
|
||||
private bool isShiftActive = false;
|
||||
public string KeyValue;
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
|
||||
public TouchKeyboard()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void KeyButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Button button = sender as Button;
|
||||
if (button != null)
|
||||
{
|
||||
string key = button.Content.ToString();
|
||||
|
||||
if (key.Length == 1 && char.IsLetter(key[0]))
|
||||
{
|
||||
key = isShiftActive ? key.ToUpper() : key.ToLower();
|
||||
}
|
||||
|
||||
PreviewTextBox.Text += key;
|
||||
|
||||
// 输入后关闭Shift状态
|
||||
if (isShiftActive)
|
||||
{
|
||||
isShiftActive = false;
|
||||
UpdateButtonAppearance();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Shift_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
isShiftActive = !isShiftActive;
|
||||
UpdateButtonAppearance();
|
||||
}
|
||||
|
||||
private void Backspace_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(PreviewTextBox.Text))
|
||||
{
|
||||
PreviewTextBox.Text = PreviewTextBox.Text.Substring(0, PreviewTextBox.Text.Length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
private void Enter_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 触发回车事件
|
||||
KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Enter, PreviewTextBox.Text));
|
||||
|
||||
this.Close();
|
||||
// PreviewTextBox.Text += Environment.NewLine;
|
||||
}
|
||||
|
||||
private void Hide_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Hide, ""));
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void UpdateButtonAppearance()
|
||||
{
|
||||
// 更新Shift按钮的外观以反映当前状态
|
||||
if (isShiftActive)
|
||||
{
|
||||
ShiftButton.Background = new SolidColorBrush(Colors.LightBlue);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShiftButton.Background = new SolidColorBrush(Color.FromRgb(224, 224, 224));
|
||||
}
|
||||
}
|
||||
|
||||
public class KeyPressedEventArgs : EventArgs
|
||||
{
|
||||
public KeyType KeyType { get; }
|
||||
public string KeyValue { get; }
|
||||
|
||||
public KeyPressedEventArgs(KeyType keyType, string keyValue)
|
||||
{
|
||||
KeyType = keyType;
|
||||
KeyValue = keyValue;
|
||||
}
|
||||
}
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 初始化为默认模式
|
||||
// SetKeyboardMode(KeyboardMode.Default);
|
||||
PreviewTextBox.Text = null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
<Window x:Class="SunlightCentralizedControlManagement_SCCM_.KEY.TouchKeyboardNumeral"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.WindowsView"
|
||||
mc:Ignorable="d"
|
||||
WindowStyle="None"
|
||||
ResizeMode="NoResize"
|
||||
Topmost="True"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Title="TouchKeyboardNumeral"
|
||||
Loaded="Window_Loaded"
|
||||
Height="500" Width="550">
|
||||
<Window.Resources>
|
||||
<Style x:Key="KeyButtonStyle" TargetType="Button">
|
||||
<Setter Property="Background" Value="#FFF0F0F0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFCCCCCC"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="FontSize" Value="20"/>
|
||||
<Setter Property="FontWeight" Value="Bold"/>
|
||||
<Setter Property="Margin" Value="2"/>
|
||||
<Setter Property="MinWidth" Value="100"/>
|
||||
<Setter Property="MinHeight" Value="40"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="border"
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
CornerRadius="4">
|
||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsPressed" Value="True">
|
||||
<Setter Property="Background" Value="#FFDDDDDD"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="False">
|
||||
<Setter Property="Foreground" Value="#FFBBBBBB"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SpecialKeyButtonStyle" BasedOn="{StaticResource KeyButtonStyle}" TargetType="Button">
|
||||
<Setter Property="Background" Value="#FFE0E0E0"/>
|
||||
<Setter Property="FontSize" Value="16"/>
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 预览区域 -->
|
||||
<TextBox x:Name="PreviewTextBox" Grid.Row="0" Height="60" Margin="10"
|
||||
FontSize="24" VerticalContentAlignment="Center" IsReadOnly="False"/>
|
||||
|
||||
<!-- 键盘主体区域 -->
|
||||
<Grid Grid.Row="1" Margin="10">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 数字行 -->
|
||||
<StackPanel x:Name="FirstRow" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Center">
|
||||
<Button Content="7" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="8" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="9" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="0" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="DEL" Style="{StaticResource SpecialKeyButtonStyle}" Click="Backspace_Click" Width="60"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 数字行 -->
|
||||
<StackPanel x:Name="SecondRow" Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
|
||||
<Button Content="4" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="5" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="6" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="." Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="HIDE" Style="{StaticResource SpecialKeyButtonStyle}" Click="Hide_Click" Width="60"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 数字行 -->
|
||||
<StackPanel x:Name="ThirdRow" Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Center">
|
||||
<Button Content="1" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="2" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="3" Style="{StaticResource KeyButtonStyle}" Click="KeyButton_Click"/>
|
||||
<Button Content="ENTER" Style="{StaticResource SpecialKeyButtonStyle}" Click="Enter_Click" Width="200"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,215 @@
|
||||
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.Shapes;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.KEY
|
||||
{
|
||||
/// <summary>
|
||||
/// TouchKeyboard.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class TouchKeyboardNumeral : Window
|
||||
{
|
||||
private bool mode = false;
|
||||
public string KeyValue;
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
private KeyboardMode currentMode = KeyboardMode.Default;
|
||||
private int minValue = 0;
|
||||
private int maxValue = 9;
|
||||
private TextBox targetTextBox;
|
||||
// 定义键盘模式枚举
|
||||
public enum KeyboardMode
|
||||
{
|
||||
Default, // 默认模式,所有键可用
|
||||
NumericOnly, // 只允许数字
|
||||
DecimalOnly, // 允许数字和小数点
|
||||
LimitedRange // 限制数字范围
|
||||
}
|
||||
|
||||
public TouchKeyboardNumeral()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
public void SetKeyboardMode(KeyboardMode mode, TextBox target = null, int min = 0, int max = 9)
|
||||
{
|
||||
currentMode = mode;
|
||||
targetTextBox = target;
|
||||
minValue = min;
|
||||
maxValue = max;
|
||||
|
||||
UpdateKeyboardLayout();
|
||||
}
|
||||
private void UpdateKeyboardLayout()
|
||||
{
|
||||
switch (currentMode)
|
||||
{
|
||||
case KeyboardMode.NumericOnly:
|
||||
// 只允许数字,禁用小数点
|
||||
SetButtonEnabled(".", false);
|
||||
break;
|
||||
|
||||
case KeyboardMode.DecimalOnly:
|
||||
// 允许数字和小数点
|
||||
SetButtonEnabled(".", true);
|
||||
break;
|
||||
|
||||
case KeyboardMode.LimitedRange:
|
||||
// 根据范围启用/禁用数字键
|
||||
for (int i = 0; i <= 9; i++)
|
||||
{
|
||||
SetButtonEnabled(i.ToString(), i >= minValue && i <= maxValue);
|
||||
}
|
||||
mode = true;
|
||||
break;
|
||||
|
||||
case KeyboardMode.Default:
|
||||
default:
|
||||
// 启用所有键
|
||||
foreach (var element in FirstRow.Children)
|
||||
{
|
||||
if (element is Button button && char.IsDigit(button.Content.ToString()[0]))
|
||||
button.IsEnabled = true;
|
||||
}
|
||||
foreach (var element in SecondRow.Children)
|
||||
{
|
||||
if (element is Button button && (char.IsDigit(button.Content.ToString()[0]) || button.Content.ToString() == "."))
|
||||
button.IsEnabled = true;
|
||||
}
|
||||
foreach (var element in ThirdRow.Children)
|
||||
{
|
||||
if (element is Button button && char.IsDigit(button.Content.ToString()[0]))
|
||||
button.IsEnabled = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 设置按钮启用状态
|
||||
private void SetButtonEnabled(string content, bool enabled)
|
||||
{
|
||||
// 在第一行查找
|
||||
foreach (var element in FirstRow.Children)
|
||||
{
|
||||
if (element is Button button && button.Content.ToString() == content)
|
||||
{
|
||||
button.IsEnabled = enabled;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 在第二行查找
|
||||
foreach (var element in SecondRow.Children)
|
||||
{
|
||||
if (element is Button button && button.Content.ToString() == content)
|
||||
{
|
||||
button.IsEnabled = enabled;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 在第三行查找
|
||||
foreach (var element in ThirdRow.Children)
|
||||
{
|
||||
if (element is Button button && button.Content.ToString() == content)
|
||||
{
|
||||
button.IsEnabled = enabled;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 数字键点击事件
|
||||
private void KeyButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (mode && PreviewTextBox.Text.Length > 0) return;
|
||||
Button button = sender as Button;
|
||||
if (button != null && button.IsEnabled)
|
||||
{
|
||||
string keyValue = button.Content.ToString();
|
||||
PreviewTextBox.Text += keyValue;
|
||||
|
||||
// 触发按键事件
|
||||
// KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Character, keyValue));
|
||||
}
|
||||
}
|
||||
|
||||
// 退格键点击事件
|
||||
private void Backspace_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (PreviewTextBox.Text.Length > 0)
|
||||
{
|
||||
PreviewTextBox.Text = PreviewTextBox.Text.Substring(0, PreviewTextBox.Text.Length - 1);
|
||||
|
||||
// 触发退格事件
|
||||
// KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Backspace, ""));
|
||||
}
|
||||
}
|
||||
|
||||
// 回车键点击事件
|
||||
private void Enter_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 触发回车事件
|
||||
KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Enter, PreviewTextBox.Text));
|
||||
|
||||
// 隐藏键盘
|
||||
this.Hide();
|
||||
}
|
||||
|
||||
// 隐藏键点击事件
|
||||
private void Hide_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
KeyPressed?.Invoke(this, new KeyPressedEventArgs(KeyType.Hide, ""));
|
||||
// 隐藏键盘
|
||||
this.Hide();
|
||||
}
|
||||
|
||||
public class KeyPressedEventArgs : EventArgs
|
||||
{
|
||||
public KeyType KeyType { get; }
|
||||
public string KeyValue { get; }
|
||||
|
||||
public KeyPressedEventArgs(KeyType keyType, string keyValue)
|
||||
{
|
||||
KeyType = keyType;
|
||||
KeyValue = keyValue;
|
||||
}
|
||||
}
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 初始化为默认模式
|
||||
// SetKeyboardMode(KeyboardMode.Default);
|
||||
PreviewTextBox.Text = null;
|
||||
mode = false;
|
||||
}
|
||||
}
|
||||
// 按键类型枚举
|
||||
public enum KeyType
|
||||
{
|
||||
Character,
|
||||
Backspace,
|
||||
Enter,
|
||||
Hide
|
||||
}
|
||||
|
||||
// 按键事件参数
|
||||
public class KeyPressedEventArgs : EventArgs
|
||||
{
|
||||
public KeyType KeyType { get; }
|
||||
public string KeyValue { get; }
|
||||
|
||||
public KeyPressedEventArgs(KeyType keyType, string keyValue)
|
||||
{
|
||||
KeyType = keyType;
|
||||
KeyValue = keyValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 63 KiB |
@@ -0,0 +1,27 @@
|
||||
<Window x:Class="SunlightCentralizedControlManagement_SCCM_.Login"
|
||||
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:input="clr-namespace:System.Windows.Input;assembly=PresentationCore"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
mc:Ignorable="d" Title="Login"
|
||||
Height="320" Width="248" MaxHeight="320" MaxWidth="248" ResizeMode="NoResize"
|
||||
Loaded="Window_Loaded" WindowStyle="None">
|
||||
<Grid>
|
||||
<Rectangle HorizontalAlignment="Center" Height="118" VerticalAlignment="Top" Width="248">
|
||||
<Rectangle.Fill>
|
||||
<ImageBrush ImageSource="/sunlight_logotext.jpg"/>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
<ComboBox x:Name="User" Height="30" Margin="60,164,10,0" VerticalAlignment="Top" FontSize="14" KeyUp="SearchBox_OnKeyDownd" IsEditable="True"/>
|
||||
<PasswordBox x:Name="Pasword" Height="30" Margin="60,210,10,0" VerticalAlignment="Top" FontSize="14" KeyUp="SearchBox_OnKeyDownd"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="30" Margin="10,163,0,0" TextWrapping="Wrap" Text="账号:" VerticalAlignment="Top" Width="45" FontSize="20" RenderTransformOrigin="0.833,0.478"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="30" Margin="10,208,0,0" TextWrapping="Wrap" Text="密码:" VerticalAlignment="Top" Width="45" FontSize="20" RenderTransformOrigin="0.833,0.478"/>
|
||||
<Button x:Name="logon" Content="登录" HorizontalAlignment="Left" Height="33" Margin="40,264,0,0" VerticalAlignment="Top" Width="64" Click="Button_Click_1" Background="#FFDDDDDD" Foreground="Black" BorderBrush="White"/>
|
||||
<Button Content="退出" HorizontalAlignment="Right" Height="33" Margin="140,264,40,0" VerticalAlignment="Top" Width="64" Click="Button_Click" Background="#FFDDDDDD" Foreground="Black" BorderBrush="White"/>
|
||||
<TextBlock Height="30" Margin="15,115,15,0" TextWrapping="Wrap" Text="中央控制平台" VerticalAlignment="Top" FontSize="20" HorizontalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,119 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_
|
||||
{
|
||||
/// <summary>
|
||||
/// Login.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class Login : Window
|
||||
{
|
||||
public string INIPath = Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini"; //配置文件路径
|
||||
|
||||
private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径
|
||||
DataTable logindataTable = new DataTable(); //建立login缓存
|
||||
DataTable logindataT = new DataTable(); //建立login缓存
|
||||
|
||||
public Login()
|
||||
{
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
InitializeComponent();
|
||||
|
||||
UserClass.LogGing.LogGingDATA("SCCM_start");
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e) //退出按钮事件
|
||||
{
|
||||
UserClass.LogGing.LogGingDATA("SCCM_LogStop");
|
||||
Window window = Window.GetWindow(this);
|
||||
window.Close();
|
||||
}
|
||||
|
||||
private void Button_Click_1(object sender, RoutedEventArgs e) //登录按钮事件
|
||||
{
|
||||
string user = User.Text;
|
||||
string pasword = Pasword.Password; ;
|
||||
try
|
||||
{
|
||||
if (User.Text == "") //检查用户名输入
|
||||
{
|
||||
System.Windows.MessageBox.Show(Properties.Resources.NPERR, "SCCM", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((user == "engineer" || user == "ENGINEER") && (pasword == "engineer" || pasword == "ENGINEER")) //确认账号是否是工程师
|
||||
{
|
||||
App.USER_Purview = "ENGINEER";//传入用户名
|
||||
|
||||
Window window = Window.GetWindow(this);
|
||||
MainWindow Main = new MainWindow();
|
||||
window.Close();
|
||||
UserClass.LogGing.LogGingDATA("LOGon = ENGINEER");
|
||||
|
||||
Main.ShowDialog();//实例化并置顶打开窗口
|
||||
}
|
||||
else
|
||||
{
|
||||
string paw = logindataT.Select("Name='" + user + "'").First().Field<string>("Password");
|
||||
if (paw == null) paw = "";
|
||||
|
||||
if (paw == pasword)
|
||||
{
|
||||
App.USER_Purview = User.Text;//传入用户名
|
||||
|
||||
Window window = Window.GetWindow(this);
|
||||
MainWindow Main = new MainWindow();
|
||||
window.Close();
|
||||
|
||||
UserClass.LogGing.LogGingDATA("LOGon = " + user);
|
||||
Main.ShowDialog();//实例化并置顶打开窗口
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Windows.MessageBox.Show(Properties.Resources.NPERR, "SCCM", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
System.Windows.MessageBox.Show("Unable to start. Check the log for details.", "SCCM", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void SearchBox_OnKeyDownd(object sender, System.Windows.Input.KeyEventArgs e) //回车跳转功能
|
||||
{
|
||||
if (e.Key == Key.Enter)
|
||||
{
|
||||
//SendKeys.SendWait("{Tab}");
|
||||
UserClass.PressKey.PressKeys(Keys.Tab, false);
|
||||
UserClass.PressKey.PressKeys(Keys.Tab, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
logon.IsEnabled = false;
|
||||
SQLiteHelper db = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
db.Open(); //打开数据库
|
||||
logindataTable = db.ExecuteDataSet("select * from USER where Groups<>'CHIEF'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
logindataT = db.ExecuteDataSet("select * from USER ", null).Tables[0];
|
||||
db.Close();
|
||||
User.ItemsSource = logindataTable.AsEnumerable().Select(rowdata => rowdata.Field<string>("Name"));//转换
|
||||
logon.IsEnabled = true; //允许登录按钮
|
||||
UserClass.PressKey.PressKeys(Keys.Tab, false);
|
||||
UserClass.PressKey.PressKeys(Keys.Tab, true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,10 @@
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
|
||||
mc:Ignorable="d"
|
||||
Loaded="Window_Loaded"
|
||||
Title="SUNLIGHT SCCM b0.0.1 (2024/08/10)"
|
||||
Height="1080" Width="1920" Background="#FF003640"
|
||||
WindowState ="Maximized" WindowStyle="None">
|
||||
WindowStyle="None" ResizeMode="NoResize">
|
||||
<Window.Resources>
|
||||
<Storyboard x:Key="MenuOpen">
|
||||
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="GridMenu">
|
||||
@@ -41,11 +42,21 @@
|
||||
<Grid x:Name="GridTitle" Height="50" VerticalAlignment="Top" Background="#FF006361" MouseDown="GridTitle_MouseDown" Margin="60,0,0,0">
|
||||
<TextBlock Text="Sunlight Centralized Control Management (SCCM)" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22" Foreground="White"/>
|
||||
<StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<ComboBox x:Name="username" VerticalAlignment="Center" FontSize="14" DropDownClosed="username_DropDownClosed" HorizontalAlignment="Right" Margin="0,0,5,0" Width="100" Foreground="White">
|
||||
<ComboBox.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type ComboBoxItem}">
|
||||
<Setter Property="Foreground" Value="Black">
|
||||
</Setter>
|
||||
</Style>
|
||||
</ComboBox.ItemContainerStyle>
|
||||
</ComboBox>
|
||||
<TextBlock Text="{Binding Sys_Time}" VerticalAlignment="Center" FontSize="14" Foreground="White"/>
|
||||
<materialDesign:PopupBox Foreground="White" Margin="10" PlacementMode="BottomAndAlignRightEdges" StaysOpen="False">
|
||||
<StackPanel Width="150">
|
||||
<Button Content="{x:Static lang:Resources.USER}"/>
|
||||
<Button Content="{x:Static lang:Resources.SysSet}" Click="ButtonSYS_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.USER}" Click="ButtonUSER_Click" x:Name="User_" IsEnabled="{Binding USER_Capacity[1]}"/>
|
||||
<Button Content="{x:Static lang:Resources.SysSet}" Click="ButtonSYS_Click" x:Name="SysSet_" IsEnabled="{Binding USER_Capacity[0]}"/>
|
||||
<Separator/>
|
||||
<Button Content="{x:Static lang:Resources.Permit}" Click="ButtonPermit_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Help}" Click="Buttonhelp_Click"/>
|
||||
<Separator/>
|
||||
<Button x:Name="ButtonMinimize" Content="{x:Static lang:Resources.Minimize}" Click="ButtonMinimize_Click"/>
|
||||
@@ -66,7 +77,7 @@
|
||||
<materialDesign:PackIcon Kind="Menu" Foreground="#FF00204E" Width="25" Height="25"/>
|
||||
</Button>
|
||||
</Grid>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD" >
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Whole">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="ListBox" Width="25" Height="25" Margin="10" VerticalAlignment="Center" />
|
||||
@@ -79,31 +90,31 @@
|
||||
<TextBlock Text="{x:Static lang:Resources.Monitor}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_ProductionPlanning">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="ClipboardTextClock" Width="25" Height="25" Margin="10" VerticalAlignment="Center" />
|
||||
<TextBlock Text="{x:Static lang:Resources.ProductionPlanning}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Curve">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Curve" IsEnabled="{Binding USER_Capacity[9]}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="ChartBellCurve" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Curve}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Machine" IsEnabled="{Binding USER_Capacity[2]}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Settings" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Machine}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Programgroup">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Programgroup" IsEnabled="{Binding USER_Capacity[9]}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Database" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Programgroup}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_ConveyorCenters" IsEnabled="{Binding USER_Capacity[12]}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Pipe" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.ConveyorCenters}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -115,7 +126,13 @@
|
||||
|
||||
<Grid x:Name="gdMian" Background="White" Margin="60,50,0,0">
|
||||
<ContentControl x:Name="Picture"/>
|
||||
<Grid x:Name="Cdk_page" Visibility="Collapsed" Margin="0,0,0,0" Background="White" Opacity="0.8">
|
||||
<TextBlock Height="150" Margin="0,0,0,300" TextWrapping="Wrap" Text="注册信息到期,为避免影响系统使用请及时提交注册信息!" Width="500" FontSize="34" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
<TextBlock x:Name="keytext" Height="50" Margin="0,0,0,100" TextWrapping="Wrap" Width="500" FontSize="34" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Red"/>
|
||||
<TextBlock Height="50" Margin="0,0,0,0" TextWrapping="Wrap" Text="请联系 SUNLIGHT" Width="300" FontSize="34" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
<Button Content="{x:Static lang:Resources.Permit }" HorizontalAlignment="Center" Height="50" Margin="200,100,0,-100" VerticalAlignment="Center" Width="150" FontSize="24" BorderBrush="{x:Null}" Background="DarkGray" Click="ButtonPermit_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Help }" HorizontalAlignment="Center" Height="50" Margin="0,100,200,-100" VerticalAlignment="Center" Width="150" FontSize="24" BorderBrush="{x:Null}" Background="DarkGray" Click="Buttonhelp_Click"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -1,8 +1,11 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
@@ -11,10 +14,13 @@ using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Interop;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_
|
||||
@@ -24,12 +30,68 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
/// </summary>
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
public static string user_;
|
||||
public static DataTable InfData = new DataTable();
|
||||
// public static string[] Inf_string ;
|
||||
public UserInformation userInformation;
|
||||
// public UserInf userInf;
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
DataContext = new MainWindowViewModel();
|
||||
InitializeComponent();
|
||||
|
||||
CountDown();
|
||||
CDkey_();
|
||||
if (App.USER_Purview != "ENGINEER")
|
||||
{
|
||||
username.ItemsSource = MainWindowViewModel.USER_data.Select(
|
||||
"Groups='" + MainWindowViewModel.USER_data.Select("Name='" + App.USER_Purview + "'").
|
||||
First().Field<string>("Groups").ToString() + "'").
|
||||
AsEnumerable().Select(rowdata => rowdata.Field<string>("Name")).ToList();
|
||||
}
|
||||
user_ = App.USER_Purview;
|
||||
username.Text = user_;
|
||||
|
||||
/**添加提示信息栏**/
|
||||
InfData.Columns.Add("Machine", Type.GetType("System.String"));
|
||||
InfData.Columns.Add("Information", Type.GetType("System.String"));
|
||||
InfData.Columns.Add("Code", Type.GetType("System.String"));
|
||||
InfData.Columns.Add("ID", Type.GetType("System.Int32"));
|
||||
|
||||
InfData.RowChanged += new DataRowChangeEventHandler(InfTable);//
|
||||
}
|
||||
private void InfTable(object sender, DataRowChangeEventArgs e)//触发行改变事件
|
||||
{
|
||||
if (userInformation == null || !userInformation.IsLoaded)//窗口不存在及创建
|
||||
{
|
||||
userInformation = new UserInformation();
|
||||
userInformation.Topmost = true;
|
||||
userInformation.Show();
|
||||
userInformation.Activate();
|
||||
}
|
||||
else
|
||||
{//窗口纯在及置顶
|
||||
userInformation.Activate();
|
||||
if (userInformation.WindowState == WindowState.Minimized) userInformation.WindowState = WindowState.Normal;
|
||||
}
|
||||
}
|
||||
/* private void UserInfTable(string dat)//触发行改变事件
|
||||
{
|
||||
userInf.Inf_DAT = dat;
|
||||
if (userInf == null || !userInf.IsLoaded)//窗口不存在及创建
|
||||
{
|
||||
userInf = new UserInf();
|
||||
userInf.Topmost = true;
|
||||
userInf.Show();
|
||||
userInf.Activate();
|
||||
}
|
||||
else
|
||||
{//窗口纯在及置顶
|
||||
userInf.Activate();
|
||||
if (userInf.WindowState == WindowState.Minimized) userInf.WindowState = WindowState.Normal;
|
||||
}
|
||||
}*/
|
||||
|
||||
private void ButtonPopUpLogout_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
@@ -74,9 +136,9 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
gdMian.Margin = new Thickness(e.NewSize.Width, 50, 0, 0);
|
||||
}
|
||||
|
||||
private void ListViewItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
private void ListViewItem_ProductionPlanning(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
|
||||
Picture.Content = new View.ProductionPlanningView();
|
||||
}
|
||||
private void ListViewItem_Whole(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
@@ -86,6 +148,10 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
{
|
||||
Picture.Content = new View.MonitorView();
|
||||
}
|
||||
private void ListViewItem_Machine(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.MachinesView();
|
||||
}
|
||||
private void ListViewItem_Curve(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.CurveView();
|
||||
@@ -94,15 +160,117 @@ namespace SunlightCentralizedControlManagement_SCCM_
|
||||
{
|
||||
Picture.Content = new View.ProgramgroupView();
|
||||
}
|
||||
private void ListViewItem_ConveyorCenters(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.DispenseView();
|
||||
}
|
||||
private void Buttonhelp_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WindowsView.Help help_page = new WindowsView.Help();
|
||||
help_page.Show();
|
||||
}
|
||||
|
||||
private void ButtonSYS_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.SYSSetView();
|
||||
}
|
||||
private void ButtonUSER_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WindowsView.User user_ = new WindowsView.User();
|
||||
user_.Show();
|
||||
}
|
||||
private void ButtonPermit_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WindowsView.CDKEY cDKEY = new WindowsView.CDKEY();
|
||||
cDKEY.Show();
|
||||
}
|
||||
|
||||
public void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环
|
||||
{
|
||||
Interval = TimeSpan.FromHours(1)
|
||||
};
|
||||
timer1s.Tick += Tick_Event_1H;
|
||||
timer1s.Start();
|
||||
}
|
||||
void Tick_Event_1H(object sender, EventArgs e)//Tick_Event周期执行事件
|
||||
{
|
||||
CDkey_();
|
||||
}
|
||||
|
||||
private static UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
private void CDkey_()
|
||||
{
|
||||
try
|
||||
{
|
||||
string id_1 = MainWindowViewModel.SN_ID.Substring(5, 1) + MainWindowViewModel.SN_ID.Substring(0, 1) +
|
||||
MainWindowViewModel.SN_ID.Substring(4, 1) + MainWindowViewModel.SN_ID.Substring(1, 1) +
|
||||
MainWindowViewModel.SN_ID.Substring(3, 1) + MainWindowViewModel.SN_ID.Substring(2, 1);
|
||||
if ((id_1 == MainWindowViewModel.SN_KEY.Substring(0, 6)) && (MainWindowViewModel.SN_KEY.Length == 16))
|
||||
{
|
||||
if (CRCcheck16.ToCRC16(CRCcheck16.StringToHexByte(MainWindowViewModel.SN_KEY.Substring(0, 12)), true) == MainWindowViewModel.SN_KEY.Substring(12, 4)) //校验key的crc校验值
|
||||
{
|
||||
string Y = (2255 - StrToInt.To16Convert10(MainWindowViewModel.SN_KEY.Substring(6, 2))).ToString();
|
||||
string M = (255 - StrToInt.To16Convert10(MainWindowViewModel.SN_KEY.Substring(8, 2))).ToString();
|
||||
string D = (255 - StrToInt.To16Convert10(MainWindowViewModel.SN_KEY.Substring(10, 2))).ToString();
|
||||
|
||||
string YY = DateTime.Now.ToString("yyyy");
|
||||
string MM = DateTime.Now.ToString("MM");
|
||||
string DD = DateTime.Now.ToString("dd");
|
||||
|
||||
keytext.Text = "注册到期时间: " + Y + "/" + M + "/" + D;
|
||||
|
||||
if (string.Compare(Y, YY) < 0)
|
||||
{
|
||||
if (string.Compare(M, MM) < 0)
|
||||
{
|
||||
if (string.Compare(D, DD) < 0)
|
||||
{
|
||||
Configini.IniWritevalue("SN", " SN1", "0000000000000000");
|
||||
Cdk_page.Visibility = Visibility.Visible; //cdk_pageT_T = -1; //防止触发倒计时
|
||||
}
|
||||
else if ((int.Parse(D) - int.Parse(DD)) <= 10)//提前10天提醒
|
||||
{
|
||||
Cdk_page.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Cdk_page.Visibility = Visibility.Visible;
|
||||
keytext.Text = "许可证安全校验错误请重新激活";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Cdk_page.Visibility = Visibility.Visible;
|
||||
keytext.Text = "计算机信息变更当前许可证失效";
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
keytext.Text = "许可证安全校验错误请重新激活";
|
||||
}
|
||||
}
|
||||
|
||||
private void username_DropDownClosed(object sender, EventArgs e)
|
||||
{
|
||||
MainWindowViewModel.USERCapacity(username.Text);
|
||||
}
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)//打开页面
|
||||
{
|
||||
var windowHandle = new WindowInteropHelper(this).Handle;
|
||||
var currentScreen = Screen.FromHandle(windowHandle);
|
||||
|
||||
System.Drawing.Rectangle rectangle = currentScreen.WorkingArea;
|
||||
|
||||
this.Left = rectangle.Left;
|
||||
this.Top=rectangle.Top;
|
||||
this.Width = rectangle.Width;
|
||||
this.Height = rectangle.Height;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -150,21 +150,12 @@
|
||||
<data name="HistoryRecords" xml:space="preserve">
|
||||
<value>History</value>
|
||||
</data>
|
||||
<data name="HistoryRecords1" xml:space="preserve">
|
||||
<value>History</value>
|
||||
</data>
|
||||
<data name="InOut" xml:space="preserve">
|
||||
<value>I/O</value>
|
||||
</data>
|
||||
<data name="InOut1" xml:space="preserve">
|
||||
<value>I/O</value>
|
||||
</data>
|
||||
<data name="lock" xml:space="preserve">
|
||||
<value>Lock/Unlock</value>
|
||||
</data>
|
||||
<data name="lock1" xml:space="preserve">
|
||||
<value>Lock/Unlock</value>
|
||||
</data>
|
||||
<data name="New" xml:space="preserve">
|
||||
<value>New</value>
|
||||
</data>
|
||||
@@ -270,15 +261,9 @@
|
||||
<data name="Abnormal" xml:space="preserve">
|
||||
<value>Abnormal</value>
|
||||
</data>
|
||||
<data name="Abnormal1" xml:space="preserve">
|
||||
<value>Abnormal</value>
|
||||
</data>
|
||||
<data name="Auto" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="Auto1" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="Await" xml:space="preserve">
|
||||
<value>Await</value>
|
||||
</data>
|
||||
@@ -300,9 +285,6 @@
|
||||
<data name="LineUp" xml:space="preserve">
|
||||
<value>Line Up</value>
|
||||
</data>
|
||||
<data name="LineUp1" xml:space="preserve">
|
||||
<value>Line Up</value>
|
||||
</data>
|
||||
<data name="Notimplementation" xml:space="preserve">
|
||||
<value>Not Implementation</value>
|
||||
</data>
|
||||
@@ -354,15 +336,9 @@
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ID1" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Insert" xml:space="preserve">
|
||||
<value>Insert</value>
|
||||
</data>
|
||||
<data name="Insert1" xml:space="preserve">
|
||||
<value>Insert</value>
|
||||
</data>
|
||||
<data name="Recover" xml:space="preserve">
|
||||
<value>Recover</value>
|
||||
</data>
|
||||
@@ -384,9 +360,6 @@
|
||||
<data name="AddWater" xml:space="preserve">
|
||||
<value>Add water</value>
|
||||
</data>
|
||||
<data name="AddWater1" xml:space="preserve">
|
||||
<value>Add water</value>
|
||||
</data>
|
||||
<data name="Cooling" xml:space="preserve">
|
||||
<value>Cooling</value>
|
||||
</data>
|
||||
@@ -447,9 +420,6 @@
|
||||
<data name="AddTheMedicine" xml:space="preserve">
|
||||
<value>Add The Medicine</value>
|
||||
</data>
|
||||
<data name="AddTheMedicine1" xml:space="preserve">
|
||||
<value>Add The Medicine</value>
|
||||
</data>
|
||||
<data name="CallDistribution" xml:space="preserve">
|
||||
<value>Call Distribution</value>
|
||||
</data>
|
||||
@@ -549,9 +519,6 @@
|
||||
<data name="Invalidfeatures" xml:space="preserve">
|
||||
<value>Invalid features</value>
|
||||
</data>
|
||||
<data name="Invalidfeatures1" xml:space="preserve">
|
||||
<value>Invalid features</value>
|
||||
</data>
|
||||
<data name="NO" xml:space="preserve">
|
||||
<value>NO</value>
|
||||
</data>
|
||||
@@ -567,9 +534,6 @@
|
||||
<data name="Advance" xml:space="preserve">
|
||||
<value>Advance</value>
|
||||
</data>
|
||||
<data name="Advance1" xml:space="preserve">
|
||||
<value>Advance</value>
|
||||
</data>
|
||||
<data name="Beginning" xml:space="preserve">
|
||||
<value>Beginning</value>
|
||||
</data>
|
||||
@@ -672,9 +636,6 @@
|
||||
<data name="Implementation" xml:space="preserve">
|
||||
<value>Implementation</value>
|
||||
</data>
|
||||
<data name="Implementation1" xml:space="preserve">
|
||||
<value>Implementation</value>
|
||||
</data>
|
||||
<data name="process_not" xml:space="preserve">
|
||||
<value>The process does not exist</value>
|
||||
</data>
|
||||
@@ -702,9 +663,6 @@
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Language1" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Paused" xml:space="preserve">
|
||||
<value>Paused</value>
|
||||
</data>
|
||||
@@ -786,15 +744,9 @@
|
||||
<data name="High-waterlevel" xml:space="preserve">
|
||||
<value>High-water level</value>
|
||||
</data>
|
||||
<data name="High-waterlevel1" xml:space="preserve">
|
||||
<value>High-water level</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel" xml:space="preserve">
|
||||
<value>Low-water level</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel1" xml:space="preserve">
|
||||
<value>Low-water level</value>
|
||||
</data>
|
||||
<data name="ClothWheel" xml:space="preserve">
|
||||
<value>Cloth Wheel</value>
|
||||
</data>
|
||||
@@ -822,9 +774,6 @@
|
||||
<data name="LnsufficientPower" xml:space="preserve">
|
||||
<value>Lnsufficient Power</value>
|
||||
</data>
|
||||
<data name="LnsufficientPower1" xml:space="preserve">
|
||||
<value>Lnsufficient Power</value>
|
||||
</data>
|
||||
<data name="WorkingStatus" xml:space="preserve">
|
||||
<value>Working Status</value>
|
||||
</data>
|
||||
@@ -942,4 +891,205 @@
|
||||
<data name="Jump" xml:space="preserve">
|
||||
<value>Jump</value>
|
||||
</data>
|
||||
<data name="View" xml:space="preserve">
|
||||
<value>View</value>
|
||||
</data>
|
||||
<data name="Delayed" xml:space="preserve">
|
||||
<value>Delayed</value>
|
||||
</data>
|
||||
<data name="Multi" xml:space="preserve">
|
||||
<value>Multi</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="DoesNotExist" xml:space="preserve">
|
||||
<value>Does Not Exist</value>
|
||||
</data>
|
||||
<data name="EHCIP" xml:space="preserve">
|
||||
<value>Editing historical crafts is prohibited</value>
|
||||
</data>
|
||||
<data name="ENWOIP" xml:space="preserve">
|
||||
<value>Editing non-pending work order is prohibited</value>
|
||||
</data>
|
||||
<data name="log" xml:space="preserve">
|
||||
<value>Log</value>
|
||||
</data>
|
||||
<data name="NPERR" xml:space="preserve">
|
||||
<value>The account number or password is incorrect</value>
|
||||
</data>
|
||||
<data name="Permit" xml:space="preserve">
|
||||
<value>Permit</value>
|
||||
</data>
|
||||
<data name="Validtime" xml:space="preserve">
|
||||
<value>Valid Time</value>
|
||||
</data>
|
||||
<data name="RIS" xml:space="preserve">
|
||||
<value>Registration is successful</value>
|
||||
</data>
|
||||
<data name="TRCE" xml:space="preserve">
|
||||
<value>The registration code has expired</value>
|
||||
</data>
|
||||
<data name="void_" xml:space="preserve">
|
||||
<value>Void</value>
|
||||
</data>
|
||||
<data name="Plan" xml:space="preserve">
|
||||
<value>Plan</value>
|
||||
</data>
|
||||
<data name="attached" xml:space="preserve">
|
||||
<value>Attached</value>
|
||||
</data>
|
||||
<data name="ColorNumber" xml:space="preserve">
|
||||
<value>ColorNumber</value>
|
||||
</data>
|
||||
<data name="Client" xml:space="preserve">
|
||||
<value>Client</value>
|
||||
</data>
|
||||
<data name="ClothSpecies" xml:space="preserve">
|
||||
<value>ClothSpecies</value>
|
||||
</data>
|
||||
<data name="ClothWeight" xml:space="preserve">
|
||||
<value>ClothWeight</value>
|
||||
</data>
|
||||
<data name="BathRatio" xml:space="preserve">
|
||||
<value>BathRatio</value>
|
||||
</data>
|
||||
<data name="Total" xml:space="preserve">
|
||||
<value>Total</value>
|
||||
</data>
|
||||
<data name="ColorName" xml:space="preserve">
|
||||
<value>ColorName</value>
|
||||
</data>
|
||||
<data name="CloseTheConnection" xml:space="preserve">
|
||||
<value>Close the connection</value>
|
||||
</data>
|
||||
<data name="Online" xml:space="preserve">
|
||||
<value>Online</value>
|
||||
</data>
|
||||
<data name="ERR" xml:space="preserve">
|
||||
<value>ERR</value>
|
||||
</data>
|
||||
<data name="Fail" xml:space="preserve">
|
||||
<value>Fail</value>
|
||||
</data>
|
||||
<data name="LtemizedSending" xml:space="preserve">
|
||||
<value>LtemizedSending</value>
|
||||
</data>
|
||||
<data name="NotSent" xml:space="preserve">
|
||||
<value>Not Sent</value>
|
||||
</data>
|
||||
<data name="DNotSent" xml:space="preserve">
|
||||
<value>Details Were Not Sent</value>
|
||||
</data>
|
||||
<data name="LinkDispenser" xml:space="preserve">
|
||||
<value>Link Dispenser</value>
|
||||
</data>
|
||||
<data name="TPLHBU" xml:space="preserve">
|
||||
<value>The picking list has been used</value>
|
||||
</data>
|
||||
<data name="TTAE" xml:space="preserve">
|
||||
<value>The ticket already exists</value>
|
||||
</data>
|
||||
<data name="Details" xml:space="preserve">
|
||||
<value>Details</value>
|
||||
</data>
|
||||
<data name="ProductCode" xml:space="preserve">
|
||||
<value>ProductCode</value>
|
||||
</data>
|
||||
<data name="ProductName" xml:space="preserve">
|
||||
<value>ProductName</value>
|
||||
</data>
|
||||
<data name="ProductType" xml:space="preserve">
|
||||
<value>ProductType</value>
|
||||
</data>
|
||||
<data name="Grams" xml:space="preserve">
|
||||
<value>Grams</value>
|
||||
</data>
|
||||
<data name="DispenseGrams" xml:space="preserve">
|
||||
<value>Actual</value>
|
||||
</data>
|
||||
<data name="DispenseEndTime" xml:space="preserve">
|
||||
<value>EndTime</value>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>Cancel</value>
|
||||
</data>
|
||||
<data name="Manual" xml:space="preserve">
|
||||
<value>Manual</value>
|
||||
</data>
|
||||
<data name="Not_a" xml:space="preserve">
|
||||
<value>NOT AVAILABLE</value>
|
||||
</data>
|
||||
<data name="Screen" xml:space="preserve">
|
||||
<value>Screen</value>
|
||||
</data>
|
||||
<data name="Volume" xml:space="preserve">
|
||||
<value>Volume</value>
|
||||
</data>
|
||||
<data name="DispenseModule" xml:space="preserve">
|
||||
<value>DispenseModule</value>
|
||||
</data>
|
||||
<data name="Information" xml:space="preserve">
|
||||
<value>Information</value>
|
||||
</data>
|
||||
<data name="RTRM" xml:space="preserve">
|
||||
<value>Repeat the raw material</value>
|
||||
</data>
|
||||
<data name="Not_M" xml:space="preserve">
|
||||
<value>Machine does not exist</value>
|
||||
</data>
|
||||
<data name="dye" xml:space="preserve">
|
||||
<value>Dye</value>
|
||||
</data>
|
||||
<data name="chemicals" xml:space="preserve">
|
||||
<value>Chemicals</value>
|
||||
</data>
|
||||
<data name="powder" xml:space="preserve">
|
||||
<value>Powder</value>
|
||||
</data>
|
||||
<data name="TMNR" xml:space="preserve">
|
||||
<value>The machine is not ready</value>
|
||||
</data>
|
||||
<data name="user_lock" xml:space="preserve">
|
||||
<value>LOCK</value>
|
||||
</data>
|
||||
<data name="user_unlock" xml:space="preserve">
|
||||
<value>UNLOCK</value>
|
||||
</data>
|
||||
<data name="VOICE" xml:space="preserve">
|
||||
<value>Voice</value>
|
||||
</data>
|
||||
<data name="TESTVOICE" xml:space="preserve">
|
||||
<value>Test Voice</value>
|
||||
</data>
|
||||
<data name="Speed" xml:space="preserve">
|
||||
<value>Speed</value>
|
||||
</data>
|
||||
<data name="Vol" xml:space="preserve">
|
||||
<value>Vol</value>
|
||||
</data>
|
||||
<data name="Pequest" xml:space="preserve">
|
||||
<value>Pequest</value>
|
||||
</data>
|
||||
<data name="Subroutine" xml:space="preserve">
|
||||
<value>Subroutine</value>
|
||||
</data>
|
||||
<data name="DispenseException" xml:space="preserve">
|
||||
<value>Dispense Exception</value>
|
||||
</data>
|
||||
<data name="_Auto" xml:space="preserve">
|
||||
<value>Manual/Automatic</value>
|
||||
</data>
|
||||
<data name="Swing" xml:space="preserve">
|
||||
<value>Swing</value>
|
||||
</data>
|
||||
<data name="Start" xml:space="preserve">
|
||||
<value>Start</value>
|
||||
</data>
|
||||
<data name="ProgramName" xml:space="preserve">
|
||||
<value>Program Name</value>
|
||||
</data>
|
||||
<data name="Machines" xml:space="preserve">
|
||||
<value>Machines</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -150,21 +150,12 @@
|
||||
<data name="HistoryRecords" xml:space="preserve">
|
||||
<value>History</value>
|
||||
</data>
|
||||
<data name="HistoryRecords1" xml:space="preserve">
|
||||
<value>History</value>
|
||||
</data>
|
||||
<data name="InOut" xml:space="preserve">
|
||||
<value>I/O</value>
|
||||
</data>
|
||||
<data name="InOut1" xml:space="preserve">
|
||||
<value>I/O</value>
|
||||
</data>
|
||||
<data name="lock" xml:space="preserve">
|
||||
<value>lock</value>
|
||||
</data>
|
||||
<data name="lock1" xml:space="preserve">
|
||||
<value>lock</value>
|
||||
</data>
|
||||
<data name="New" xml:space="preserve">
|
||||
<value>New</value>
|
||||
</data>
|
||||
@@ -270,15 +261,9 @@
|
||||
<data name="Abnormal" xml:space="preserve">
|
||||
<value>Abnormal</value>
|
||||
</data>
|
||||
<data name="Abnormal1" xml:space="preserve">
|
||||
<value>Abnormal</value>
|
||||
</data>
|
||||
<data name="Auto" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="Auto1" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="Await" xml:space="preserve">
|
||||
<value>Await</value>
|
||||
</data>
|
||||
@@ -300,9 +285,6 @@
|
||||
<data name="LineUp" xml:space="preserve">
|
||||
<value>LineUp</value>
|
||||
</data>
|
||||
<data name="LineUp1" xml:space="preserve">
|
||||
<value>LineUp</value>
|
||||
</data>
|
||||
<data name="Notimplementation" xml:space="preserve">
|
||||
<value>Notimplementation</value>
|
||||
</data>
|
||||
@@ -354,15 +336,9 @@
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ID1" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Insert" xml:space="preserve">
|
||||
<value>Insert</value>
|
||||
</data>
|
||||
<data name="Insert1" xml:space="preserve">
|
||||
<value>Insert</value>
|
||||
</data>
|
||||
<data name="Recover" xml:space="preserve">
|
||||
<value>Recover</value>
|
||||
</data>
|
||||
@@ -384,9 +360,6 @@
|
||||
<data name="AddWater" xml:space="preserve">
|
||||
<value>Add water</value>
|
||||
</data>
|
||||
<data name="AddWater1" xml:space="preserve">
|
||||
<value>Add water</value>
|
||||
</data>
|
||||
<data name="Cooling" xml:space="preserve">
|
||||
<value>Cooling</value>
|
||||
</data>
|
||||
@@ -447,9 +420,6 @@
|
||||
<data name="AddTheMedicine" xml:space="preserve">
|
||||
<value>AddTheMedicine</value>
|
||||
</data>
|
||||
<data name="AddTheMedicine1" xml:space="preserve">
|
||||
<value>AddTheMedicine</value>
|
||||
</data>
|
||||
<data name="CallDistribution" xml:space="preserve">
|
||||
<value>CallDistribution</value>
|
||||
</data>
|
||||
@@ -549,9 +519,6 @@
|
||||
<data name="Invalidfeatures" xml:space="preserve">
|
||||
<value>Invalid features</value>
|
||||
</data>
|
||||
<data name="Invalidfeatures1" xml:space="preserve">
|
||||
<value>Invalid features</value>
|
||||
</data>
|
||||
<data name="NO" xml:space="preserve">
|
||||
<value>NO</value>
|
||||
</data>
|
||||
@@ -567,9 +534,6 @@
|
||||
<data name="Advance" xml:space="preserve">
|
||||
<value>Advance</value>
|
||||
</data>
|
||||
<data name="Advance1" xml:space="preserve">
|
||||
<value>Advance</value>
|
||||
</data>
|
||||
<data name="Beginning" xml:space="preserve">
|
||||
<value>Beginning</value>
|
||||
</data>
|
||||
@@ -672,9 +636,6 @@
|
||||
<data name="Implementation" xml:space="preserve">
|
||||
<value>Implementation</value>
|
||||
</data>
|
||||
<data name="Implementation1" xml:space="preserve">
|
||||
<value>Implementation</value>
|
||||
</data>
|
||||
<data name="process_not" xml:space="preserve">
|
||||
<value>The process does not exist</value>
|
||||
</data>
|
||||
@@ -702,9 +663,6 @@
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Language1" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Paused" xml:space="preserve">
|
||||
<value>Paused</value>
|
||||
</data>
|
||||
@@ -786,15 +744,9 @@
|
||||
<data name="High-waterlevel" xml:space="preserve">
|
||||
<value>High-water level</value>
|
||||
</data>
|
||||
<data name="High-waterlevel1" xml:space="preserve">
|
||||
<value>High-water level</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel" xml:space="preserve">
|
||||
<value>Low-water level</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel1" xml:space="preserve">
|
||||
<value>Low-water level</value>
|
||||
</data>
|
||||
<data name="ClothWheel" xml:space="preserve">
|
||||
<value>ClothWheel</value>
|
||||
</data>
|
||||
@@ -822,9 +774,6 @@
|
||||
<data name="LnsufficientPower" xml:space="preserve">
|
||||
<value>LnsufficientPower</value>
|
||||
</data>
|
||||
<data name="LnsufficientPower1" xml:space="preserve">
|
||||
<value>LnsufficientPower</value>
|
||||
</data>
|
||||
<data name="WorkingStatus" xml:space="preserve">
|
||||
<value>WorkingStatus</value>
|
||||
</data>
|
||||
@@ -942,4 +891,205 @@
|
||||
<data name="Jump" xml:space="preserve">
|
||||
<value>Jump</value>
|
||||
</data>
|
||||
<data name="View" xml:space="preserve">
|
||||
<value>View</value>
|
||||
</data>
|
||||
<data name="Delayed" xml:space="preserve">
|
||||
<value>Delayed</value>
|
||||
</data>
|
||||
<data name="Multi" xml:space="preserve">
|
||||
<value>Multi</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="DoesNotExist" xml:space="preserve">
|
||||
<value>Does Not Exist</value>
|
||||
</data>
|
||||
<data name="EHCIP" xml:space="preserve">
|
||||
<value>Editing historical crafts is prohibited</value>
|
||||
</data>
|
||||
<data name="ENWOIP" xml:space="preserve">
|
||||
<value>Editing non-pending work order is prohibited</value>
|
||||
</data>
|
||||
<data name="log" xml:space="preserve">
|
||||
<value>Log</value>
|
||||
</data>
|
||||
<data name="NPERR" xml:space="preserve">
|
||||
<value>The account number or password is incorrect</value>
|
||||
</data>
|
||||
<data name="Permit" xml:space="preserve">
|
||||
<value>Permit</value>
|
||||
</data>
|
||||
<data name="Validtime" xml:space="preserve">
|
||||
<value>Valid time</value>
|
||||
</data>
|
||||
<data name="RIS" xml:space="preserve">
|
||||
<value>Registration is successful</value>
|
||||
</data>
|
||||
<data name="TRCE" xml:space="preserve">
|
||||
<value>trce</value>
|
||||
</data>
|
||||
<data name="void_" xml:space="preserve">
|
||||
<value>void</value>
|
||||
</data>
|
||||
<data name="Plan" xml:space="preserve">
|
||||
<value>plan</value>
|
||||
</data>
|
||||
<data name="attached" xml:space="preserve">
|
||||
<value>Attached</value>
|
||||
</data>
|
||||
<data name="ColorNumber" xml:space="preserve">
|
||||
<value>ColorNumber</value>
|
||||
</data>
|
||||
<data name="Client" xml:space="preserve">
|
||||
<value>Client</value>
|
||||
</data>
|
||||
<data name="ClothSpecies" xml:space="preserve">
|
||||
<value>ClothSpecies</value>
|
||||
</data>
|
||||
<data name="ClothWeight" xml:space="preserve">
|
||||
<value>ClothWeight</value>
|
||||
</data>
|
||||
<data name="BathRatio" xml:space="preserve">
|
||||
<value>BathRatio</value>
|
||||
</data>
|
||||
<data name="Total" xml:space="preserve">
|
||||
<value>Total</value>
|
||||
</data>
|
||||
<data name="ColorName" xml:space="preserve">
|
||||
<value>ColorName</value>
|
||||
</data>
|
||||
<data name="CloseTheConnection" xml:space="preserve">
|
||||
<value>Close the connection</value>
|
||||
</data>
|
||||
<data name="Online" xml:space="preserve">
|
||||
<value>online</value>
|
||||
</data>
|
||||
<data name="ERR" xml:space="preserve">
|
||||
<value>err</value>
|
||||
</data>
|
||||
<data name="Fail" xml:space="preserve">
|
||||
<value>fail</value>
|
||||
</data>
|
||||
<data name="LtemizedSending" xml:space="preserve">
|
||||
<value>Itemized sending</value>
|
||||
</data>
|
||||
<data name="NotSent" xml:space="preserve">
|
||||
<value>Not sent</value>
|
||||
</data>
|
||||
<data name="DNotSent" xml:space="preserve">
|
||||
<value>Details were not sent</value>
|
||||
</data>
|
||||
<data name="LinkDispenser" xml:space="preserve">
|
||||
<value>LinkDispenser</value>
|
||||
</data>
|
||||
<data name="TPLHBU" xml:space="preserve">
|
||||
<value>The picking list has been used</value>
|
||||
</data>
|
||||
<data name="TTAE" xml:space="preserve">
|
||||
<value>The ticket already exists</value>
|
||||
</data>
|
||||
<data name="Details" xml:space="preserve">
|
||||
<value>Details</value>
|
||||
</data>
|
||||
<data name="ProductCode" xml:space="preserve">
|
||||
<value>ProductCode</value>
|
||||
</data>
|
||||
<data name="ProductName" xml:space="preserve">
|
||||
<value>ProductName</value>
|
||||
</data>
|
||||
<data name="ProductType" xml:space="preserve">
|
||||
<value>ProductType</value>
|
||||
</data>
|
||||
<data name="Grams" xml:space="preserve">
|
||||
<value>Grams</value>
|
||||
</data>
|
||||
<data name="DispenseGrams" xml:space="preserve">
|
||||
<value>DispenseGrams</value>
|
||||
</data>
|
||||
<data name="DispenseEndTime" xml:space="preserve">
|
||||
<value>DispenseEndTime</value>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>Cancel</value>
|
||||
</data>
|
||||
<data name="Manual" xml:space="preserve">
|
||||
<value>Manual</value>
|
||||
</data>
|
||||
<data name="Not_a" xml:space="preserve">
|
||||
<value>NOT AVAILABLE</value>
|
||||
</data>
|
||||
<data name="Screen" xml:space="preserve">
|
||||
<value>screen</value>
|
||||
</data>
|
||||
<data name="Volume" xml:space="preserve">
|
||||
<value>Volume</value>
|
||||
</data>
|
||||
<data name="DispenseModule" xml:space="preserve">
|
||||
<value>DispenseModule</value>
|
||||
</data>
|
||||
<data name="Information" xml:space="preserve">
|
||||
<value>Information</value>
|
||||
</data>
|
||||
<data name="RTRM" xml:space="preserve">
|
||||
<value>Repeat the raw material</value>
|
||||
</data>
|
||||
<data name="Not_M" xml:space="preserve">
|
||||
<value>NOT Machine</value>
|
||||
</data>
|
||||
<data name="dye" xml:space="preserve">
|
||||
<value>dye</value>
|
||||
</data>
|
||||
<data name="chemicals" xml:space="preserve">
|
||||
<value>chemicals</value>
|
||||
</data>
|
||||
<data name="powder" xml:space="preserve">
|
||||
<value>powder</value>
|
||||
</data>
|
||||
<data name="TMNR" xml:space="preserve">
|
||||
<value>The machine is not ready</value>
|
||||
</data>
|
||||
<data name="user_lock" xml:space="preserve">
|
||||
<value>user_lock</value>
|
||||
</data>
|
||||
<data name="user_unlock" xml:space="preserve">
|
||||
<value>user_unlock</value>
|
||||
</data>
|
||||
<data name="VOICE" xml:space="preserve">
|
||||
<value>VOICE</value>
|
||||
</data>
|
||||
<data name="TESTVOICE" xml:space="preserve">
|
||||
<value>Test Voice</value>
|
||||
</data>
|
||||
<data name="Speed" xml:space="preserve">
|
||||
<value>Speed</value>
|
||||
</data>
|
||||
<data name="Vol" xml:space="preserve">
|
||||
<value>Vol</value>
|
||||
</data>
|
||||
<data name="Pequest" xml:space="preserve">
|
||||
<value>Pequest</value>
|
||||
</data>
|
||||
<data name="Subroutine" xml:space="preserve">
|
||||
<value>Subroutine</value>
|
||||
</data>
|
||||
<data name="DispenseException" xml:space="preserve">
|
||||
<value>DispenseException</value>
|
||||
</data>
|
||||
<data name="_Auto" xml:space="preserve">
|
||||
<value>Manual/Automatic</value>
|
||||
</data>
|
||||
<data name="Swing" xml:space="preserve">
|
||||
<value>Swing</value>
|
||||
</data>
|
||||
<data name="Start" xml:space="preserve">
|
||||
<value>Start</value>
|
||||
</data>
|
||||
<data name="ProgramName" xml:space="preserve">
|
||||
<value>ProgramName</value>
|
||||
</data>
|
||||
<data name="Machines" xml:space="preserve">
|
||||
<value>Machines</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -150,21 +150,12 @@
|
||||
<data name="HistoryRecords" xml:space="preserve">
|
||||
<value>历史</value>
|
||||
</data>
|
||||
<data name="HistoryRecords1" xml:space="preserve">
|
||||
<value>历史</value>
|
||||
</data>
|
||||
<data name="InOut" xml:space="preserve">
|
||||
<value>输入输出</value>
|
||||
</data>
|
||||
<data name="InOut1" xml:space="preserve">
|
||||
<value>输入输出</value>
|
||||
</data>
|
||||
<data name="lock" xml:space="preserve">
|
||||
<value>锁定/解锁</value>
|
||||
</data>
|
||||
<data name="lock1" xml:space="preserve">
|
||||
<value>锁定/解锁</value>
|
||||
</data>
|
||||
<data name="New" xml:space="preserve">
|
||||
<value>新建</value>
|
||||
</data>
|
||||
@@ -270,15 +261,9 @@
|
||||
<data name="Abnormal" xml:space="preserve">
|
||||
<value>异常</value>
|
||||
</data>
|
||||
<data name="Abnormal1" xml:space="preserve">
|
||||
<value>异常</value>
|
||||
</data>
|
||||
<data name="Auto" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="Auto1" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="Await" xml:space="preserve">
|
||||
<value>等待命令</value>
|
||||
</data>
|
||||
@@ -300,9 +285,6 @@
|
||||
<data name="LineUp" xml:space="preserve">
|
||||
<value>排队</value>
|
||||
</data>
|
||||
<data name="LineUp1" xml:space="preserve">
|
||||
<value>排队</value>
|
||||
</data>
|
||||
<data name="Notimplementation" xml:space="preserve">
|
||||
<value>未执行</value>
|
||||
</data>
|
||||
@@ -354,15 +336,9 @@
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ID1" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Insert" xml:space="preserve">
|
||||
<value>插入</value>
|
||||
</data>
|
||||
<data name="Insert1" xml:space="preserve">
|
||||
<value>插入</value>
|
||||
</data>
|
||||
<data name="Recover" xml:space="preserve">
|
||||
<value>恢复</value>
|
||||
</data>
|
||||
@@ -384,9 +360,6 @@
|
||||
<data name="AddWater" xml:space="preserve">
|
||||
<value>入水</value>
|
||||
</data>
|
||||
<data name="AddWater1" xml:space="preserve">
|
||||
<value>入水</value>
|
||||
</data>
|
||||
<data name="Cooling" xml:space="preserve">
|
||||
<value>冷却</value>
|
||||
</data>
|
||||
@@ -447,9 +420,6 @@
|
||||
<data name="AddTheMedicine" xml:space="preserve">
|
||||
<value>加药</value>
|
||||
</data>
|
||||
<data name="AddTheMedicine1" xml:space="preserve">
|
||||
<value>加药</value>
|
||||
</data>
|
||||
<data name="CallDistribution" xml:space="preserve">
|
||||
<value>呼叫输送</value>
|
||||
</data>
|
||||
@@ -549,9 +519,6 @@
|
||||
<data name="Invalidfeatures" xml:space="preserve">
|
||||
<value>功能无效</value>
|
||||
</data>
|
||||
<data name="Invalidfeatures1" xml:space="preserve">
|
||||
<value>功能无效</value>
|
||||
</data>
|
||||
<data name="NO" xml:space="preserve">
|
||||
<value>否</value>
|
||||
</data>
|
||||
@@ -567,9 +534,6 @@
|
||||
<data name="Advance" xml:space="preserve">
|
||||
<value>提前</value>
|
||||
</data>
|
||||
<data name="Advance1" xml:space="preserve">
|
||||
<value>提前</value>
|
||||
</data>
|
||||
<data name="Beginning" xml:space="preserve">
|
||||
<value>开头</value>
|
||||
</data>
|
||||
@@ -622,7 +586,7 @@
|
||||
<value>速率</value>
|
||||
</data>
|
||||
<data name="Tank" xml:space="preserve">
|
||||
<value>缸</value>
|
||||
<value>桶</value>
|
||||
</data>
|
||||
<data name="Tank1" xml:space="preserve">
|
||||
<value>缸</value>
|
||||
@@ -672,9 +636,6 @@
|
||||
<data name="Implementation" xml:space="preserve">
|
||||
<value>执行</value>
|
||||
</data>
|
||||
<data name="Implementation1" xml:space="preserve">
|
||||
<value>执行</value>
|
||||
</data>
|
||||
<data name="process_not" xml:space="preserve">
|
||||
<value>工艺不存在</value>
|
||||
</data>
|
||||
@@ -702,9 +663,6 @@
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name="Language1" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name="Paused" xml:space="preserve">
|
||||
<value>暂停</value>
|
||||
</data>
|
||||
@@ -786,15 +744,9 @@
|
||||
<data name="High-waterlevel" xml:space="preserve">
|
||||
<value>高水位</value>
|
||||
</data>
|
||||
<data name="High-waterlevel1" xml:space="preserve">
|
||||
<value>高水位</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel" xml:space="preserve">
|
||||
<value>低水位</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel1" xml:space="preserve">
|
||||
<value>低水位</value>
|
||||
</data>
|
||||
<data name="ClothWheel" xml:space="preserve">
|
||||
<value>布轮</value>
|
||||
</data>
|
||||
@@ -822,9 +774,6 @@
|
||||
<data name="LnsufficientPower" xml:space="preserve">
|
||||
<value>功率不足</value>
|
||||
</data>
|
||||
<data name="LnsufficientPower1" xml:space="preserve">
|
||||
<value>功率不足</value>
|
||||
</data>
|
||||
<data name="WorkingStatus" xml:space="preserve">
|
||||
<value>工作状态</value>
|
||||
</data>
|
||||
@@ -942,4 +891,205 @@
|
||||
<data name="Jump" xml:space="preserve">
|
||||
<value>跳步</value>
|
||||
</data>
|
||||
<data name="View" xml:space="preserve">
|
||||
<value>视图</value>
|
||||
</data>
|
||||
<data name="Delayed" xml:space="preserve">
|
||||
<value>延后</value>
|
||||
</data>
|
||||
<data name="Multi" xml:space="preserve">
|
||||
<value>多机</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>颜色</value>
|
||||
</data>
|
||||
<data name="DoesNotExist" xml:space="preserve">
|
||||
<value>不存在</value>
|
||||
</data>
|
||||
<data name="EHCIP" xml:space="preserve">
|
||||
<value>禁止编辑历史工艺</value>
|
||||
</data>
|
||||
<data name="ENWOIP" xml:space="preserve">
|
||||
<value>禁止编辑非等待中的工单</value>
|
||||
</data>
|
||||
<data name="log" xml:space="preserve">
|
||||
<value>日志</value>
|
||||
</data>
|
||||
<data name="NPERR" xml:space="preserve">
|
||||
<value>账号或密码错误</value>
|
||||
</data>
|
||||
<data name="Permit" xml:space="preserve">
|
||||
<value>许可证</value>
|
||||
</data>
|
||||
<data name="Validtime" xml:space="preserve">
|
||||
<value>有效时间</value>
|
||||
</data>
|
||||
<data name="RIS" xml:space="preserve">
|
||||
<value>注册成功</value>
|
||||
</data>
|
||||
<data name="TRCE" xml:space="preserve">
|
||||
<value>注册码过期</value>
|
||||
</data>
|
||||
<data name="void_" xml:space="preserve">
|
||||
<value>无效</value>
|
||||
</data>
|
||||
<data name="Plan" xml:space="preserve">
|
||||
<value>计划</value>
|
||||
</data>
|
||||
<data name="attached" xml:space="preserve">
|
||||
<value>附</value>
|
||||
</data>
|
||||
<data name="ColorNumber" xml:space="preserve">
|
||||
<value>色号</value>
|
||||
</data>
|
||||
<data name="Client" xml:space="preserve">
|
||||
<value>客户</value>
|
||||
</data>
|
||||
<data name="ClothSpecies" xml:space="preserve">
|
||||
<value>布种</value>
|
||||
</data>
|
||||
<data name="ClothWeight" xml:space="preserve">
|
||||
<value>布重</value>
|
||||
</data>
|
||||
<data name="BathRatio" xml:space="preserve">
|
||||
<value>浴比</value>
|
||||
</data>
|
||||
<data name="Total" xml:space="preserve">
|
||||
<value>总浴量</value>
|
||||
</data>
|
||||
<data name="ColorName" xml:space="preserve">
|
||||
<value>色名</value>
|
||||
</data>
|
||||
<data name="CloseTheConnection" xml:space="preserve">
|
||||
<value>断开连接</value>
|
||||
</data>
|
||||
<data name="Online" xml:space="preserve">
|
||||
<value>在线</value>
|
||||
</data>
|
||||
<data name="ERR" xml:space="preserve">
|
||||
<value>错误</value>
|
||||
</data>
|
||||
<data name="Fail" xml:space="preserve">
|
||||
<value>失败</value>
|
||||
</data>
|
||||
<data name="LtemizedSending" xml:space="preserve">
|
||||
<value>发送明细</value>
|
||||
</data>
|
||||
<data name="NotSent" xml:space="preserve">
|
||||
<value>未发送</value>
|
||||
</data>
|
||||
<data name="DNotSent" xml:space="preserve">
|
||||
<value>未发送明细</value>
|
||||
</data>
|
||||
<data name="LinkDispenser" xml:space="preserve">
|
||||
<value>连接染料助剂分配器</value>
|
||||
</data>
|
||||
<data name="TPLHBU" xml:space="preserve">
|
||||
<value>领料单已使用</value>
|
||||
</data>
|
||||
<data name="TTAE" xml:space="preserve">
|
||||
<value>工单已经存在</value>
|
||||
</data>
|
||||
<data name="Details" xml:space="preserve">
|
||||
<value>明细</value>
|
||||
</data>
|
||||
<data name="ProductCode" xml:space="preserve">
|
||||
<value>原料代码</value>
|
||||
</data>
|
||||
<data name="ProductName" xml:space="preserve">
|
||||
<value>原料名称</value>
|
||||
</data>
|
||||
<data name="ProductType" xml:space="preserve">
|
||||
<value>原料类型</value>
|
||||
</data>
|
||||
<data name="Grams" xml:space="preserve">
|
||||
<value>克重</value>
|
||||
</data>
|
||||
<data name="DispenseGrams" xml:space="preserve">
|
||||
<value>实际</value>
|
||||
</data>
|
||||
<data name="DispenseEndTime" xml:space="preserve">
|
||||
<value>完成时间</value>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>取消</value>
|
||||
</data>
|
||||
<data name="Manual" xml:space="preserve">
|
||||
<value>手动</value>
|
||||
</data>
|
||||
<data name="Not_a" xml:space="preserve">
|
||||
<value>当前功能不可用</value>
|
||||
</data>
|
||||
<data name="Screen" xml:space="preserve">
|
||||
<value>远程画面</value>
|
||||
</data>
|
||||
<data name="Volume" xml:space="preserve">
|
||||
<value>容量</value>
|
||||
</data>
|
||||
<data name="DispenseModule" xml:space="preserve">
|
||||
<value>运行模组</value>
|
||||
</data>
|
||||
<data name="Information" xml:space="preserve">
|
||||
<value>信息</value>
|
||||
</data>
|
||||
<data name="RTRM" xml:space="preserve">
|
||||
<value>重复原料</value>
|
||||
</data>
|
||||
<data name="Not_M" xml:space="preserve">
|
||||
<value>机台不存在</value>
|
||||
</data>
|
||||
<data name="dye" xml:space="preserve">
|
||||
<value>染料</value>
|
||||
</data>
|
||||
<data name="chemicals" xml:space="preserve">
|
||||
<value>助剂</value>
|
||||
</data>
|
||||
<data name="powder" xml:space="preserve">
|
||||
<value>粉体</value>
|
||||
</data>
|
||||
<data name="TMNR" xml:space="preserve">
|
||||
<value>机台未就绪</value>
|
||||
</data>
|
||||
<data name="user_lock" xml:space="preserve">
|
||||
<value>锁定</value>
|
||||
</data>
|
||||
<data name="user_unlock" xml:space="preserve">
|
||||
<value>解锁</value>
|
||||
</data>
|
||||
<data name="VOICE" xml:space="preserve">
|
||||
<value>语音</value>
|
||||
</data>
|
||||
<data name="TESTVOICE" xml:space="preserve">
|
||||
<value>测试语音</value>
|
||||
</data>
|
||||
<data name="Speed" xml:space="preserve">
|
||||
<value>语速</value>
|
||||
</data>
|
||||
<data name="Vol" xml:space="preserve">
|
||||
<value>音量</value>
|
||||
</data>
|
||||
<data name="Pequest" xml:space="preserve">
|
||||
<value>请求</value>
|
||||
</data>
|
||||
<data name="Subroutine" xml:space="preserve">
|
||||
<value>副功能</value>
|
||||
</data>
|
||||
<data name="DispenseException" xml:space="preserve">
|
||||
<value>输送异常</value>
|
||||
</data>
|
||||
<data name="_Auto" xml:space="preserve">
|
||||
<value>手/自动</value>
|
||||
</data>
|
||||
<data name="Swing" xml:space="preserve">
|
||||
<value>摆布</value>
|
||||
</data>
|
||||
<data name="Start" xml:space="preserve">
|
||||
<value>开始</value>
|
||||
</data>
|
||||
<data name="ProgramName" xml:space="preserve">
|
||||
<value>工艺名</value>
|
||||
</data>
|
||||
<data name="Machines" xml:space="preserve">
|
||||
<value>机台</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -150,21 +150,12 @@
|
||||
<data name="HistoryRecords" xml:space="preserve">
|
||||
<value>歷史</value>
|
||||
</data>
|
||||
<data name="HistoryRecords1" xml:space="preserve">
|
||||
<value>歷史</value>
|
||||
</data>
|
||||
<data name="InOut" xml:space="preserve">
|
||||
<value>輸入輸出</value>
|
||||
</data>
|
||||
<data name="InOut1" xml:space="preserve">
|
||||
<value>輸入輸出</value>
|
||||
</data>
|
||||
<data name="lock" xml:space="preserve">
|
||||
<value>鎖定</value>
|
||||
</data>
|
||||
<data name="lock1" xml:space="preserve">
|
||||
<value>鎖定</value>
|
||||
</data>
|
||||
<data name="New" xml:space="preserve">
|
||||
<value>新建</value>
|
||||
</data>
|
||||
@@ -270,15 +261,9 @@
|
||||
<data name="Abnormal" xml:space="preserve">
|
||||
<value>異常</value>
|
||||
</data>
|
||||
<data name="Abnormal1" xml:space="preserve">
|
||||
<value>異常</value>
|
||||
</data>
|
||||
<data name="Auto" xml:space="preserve">
|
||||
<value>自動</value>
|
||||
</data>
|
||||
<data name="Auto1" xml:space="preserve">
|
||||
<value>自動</value>
|
||||
</data>
|
||||
<data name="Await" xml:space="preserve">
|
||||
<value>等待命令</value>
|
||||
</data>
|
||||
@@ -300,9 +285,6 @@
|
||||
<data name="LineUp" xml:space="preserve">
|
||||
<value>轉入</value>
|
||||
</data>
|
||||
<data name="LineUp1" xml:space="preserve">
|
||||
<value>轉入</value>
|
||||
</data>
|
||||
<data name="Notimplementation" xml:space="preserve">
|
||||
<value>未執行</value>
|
||||
</data>
|
||||
@@ -354,15 +336,9 @@
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ID1" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Insert" xml:space="preserve">
|
||||
<value>插入</value>
|
||||
</data>
|
||||
<data name="Insert1" xml:space="preserve">
|
||||
<value>插入</value>
|
||||
</data>
|
||||
<data name="Recover" xml:space="preserve">
|
||||
<value>恢復</value>
|
||||
</data>
|
||||
@@ -384,9 +360,6 @@
|
||||
<data name="AddWater" xml:space="preserve">
|
||||
<value>入水</value>
|
||||
</data>
|
||||
<data name="AddWater1" xml:space="preserve">
|
||||
<value>入水</value>
|
||||
</data>
|
||||
<data name="Cooling" xml:space="preserve">
|
||||
<value>冷卻</value>
|
||||
</data>
|
||||
@@ -447,9 +420,6 @@
|
||||
<data name="AddTheMedicine" xml:space="preserve">
|
||||
<value>加藥</value>
|
||||
</data>
|
||||
<data name="AddTheMedicine1" xml:space="preserve">
|
||||
<value>加藥</value>
|
||||
</data>
|
||||
<data name="CallDistribution" xml:space="preserve">
|
||||
<value>呼叫輸送</value>
|
||||
</data>
|
||||
@@ -549,9 +519,6 @@
|
||||
<data name="Invalidfeatures" xml:space="preserve">
|
||||
<value>無效的圖徵</value>
|
||||
</data>
|
||||
<data name="Invalidfeatures1" xml:space="preserve">
|
||||
<value>無效的圖徵</value>
|
||||
</data>
|
||||
<data name="NO" xml:space="preserve">
|
||||
<value>否</value>
|
||||
</data>
|
||||
@@ -567,9 +534,6 @@
|
||||
<data name="Advance" xml:space="preserve">
|
||||
<value>提前</value>
|
||||
</data>
|
||||
<data name="Advance1" xml:space="preserve">
|
||||
<value>提前</value>
|
||||
</data>
|
||||
<data name="Beginning" xml:space="preserve">
|
||||
<value>開始</value>
|
||||
</data>
|
||||
@@ -622,7 +586,7 @@
|
||||
<value>速率</value>
|
||||
</data>
|
||||
<data name="Tank" xml:space="preserve">
|
||||
<value>缸</value>
|
||||
<value>桶</value>
|
||||
</data>
|
||||
<data name="Tank1" xml:space="preserve">
|
||||
<value>缸</value>
|
||||
@@ -672,9 +636,6 @@
|
||||
<data name="Implementation" xml:space="preserve">
|
||||
<value>執行</value>
|
||||
</data>
|
||||
<data name="Implementation1" xml:space="preserve">
|
||||
<value>執行</value>
|
||||
</data>
|
||||
<data name="process_not" xml:space="preserve">
|
||||
<value>流程不存在</value>
|
||||
</data>
|
||||
@@ -702,9 +663,6 @@
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>語言</value>
|
||||
</data>
|
||||
<data name="Language1" xml:space="preserve">
|
||||
<value>語言</value>
|
||||
</data>
|
||||
<data name="Paused" xml:space="preserve">
|
||||
<value>已暫停</value>
|
||||
</data>
|
||||
@@ -786,15 +744,9 @@
|
||||
<data name="High-waterlevel" xml:space="preserve">
|
||||
<value>高水位</value>
|
||||
</data>
|
||||
<data name="High-waterlevel1" xml:space="preserve">
|
||||
<value>高水位</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel" xml:space="preserve">
|
||||
<value>低水位</value>
|
||||
</data>
|
||||
<data name="Low-waterlevel1" xml:space="preserve">
|
||||
<value>低水位</value>
|
||||
</data>
|
||||
<data name="ClothWheel" xml:space="preserve">
|
||||
<value>布輪</value>
|
||||
</data>
|
||||
@@ -822,9 +774,6 @@
|
||||
<data name="LnsufficientPower" xml:space="preserve">
|
||||
<value>功率不足</value>
|
||||
</data>
|
||||
<data name="LnsufficientPower1" xml:space="preserve">
|
||||
<value>功率不足</value>
|
||||
</data>
|
||||
<data name="WorkingStatus" xml:space="preserve">
|
||||
<value>工作狀態</value>
|
||||
</data>
|
||||
@@ -915,31 +864,232 @@
|
||||
<data name="Group" xml:space="preserve">
|
||||
<value>組</value>
|
||||
</data>
|
||||
<data name="DayAfter" xml:space="preserve">
|
||||
<value>後一天</value>
|
||||
</data>
|
||||
<data name="Before" xml:space="preserve">
|
||||
<value>前一天</value>
|
||||
</data>
|
||||
<data name="Today" xml:space="preserve">
|
||||
<value>今天</value>
|
||||
</data>
|
||||
<data name="DayAfter" xml:space="preserve">
|
||||
<value>後一天</value>
|
||||
</data>
|
||||
<data name="Test" xml:space="preserve">
|
||||
<value>測試</value>
|
||||
</data>
|
||||
<data name="Mode" xml:space="preserve">
|
||||
<value>模式</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>密碼</value>
|
||||
</data>
|
||||
<data name="SQL" xml:space="preserve">
|
||||
<value>資料庫</value>
|
||||
</data>
|
||||
<data name="SERVER" xml:space="preserve">
|
||||
<value>伺服器</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>密碼</value>
|
||||
</data>
|
||||
<data name="Mode" xml:space="preserve">
|
||||
<value>模式</value>
|
||||
</data>
|
||||
<data name="Jump" xml:space="preserve">
|
||||
<value>跳步</value>
|
||||
</data>
|
||||
<data name="View" xml:space="preserve">
|
||||
<value>考量</value>
|
||||
</data>
|
||||
<data name="Delayed" xml:space="preserve">
|
||||
<value>延遲</value>
|
||||
</data>
|
||||
<data name="Multi" xml:space="preserve">
|
||||
<value>多机</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>顏色</value>
|
||||
</data>
|
||||
<data name="DoesNotExist" xml:space="preserve">
|
||||
<value>頁面不存在</value>
|
||||
</data>
|
||||
<data name="EHCIP" xml:space="preserve">
|
||||
<value>禁止編輯歷史工單</value>
|
||||
</data>
|
||||
<data name="ENWOIP" xml:space="preserve">
|
||||
<value>禁止編輯非待處理工單</value>
|
||||
</data>
|
||||
<data name="log" xml:space="preserve">
|
||||
<value>日誌</value>
|
||||
</data>
|
||||
<data name="NPERR" xml:space="preserve">
|
||||
<value>帳戶號碼或密碼不正確</value>
|
||||
</data>
|
||||
<data name="Permit" xml:space="preserve">
|
||||
<value>許可</value>
|
||||
</data>
|
||||
<data name="Validtime" xml:space="preserve">
|
||||
<value>有效的</value>
|
||||
</data>
|
||||
<data name="RIS" xml:space="preserve">
|
||||
<value>注冊成功</value>
|
||||
</data>
|
||||
<data name="TRCE" xml:space="preserve">
|
||||
<value>注冊無效</value>
|
||||
</data>
|
||||
<data name="void_" xml:space="preserve">
|
||||
<value>無效</value>
|
||||
</data>
|
||||
<data name="Plan" xml:space="preserve">
|
||||
<value>方案</value>
|
||||
</data>
|
||||
<data name="attached" xml:space="preserve">
|
||||
<value>附</value>
|
||||
</data>
|
||||
<data name="ColorNumber" xml:space="preserve">
|
||||
<value>色號</value>
|
||||
</data>
|
||||
<data name="Client" xml:space="preserve">
|
||||
<value>编辑</value>
|
||||
</data>
|
||||
<data name="ClothSpecies" xml:space="preserve">
|
||||
<value>布種</value>
|
||||
</data>
|
||||
<data name="ClothWeight" xml:space="preserve">
|
||||
<value>布重</value>
|
||||
</data>
|
||||
<data name="BathRatio" xml:space="preserve">
|
||||
<value>浴比</value>
|
||||
</data>
|
||||
<data name="Total" xml:space="preserve">
|
||||
<value>總浴量</value>
|
||||
</data>
|
||||
<data name="ColorName" xml:space="preserve">
|
||||
<value>色名</value>
|
||||
</data>
|
||||
<data name="CloseTheConnection" xml:space="preserve">
|
||||
<value>斷開連線</value>
|
||||
</data>
|
||||
<data name="Online" xml:space="preserve">
|
||||
<value>在線</value>
|
||||
</data>
|
||||
<data name="ERR" xml:space="preserve">
|
||||
<value>錯誤</value>
|
||||
</data>
|
||||
<data name="Fail" xml:space="preserve">
|
||||
<value>失敗</value>
|
||||
</data>
|
||||
<data name="LtemizedSending" xml:space="preserve">
|
||||
<value>發送明細</value>
|
||||
</data>
|
||||
<data name="NotSent" xml:space="preserve">
|
||||
<value>未發送</value>
|
||||
</data>
|
||||
<data name="DNotSent" xml:space="preserve">
|
||||
<value>未發送明細</value>
|
||||
</data>
|
||||
<data name="LinkDispenser" xml:space="preserve">
|
||||
<value>連接染料助劑分配器</value>
|
||||
</data>
|
||||
<data name="TPLHBU" xml:space="preserve">
|
||||
<value>領料單已使用</value>
|
||||
</data>
|
||||
<data name="TTAE" xml:space="preserve">
|
||||
<value>工單已經存在</value>
|
||||
</data>
|
||||
<data name="Details" xml:space="preserve">
|
||||
<value>詳細</value>
|
||||
</data>
|
||||
<data name="ProductCode" xml:space="preserve">
|
||||
<value>原料代碼</value>
|
||||
</data>
|
||||
<data name="ProductName" xml:space="preserve">
|
||||
<value>原料名稱</value>
|
||||
</data>
|
||||
<data name="ProductType" xml:space="preserve">
|
||||
<value>原料類型</value>
|
||||
</data>
|
||||
<data name="Grams" xml:space="preserve">
|
||||
<value>克重</value>
|
||||
</data>
|
||||
<data name="DispenseGrams" xml:space="preserve">
|
||||
<value>實際</value>
|
||||
</data>
|
||||
<data name="DispenseEndTime" xml:space="preserve">
|
||||
<value>完成時間</value>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>取消</value>
|
||||
</data>
|
||||
<data name="Manual" xml:space="preserve">
|
||||
<value>手動</value>
|
||||
</data>
|
||||
<data name="Not_a" xml:space="preserve">
|
||||
<value>目前功能不可用</value>
|
||||
</data>
|
||||
<data name="Screen" xml:space="preserve">
|
||||
<value>遠端畫面</value>
|
||||
</data>
|
||||
<data name="Volume" xml:space="preserve">
|
||||
<value>容量</value>
|
||||
</data>
|
||||
<data name="DispenseModule" xml:space="preserve">
|
||||
<value>運行模組</value>
|
||||
</data>
|
||||
<data name="Information" xml:space="preserve">
|
||||
<value>訊息</value>
|
||||
</data>
|
||||
<data name="RTRM" xml:space="preserve">
|
||||
<value>重複原料</value>
|
||||
</data>
|
||||
<data name="Not_M" xml:space="preserve">
|
||||
<value>機台不存在</value>
|
||||
</data>
|
||||
<data name="dye" xml:space="preserve">
|
||||
<value>染料</value>
|
||||
</data>
|
||||
<data name="chemicals" xml:space="preserve">
|
||||
<value>助劑</value>
|
||||
</data>
|
||||
<data name="powder" xml:space="preserve">
|
||||
<value>粉體</value>
|
||||
</data>
|
||||
<data name="TMNR" xml:space="preserve">
|
||||
<value>機台未就緒</value>
|
||||
</data>
|
||||
<data name="user_lock" xml:space="preserve">
|
||||
<value>鎖定</value>
|
||||
</data>
|
||||
<data name="user_unlock" xml:space="preserve">
|
||||
<value>解鎖</value>
|
||||
</data>
|
||||
<data name="VOICE" xml:space="preserve">
|
||||
<value>語音</value>
|
||||
</data>
|
||||
<data name="TESTVOICE" xml:space="preserve">
|
||||
<value>測試語音</value>
|
||||
</data>
|
||||
<data name="Speed" xml:space="preserve">
|
||||
<value>語速</value>
|
||||
</data>
|
||||
<data name="Vol" xml:space="preserve">
|
||||
<value>音量</value>
|
||||
</data>
|
||||
<data name="Pequest" xml:space="preserve">
|
||||
<value>請求</value>
|
||||
</data>
|
||||
<data name="Subroutine" xml:space="preserve">
|
||||
<value>副功能</value>
|
||||
</data>
|
||||
<data name="DispenseException" xml:space="preserve">
|
||||
<value>輸送異常</value>
|
||||
</data>
|
||||
<data name="_Auto" xml:space="preserve">
|
||||
<value>手/自動</value>
|
||||
</data>
|
||||
<data name="Swing" xml:space="preserve">
|
||||
<value>擺佈</value>
|
||||
</data>
|
||||
<data name="Start" xml:space="preserve">
|
||||
<value>開始</value>
|
||||
</data>
|
||||
<data name="ProgramName" xml:space="preserve">
|
||||
<value>工藝名</value>
|
||||
</data>
|
||||
<data name="Machines" xml:space="preserve">
|
||||
<value>機器</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -5,6 +5,10 @@ VisualStudioVersion = 17.11.35312.102
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunlightCentralizedControlManagement_SCCM_", "SunlightCentralizedControlManagement_SCCM_.csproj", "{2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nGantt", "..\nGantt\nGantt.csproj", "{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VncSharpWpf", "..\VncSharpWpf\VncSharpWpf.csproj", "{77B5CB63-E14B-4253-881D-6BE9D7C57076}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -15,6 +19,14 @@ Global
|
||||
{2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{77B5CB63-E14B-4253-881D-6BE9D7C57076}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{77B5CB63-E14B-4253-881D-6BE9D7C57076}.Debug|Any CPU.Build.0 = Debug|x86
|
||||
{77B5CB63-E14B-4253-881D-6BE9D7C57076}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{77B5CB63-E14B-4253-881D-6BE9D7C57076}.Release|Any CPU.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
@@ -39,6 +39,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -55,9 +56,34 @@
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>sunlightlogo.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SkiaSharp">
|
||||
<HintPath>bin\Debug\SkiaSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Speech" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -71,18 +97,45 @@
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="WindowsFormsIntegration" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Compile Include="ConvertMoels\BoolRBConvert.cs" />
|
||||
<Compile Include="ConvertMoels\StatenClassConvert.cs" />
|
||||
<Compile Include="ConvertMoels\BoolToVisidilityConvert.cs" />
|
||||
<Compile Include="ConvertMoels\StatenToImageConvert.cs" />
|
||||
<Compile Include="ConvertMoels\StatexmlConvert.cs" />
|
||||
<Compile Include="EX\DispenseState.xaml.cs">
|
||||
<DependentUpon>DispenseState.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="EX\Exchange\BDC_SQL.cs" />
|
||||
<Compile Include="KEY\TouchKeyboard.xaml.cs">
|
||||
<DependentUpon>TouchKeyboard.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="KEY\TouchKeyboardNumeral.xaml.cs">
|
||||
<DependentUpon>TouchKeyboardNumeral.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="EX\ManualDyelot.xaml.cs">
|
||||
<DependentUpon>ManualDyelot.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="EX\VNC.xaml.cs">
|
||||
<DependentUpon>VNC.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Login.xaml.cs">
|
||||
<DependentUpon>Login.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UserClass\AsyncSerialPortClient.cs" />
|
||||
<Compile Include="UserClass\AsyncTcpClient.cs" />
|
||||
<Compile Include="UserClass\ClsLock.cs" />
|
||||
<Compile Include="UserClass\CRCcheck16.cs" />
|
||||
<Compile Include="UserClass\CSV.cs" />
|
||||
<Compile Include="UserClass\DataGridHelper.cs" />
|
||||
<Compile Include="UserClass\DataTableForToObservableCollection.cs" />
|
||||
<Compile Include="UserClass\DataTableManager .cs" />
|
||||
<Compile Include="UserClass\get_local_ip_address.cs" />
|
||||
<Compile Include="UserClass\HardwareSN.cs" />
|
||||
<Compile Include="UserClass\IniFile.cs" />
|
||||
@@ -91,18 +144,58 @@
|
||||
<Compile Include="UserClass\NetFwManger.cs" />
|
||||
<Compile Include="UserClass\NumericTextColumn .cs" />
|
||||
<Compile Include="UserClass\PID.cs" />
|
||||
<Compile Include="UserClass\RS485MasterStation.cs" />
|
||||
<Compile Include="UserClass\SYSInfo.cs" />
|
||||
<Compile Include="UserClass\PressKey.cs" />
|
||||
<Compile Include="UserClass\SqliteHelper.cs" />
|
||||
<Compile Include="UserClass\StrToInt.cs" />
|
||||
<Compile Include="UserClass\SubItem.cs" />
|
||||
<Compile Include="UserClass\UserControlMenuItem.cs" />
|
||||
<Compile Include="UserControls\DispenseMacInfo.xaml.cs">
|
||||
<DependentUpon>DispenseMacInfo.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\UserWorkOrder.xaml.cs">
|
||||
<DependentUpon>UserWorkOrder.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\UserInf.xaml.cs">
|
||||
<DependentUpon>UserInf.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\UserInformation.xaml.cs">
|
||||
<DependentUpon>UserInformation.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ViewModel\CurveTempModel.cs" />
|
||||
<Compile Include="ViewModel\CurveDiagramViewModel.cs" />
|
||||
<Compile Include="ViewModel\MainWindowViewModel.cs" />
|
||||
<Compile Include="ViewModel\MonitorViewModel.cs" />
|
||||
<Compile Include="ViewModel\ManualDyelotModel.cs" />
|
||||
<Compile Include="ViewModel\ViewModelLocator.cs" />
|
||||
<Compile Include="View\CurveTemp.xaml.cs">
|
||||
<DependentUpon>CurveTemp.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\CurveDiagram.xaml.cs">
|
||||
<DependentUpon>CurveDiagram.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\LogView.xaml.cs">
|
||||
<DependentUpon>LogView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\DispenseView.xaml.cs">
|
||||
<DependentUpon>DispenseView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\DispenseMachinesSet.xaml.cs">
|
||||
<DependentUpon>DispenseMachinesSet.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\MachinesView.xaml.cs">
|
||||
<DependentUpon>MachinesView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\DyeingPlanView.xaml.cs">
|
||||
<DependentUpon>DyeingPlanView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\ProductionPlanningEdit.xaml.cs">
|
||||
<DependentUpon>ProductionPlanningEdit.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\ProductionPlanningView.xaml.cs">
|
||||
<DependentUpon>ProductionPlanningView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\SYSSetView.xaml.cs">
|
||||
<DependentUpon>SYSSetView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@@ -112,7 +205,7 @@
|
||||
<Compile Include="View\EngineerSetView.xaml.cs">
|
||||
<DependentUpon>EngineerSetView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\info.xaml.cs">
|
||||
<Compile Include="UserControls\info.xaml.cs">
|
||||
<DependentUpon>info.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\MachinesSet.xaml.cs">
|
||||
@@ -127,21 +220,63 @@
|
||||
<Compile Include="View\ProgramstepsView .xaml.cs">
|
||||
<DependentUpon>ProgramstepsView .xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\RoilingTextBlock.xaml.cs">
|
||||
<Compile Include="UserControls\RoilingTextBlock.xaml.cs">
|
||||
<DependentUpon>RoilingTextBlock.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\DyelotView.xaml.cs">
|
||||
<DependentUpon>DyelotView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="View\Whole.xaml.cs">
|
||||
<DependentUpon>Whole.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\CDKEY.xaml.cs">
|
||||
<DependentUpon>CDKEY.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\Help.xaml.cs">
|
||||
<DependentUpon>Help.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\InputBox.xaml.cs">
|
||||
<DependentUpon>InputBox.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\MachineSelection.xaml.cs">
|
||||
<DependentUpon>MachineSelection.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\SchedulingTime.xaml.cs">
|
||||
<DependentUpon>SchedulingTime.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\User.xaml.cs">
|
||||
<DependentUpon>User.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\UserMessage.xaml.cs">
|
||||
<DependentUpon>UserMessage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="WindowsView\ViewStep.xaml.cs">
|
||||
<DependentUpon>ViewStep.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Page Include="EX\DispenseState.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="KEY\TouchKeyboard.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="KEY\TouchKeyboardNumeral.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="EX\ManualDyelot.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="EX\VNC.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Login.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -160,10 +295,58 @@
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Page Include="UserControls\DispenseMacInfo.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\UserWorkOrder.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\UserInf.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\UserInformation.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="View\CurveTemp.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\CurveDiagram.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="View\LogView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="View\DispenseView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\DispenseMachinesSet.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\MachinesView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\DyeingPlanView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\ProductionPlanningEdit.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="View\ProductionPlanningView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\SYSSetView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -176,7 +359,7 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\info.xaml">
|
||||
<Page Include="UserControls\info.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
@@ -196,14 +379,22 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\RoilingTextBlock.xaml">
|
||||
<Page Include="UserControls\RoilingTextBlock.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="View\DyelotView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="View\Whole.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="WindowsView\CDKEY.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\Help.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>XamlIntelliSenseFileGenerator</Generator>
|
||||
@@ -212,6 +403,22 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\MachineSelection.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="WindowsView\SchedulingTime.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="WindowsView\User.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="WindowsView\UserMessage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="WindowsView\ViewStep.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -239,6 +446,14 @@
|
||||
<EmbeddedResource Include="Properties\Resources.zh-CN.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.zh-TW.resx" />
|
||||
<Resource Include="Fonts\FontAwesome.otf" />
|
||||
<None Include="bin\Debug\DataBase\800COMPUTER.db" />
|
||||
<None Include="bin\Debug\DataBase\Chart.db" />
|
||||
<None Include="bin\Debug\DataBase\SCCM.db" />
|
||||
<None Include="DATA\800COMPUTER.db" />
|
||||
<None Include="DATA\Chart.db" />
|
||||
<None Include="DATA\nGantt.zip" />
|
||||
<None Include="DATA\SCCM.db" />
|
||||
<None Include="DATA\VncSharpWpf.zip" />
|
||||
<None Include="Fonts\font-awesome-4.7.0.zip" />
|
||||
<None Include="Fonts\font-awesome-4.7.0\fonts\fontawesome-webfont.eot" />
|
||||
<Resource Include="Fonts\font-awesome-4.7.0\fonts\fontawesome-webfont.ttf" />
|
||||
@@ -286,7 +501,7 @@
|
||||
<Version>2.0.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm">
|
||||
<Version>8.3.2</Version>
|
||||
<Version>8.4.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView">
|
||||
<Version>2.0.0-rc4.5</Version>
|
||||
@@ -295,35 +510,135 @@
|
||||
<Version>2.0.0-rc4.5</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MaterialDesignThemes">
|
||||
<Version>5.1.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Web.WebView2">
|
||||
<Version>1.0.2895-prerelease</Version>
|
||||
<Version>5.2.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="NModbus">
|
||||
<Version>3.0.81</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ScottPlot">
|
||||
<Version>5.0.41</Version>
|
||||
<Version>5.0.56</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Data.SQLite">
|
||||
<Version>1.0.119</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Management">
|
||||
<Version>8.0.0</Version>
|
||||
<Version>9.0.8</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.ObjectModel">
|
||||
<Version>4.3.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="TouchSocket">
|
||||
<Version>2.1.10</Version>
|
||||
<Version>3.1.16</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="TouchSocket.SerialPorts">
|
||||
<Version>3.1.16</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<Folder Include="ControlUse\" />
|
||||
<Folder Include="EX\EXModel\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="EX\DLL\VncSharpWpf.dll" />
|
||||
<Content Include="Fonts\font-awesome-4.7.0\css\font-awesome.css" />
|
||||
<Content Include="Fonts\font-awesome-4.7.0\css\font-awesome.min.css" />
|
||||
<Content Include="Fonts\font-awesome-4.7.0\fonts\fontawesome-webfont.svg" />
|
||||
<Resource Include="lmage\IconParkExtend.png" />
|
||||
<Resource Include="lmage\IconParkExtendR.png" />
|
||||
<Resource Include="lmage\IconParkExtendY.png" />
|
||||
<Resource Include="lmage\IconParkInfo.png" />
|
||||
<Resource Include="lmage\IconParkUsbOne.png" />
|
||||
<Resource Include="lmage\00.png" />
|
||||
<Resource Include="lmage\1000-1.png" />
|
||||
<Resource Include="lmage\1000-2.png" />
|
||||
<Resource Include="lmage\1000-3.png" />
|
||||
<Resource Include="lmage\10000.png" />
|
||||
<Resource Include="lmage\10001.gif" />
|
||||
<Resource Include="lmage\2000.png" />
|
||||
<Resource Include="lmage\2001.png" />
|
||||
<Resource Include="lmage\ADD.jpg" />
|
||||
<Resource Include="lmage\ADD.png" />
|
||||
<Resource Include="lmage\beng_err.png" />
|
||||
<Resource Include="lmage\beng_run.png" />
|
||||
<Resource Include="lmage\beng_stop.png" />
|
||||
<Resource Include="lmage\ERR.png" />
|
||||
<Resource Include="lmage\fa_bili.png" />
|
||||
<Resource Include="lmage\FlatColorIconsCancel.png" />
|
||||
<Resource Include="lmage\FxemojiBellcancellation.png" />
|
||||
<Resource Include="lmage\FxemojiRingingbell.png" />
|
||||
<Resource Include="lmage\guamaoqi.png" />
|
||||
<Resource Include="lmage\guandao %281%29.png" />
|
||||
<Resource Include="lmage\guandao %2810%29.png" />
|
||||
<Resource Include="lmage\guandao %2811%29.png" />
|
||||
<Resource Include="lmage\guandao %2812%29.png" />
|
||||
<Resource Include="lmage\guandao %2813%29.png" />
|
||||
<Resource Include="lmage\guandao %2814%29.png" />
|
||||
<Resource Include="lmage\guandao %2815%29.png" />
|
||||
<Resource Include="lmage\guandao %2816%29.png" />
|
||||
<Resource Include="lmage\guandao %282%29.png" />
|
||||
<Resource Include="lmage\guandao %283%29.png" />
|
||||
<Resource Include="lmage\guandao %284%29.png" />
|
||||
<Resource Include="lmage\guandao %285%29.png" />
|
||||
<Resource Include="lmage\guandao %286%29.png" />
|
||||
<Resource Include="lmage\guandao %287%29.png" />
|
||||
<Resource Include="lmage\guandao %288%29.png" />
|
||||
<Resource Include="lmage\guandao %289%29.png" />
|
||||
<Resource Include="lmage\Hand.png" />
|
||||
<Resource Include="lmage\IconParkAutoFocus.png" />
|
||||
<Resource Include="lmage\IconParkLock.png" />
|
||||
<Resource Include="lmage\IconParkMessages.png" />
|
||||
<Resource Include="lmage\IconParkPauseOne.png" />
|
||||
<Resource Include="lmage\IconParkPlay.png" />
|
||||
<Resource Include="lmage\IconParkPlayTwo.png" />
|
||||
<Resource Include="lmage\IconParkStopwatch.png" />
|
||||
<Resource Include="lmage\ID001.png" />
|
||||
<Resource Include="lmage\ID007.png" />
|
||||
<Resource Include="lmage\ID008.png" />
|
||||
<Resource Include="lmage\ID013.png" />
|
||||
<Resource Include="lmage\ID015.png" />
|
||||
<Resource Include="lmage\ID017.png" />
|
||||
<Resource Include="lmage\ID020.png" />
|
||||
<Resource Include="lmage\ID022.png" />
|
||||
<Resource Include="lmage\ID031.png" />
|
||||
<Resource Include="lmage\ID035.png" />
|
||||
<Resource Include="lmage\ID036.png" />
|
||||
<Resource Include="lmage\ID039.png" />
|
||||
<Resource Include="lmage\ID040.png" />
|
||||
<Resource Include="lmage\ID041.png" />
|
||||
<Resource Include="lmage\ID049.png" />
|
||||
<Resource Include="lmage\ID050.png" />
|
||||
<Resource Include="lmage\ID051.png" />
|
||||
<Resource Include="lmage\ID054.png" />
|
||||
<Resource Include="lmage\ID055.png" />
|
||||
<Resource Include="lmage\ID056.png" />
|
||||
<Resource Include="lmage\ID064.png" />
|
||||
<Resource Include="lmage\ID065.png" />
|
||||
<Resource Include="lmage\ID066.png" />
|
||||
<Resource Include="lmage\ID067.png" />
|
||||
<Resource Include="lmage\ID090.png" />
|
||||
<Resource Include="lmage\ID091.png" />
|
||||
<Resource Include="lmage\ID093.png" />
|
||||
<Resource Include="lmage\ID094.png" />
|
||||
<Resource Include="lmage\inf.png" />
|
||||
<Resource Include="lmage\link.png" />
|
||||
<Resource Include="lmage\LOCK.png" />
|
||||
<Resource Include="lmage\Manual.png" />
|
||||
<Resource Include="lmage\start.png" />
|
||||
<Resource Include="lmage\start2.png" />
|
||||
<Resource Include="lmage\start3.png" />
|
||||
<Resource Include="lmage\StreamlinePlayList4Solid.png" />
|
||||
<Resource Include="lmage\StreamlinePlayList8.png" />
|
||||
<Resource Include="lmage\StreamlineUltimateColorColorPaletteSample1.png" />
|
||||
<Resource Include="lmage\tong.png" />
|
||||
<Resource Include="LOGO\sunlight_logo.jpg" />
|
||||
<Resource Include="LOGO\303pdw.png" />
|
||||
<Resource Include="LOGO\303.png" />
|
||||
<Resource Include="LOGO\302.png" />
|
||||
<Resource Include="LOGO\252RMRD.png" />
|
||||
<Resource Include="LOGO\252RB.png" />
|
||||
<Resource Include="LOGO\252-2t.png" />
|
||||
<Resource Include="LOGO\242w.png" />
|
||||
<Resource Include="sunlight_logotext.jpg" />
|
||||
<Resource Include="WindowsView\sunlight_logotext.jpg" />
|
||||
<Resource Include="sunlightlogo.jpg" />
|
||||
<Resource Include="sunlightlogo.ico" />
|
||||
@@ -359,6 +674,19 @@
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\nGantt\nGantt.csproj">
|
||||
<Project>{ccc54f28-5d20-4ab3-a1a8-c62cd2da3ae7}</Project>
|
||||
<Name>nGantt</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\VncSharpWpf\VncSharpWpf.csproj">
|
||||
<Project>{77b5cb63-e14b-4253-881d-6be9d7c57076}</Project>
|
||||
<Name>VncSharpWpf</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WCFMetadata Include="Connected Services\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="AfterResolveReferences">
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,522 @@
|
||||
using Newtonsoft.Json;
|
||||
using ScottPlot.Plottables;
|
||||
using SunlightCentralizedControlManagement_SCCM_.View;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using TouchSocket.Core;
|
||||
using TouchSocket.SerialPorts;
|
||||
using TouchSocket.Sockets;
|
||||
using static SkiaSharp.HarfBuzz.SKShaper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
public class AsyncSerialPortClient
|
||||
{
|
||||
public static string ClipBetween(string source, char startChar, char endChar, bool includeBounds = false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(source))
|
||||
return string.Empty;
|
||||
|
||||
int startIndex = source.IndexOf(startChar);
|
||||
if (startIndex == -1) return string.Empty;
|
||||
|
||||
int endIndex = source.IndexOf(endChar, startIndex + 1);
|
||||
if (endIndex == -1) return string.Empty;
|
||||
|
||||
if (includeBounds)
|
||||
{
|
||||
return source.Substring(startIndex, endIndex - startIndex + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
int contentStart = startIndex + 1;
|
||||
int contentLength = endIndex - startIndex - 1;
|
||||
return contentLength > 0 ? source.Substring(contentStart, contentLength) : string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public static string PortCOM1 { get; set; }
|
||||
public static string PortCOM2 { get; set; }
|
||||
public static string PortCOM3 { get; set; }
|
||||
public static string PortCOM4 { get; set; }
|
||||
|
||||
public static async Task PortClient(SerialPortClient portclient, string com, int BAUD)
|
||||
{
|
||||
//var client = new SerialPortClient();
|
||||
portclient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到端口
|
||||
portclient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到端口
|
||||
portclient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从端口断开连接。此处仅主动断开才有效。
|
||||
portclient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从端口断开连接,当连接不成功时不会触发。
|
||||
portclient.Received = (client, e) =>
|
||||
{
|
||||
//接受重置事件状态
|
||||
_responseEvent.Set();
|
||||
string[] sArray = Regex.Split(e.ByteBlock.Span.ToString(Encoding.UTF8),
|
||||
@"\n", RegexOptions.IgnoreCase);
|
||||
|
||||
for (int i = 0; i < sArray.Length; i++)
|
||||
{
|
||||
if (sArray[i].Length > 5)
|
||||
{
|
||||
string SYSAPI = sArray[i].Substring(0, 5);
|
||||
string Station = ClipBetween(sArray[i], '[', ']');
|
||||
string DAT = sArray[i].Substring(sArray[i].IndexOf("]") + 1);
|
||||
|
||||
if (SYSAPI == "SC800")
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, object> _new = new Dictionary<string, object>();//缓存函数
|
||||
_new = JsonConvert.DeserializeObject<Dictionary<string, object>>(DAT);//反序列化
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("Station='" + Station + "' AND Serial = 'PORT1'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "802";
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}
|
||||
else if (SYSAPI == "SC810")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
Dictionary<string, object> _dat;
|
||||
_dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(DAT);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 111 } },
|
||||
"WorkOrder ='" + _dat.GetValue("Work") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "'", null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}//回复的工单记录状态后就位111
|
||||
else if (SYSAPI == "SC811")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
Dictionary<string, object> _dat;
|
||||
_dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(DAT);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkorderSteps", new Dictionary<string, object> { { "Mode", 1 } },
|
||||
"WorkOrder ='" + _dat.GetValue("Work") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "' AND Step ='" +
|
||||
_dat.GetValue("Step") + "'", null);
|
||||
|
||||
int x = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkorderSteps where WorkOrder='" +
|
||||
_dat.GetValue("Work") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "' AND Mode <> '1'", null).Tables[0].Rows.Count;
|
||||
if (x == 0)
|
||||
{
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 113 } },
|
||||
"WorkOrder ='" + _dat.GetValue("Work") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "'", null);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//回复的工单明细状态后就位113
|
||||
else if (SYSAPI == "SC812")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
Dictionary<string, object> _dat;
|
||||
_dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(DAT);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 101 } },
|
||||
"WorkOrder ='" + _dat.GetValue("Work") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "'", null);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//回复的工单设置状态后就位101
|
||||
else if (SYSAPI == "SC827")
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//获取呼叫领料单
|
||||
else if (SYSAPI == "SC830")
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, object> _new = new Dictionary<string, object>();//缓存函数
|
||||
_new = JsonConvert.DeserializeObject<Dictionary<string, object>>(DAT);//反序列化
|
||||
string mac;
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("Station='" + Station + "' AND Serial = 'PORT1'").First();
|
||||
mac = drEmployee["Name"].ToString();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["ERR"] = _new.GetValue("ERR");
|
||||
drEmployee["LOCK"] = _new.GetValue("LOCK");
|
||||
drEmployee["Message"] = _new.GetValue("Status");
|
||||
drEmployee["WorkOrder"] = _new.GetValue("Work");
|
||||
drEmployee["Temperature"] = _new.GetValue("MTT");
|
||||
drEmployee["WaterLevel"] = _new.GetValue("MTL");
|
||||
drEmployee["Process"] = _new.GetValue("Process");
|
||||
drEmployee["Step"] = _new.GetValue("Step");
|
||||
drEmployee["UserButton"] = _new.GetValue("UserB");
|
||||
if (_new.GetValue("InfoS").ToString() != "900")
|
||||
{ drEmployee["UserInfoStart"] = _new.GetValue("InfoS"); }
|
||||
drEmployee["UserInfo"] = _new.GetValue("Info");
|
||||
drEmployee["WORK_RUN"] = _new.GetValue("RUN");
|
||||
drEmployee["RUN_STEPID"] = _new.GetValue("STEPID");
|
||||
drEmployee["CALL"] = _new.GetValue("CALL");
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
}
|
||||
|
||||
if (_new.GetValue("Status").ToString() != "----------")
|
||||
{
|
||||
Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数
|
||||
Chart_new.Add("WorkOrder", _new.GetValue("Work"));
|
||||
//Chart_new.Add("Machine", mac);
|
||||
//Chart_new.Add("Time", _new.GetValue("Time"));
|
||||
Chart_new.Add("MST", _new.GetValue("MST"));
|
||||
Chart_new.Add("MTT", _new.GetValue("MTT"));
|
||||
Chart_new.Add("MTL", _new.GetValue("MTL"));
|
||||
Chart_new.Add("MTH", _new.GetValue("MTH"));
|
||||
Chart_new.Add("MUT", _new.GetValue("MUT"));
|
||||
Chart_new.Add("STTA", _new.GetValue("STTA"));
|
||||
Chart_new.Add("STLA", _new.GetValue("STLA"));
|
||||
Chart_new.Add("STTB", _new.GetValue("STTB"));
|
||||
Chart_new.Add("STLB", _new.GetValue("STLB"));
|
||||
Chart_new.Add("STTC", _new.GetValue("STTC"));
|
||||
Chart_new.Add("STLC", _new.GetValue("STLC"));
|
||||
|
||||
MainWindowViewModel.SQLiteChartAdress.InsertData("Chart", Chart_new);// 执行插入
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}//当前信息
|
||||
else if (SYSAPI == "SC831")
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}
|
||||
else if (SYSAPI == "SC832")
|
||||
{
|
||||
try
|
||||
{
|
||||
MainWindowViewModel.MachineLOG = DAT;
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//当前细节信息
|
||||
else if (SYSAPI == "SC833")
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//当前领料单信息
|
||||
else if (SYSAPI == "SC851")
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//数字开关表
|
||||
else if (SYSAPI == "SC852")
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//寄存器表
|
||||
else if (SYSAPI == "SC853")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//缓存表
|
||||
else if (SYSAPI == "SC854")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//程序设置表
|
||||
else if (SYSAPI == "SC855")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//系统设置表
|
||||
else if (SYSAPI == "SC859")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//信息
|
||||
else if (SYSAPI == "SC910")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//发布失败
|
||||
else if (SYSAPI == "SC911")
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//细节错误
|
||||
else if (SYSAPI == "SC980")
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return EasyTask.CompletedTask; ;
|
||||
};
|
||||
await portclient.SetupAsync(new TouchSocketConfig()
|
||||
.SetMaxBufferSize(1024 * 1024 * 10)
|
||||
.SetSerialPortOption(new SerialPortOption()
|
||||
{
|
||||
BaudRate = BAUD,//波特率
|
||||
DataBits = 8,//数据位
|
||||
Parity = System.IO.Ports.Parity.None,//校验位
|
||||
PortName = com,//COM
|
||||
StopBits = System.IO.Ports.StopBits.One,//停止位
|
||||
})
|
||||
.SetSerialDataHandlingAdapter(() => new PeriodPackageAdapter() { CacheTimeout = TimeSpan.FromMilliseconds(100) })
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//a.Add<MyPlugin>();
|
||||
}
|
||||
));
|
||||
try
|
||||
{
|
||||
await portclient.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex) { LogGing.ERRDATA(ex); }
|
||||
}
|
||||
public static async Task PortClient2(SerialPortClient portclient, string com, int BAUD)
|
||||
{
|
||||
//var client = new SerialPortClient();
|
||||
portclient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到端口
|
||||
portclient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到端口
|
||||
portclient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从端口断开连接。此处仅主动断开才有效。
|
||||
portclient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从端口断开连接,当连接不成功时不会触发。
|
||||
portclient.Received = (client, e) =>
|
||||
{
|
||||
_responseEvent2.Set();
|
||||
string[] sArray = Regex.Split(e.ByteBlock.Span.ToString(Encoding.UTF8),
|
||||
@"\n", RegexOptions.IgnoreCase);
|
||||
|
||||
|
||||
|
||||
return EasyTask.CompletedTask; ;
|
||||
};
|
||||
await portclient.SetupAsync(new TouchSocketConfig()
|
||||
.SetSerialPortOption(new SerialPortOption()
|
||||
{
|
||||
BaudRate = BAUD,//波特率
|
||||
DataBits = 8,//数据位
|
||||
Parity = System.IO.Ports.Parity.None,//校验位
|
||||
PortName = com,//COM
|
||||
StopBits = System.IO.Ports.StopBits.One,//停止位
|
||||
})
|
||||
.SetSerialDataHandlingAdapter(() => new PeriodPackageAdapter() { CacheTimeout = TimeSpan.FromMilliseconds(100) })
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//a.Add<MyPlugin>();
|
||||
}));
|
||||
try
|
||||
{
|
||||
await portclient.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex) { LogGing.ERRDATA(ex); }
|
||||
}
|
||||
public static async Task PortClient3(SerialPortClient portclient, string com, int BAUD)
|
||||
{
|
||||
//var client = new SerialPortClient();
|
||||
portclient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到端口
|
||||
portclient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到端口
|
||||
portclient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从端口断开连接。此处仅主动断开才有效。
|
||||
portclient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从端口断开连接,当连接不成功时不会触发。
|
||||
portclient.Received = (client, e) =>
|
||||
{
|
||||
_responseEvent3.Set();
|
||||
string[] sArray = Regex.Split(e.ByteBlock.Span.ToString(Encoding.UTF8),
|
||||
@"\n", RegexOptions.IgnoreCase);
|
||||
|
||||
|
||||
|
||||
return EasyTask.CompletedTask; ;
|
||||
};
|
||||
await portclient.SetupAsync(new TouchSocketConfig()
|
||||
.SetSerialPortOption(new SerialPortOption()
|
||||
{
|
||||
BaudRate = BAUD,//波特率
|
||||
DataBits = 8,//数据位
|
||||
Parity = System.IO.Ports.Parity.None,//校验位
|
||||
PortName = com,//COM
|
||||
StopBits = System.IO.Ports.StopBits.One,//停止位
|
||||
})
|
||||
.SetSerialDataHandlingAdapter(() => new PeriodPackageAdapter() { CacheTimeout = TimeSpan.FromMilliseconds(100) })
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//a.Add<MyPlugin>();
|
||||
}));
|
||||
try
|
||||
{
|
||||
await portclient.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex) { LogGing.ERRDATA(ex); }
|
||||
}
|
||||
public static async Task PortClient4(SerialPortClient portclient, string com, int BAUD)
|
||||
{
|
||||
//var client = new SerialPortClient();
|
||||
portclient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到端口
|
||||
portclient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到端口
|
||||
portclient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从端口断开连接。此处仅主动断开才有效。
|
||||
portclient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从端口断开连接,当连接不成功时不会触发。
|
||||
portclient.Received = (client, e) =>
|
||||
{
|
||||
_responseEvent4.Set();
|
||||
string[] sArray = Regex.Split(e.ByteBlock.Span.ToString(Encoding.UTF8),
|
||||
@"\n", RegexOptions.IgnoreCase);
|
||||
|
||||
return EasyTask.CompletedTask; ;
|
||||
};
|
||||
await portclient.SetupAsync(new TouchSocketConfig()
|
||||
.SetSerialPortOption(new SerialPortOption()
|
||||
{
|
||||
BaudRate = BAUD,//波特率
|
||||
DataBits = 8,//数据位
|
||||
Parity = System.IO.Ports.Parity.None,//校验位
|
||||
PortName = com,//COM
|
||||
StopBits = System.IO.Ports.StopBits.One,//停止位
|
||||
})
|
||||
.SetSerialDataHandlingAdapter(() => new PeriodPackageAdapter() { CacheTimeout = TimeSpan.FromMilliseconds(500) })
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//a.Add<MyPlugin>();
|
||||
}));
|
||||
try
|
||||
{
|
||||
await portclient.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex) { LogGing.ERRDATA(ex); }
|
||||
}
|
||||
|
||||
public static readonly ManualResetEventSlim _responseEvent = new ManualResetEventSlim(false);
|
||||
public static readonly ManualResetEventSlim _responseEvent2 = new ManualResetEventSlim(false);
|
||||
public static readonly ManualResetEventSlim _responseEvent3 = new ManualResetEventSlim(false);
|
||||
public static readonly ManualResetEventSlim _responseEvent4 = new ManualResetEventSlim(false);
|
||||
/// <summary>
|
||||
/// 发送指令并等待响应,超时时间为500ms
|
||||
/// </summary>
|
||||
/// <param name="command">要发送的指令字节数组</param>
|
||||
/// <returns>从机的响应数据,超时则为null</returns>
|
||||
public static void SendCommandAndWait(SerialPortClient serialPortClients, string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
var t = CRCcheck16.ToCRC16(command);
|
||||
_responseEvent.Reset();
|
||||
serialPortClients.Send(command); // 发送指令
|
||||
|
||||
// 等待500毫秒或直到收到响应
|
||||
if (!_responseEvent.Wait(TimeSpan.FromMilliseconds(1000)))
|
||||
{
|
||||
_responseEvent.Set();
|
||||
//清楚了解状态
|
||||
string Station = ClipBetween(command, '[', ']');
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("Station='" +
|
||||
Station + "' AND Serial = 'PORT1'").First();
|
||||
if (drEmployee.Field<int>("State") != 800)
|
||||
{
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "800";
|
||||
drEmployee["WorkOrder"] = "------";
|
||||
drEmployee["Dyelot"] = "";
|
||||
drEmployee["Temperature"] = 0.0;
|
||||
drEmployee["WaterLevel"] = 0.0;
|
||||
drEmployee["Process"] = "";
|
||||
drEmployee["Step"] = "";
|
||||
drEmployee["Message"] = "";
|
||||
drEmployee["SYSKEY"] = "";
|
||||
drEmployee["WORK_RUN"] = "-1";
|
||||
drEmployee["ERR"] = false;
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
public static void SendCommandAndWait2(SerialPortClient serialPortClients, string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
_responseEvent2.Reset();
|
||||
serialPortClients.Send(command); // 发送指令
|
||||
// 等待500毫秒或直到收到响应
|
||||
_responseEvent2.Wait(TimeSpan.FromMilliseconds(1000));
|
||||
// 重置事件状态
|
||||
_responseEvent2.Set();
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
public static void SendCommandAndWait3(SerialPortClient serialPortClients, string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
_responseEvent3.Reset();
|
||||
serialPortClients.Send(command); // 发送指令
|
||||
// 等待500毫秒或直到收到响应
|
||||
_responseEvent3.Wait(TimeSpan.FromMilliseconds(1000));
|
||||
// 重置事件状态
|
||||
_responseEvent3.Set();
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
public static void SendCommandAndWait4(SerialPortClient serialPortClients, string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
_responseEvent4.Reset();
|
||||
serialPortClients.Send(command); // 发送指令
|
||||
// 等待500毫秒或直到收到响应
|
||||
_responseEvent4.Wait(TimeSpan.FromMilliseconds(1000));
|
||||
// 重置事件状态
|
||||
_responseEvent4.Set();
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using DyeingComputer.UserClass;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ScottPlot;
|
||||
using ScottPlot.Colormaps;
|
||||
using SkiaSharp;
|
||||
using SunlightCentralizedControlManagement_SCCM_.View;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using TouchSocket.Core;
|
||||
using TouchSocket.Sockets;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System.Runtime.InteropServices;
|
||||
using ScottPlot.Colormaps;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using Newtonsoft.Json;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using SunlightCentralizedControlManagement_SCCM_.View;
|
||||
using TcpClient = TouchSocket.Sockets.TcpClient;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Documents;
|
||||
using System.Xml.Linq;
|
||||
using ScottPlot;
|
||||
using System.Collections;
|
||||
using TouchSocket.Core;
|
||||
using TouchSocket.SerialPorts;
|
||||
using TouchSocket.Sockets;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.View.MachinesView;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
|
||||
using TcpClient = TouchSocket.Sockets.TcpClient;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{/// <summary>
|
||||
@@ -34,42 +41,89 @@ namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
/// </summary>
|
||||
public class AsyncTcpClient
|
||||
{
|
||||
|
||||
public static async Task TcpClient(TcpClient tcpClient, string ip, string port)
|
||||
{
|
||||
//TcpClient tcpClient = new TcpClient();
|
||||
tcpClient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到服务器,此时已经创建socket,但是还未建立tcp
|
||||
tcpClient.Connected = (client, e) =>
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "' AND port='" + client.Port + "'").First();
|
||||
try
|
||||
{
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "801";
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
}
|
||||
LogGing.LogGingDATA("[IP='" + client.IP + "' AND port='" + client.Port + "']=Link_OK");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
|
||||
return EasyTask.CompletedTask;
|
||||
};//成功连接到服务器
|
||||
tcpClient.Closing = (client, e) =>
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "' AND port='" + client.Port + "'").First();
|
||||
try
|
||||
{
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "899";
|
||||
drEmployee["State"] = "800";
|
||||
drEmployee["WorkOrder"] = "------";
|
||||
drEmployee["Dyelot"] = "";
|
||||
drEmployee["Temperature"] = 0.0;
|
||||
drEmployee["WaterLevel"] = 0.0;
|
||||
drEmployee["Process"] = "";
|
||||
drEmployee["Step"] = "";
|
||||
drEmployee["Message"] = "";
|
||||
drEmployee["SYSKEY"] = "";
|
||||
drEmployee["WORK_RUN"] = "-1";
|
||||
drEmployee["ERR"] = false;
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
|
||||
}
|
||||
LogGing.LogGingDATA("[IP='" + client.IP + "' AND port='" + client.Port + "']=Link_STOP");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
return EasyTask.CompletedTask;
|
||||
};//即将从服务器断开连接。此处仅主动断开才有效。
|
||||
tcpClient.Closed = (client, e) =>
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "' AND port='" + client.Port + "'").First();
|
||||
try
|
||||
{
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "899";
|
||||
drEmployee["State"] = "800";
|
||||
drEmployee["WorkOrder"] = "------";
|
||||
drEmployee["Dyelot"] = "";
|
||||
drEmployee["Temperature"] = 0.0;
|
||||
drEmployee["WaterLevel"] = 0.0;
|
||||
drEmployee["Process"] = "";
|
||||
drEmployee["Step"] = "";
|
||||
drEmployee["Message"] = "";
|
||||
drEmployee["SYSKEY"] = "";
|
||||
drEmployee["WORK_RUN"] = "-1";
|
||||
drEmployee["ERR"] = false;
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
|
||||
}
|
||||
LogGing.LogGingDATA("[IP='" + client.IP + "' AND port='" + client.Port + "']=Link_INTERRUPT");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
return EasyTask.CompletedTask;
|
||||
};//从服务器断开连接,当连接不成功时不会触发。
|
||||
tcpClient.Received = (client, e) =>
|
||||
@@ -78,95 +132,341 @@ namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
string SYSAPI = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(0, 5);
|
||||
string DAT = e.ByteBlock.Span.ToString(Encoding.UTF8);
|
||||
if (SYSAPI == "SC800")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数
|
||||
Chart_new = JsonConvert.DeserializeObject<Dictionary<string, object>>(DAT);//反序列化
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "' AND port='" + client.Port + "'").First();
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["SYSKEY"] = Chart_new.GetValue("SYSKEY").ToString();
|
||||
drEmployee["NAME"] = Chart_new.GetValue("MACHINE").ToString();
|
||||
// drEmployee["NAME"] = Chart_new.GetValue("MACHINE").ToString();
|
||||
drEmployee["Groups"] = Chart_new.GetValue("GROUP").ToString();
|
||||
drEmployee["State"] = "802";
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}
|
||||
else if (SYSAPI == "SC810")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 111 } },
|
||||
"WorkOrder ='" + DAT + "'", null);
|
||||
// Dictionary<string, object> _dat;
|
||||
// _dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(DAT);
|
||||
// MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 111 } },
|
||||
// "WorkOrder ='" + _dat.GetValue("WorkOrder") + "' AND ReDye ='" + _dat.GetValue("ReDye") + "'", null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}
|
||||
else if (SYSAPI == "SC811")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 111 } },
|
||||
"WorkOrder ='" + DAT + "'", null);
|
||||
// Dictionary<string, object> _dat;
|
||||
// _dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(DAT);
|
||||
// MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 113 } },
|
||||
// "WorkOrder ='" + _dat.GetValue("WorkOrder") + "' AND ReDye ='"+ _dat.GetValue("ReDye") + "'", null);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}
|
||||
else if (SYSAPI == "SC812")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 101 } },
|
||||
"WorkOrder ='" + DAT + "'", null);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}
|
||||
else if (SYSAPI == "SC822")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(DAT).Copy();//反序列化
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
UserWorkOrder userWorkOrder = new UserWorkOrder();
|
||||
userWorkOrder.WorkOrderTable = dataTable;
|
||||
userWorkOrder.Show();
|
||||
});
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
UserInf userInf = new UserInf();
|
||||
userInf.Inf_DAT = "没有等待中的工艺";
|
||||
userInf.Show();
|
||||
userInf.Activate();
|
||||
});
|
||||
|
||||
// LogGing.LogGingDATA("[ERR='" + ex + "']=Exception");
|
||||
MainWindowViewModel.ERR_c++;
|
||||
}
|
||||
}
|
||||
else if (SYSAPI == "SC827")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
|
||||
foreach (DataRow sourceRow in dataTable.Rows)
|
||||
{
|
||||
lock (MainWindowViewModel.Dyelot_CALL.Rows.SyncRoot)
|
||||
{
|
||||
// 创建新行(基于目标表结构)
|
||||
DataRow newRow = MainWindowViewModel.Dyelot_CALL.NewRow();
|
||||
// 复制源表中存在的列数据
|
||||
foreach (DataColumn column in dataTable.Columns)
|
||||
{
|
||||
if (MainWindowViewModel.Dyelot_CALL.Columns.Contains(column.ColumnName))
|
||||
{
|
||||
newRow[column.ColumnName] = sourceRow[column.ColumnName];
|
||||
}
|
||||
}
|
||||
MainWindowViewModel.Dyelot_CALL.Rows.Add(newRow);
|
||||
|
||||
Dictionary<string, object> Product_ = new Dictionary<string, object>();//缓存函数
|
||||
Product_.Add("State", 202);
|
||||
Product_.Add("Dyelot", newRow.Field<string>("Dyelot"));
|
||||
Product_.Add("Step", newRow.Field<int>("Step"));
|
||||
Product_.Add("ProductCode", newRow.Field<string>("ProductCode"));
|
||||
Product_.Add("Amount", newRow.Field<object>("Amount"));
|
||||
Product_.Add("DispenseEndTime", newRow.Field<object>("DispenseEndTime"));
|
||||
|
||||
newRow.BeginEdit();
|
||||
newRow["State"] = 202;
|
||||
newRow.EndEdit();
|
||||
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("DyelotHistory", MainWindowViewModel.SQLiteHelpers.ToDictionary(newRow));// 执行插入
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = Convert.ToInt16(MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines,
|
||||
"ID", "Name='" + newRow.Field<string>("Machine") + "'")),
|
||||
DAT = "SC828" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines,
|
||||
"SYSKEY", "Name='" + newRow.Field<string>("Machine") + "'") + Product_.ToJsonString()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//获取呼叫领料单
|
||||
else if (SYSAPI == "SC830")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数
|
||||
Chart_new = JsonConvert.DeserializeObject<Dictionary<string, object>>(DAT);//反序列化
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "' AND port='" + client.Port + "'").First();
|
||||
Dictionary<string, object> _new = new Dictionary<string, object>();//缓存函数
|
||||
_new = JsonConvert.DeserializeObject<Dictionary<string, object>>(DAT);//反序列化
|
||||
string mac;
|
||||
// 首先确保 DataTable 使用线程安全的访问方式
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("IP='" + client.IP + "'").First();
|
||||
mac = drEmployee["Name"].ToString();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["Message"] = Chart_new.GetValue("Status").ToString();
|
||||
drEmployee["WorkOrder"] = Chart_new.GetValue("WorkNumder").ToString();
|
||||
drEmployee["Temperature"] = Chart_new.GetValue("MTT").ToString();
|
||||
drEmployee["ERR"] = _new.GetValue("ERR");
|
||||
drEmployee["LOCK"] = _new.GetValue("LOCK");
|
||||
drEmployee["Message"] = _new.GetValue("Status");
|
||||
drEmployee["WorkOrder"] = _new.GetValue("WorkNumder");
|
||||
drEmployee["Temperature"] = _new.GetValue("MTT");
|
||||
drEmployee["WaterLevel"] = _new.GetValue("MTL");
|
||||
drEmployee["Process"] = _new.GetValue("Process");
|
||||
drEmployee["Step"] = _new.GetValue("Step");
|
||||
drEmployee["UserButton"] = _new.GetValue("UserButton");
|
||||
if (_new.GetValue("UserInfoStart").ToString() != "900")
|
||||
{ drEmployee["UserInfoStart"] = _new.GetValue("UserInfoStart"); }
|
||||
drEmployee["UserInfo"] = _new.GetValue("UserInfo");
|
||||
drEmployee["WORK_RUN"] = _new.GetValue("WORK_RUN");
|
||||
drEmployee["RUN_STEPID"] = _new.GetValue("RUN_STEPID");
|
||||
drEmployee["CALL"] = _new.GetValue("CALL");
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
}
|
||||
if (_new.GetValue("Status").ToString() != "----------")
|
||||
{
|
||||
Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数
|
||||
Chart_new.Add("WorkOrder", _new.GetValue("WorkNumder"));
|
||||
Chart_new.Add("Machine", mac);
|
||||
Chart_new.Add("Time", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
Chart_new.Add("MST", _new.GetValue("MST"));
|
||||
Chart_new.Add("MTT", _new.GetValue("MTT"));
|
||||
Chart_new.Add("MTL", _new.GetValue("MTL"));
|
||||
Chart_new.Add("MTH", _new.GetValue("MTH"));
|
||||
Chart_new.Add("MUT", _new.GetValue("MUT"));
|
||||
Chart_new.Add("STTA", _new.GetValue("STTA"));
|
||||
Chart_new.Add("STLA", _new.GetValue("STLA"));
|
||||
Chart_new.Add("STTB", _new.GetValue("STTB"));
|
||||
Chart_new.Add("STLB", _new.GetValue("STLB"));
|
||||
Chart_new.Add("STTC", _new.GetValue("STTC"));
|
||||
Chart_new.Add("STLC", _new.GetValue("STLC"));
|
||||
|
||||
MainWindowViewModel.SQLiteChartAdress.InsertData("Chart", Chart_new);// 执行插入
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//当前信息
|
||||
else if (SYSAPI == "SC831")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MonitorView.TechnologicalProcess = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
MainWindowViewModel.dt_TP = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//步骤信息
|
||||
else if (SYSAPI == "SC832")
|
||||
{
|
||||
MonitorView.Sys_log = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
|
||||
try
|
||||
{
|
||||
MainWindowViewModel.MachineLOG = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//当前细节信息
|
||||
else if (SYSAPI == "SC833")
|
||||
{
|
||||
MonitorView.Sys_log = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MonitorView.Product_DAT = JsonConvert.DeserializeObject<DataTable>(DAT).Copy();//反序列化
|
||||
MonitorView.Product_bool = true;
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//当前领料单信息
|
||||
else if (SYSAPI == "SC851")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
DataTable obj = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
MainWindowViewModel.dt_d = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//数字开关表
|
||||
else if (SYSAPI == "SC852")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.dt_a = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//寄存器表
|
||||
else if (SYSAPI == "SC853")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.dt_m = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//缓存表
|
||||
else if (SYSAPI == "SC854")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.dt_ParameterSet = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//程序设置表
|
||||
else if (SYSAPI == "SC855")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.dt_SysSet = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//系统设置表
|
||||
else if (SYSAPI == "SC859")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MachinesView.LOG_dataTable = JsonConvert.DeserializeObject<DataTable>(DAT);//反序列化
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//信息
|
||||
else if (SYSAPI == "SC910")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 109 } },
|
||||
"WorkOrder ='" + DAT + "'", null);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//发布失败
|
||||
else if (SYSAPI == "SC911")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("WorkOrder", new Dictionary<string, object> { { "State", 119 } },
|
||||
"WorkOrder ='" + DAT + "'", null);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//细节错误
|
||||
else if (SYSAPI == "SC921")
|
||||
{
|
||||
try
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
}
|
||||
catch (Exception ex) { LogGing.LogGingDATA("[ERR='" + ex + "']=Exception"); MainWindowViewModel.ERR_c++; }
|
||||
}//错误
|
||||
else if (SYSAPI == "SC980")
|
||||
{
|
||||
DAT = DAT.Substring(DAT.IndexOf("]") + 1);
|
||||
MessageBox.Show(DAT, "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
}
|
||||
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
//载入配置
|
||||
await tcpClient.SetupAsync(new TouchSocketConfig()
|
||||
.SetMaxBufferSize(1024*1024)
|
||||
.SetMinBufferSize(1024*64)
|
||||
.SetMaxBufferSize(1024* 1024*100)
|
||||
.SetMinBufferSize(1024*1024)
|
||||
.SetRemoteIPHost(ip + ":" + port)
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
a.UseCheckClear()
|
||||
.SetCheckClearType(CheckClearType.All)
|
||||
.SetTick(TimeSpan.FromSeconds(10))
|
||||
.SetOnClose((c, t) =>
|
||||
{
|
||||
c.TryShutdown();
|
||||
});
|
||||
a.UseTcpReconnection();//触发型重连
|
||||
//使用Polling轮询连接插件
|
||||
a.UseTcpReconnection()
|
||||
.UsePolling(TimeSpan.FromSeconds(5));
|
||||
})
|
||||
.ConfigureContainer(a =>
|
||||
{
|
||||
// a.AddConsoleLogger();//添加一个日志注入
|
||||
}));
|
||||
|
||||
// Result result = await
|
||||
_ = tcpClient.TryConnectAsync();
|
||||
// return result.IsSuccess;
|
||||
/* try
|
||||
{
|
||||
await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}*/
|
||||
));
|
||||
|
||||
await tcpClient.TryConnectAsync();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace DyeingComputer.UserClass
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
/// <summary>
|
||||
/// CRC校验
|
||||
|
||||
@@ -0,0 +1,360 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
/// <summary>
|
||||
/// 线程安全的 DataTable 管理器
|
||||
/// 提供对 DataTable 的安全并发访问
|
||||
/// </summary>
|
||||
public class DataTableManager : IDisposable
|
||||
{
|
||||
private DataTable _dataTable;
|
||||
private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
|
||||
private bool _disposed = false;
|
||||
|
||||
#region 构造函数
|
||||
public DataTableManager()
|
||||
{
|
||||
_dataTable = new DataTable();
|
||||
}
|
||||
|
||||
public DataTableManager(DataTable dataTable)
|
||||
{
|
||||
_dataTable = dataTable ?? throw new ArgumentNullException(nameof(dataTable));
|
||||
}
|
||||
|
||||
public DataTableManager(string tableName)
|
||||
{
|
||||
_dataTable = new DataTable(tableName);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 基本操作
|
||||
/// <summary>
|
||||
/// 安全地添加列
|
||||
/// </summary>
|
||||
public void AddColumn(string columnName, Type dataType)
|
||||
{
|
||||
ExecuteWriteOperation(table =>
|
||||
{
|
||||
table.Columns.Add(columnName, dataType);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地添加行
|
||||
/// </summary>
|
||||
public void AddRow(params object[] values)
|
||||
{
|
||||
ExecuteWriteOperation(table =>
|
||||
{
|
||||
DataRow newRow = table.NewRow();
|
||||
for (int i = 0; i < Math.Min(values.Length, table.Columns.Count); i++)
|
||||
{
|
||||
newRow[i] = values[i] ?? DBNull.Value;
|
||||
}
|
||||
table.Rows.Add(newRow);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地更新单元格值
|
||||
/// </summary>
|
||||
public bool UpdateCell(int rowIndex, string columnName, object value)
|
||||
{
|
||||
return ExecuteWriteOperation(table =>
|
||||
{
|
||||
if (IsValidRowIndex(table, rowIndex) && table.Columns.Contains(columnName))
|
||||
{
|
||||
table.Rows[rowIndex][columnName] = value ?? DBNull.Value;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地删除行
|
||||
/// </summary>
|
||||
public bool DeleteRow(int rowIndex)
|
||||
{
|
||||
return ExecuteWriteOperation(table =>
|
||||
{
|
||||
if (IsValidRowIndex(table, rowIndex))
|
||||
{
|
||||
table.Rows[rowIndex].Delete();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 查询操作
|
||||
/// <summary>
|
||||
/// 安全地获取行
|
||||
/// </summary>
|
||||
public DataRow GetRow(int rowIndex)
|
||||
{
|
||||
return ExecuteReadOperation(table =>
|
||||
{
|
||||
return IsValidRowIndex(table, rowIndex) ? table.Rows[rowIndex] : null;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地查找行(使用筛选条件)
|
||||
/// </summary>
|
||||
public DataRow[] FindRows(string filterExpression)
|
||||
{
|
||||
return ExecuteReadOperation(table =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return string.IsNullOrEmpty(filterExpression)
|
||||
? table.Select()
|
||||
: table.Select(filterExpression);
|
||||
}
|
||||
catch (EvaluateException)
|
||||
{
|
||||
return new DataRow[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地获取行数
|
||||
/// </summary>
|
||||
public int GetRowCount()
|
||||
{
|
||||
return ExecuteReadOperation(table => table.Rows.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地检查行是否存在
|
||||
/// </summary>
|
||||
public bool RowExists(int rowIndex)
|
||||
{
|
||||
return ExecuteReadOperation(table => IsValidRowIndex(table, rowIndex));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 批量操作
|
||||
/// <summary>
|
||||
/// 安全地批量添加行
|
||||
/// </summary>
|
||||
public void BulkAddRows(IEnumerable<object[]> rowsData)
|
||||
{
|
||||
ExecuteWriteOperation(table =>
|
||||
{
|
||||
foreach (var rowData in rowsData)
|
||||
{
|
||||
DataRow newRow = table.NewRow();
|
||||
for (int i = 0; i < Math.Min(rowData.Length, table.Columns.Count); i++)
|
||||
{
|
||||
newRow[i] = rowData[i] ?? DBNull.Value;
|
||||
}
|
||||
table.Rows.Add(newRow);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安全地清空所有数据
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
ExecuteWriteOperation(table =>
|
||||
{
|
||||
table.Clear();
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 数据导出
|
||||
/// <summary>
|
||||
/// 获取数据快照(线程安全的副本)
|
||||
/// </summary>
|
||||
public DataTable GetSnapshot()
|
||||
{
|
||||
return ExecuteReadOperation(table =>
|
||||
{
|
||||
return table.Copy(); // 创建数据的独立副本
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取只读视图
|
||||
/// </summary>
|
||||
public DataView GetReadOnlyView()
|
||||
{
|
||||
return ExecuteReadOperation(table =>
|
||||
{
|
||||
return new DataView(table) { AllowEdit = false };
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出到新 DataTable(包含结构)
|
||||
/// </summary>
|
||||
public DataTable ExportToDataTable()
|
||||
{
|
||||
return ExecuteReadOperation(table =>
|
||||
{
|
||||
DataTable exported = table.Clone();
|
||||
exported.Merge(table, false, MissingSchemaAction.Add);
|
||||
return exported;
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 锁操作核心
|
||||
/// <summary>
|
||||
/// 执行读取操作(共享锁)
|
||||
/// </summary>
|
||||
private T ExecuteReadOperation<T>(Func<DataTable, T> operation)
|
||||
{
|
||||
_lock.EnterReadLock();
|
||||
try
|
||||
{
|
||||
return operation(_dataTable);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitReadLock();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行写入操作(独占锁)
|
||||
/// </summary>
|
||||
private void ExecuteWriteOperation(Action<DataTable> operation)
|
||||
{
|
||||
_lock.EnterWriteLock();
|
||||
try
|
||||
{
|
||||
operation(_dataTable);
|
||||
_dataTable.AcceptChanges();
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitWriteLock();
|
||||
}
|
||||
}
|
||||
|
||||
private T ExecuteWriteOperation<T>(Func<DataTable, T> operation)
|
||||
{
|
||||
_lock.EnterWriteLock();
|
||||
try
|
||||
{
|
||||
var result = operation(_dataTable);
|
||||
_dataTable.AcceptChanges();
|
||||
return result;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitWriteLock();
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsValidRowIndex(DataTable table, int rowIndex)
|
||||
{
|
||||
return rowIndex >= 0 && rowIndex < table.Rows.Count;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 高级功能
|
||||
/// <summary>
|
||||
/// 带超时的安全操作
|
||||
/// </summary>
|
||||
public bool TryUpdateCell(int rowIndex, string columnName, object value, int timeoutMs = 5000)
|
||||
{
|
||||
if (_lock.TryEnterWriteLock(timeoutMs))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (IsValidRowIndex(_dataTable, rowIndex) && _dataTable.Columns.Contains(columnName))
|
||||
{
|
||||
_dataTable.Rows[rowIndex][columnName] = value ?? DBNull.Value;
|
||||
_dataTable.AcceptChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitWriteLock();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行事务性操作
|
||||
/// </summary>
|
||||
public void ExecuteTransaction(Action<DataTable> transaction)
|
||||
{
|
||||
_lock.EnterWriteLock();
|
||||
try
|
||||
{
|
||||
// 开始事务
|
||||
_dataTable.BeginLoadData();
|
||||
|
||||
try
|
||||
{
|
||||
transaction(_dataTable);
|
||||
_dataTable.AcceptChanges();
|
||||
}
|
||||
catch
|
||||
{
|
||||
_dataTable.RejectChanges();
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_dataTable.EndLoadData();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitWriteLock();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 属性和清理
|
||||
public string TableName
|
||||
{
|
||||
get => ExecuteReadOperation(table => table.TableName);
|
||||
set => ExecuteWriteOperation(table => table.TableName = value);
|
||||
}
|
||||
|
||||
public DataColumnCollection Columns
|
||||
{
|
||||
get => ExecuteReadOperation(table => table.Columns);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (!_disposed)
|
||||
{
|
||||
_lock?.Dispose();
|
||||
_dataTable?.Dispose();
|
||||
_disposed = true;
|
||||
}
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
~DataTableManager()
|
||||
{
|
||||
Dispose();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,345 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
/// <summary>
|
||||
/// Passive data class holding schedule information
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class IP_Task
|
||||
{
|
||||
/// <summary>
|
||||
/// Initialize a new task to hold schedule information
|
||||
/// </summary>
|
||||
public IP_Task()
|
||||
{
|
||||
Complete = 0.0f;
|
||||
Start = TimeSpan.Zero;
|
||||
End = new TimeSpan(1, 0, 0, 0);
|
||||
Duration = new TimeSpan(1, 0, 0, 0);
|
||||
Slack = TimeSpan.Zero;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get or set the Name of this Task
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicate whether this task is collapsed such that sub tasks are hidden from view. Only groups can be collasped.
|
||||
/// </summary>
|
||||
public bool IsCollapsed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get or set the pecentage complete of this task, expressed in float between 0.0 and 1.0f.
|
||||
/// </summary>
|
||||
public float Complete { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the start time of this Task relative to the project start
|
||||
/// </summary>
|
||||
public TimeSpan Start { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the end time of this Task relative to the project start
|
||||
/// </summary>
|
||||
public TimeSpan End { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the duration of this Task in days
|
||||
/// </summary>
|
||||
public TimeSpan Duration { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the amount of slack (free float)
|
||||
/// </summary>
|
||||
public TimeSpan Slack { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Convert this Task to a descriptive string
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[Name = {0}, Start = {1}, End = {2}, Duration = {3}, Complete = {4}]", Name, Start, End, Duration, Complete);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ProjectManager interface
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Task class type</typeparam>
|
||||
/// <typeparam name="R">Resource class type</typeparam>
|
||||
public interface IProjectManager<T, R>
|
||||
where T : IP_Task
|
||||
where R : class
|
||||
{
|
||||
/// <summary>
|
||||
/// Add task to project manager
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
void Add(T task);
|
||||
/// <summary>
|
||||
/// Delete task from project manager
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
void Delete(T task);
|
||||
/// <summary>
|
||||
/// Group the member task under the group task. Group task cannot have relations.
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
/// <param name="member"></param>
|
||||
void Group(T group, T member);
|
||||
/// <summary>
|
||||
/// Ungroup member task from group task. If there are no more task under group, group will become a normal task.
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
/// <param name="member"></param>
|
||||
void Ungroup(T group, T member);
|
||||
/// <summary>
|
||||
/// Split the specified task into consecutive parts part1 and part2.
|
||||
/// </summary>
|
||||
/// <param name="task">The regular task to split which has duration of at least 2 to make two parts of 1 time unit duration each.</param>
|
||||
/// <param name="part1">New Task part (1) of the split task, with the start time of the original task and the specified duration value.</param>
|
||||
/// <param name="part2">New Task part (2) of the split task, starting 1 time unit after part (1) ends and having the remaining of the duration of the origina task.</param>
|
||||
/// <param name="duration">The duration of part (1) will be set to the specified duration value but will also be adjusted to approperiate value if necessary.</param>
|
||||
void Split(T task, T part1, T part2, TimeSpan duration);
|
||||
/// <summary>
|
||||
/// Split the specified part and obtain another part from it.
|
||||
/// </summary>
|
||||
/// <param name="part">The task part to split which has duration of at least 2 to make two parts of 1 time unit duration each. Its duration will be set to the specified duration value.</param>
|
||||
/// <param name="another">New Task part of the original part, starting 1 time unit after it ends and having the remaining of the duration of the original part.</param>
|
||||
/// <param name="duration">The duration of part (1) will be set to the specified duration value but will also be adjusted to approperiate value if necessary.</param>
|
||||
void Split(T part, T another, TimeSpan duration);
|
||||
/// <summary>
|
||||
/// Join part1 and part2 in a split task into a single part represented by part1, and part2 will be deleted from the ProjectManager.
|
||||
/// The resulting part will have a duration total of the two parts. Schedule of other parts will be packed according to direction of join.
|
||||
/// If the join will result in only one part remaining, the split task will merge instead.
|
||||
/// </summary>
|
||||
/// <param name="part1">The part to keep in the ProjectManager after the join completes successfully.</param>
|
||||
/// <param name="part2">The part to join into part1 and be deleted afterwards from the ProjectManager.</param>
|
||||
void Join(T part1, T part2);
|
||||
/// <summary>
|
||||
/// Merge all the parts of the splitted task back into one task, having duration equal to sum of total duration of individual task parts, and aggregating the resources onto the resulting task.
|
||||
/// </summary>
|
||||
/// <param name="split">The split Task to merge</param>
|
||||
void Merge(T split);
|
||||
/// <summary>
|
||||
/// Get the parts of the split task
|
||||
/// </summary>
|
||||
/// <param name="split"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> PartsOf(T split);
|
||||
/// <summary>
|
||||
/// Get the split task that the specified part belogs to.
|
||||
/// </summary>
|
||||
/// <param name="part"></param>
|
||||
/// <returns></returns>
|
||||
T SplitTaskOf(T part);
|
||||
/// <summary>
|
||||
/// Get whether the specified task is a split task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
bool IsSplit(T task);
|
||||
/// <summary>
|
||||
/// Get whether the specified task is a part of a split task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
bool IsPart(T task);
|
||||
/// <summary>
|
||||
/// Ungroup all member task under the specfied group task. The specified group task will become a normal task.
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
void Ungroup(T group);
|
||||
/// <summary>
|
||||
/// Move the specified task by offset positions in the task enumeration
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="offset"></param>
|
||||
void Move(T task, int offset);
|
||||
/// <summary>
|
||||
/// Set a relation between the precedent and dependant task
|
||||
/// </summary>
|
||||
/// <param name="precedent"></param>
|
||||
/// <param name="dependant"></param>
|
||||
void Relate(T precedent, T dependant);
|
||||
/// <summary>
|
||||
/// Unset the relation between the precedent and dependant task, if any.
|
||||
/// </summary>
|
||||
/// <param name="precedent"></param>
|
||||
/// <param name="dependant"></param>
|
||||
void Unrelate(T precedent, T dependant);
|
||||
/// <summary>
|
||||
/// Remove all dependant task from specified precedent task
|
||||
/// </summary>
|
||||
/// <param name="precedent"></param>
|
||||
void Unrelate(T precedent);
|
||||
/// <summary>
|
||||
/// Enumerate through all tasks that is a precedent, having dependants.
|
||||
/// </summary>
|
||||
IEnumerable<T> Precedents { get; }
|
||||
/// <summary>
|
||||
/// Enumerate through all the tasks in the ProjectManager.
|
||||
/// If there are no change to groups and no add/delete tasks, the order between consecutive calls is preserved.
|
||||
/// </summary>
|
||||
IEnumerable<T> Tasks { get; }
|
||||
/// <summary>
|
||||
/// Set the start time of the specified task.
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="start">Number of timescale units after ProjectManager.Start</param>
|
||||
void SetStart(T task, TimeSpan start);
|
||||
/// <summary>
|
||||
/// Set the end time of the specified task. Duration is automatically adjusted to satisfy.
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="end">Number of timescale units after ProjectManager.Start</param>
|
||||
void SetEnd(T task, TimeSpan end);
|
||||
/// <summary>
|
||||
/// Set the duration of the specified task from start to end.
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="duration">Number of timescale units between ProjectManager.Start</param>
|
||||
void SetDuration(T task, TimeSpan duration);
|
||||
/// <summary>
|
||||
/// Set the percentage complete of the specified task from 0.0f to 1.0f.
|
||||
/// No effect on group tasks as they will get the aggregated percentage complete of all child tasks
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="complete"></param>
|
||||
void SetComplete(T task, float complete);
|
||||
/// <summary>
|
||||
/// Set whether to collapse the specified group task. No effect on regular tasks.
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
/// <param name="collasped"></param>
|
||||
void SetCollapse(T group, bool collasped);
|
||||
/// <summary>
|
||||
/// Set the "now" time. Its value is the number of timescale units after the start time.
|
||||
/// </summary>
|
||||
TimeSpan Now { get; }
|
||||
/// <summary>
|
||||
/// Set the start date of the project.
|
||||
/// </summary>
|
||||
DateTime Start { get; set; }
|
||||
/// <summary>
|
||||
/// Get the zero-based index of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
int IndexOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through parent group and grandparent groups of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> GroupsOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the children and grandchildren of the specified group
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> MembersOf(T group);
|
||||
/// <summary>
|
||||
/// Enumerate through all the direct children of the specified group
|
||||
/// </summary>
|
||||
/// <param name="group"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> DirectMembersOf(T group);
|
||||
/// <summary>
|
||||
/// Enumerate through all the direct precedents and indirect precedents of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> PrecedentsOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the direct dependants and indirect dependants of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> DependantsOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the direct precedents of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> DirectPrecedentsOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the direct dependants of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> DirectDependantsOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the critical paths. Each path is an enumerable of tasks, starting from the final task of each path.
|
||||
/// </summary>
|
||||
IEnumerable<IEnumerable<T>> CriticalPaths { get; }
|
||||
/// <summary>
|
||||
/// Get the parent group of the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
T DirectGroupOf(T task);
|
||||
/// <summary>
|
||||
/// Get whether the specified task is a group
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
bool IsGroup(T task);
|
||||
/// <summary>
|
||||
/// Get whether the specified task is a member
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
bool IsMember(T task);
|
||||
/// <summary>
|
||||
/// Get whether the specified task has relations, either has dependants or has precedents connecting to it.
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
bool HasRelations(T task);
|
||||
/// <summary>
|
||||
/// Assign the specified resource to the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="resource"></param>
|
||||
void Assign(T task, R resource);
|
||||
/// <summary>
|
||||
/// Unassign the specified resource from the specfied task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="resource"></param>
|
||||
void Unassign(T task, R resource);
|
||||
/// <summary>
|
||||
/// Unassign all resources from the specified task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
void Unassign(T task);
|
||||
/// <summary>
|
||||
/// Unassign the specified resource from all tasks that has this resource assigned
|
||||
/// </summary>
|
||||
/// <param name="resource"></param>
|
||||
void Unassign(R resource);
|
||||
/// <summary>
|
||||
/// Enumerate through all the resources that has been assigned to some task.
|
||||
/// </summary>
|
||||
IEnumerable<R> Resources { get; }
|
||||
/// <summary>
|
||||
/// Enumerate through all the resources that has been assigned to the specified task.
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<R> ResourcesOf(T task);
|
||||
/// <summary>
|
||||
/// Enumerate through all the tasks that has the specified resource assigned to it.
|
||||
/// </summary>
|
||||
/// <param name="resource"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> TasksOf(R resource);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ using System.Data;
|
||||
using System.IO;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
|
||||
|
||||
namespace DyeingComputer.UserClass
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
public class LogGing
|
||||
{
|
||||
@@ -23,7 +23,6 @@ namespace DyeingComputer.UserClass
|
||||
StreamWriter wr = new StreamWriter(fs);//创建文件
|
||||
wr.WriteLine(Log_time + dat);
|
||||
wr.Close();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -43,5 +42,79 @@ namespace DyeingComputer.UserClass
|
||||
directoryInfo.Create();//创建日志路径
|
||||
}
|
||||
}
|
||||
public static void ERRDATA(System.Exception dat)
|
||||
{
|
||||
string Log_time = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
string logpath = System.Environment.CurrentDirectory + "\\ERR";//日志文件目录
|
||||
// string logPathtxt = "" + System.Environment.CurrentDirectory + "\\Log\\"+ Log_time + "Log.txt";//日志文件
|
||||
// System.IO.DirectoryInfo log = new System.IO.DirectoryInfo();//生成日志文件目录
|
||||
string log_path = logpath + "\\ERR" + Log_time + ".txt";
|
||||
string Log_timehms = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
if (Directory.Exists(logpath))//检查日志路径
|
||||
{
|
||||
if (!File.Exists(log_path))//检查文件并写入
|
||||
{
|
||||
// FileStream fs = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建文件
|
||||
// StreamWriter wr = new StreamWriter(fs);//创建文件
|
||||
// wr.Close();
|
||||
FileStream fil = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建写入文件
|
||||
StreamWriter wfil = new StreamWriter(fil);//创建文件
|
||||
wfil.WriteLine("[" + Log_timehms + "];[Error] ||" + Environment.NewLine.ToString());
|
||||
wfil.WriteLine("[" + Log_timehms + "];[Error source] ||" + dat.Source.ToString() + Environment.NewLine.ToString());
|
||||
wfil.WriteLine("[" + Log_timehms + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString());
|
||||
wfil.WriteLine("[" + Log_timehms + "];[Error area] ||" + dat.StackTrace.ToString());
|
||||
wfil.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
FileStream fs = new FileStream(log_path, FileMode.Append, FileAccess.Write);//创建写入文件
|
||||
StreamWriter wr = new StreamWriter(fs);//创建文件
|
||||
wr.WriteLine("[" + Log_timehms + "];[Error] ||" + Environment.NewLine.ToString());
|
||||
wr.WriteLine("[" + Log_timehms + "];[Error source] ||" + dat.ToString() + Environment.NewLine.ToString());
|
||||
wr.WriteLine("[" + Log_timehms + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString());
|
||||
wr.WriteLine("[" + Log_timehms + "];[Error area] ||" + dat.ToString());
|
||||
wr.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DirectoryInfo directoryInfo = new DirectoryInfo(logpath);
|
||||
directoryInfo.Create();
|
||||
}
|
||||
}
|
||||
public static void ExchangeDATA(string dat)
|
||||
{
|
||||
string Log_time = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
string logpath = System.Environment.CurrentDirectory + "\\Exchange";//日志文件目录
|
||||
// string logPathtxt = "" + System.Environment.CurrentDirectory + "\\Log\\"+ Log_time + "Log.txt";//日志文件
|
||||
// System.IO.DirectoryInfo log = new System.IO.DirectoryInfo();//生成日志文件目录
|
||||
string log_path = logpath + "\\Exchange" + Log_time + ".txt";
|
||||
string Log_timehms = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
if (Directory.Exists(logpath))//检查日志路径
|
||||
{
|
||||
if (!File.Exists(log_path))//检查文件并写入
|
||||
{
|
||||
// FileStream fs = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建文件
|
||||
// StreamWriter wr = new StreamWriter(fs);//创建文件
|
||||
// wr.Close();
|
||||
FileStream fil = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建写入文件
|
||||
StreamWriter wfil = new StreamWriter(fil);//创建文件
|
||||
wfil.WriteLine("[" + Log_timehms + "];[Exchange] ||" + dat);
|
||||
wfil.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
FileStream fs = new FileStream(log_path, FileMode.Append, FileAccess.Write);//创建写入文件
|
||||
StreamWriter wr = new StreamWriter(fs);//创建文件
|
||||
wr.WriteLine("[" + Log_timehms + "];[Exchange] ||" + dat);
|
||||
wr.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DirectoryInfo directoryInfo = new DirectoryInfo(logpath);
|
||||
directoryInfo.Create();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace DyeingComputer.UserClass
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
/// <summary>
|
||||
/// MD5加密
|
||||
|
||||
@@ -0,0 +1,617 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Core;
|
||||
using TouchSocket.SerialPorts;
|
||||
using TouchSocket.Sockets;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
{
|
||||
#region 基础数据结构
|
||||
/// <summary>
|
||||
/// 485 设备地址
|
||||
/// </summary>
|
||||
public struct DeviceAddress
|
||||
{
|
||||
public byte Value { get; }
|
||||
|
||||
public DeviceAddress(byte address)
|
||||
{
|
||||
if (address == 0) throw new ArgumentException("设备地址不能为0(广播地址)");
|
||||
Value = address;
|
||||
}
|
||||
|
||||
public static implicit operator byte(DeviceAddress address) => address.Value;
|
||||
public static implicit operator DeviceAddress(byte address) => new DeviceAddress(address);
|
||||
|
||||
public override string ToString() => $"0x{Value:X2}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 485 命令帧
|
||||
/// </summary>
|
||||
public class CommandFrame
|
||||
{
|
||||
public DeviceAddress DeviceAddress { get; set; }
|
||||
public byte FunctionCode { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
public ushort CRC { get; set; }
|
||||
|
||||
public byte[] ToBytes()
|
||||
{
|
||||
// 实现帧序列化逻辑,包括CRC计算
|
||||
var dataLength = Data?.Length ?? 0;
|
||||
var frame = new byte[3 + dataLength + 2]; // 地址+功能码+数据+CRC
|
||||
|
||||
frame[0] = DeviceAddress;
|
||||
frame[1] = FunctionCode;
|
||||
|
||||
if (dataLength > 0)
|
||||
Array.Copy(Data, 0, frame, 2, dataLength);
|
||||
|
||||
// 计算CRC (这里使用Modbus CRC算法示例)
|
||||
CRC = CalculateCRC(frame, 0, frame.Length - 2);
|
||||
frame[frame.Length - 2] = (byte)(CRC & 0xFF);
|
||||
frame[frame.Length - 1] = (byte)(CRC >> 8);
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
private ushort CalculateCRC(byte[] data, int offset, int length)
|
||||
{
|
||||
// 简化的CRC计算示例,实际应根据协议实现
|
||||
ushort crc = 0xFFFF;
|
||||
for (int i = offset; i < offset + length; i++)
|
||||
{
|
||||
crc ^= data[i];
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
if ((crc & 0x0001) != 0)
|
||||
{
|
||||
crc >>= 1;
|
||||
crc ^= 0xA001;
|
||||
}
|
||||
else
|
||||
{
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 响应帧
|
||||
/// </summary>
|
||||
public class ResponseFrame
|
||||
{
|
||||
public DeviceAddress DeviceAddress { get; set; }
|
||||
public byte FunctionCode { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
public ushort CRC { get; set; }
|
||||
public bool IsValid { get; set; }
|
||||
public string Error { get; set; }
|
||||
|
||||
public static ResponseFrame FromBytes(byte[] data)
|
||||
{
|
||||
// 实现帧解析逻辑,包括CRC验证
|
||||
var frame = new ResponseFrame();
|
||||
|
||||
if (data.Length < 4) // 最小帧长度
|
||||
{
|
||||
frame.IsValid = false;
|
||||
frame.Error = "帧长度不足";
|
||||
return frame;
|
||||
}
|
||||
|
||||
frame.DeviceAddress = data[0];
|
||||
frame.FunctionCode = data[1];
|
||||
|
||||
// 检查CRC
|
||||
ushort receivedCRC = (ushort)(data[data.Length - 1] << 8 | data[data.Length - 2]);
|
||||
ushort calculatedCRC = CalculateCRC(data, 0, data.Length - 2);
|
||||
|
||||
if (receivedCRC != calculatedCRC)
|
||||
{
|
||||
frame.IsValid = false;
|
||||
frame.Error = "CRC校验失败";
|
||||
return frame;
|
||||
}
|
||||
|
||||
// 提取数据部分
|
||||
if (data.Length > 4)
|
||||
{
|
||||
frame.Data = new byte[data.Length - 4];
|
||||
Array.Copy(data, 2, frame.Data, 0, frame.Data.Length);
|
||||
}
|
||||
|
||||
frame.IsValid = true;
|
||||
return frame;
|
||||
}
|
||||
|
||||
private static ushort CalculateCRC(byte[] data, int offset, int length)
|
||||
{
|
||||
// 与CommandFrame相同的CRC算法
|
||||
ushort crc = 0xFFFF;
|
||||
for (int i = offset; i < offset + length; i++)
|
||||
{
|
||||
crc ^= data[i];
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
if ((crc & 0x0001) != 0)
|
||||
{
|
||||
crc >>= 1;
|
||||
crc ^= 0xA001;
|
||||
}
|
||||
else
|
||||
{
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通信任务
|
||||
/// </summary>
|
||||
public class CommunicationTask
|
||||
{
|
||||
public DeviceAddress DeviceAddress { get; set; }
|
||||
public CommandFrame Command { get; set; }
|
||||
public TaskCompletionSource<ResponseFrame> CompletionSource { get; set; }
|
||||
public int TimeoutMs { get; set; } = 1000;
|
||||
public int RetryCount { get; set; } = 3;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 异常类
|
||||
public class RS485CommunicationException : Exception
|
||||
{
|
||||
public DeviceAddress DeviceAddress { get; }
|
||||
public byte FunctionCode { get; }
|
||||
|
||||
public RS485CommunicationException(DeviceAddress address, byte functionCode, string message)
|
||||
: base($"设备 {address} 功能码 0x{functionCode:X2} 通信失败: {message}")
|
||||
{
|
||||
DeviceAddress = address;
|
||||
FunctionCode = functionCode;
|
||||
}
|
||||
}
|
||||
|
||||
public class RS485TimeoutException : RS485CommunicationException
|
||||
{
|
||||
public RS485TimeoutException(DeviceAddress address, byte functionCode)
|
||||
: base(address, functionCode, "响应超时")
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class RS485CRCException : RS485CommunicationException
|
||||
{
|
||||
public RS485CRCException(DeviceAddress address, byte functionCode)
|
||||
: base(address, functionCode, "CRC校验失败")
|
||||
{
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 主站实现
|
||||
/// <summary>
|
||||
/// 485 主站实现
|
||||
/// </summary>
|
||||
public class RS485MasterStation : IDisposable
|
||||
{
|
||||
private readonly SerialPortClient _serialPortClient;
|
||||
private readonly ConcurrentDictionary<DeviceAddress, DeviceState> _deviceStates;
|
||||
private readonly ConcurrentQueue<CommunicationTask> _taskQueue;
|
||||
private readonly CancellationTokenSource _cancellationTokenSource;
|
||||
private Task _processingTask;
|
||||
private bool _isDisposed = false;
|
||||
|
||||
// 响应超时时间(毫秒)
|
||||
public int ResponseTimeout { get; set; } = 1000;
|
||||
|
||||
// 帧间延迟(毫秒)
|
||||
public int InterFrameDelay { get; set; } = 10;
|
||||
|
||||
// 最大重试次数
|
||||
public int MaxRetries { get; set; } = 3;
|
||||
|
||||
/// <summary>
|
||||
/// 设备状态
|
||||
/// </summary>
|
||||
private class DeviceState
|
||||
{
|
||||
public DeviceAddress Address { get; set; }
|
||||
public DateTime LastCommunication { get; set; }
|
||||
public bool IsOnline { get; set; }
|
||||
public int TimeoutCount { get; set; }
|
||||
}
|
||||
|
||||
public RS485MasterStation(string portName, int baudRate = 9600)
|
||||
{
|
||||
_serialPortClient = new SerialPortClient();
|
||||
_deviceStates = new ConcurrentDictionary<DeviceAddress, DeviceState>();
|
||||
_taskQueue = new ConcurrentQueue<CommunicationTask>();
|
||||
_cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
// 配置串口
|
||||
_serialPortClient.Setup(new TouchSocketConfig()
|
||||
.SetSerialPortOption(new SerialPortOption()
|
||||
{
|
||||
PortName = portName,
|
||||
BaudRate = baudRate,
|
||||
DataBits = 8,
|
||||
Parity = Parity.None,
|
||||
StopBits = StopBits.One
|
||||
}));
|
||||
|
||||
// 注册数据接收事件
|
||||
_serialPortClient.Received = OnDataReceived;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动主站
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
_serialPortClient.Connect();
|
||||
_processingTask = Task.Run(ProcessQueue, _cancellationTokenSource.Token);
|
||||
Console.WriteLine("485主站已启动");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 停止主站
|
||||
/// </summary>
|
||||
public void Stop()
|
||||
{
|
||||
_cancellationTokenSource.Cancel();
|
||||
_serialPortClient.Close();
|
||||
Console.WriteLine("485主站已停止");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加设备到监控列表
|
||||
/// </summary>
|
||||
public void AddDevice(DeviceAddress address)
|
||||
{
|
||||
_deviceStates[address] = new DeviceState
|
||||
{
|
||||
Address = address,
|
||||
LastCommunication = DateTime.MinValue,
|
||||
IsOnline = false,
|
||||
TimeoutCount = 0
|
||||
};
|
||||
Console.WriteLine($"已添加设备: {address}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从监控列表移除设备
|
||||
/// </summary>
|
||||
public void RemoveDevice(DeviceAddress address)
|
||||
{
|
||||
_deviceStates.TryRemove(address, out _);
|
||||
Console.WriteLine($"已移除设备: {address}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送命令到设备
|
||||
/// </summary>
|
||||
public Task<ResponseFrame> SendCommandAsync(DeviceAddress address, byte functionCode, byte[] data = null, int timeoutMs = 1000, int retryCount = 3)
|
||||
{
|
||||
var command = new CommandFrame
|
||||
{
|
||||
DeviceAddress = address,
|
||||
FunctionCode = functionCode,
|
||||
Data = data ?? new byte[0]
|
||||
};
|
||||
|
||||
var task = new CommunicationTask
|
||||
{
|
||||
DeviceAddress = address,
|
||||
Command = command,
|
||||
CompletionSource = new TaskCompletionSource<ResponseFrame>(),
|
||||
TimeoutMs = timeoutMs,
|
||||
RetryCount = retryCount
|
||||
};
|
||||
|
||||
_taskQueue.Enqueue(task);
|
||||
return task.CompletionSource.Task;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取保持寄存器
|
||||
/// </summary>
|
||||
public async Task<byte[]> ReadHoldingRegistersAsync(DeviceAddress address, ushort startAddress, ushort numberOfRegisters)
|
||||
{
|
||||
var data = new byte[4];
|
||||
data[0] = (byte)(startAddress >> 8); // 起始地址高字节
|
||||
data[1] = (byte)(startAddress & 0xFF); // 起始地址低字节
|
||||
data[2] = (byte)(numberOfRegisters >> 8); // 寄存器数量高字节
|
||||
data[3] = (byte)(numberOfRegisters & 0xFF); // 寄存器数量低字节
|
||||
|
||||
var response = await SendCommandAsync(address, 0x03, data);
|
||||
|
||||
if (!response.IsValid)
|
||||
throw new RS485CommunicationException(address, 0x03, response.Error);
|
||||
|
||||
return response.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入单个寄存器
|
||||
/// </summary>
|
||||
public async Task WriteSingleRegisterAsync(DeviceAddress address, ushort registerAddress, ushort value)
|
||||
{
|
||||
var data = new byte[4];
|
||||
data[0] = (byte)(registerAddress >> 8); // 寄存器地址高字节
|
||||
data[1] = (byte)(registerAddress & 0xFF); // 寄存器地址低字节
|
||||
data[2] = (byte)(value >> 8); // 值高字节
|
||||
data[3] = (byte)(value & 0xFF); // 值低字节
|
||||
|
||||
var response = await SendCommandAsync(address, 0x06, data);
|
||||
|
||||
if (!response.IsValid)
|
||||
throw new RS485CommunicationException(address, 0x06, response.Error);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理任务队列
|
||||
/// </summary>
|
||||
private async Task ProcessQueue()
|
||||
{
|
||||
while (!_cancellationTokenSource.Token.IsCancellationRequested)
|
||||
{
|
||||
if (_taskQueue.TryDequeue(out var task))
|
||||
{
|
||||
await ProcessTask(task);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 队列为空,执行设备轮询
|
||||
await PollDevices();
|
||||
await Task.Delay(100, _cancellationTokenSource.Token); // 短暂休眠
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理单个通信任务
|
||||
/// </summary>
|
||||
private async Task ProcessTask(CommunicationTask task)
|
||||
{
|
||||
int retryCount = 0;
|
||||
ResponseFrame response = null;
|
||||
|
||||
while (retryCount < task.RetryCount && !_cancellationTokenSource.Token.IsCancellationRequested)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 发送命令
|
||||
var commandData = task.Command.ToBytes();
|
||||
_serialPortClient.Send(commandData);
|
||||
|
||||
// 等待响应
|
||||
var timeoutTask = Task.Delay(task.TimeoutMs, _cancellationTokenSource.Token);
|
||||
var responseTask = task.CompletionSource.Task;
|
||||
|
||||
var completedTask = await Task.WhenAny(responseTask, timeoutTask);
|
||||
|
||||
if (completedTask == responseTask)
|
||||
{
|
||||
response = await responseTask;
|
||||
if (response.IsValid)
|
||||
{
|
||||
UpdateDeviceState(task.DeviceAddress, true);
|
||||
task.CompletionSource.SetResult(response);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RS485CRCException(task.DeviceAddress, task.Command.FunctionCode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RS485TimeoutException(task.DeviceAddress, task.Command.FunctionCode);
|
||||
}
|
||||
}
|
||||
catch (RS485CommunicationException ex)
|
||||
{
|
||||
retryCount++;
|
||||
UpdateDeviceState(task.DeviceAddress, false);
|
||||
|
||||
if (retryCount >= task.RetryCount)
|
||||
{
|
||||
task.CompletionSource.SetException(ex);
|
||||
return;
|
||||
}
|
||||
|
||||
// 等待一段时间后重试
|
||||
await Task.Delay(InterFrameDelay, _cancellationTokenSource.Token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 轮询所有设备状态
|
||||
/// </summary>
|
||||
private async Task PollDevices()
|
||||
{
|
||||
foreach (var deviceState in _deviceStates.Values.ToList())
|
||||
{
|
||||
// 检查设备是否需要轮询(例如,超过一定时间未通信)
|
||||
if ((DateTime.Now - deviceState.LastCommunication).TotalSeconds > 30)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 发送诊断命令(如读取设备状态)
|
||||
await ReadHoldingRegistersAsync(deviceState.Address, 0, 1);
|
||||
Console.WriteLine($"设备 {deviceState.Address} 轮询成功");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"设备 {deviceState.Address} 轮询失败: {ex.Message}");
|
||||
}
|
||||
|
||||
// 添加帧间延迟
|
||||
await Task.Delay(InterFrameDelay, _cancellationTokenSource.Token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据接收处理
|
||||
/// </summary>
|
||||
private Task OnDataReceived(ISerialPortClient client, ReceivedDataEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 解析响应帧
|
||||
var response = ResponseFrame.FromBytes(e.ByteBlock.ReadBytesPackage());
|
||||
|
||||
if (response.IsValid)
|
||||
{
|
||||
// 查找匹配的任务并设置结果
|
||||
foreach (var task in _taskQueue.Where(t => t.DeviceAddress.Value == response.DeviceAddress.Value))
|
||||
{
|
||||
task.CompletionSource.TrySetResult(response);
|
||||
}
|
||||
|
||||
UpdateDeviceState(response.DeviceAddress, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"收到无效响应: {response.Error}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"处理接收数据时出错: {ex.Message}");
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新设备状态
|
||||
/// </summary>
|
||||
private void UpdateDeviceState(DeviceAddress address, bool communicationSuccess)
|
||||
{
|
||||
if (_deviceStates.TryGetValue(address, out var state))
|
||||
{
|
||||
state.LastCommunication = DateTime.Now;
|
||||
|
||||
if (communicationSuccess)
|
||||
{
|
||||
state.IsOnline = true;
|
||||
state.TimeoutCount = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
state.TimeoutCount++;
|
||||
if (state.TimeoutCount > MaxRetries)
|
||||
{
|
||||
state.IsOnline = false;
|
||||
Console.WriteLine($"设备 {address} 已离线");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有设备状态
|
||||
/// </summary>
|
||||
public Dictionary<DeviceAddress, bool> GetDeviceStatuses()
|
||||
{
|
||||
return _deviceStates.ToDictionary(
|
||||
kvp => kvp.Key,
|
||||
kvp => kvp.Value.IsOnline);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 资源释放
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
if (!_isDisposed)
|
||||
{
|
||||
_isDisposed = true;
|
||||
_cancellationTokenSource.Cancel();
|
||||
_serialPortClient.SafeDispose();
|
||||
_cancellationTokenSource.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 使用示例
|
||||
class Program
|
||||
{
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
// 创建485主站实例
|
||||
using (var master = new RS485MasterStation("COM1", 9600))
|
||||
|
||||
try
|
||||
{
|
||||
// 添加要监控的设备
|
||||
master.AddDevice(0x01);
|
||||
master.AddDevice(0x02);
|
||||
master.AddDevice(0x03);
|
||||
|
||||
// 启动主站
|
||||
master.Start();
|
||||
|
||||
// 等待一段时间让主站初始化
|
||||
await Task.Delay(1000);
|
||||
|
||||
// 示例1: 读取设备1的保持寄存器
|
||||
try
|
||||
{
|
||||
var data = await master.ReadHoldingRegistersAsync(0x01, 0, 10);
|
||||
Console.WriteLine($"成功读取设备1的寄存器数据: {BitConverter.ToString(data)}");
|
||||
}
|
||||
catch (RS485CommunicationException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
// 示例2: 向设备2写入寄存器值
|
||||
try
|
||||
{
|
||||
await master.WriteSingleRegisterAsync(0x02, 0x1000, 0x1234);
|
||||
Console.WriteLine("成功向设备2写入寄存器值");
|
||||
}
|
||||
catch (RS485CommunicationException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
// 显示所有设备状态
|
||||
var statuses = master.GetDeviceStatuses();
|
||||
foreach (var status in statuses)
|
||||
{
|
||||
Console.WriteLine($"设备 {status.Key}: {(status.Value ? "在线" : "离线")}");
|
||||
}
|
||||
|
||||
// 保持运行
|
||||
Console.WriteLine("按任意键退出...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
finally
|
||||
{
|
||||
master.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@@ -680,6 +680,24 @@ namespace SunlightCentralizedControlManagement_SCCM_.UserClass
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将DataRow转换为Dictionary<string, object>
|
||||
/// </summary>
|
||||
/// <param name="row">DataRow实例</param>
|
||||
/// <returns>键为列名、值为对应数据的字典</returns>
|
||||
public Dictionary<string, object> ToDictionary(DataRow row)
|
||||
{
|
||||
var dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
|
||||
if (row == null) return dictionary;
|
||||
|
||||
foreach (DataColumn column in row.Table.Columns)
|
||||
{
|
||||
object value = row[column] == DBNull.Value ? null : row[column];
|
||||
dictionary[column.ColumnName] = value;
|
||||
}
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.UserControls.DispenseMacInfo"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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_.UserControls"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="600" d:DesignWidth="400" Background="#FF828282">
|
||||
<Grid Margin="5,5,5,5" Background="White" >
|
||||
<Image x:Name="IMAGE" VerticalAlignment="Top" Height="400" Margin="0,5,0,0" />
|
||||
<Grid Margin="0,400,0,0">
|
||||
<TextBlock TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}" Height="30" VerticalAlignment="Top" FontSize="16"
|
||||
HorizontalAlignment="Left" Width="150" Background="#FFE0E0E0"/>
|
||||
<TextBlock TextWrapping="Wrap" Text="{x:Static lang:Resources.State}" Height="30" VerticalAlignment="Top" FontSize="16"
|
||||
Margin="0,30,0,0" HorizontalAlignment="Left" Width="150" Background="#FFE0E0E0"/>
|
||||
<TextBlock TextWrapping="Wrap" Text="{x:Static lang:Resources.WorkingStatus}" Height="30" VerticalAlignment="Top" FontSize="16"
|
||||
Margin="0,60,0,0" HorizontalAlignment="Left" Width="150" Background="#FFE0E0E0"/>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="30" VerticalAlignment="Top" Margin="150,0,80,0">
|
||||
<TextBlock x:Name="mac" TextWrapping="Wrap" Text="------" FontSize="16" />
|
||||
</Border>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="30" VerticalAlignment="Top" Margin="150,0,0,0" HorizontalAlignment="Right" Width="80">
|
||||
<TextBlock x:Name="macg" TextWrapping="Wrap" Text="------" FontSize="16" />
|
||||
</Border>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="30" VerticalAlignment="Top" Margin="150,30,80,0">
|
||||
<TextBlock x:Name="state" TextWrapping="Wrap" Text="------" FontSize="16" />
|
||||
</Border>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="30" VerticalAlignment="Top" Margin="150,30,0,0" HorizontalAlignment="Right" Width="80">
|
||||
<TextBlock x:Name="type_N" TextWrapping="Wrap" Text="-------" FontSize="16" />
|
||||
</Border>
|
||||
<Border BorderBrush="#FFE0E0E0" BorderThickness="1" Height="30" VerticalAlignment="Top" Margin="150,60,0,0">
|
||||
<TextBlock x:Name="WorkingStatus" TextWrapping="Wrap" Text="------" FontSize="16" />
|
||||
</Border>
|
||||
<Button x:Name="State" Content="{x:Static lang:Resources.Information}" HorizontalAlignment="Right" Height="35" Margin="0,0,15,10" VerticalAlignment="Bottom" Width="80" Click="State_Click" Padding="0,4,0,4"/>
|
||||
<Button x:Name="Manual" Content="{x:Static lang:Resources.Manual}" HorizontalAlignment="Right" Height="35" Margin="0,0,115,10" VerticalAlignment="Bottom" Width="80" Click="Manual_Click" Padding="0,4,0,4"/>
|
||||
<Button x:Name="Screen" Content="{x:Static lang:Resources.Screen}" HorizontalAlignment="Right" Height="35" Margin="0,0,215,10" VerticalAlignment="Bottom" Width="80" Click="Screen_Click" Padding="0,4,0,4"/>
|
||||
|
||||
<materialDesign:PackIcon x:Name="mlock" Kind="Lock" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="40" Height="40" Foreground="#FFA98C00" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,0,5"/>
|
||||
<materialDesign:PackIcon x:Name="Disconnect" Kind="LanDisconnect" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="40" Height="40" Foreground="#FFA98C00" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="50,0,0,5"/>
|
||||
|
||||
</Grid>
|
||||
<TextBlock x:Name="IP" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="{x:Null}" />
|
||||
<TextBlock x:Name="PORT" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="{x:Null}" />
|
||||
<TextBlock x:Name="USER" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="{x:Null}" />
|
||||
<TextBlock x:Name="PASSWD" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="{x:Null}" />
|
||||
<TextBlock x:Name="type_" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="{x:Null}" />
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,73 @@
|
||||
using ScottPlot.Plottables;
|
||||
using SunlightCentralizedControlManagement_SCCM_.EX;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
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.Animation;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Media.Media3D;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserControls
|
||||
{
|
||||
/// <summary>
|
||||
/// info.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DispenseMacInfo : UserControl
|
||||
{
|
||||
public DispenseMacInfo()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void State_Click(object sender, RoutedEventArgs e)//状态
|
||||
{
|
||||
if ((mlock.Visibility == Visibility.Visible) || (Disconnect.Visibility == Visibility.Visible))
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.Not_a,"Dispense",MessageBoxButton.OK);
|
||||
return;
|
||||
}
|
||||
UserMessage userMessage = new UserMessage();
|
||||
userMessage.DispenseMacInfo(mac.Text, macg.Text);
|
||||
userMessage.Show();
|
||||
}
|
||||
|
||||
private void Manual_Click(object sender, RoutedEventArgs e)//手动呼叫
|
||||
{
|
||||
if ((mlock.Visibility == Visibility.Visible) || (Disconnect.Visibility == Visibility.Visible))
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.Not_a, "Dispense", MessageBoxButton.OK);
|
||||
return;
|
||||
}
|
||||
ManualDyelot manualDyelot = new ManualDyelot();
|
||||
manualDyelot.MAC(mac.Text,Convert.ToInt16(type_.Text));
|
||||
manualDyelot.Show();
|
||||
}
|
||||
|
||||
private void Screen_Click(object sender, RoutedEventArgs e)//远程画面
|
||||
{
|
||||
if ((mlock.Visibility == Visibility.Visible)||(Disconnect.Visibility == Visibility.Visible))
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.Not_a, "Dispense", MessageBoxButton.OK);
|
||||
return;
|
||||
}
|
||||
VNC screen = new VNC();
|
||||
screen.Parameter(IP.Text,PORT.Text,USER.Text,PASSWD.Text);
|
||||
screen.Show();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.RoilingTextBlock"
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.UserControls.RoilingTextBlock"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.UserControls"
|
||||
mc:Ignorable="d"
|
||||
DataContext="{Binding RelativeSource={RelativeSource Self}}"
|
||||
d:DesignWidth="300" Height="30" >
|
||||
@@ -14,7 +14,7 @@ using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserControls
|
||||
{
|
||||
/// <summary>
|
||||
/// RoilingTextBlock.xaml 的交互逻辑
|
||||
@@ -26,6 +26,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
private double offset=6;//最大的偏移量
|
||||
private TextBlock currentTextBlock = null;
|
||||
private DispatcherTimer currentTimer = null;
|
||||
|
||||
public RoilingTextBlock()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -0,0 +1,29 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.UserControls.info"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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_.UserControls"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
|
||||
mc:Ignorable="d"
|
||||
Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="400" d:DesignWidth="300" Background="White">
|
||||
<Grid Background="#FFBFBFBF">
|
||||
<TextBlock x:Name="name" VerticalAlignment="Top" Height="50" Background="#FF646464" Text="-----" FontWeight="Bold" FontSize="36" />
|
||||
<TextBlock x:Name="temp" VerticalAlignment="Top" Height="50" Text="---.-°C" FontWeight="Bold" FontSize="36" HorizontalAlignment="Right" Padding="5,0,5,0"/>
|
||||
<Grid Margin="2,50,2,2" Background="White">
|
||||
<TextBlock Text="{x:Static lang:Resources.process}" Height="30" FontWeight="Bold" FontSize="24" Margin="5,0,5,0" VerticalAlignment="Top" Focusable="False"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Step}" Height="30" FontWeight="Bold" FontSize="24" Margin="5,50,5,0" VerticalAlignment="Top" Focusable="False"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.message}" Height="30" FontWeight="Bold" FontSize="24" Margin="5,100,5,0" VerticalAlignment="Top" Focusable="False"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.orders}" Height="30" FontWeight="Bold" FontSize="24" Margin="5,150,5,0" VerticalAlignment="Top" Focusable="False"/>
|
||||
<TextBlock x:Name="time" Text="----------------------------" Height="30" FontWeight="Bold" FontSize="24" Margin="5,180,5,0" VerticalAlignment="Top" Focusable="False"/>
|
||||
<local:RoilingTextBlock Foreground="Black" x:Name="Process" Text="NO Information" FontSize="21" Height="30" Margin="120,0,0,0" VerticalAlignment="Top"/>
|
||||
<local:RoilingTextBlock Foreground="Black" x:Name="Step" Text="NO Information" FontSize="21" Height="30" Margin="120,50,0,0" VerticalAlignment="Top"/>
|
||||
<local:RoilingTextBlock Foreground="Black" x:Name="Message" Text="NO Information" FontSize="21" Height="30" Margin="120,100,0,0" VerticalAlignment="Top"/>
|
||||
<local:RoilingTextBlock Foreground="Black" x:Name="Orders" Text="NO Information" FontSize="21" Height="30" Margin="120,150,0,0" VerticalAlignment="Top"/>
|
||||
<lvc:CartesianChart x:Name="OscChart" Margin="0,200,0,0" EasingFunction="{x:Null}" ZoomMode="PanX"
|
||||
Series="{Binding Series}" YAxes="{Binding YAxes}" XAxes="{Binding XAxes}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,164 @@
|
||||
using LiveChartsCore;
|
||||
using LiveChartsCore.Defaults;
|
||||
using LiveChartsCore.Kernel.Sketches;
|
||||
using LiveChartsCore.SkiaSharpView;
|
||||
using LiveChartsCore.SkiaSharpView.Painting;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ScottPlot;
|
||||
using ScottPlot.Plottables;
|
||||
using ScottPlot.Statistics;
|
||||
using SkiaSharp;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
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.Animation;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Media.Media3D;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.UserControls
|
||||
{
|
||||
/// <summary>
|
||||
/// info.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class info : UserControl, INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
protected virtual void OnPropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
public void RaisePropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
{
|
||||
if (propertyName != null)
|
||||
{
|
||||
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
private ObservableCollection<DateTimePoint> MTH_values = new ObservableCollection<DateTimePoint>();
|
||||
|
||||
public ObservableCollection<ISeries> _series { get; set; }
|
||||
public ObservableCollection<ISeries> Series
|
||||
{
|
||||
get => _series;
|
||||
set
|
||||
{
|
||||
_series = value;
|
||||
OnPropertyChanged(nameof(Series));
|
||||
}
|
||||
}
|
||||
//x轴时间格式
|
||||
public Axis[] XAxes { get; set; } =
|
||||
{
|
||||
new DateTimeAxis(TimeSpan.FromSeconds(5) , date => date.ToString("HH:mm"))
|
||||
{
|
||||
MinLimit = DateTime.Now.AddHours(-6).Ticks,
|
||||
MaxLimit = DateTime.Now.AddHours(0.5).Ticks,
|
||||
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_red = new SKColor(229, 57, 53);
|
||||
public ICartesianAxis[] YAxes { get; set; } ={
|
||||
new Axis //y在此轴上缩放
|
||||
{
|
||||
MinLimit =0,
|
||||
MaxLimit =160,
|
||||
NamePadding = new LiveChartsCore.Drawing.Padding(0, 20),
|
||||
Padding = new LiveChartsCore.Drawing.Padding(0, 0, 20, 0),
|
||||
TextSize = 12,
|
||||
LabelsPaint = new SolidColorPaint(s_blue),
|
||||
TicksPaint = new SolidColorPaint(s_blue),
|
||||
SubticksPaint = new SolidColorPaint(s_blue),
|
||||
DrawTicksPath = true,
|
||||
CrosshairSnapEnabled = true,
|
||||
Position = LiveChartsCore.Measure.AxisPosition.Start
|
||||
},//温度轴
|
||||
|
||||
};
|
||||
|
||||
public info()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
}
|
||||
|
||||
public void DataAdd(DateTime dateTime, double dat)
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
// 添加新数据点
|
||||
MTH_values.Add(new DateTimePoint(dateTime, dat));
|
||||
// 更新X轴范围,始终保持最近6小时
|
||||
XAxes[0].MinLimit = dateTime.AddHours(-6).Ticks;
|
||||
XAxes[0].MaxLimit = dateTime.AddMinutes(1).Ticks;
|
||||
// 移除6小时前的旧数据
|
||||
while (MTH_values.Count > 0 &&
|
||||
MTH_values[0].DateTime < dateTime.AddHours(-6))
|
||||
{
|
||||
MTH_values.RemoveAt(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void DataROW(DataRow[] dataRows)
|
||||
{
|
||||
DateTime dateTime = DateTime.Now;
|
||||
foreach (DataRow row in dataRows)
|
||||
{
|
||||
// 添加新数据点
|
||||
MTH_values.Add(new DateTimePoint((DateTime)row["DateTime"], (double)row["DAT"]));
|
||||
}
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
// 更新X轴范围,始终保持最近6小时
|
||||
XAxes[0].MinLimit = dateTime.AddHours(-6).Ticks;
|
||||
XAxes[0].MaxLimit = dateTime.AddMinutes(1).Ticks;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 初始化系列
|
||||
Series = new ObservableCollection<ISeries>
|
||||
{
|
||||
new LineSeries<DateTimePoint>
|
||||
{
|
||||
Name = Properties.Resources.Temperature,
|
||||
Values = MTH_values,
|
||||
Stroke = new SolidColorPaint(s_red, 2),
|
||||
GeometrySize = 0,
|
||||
GeometryStroke = new SolidColorPaint(s_red, 2),
|
||||
Fill = null,
|
||||
LineSmoothness = 0,
|
||||
ScalesYAt = 0,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -21,9 +21,20 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
/// </summary>
|
||||
public partial class CurveDiagram : UserControl
|
||||
{
|
||||
public CurveDiagram()
|
||||
public static string Curve;
|
||||
public static string starT;
|
||||
public static string endT;
|
||||
public static string mac;
|
||||
public static bool mode;
|
||||
//搜索方式0时间加机台1工单 ,机台,开始时间,结束时间,工单
|
||||
public CurveDiagram(bool i,string m,string s,string e,string w)
|
||||
{
|
||||
InitializeComponent();
|
||||
mode = i;
|
||||
starT = s;
|
||||
endT = e;
|
||||
mac = m;
|
||||
Curve = w;
|
||||
DataContext = new CurveDiagramViewModel();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.CurveTemp"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
mc:Ignorable="d"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:CurveTempModel}"
|
||||
d:DesignHeight="300" d:DesignWidth="400">
|
||||
<Grid>
|
||||
<lvc:CartesianChart x:Name="OscChart" EasingFunction="{x:Null}" ZoomMode="X"
|
||||
Series="{Binding Series}" YAxes="{Binding YAxes}" XAxes="{Binding XAxes}" Margin="0,0,0,0"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,35 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
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 SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// CurveDiagram.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class CurveTemp : UserControl
|
||||
{
|
||||
public static DataTable dataTable;
|
||||
public CurveTemp(DataTable db)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
dataTable = db;
|
||||
|
||||
DataContext = new CurveTempModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,10 @@
|
||||
Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1800">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:BoolToVisidilityConvert x:Key="BoolToVisidilityConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<DataGrid x:Name="Griddata" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=999}"
|
||||
@@ -21,7 +24,7 @@
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" FontSize="15"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
Margin="0,0,0,60" HorizontalAlignment="Right" Width="300" MouseDoubleClick="Griddata_MouseDoubleClick">
|
||||
Margin="0,0,0,60" HorizontalAlignment="Right" Width="330" MouseDoubleClick="Griddata_MouseDoubleClick">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
@@ -52,11 +55,26 @@
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTemplateColumn Width="70" Header="{x:Static lang:Resources.State}">
|
||||
<DataGridTemplateColumn Width="100" Header="{x:Static lang:Resources.State}">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<materialDesign:PackIcon Kind="StateMachine" Width="25" Height="30" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
<UniformGrid VerticalAlignment="Bottom" HorizontalAlignment="Left">
|
||||
<Border>
|
||||
<Grid>
|
||||
<StackPanel Width="100" Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Width="25" Height="30"
|
||||
Kind="{Binding Path=State,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
<materialDesign:PackIcon Width="25" Height="30" Kind="Lock"
|
||||
Visibility="{Binding Path=LOCK,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
<materialDesign:PackIcon Width="25" Height="30" Kind="HandBackRight"
|
||||
Visibility="{Binding Path=AUTO,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
@@ -68,7 +86,7 @@
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" FontSize="15"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
VerticalAlignment="Top" Height="500" Margin="0,0,300,0" MouseDoubleClick="GridWorkOrder_MouseDoubleClick" >
|
||||
VerticalAlignment="Top" Height="500" Margin="0,0,330,0" MouseDoubleClick="GridWorkOrder_MouseDoubleClick" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
@@ -153,8 +171,19 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
<StackPanel VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="0,0,0,0" Width="400" HorizontalAlignment="Right">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="ChatProcessing" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Machine}" FontSize="20" VerticalAlignment="Center" Margin="20 10" Foreground="White" />
|
||||
<TextBlock x:Name="mac" FontSize="20" VerticalAlignment="Center" Margin="20 10" Foreground="White" FontWeight="Bold" />
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Background="White" Margin="0,500,300,60">
|
||||
<Grid Background="White" Margin="0,500,330,60">
|
||||
<ContentControl x:Name="Picture"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
@@ -28,8 +28,6 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
/// </summary>
|
||||
public partial class CurveView : UserControl
|
||||
{
|
||||
private SQLiteHelper SQLiteHelpers = null; //定义数据库
|
||||
private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径
|
||||
public static DataTable WorkOrder = new DataTable(); //物料缓存
|
||||
public static string CurveDiagram;
|
||||
private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
@@ -62,35 +60,89 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView;
|
||||
|
||||
Sdatepicker.Text = DateTime.Now.ToString("yyyy/MM/dd");
|
||||
|
||||
Picture.Content = new View.CurveDiagram();
|
||||
Picture.Content = new View.CurveDiagram(false,"","","", CurveDiagram);
|
||||
Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView;
|
||||
}
|
||||
|
||||
private void WorkOrderNumder_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
CurveDiagram =Select_WorkOrderNumder.Text;
|
||||
Picture.Content = new View.CurveDiagram();
|
||||
Picture.Content = new View.CurveDiagram(true, "", "", "", CurveDiagram);
|
||||
}
|
||||
|
||||
private void ListViewItem_Before(object sender, MouseButtonEventArgs e)//前一天
|
||||
{
|
||||
Sdatepicker.Text = DateTime.Parse(Sdatepicker.Text).AddDays(-1).ToString("yyyy/MM/dd");
|
||||
if (!string.IsNullOrEmpty(SYS_machines)) { }
|
||||
if (!string.IsNullOrEmpty(SYS_machines))
|
||||
{
|
||||
Picture.Content = new View.CurveDiagram(false, SYS_machines, DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd"),
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd"), CurveDiagram);
|
||||
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'and Machines='" +
|
||||
SYS_machines + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
else
|
||||
{
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
}
|
||||
|
||||
private void ListViewItem_Today(object sender, MouseButtonEventArgs e)//今天
|
||||
{
|
||||
Sdatepicker.Text = DateTime.Now.ToString("yyyy/MM/dd");
|
||||
if (!string.IsNullOrEmpty(SYS_machines)) { }
|
||||
if (!string.IsNullOrEmpty(SYS_machines))
|
||||
{
|
||||
Picture.Content = new View.CurveDiagram(false, SYS_machines, DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd"),
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd"), CurveDiagram);//刷新图表
|
||||
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'and Machines='" +
|
||||
SYS_machines + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView; }
|
||||
else
|
||||
{
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
}
|
||||
|
||||
private void ListViewItem_DayAfter(object sender, MouseButtonEventArgs e)//后一天
|
||||
{
|
||||
Sdatepicker.Text = DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd");
|
||||
if (!string.IsNullOrEmpty(SYS_machines)) { }
|
||||
if (!string.IsNullOrEmpty(SYS_machines))
|
||||
{
|
||||
Picture.Content = new View.CurveDiagram(false, SYS_machines, DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd"),
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd"), CurveDiagram);
|
||||
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'and Machines='" +
|
||||
SYS_machines + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
else
|
||||
{
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
}
|
||||
|
||||
private void Griddata_MouseDoubleClick(object sender, MouseButtonEventArgs e)//选择机台
|
||||
@@ -99,6 +151,16 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
SYS_machines = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
mac.Text = SYS_machines;
|
||||
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where StartTime<='" +
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd") + "' and StartTime>='" +
|
||||
DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd") + "'and Machines='" +
|
||||
SYS_machines + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
Picture.Content = new View.CurveDiagram(false, SYS_machines, DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd"),
|
||||
DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd"), CurveDiagram);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +169,9 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
SYS_machines = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
string Cd = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
Select_WorkOrderNumder.Text = Cd;
|
||||
Picture.Content = new View.CurveDiagram(true, "", "", "", Cd);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,10 +180,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
string SysTime = DateTime.Parse(sender.ToString()).ToString("yyyy/MM/dd");
|
||||
string SysTimeDays = DateTime.Parse(sender.ToString()).AddDays(1).ToString("yyyy/MM/dd");
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
WorkOrder = SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where " + "StartTime>='" + SysTime + "'and StartTime<='" + SysTimeDays + "'", null).Tables[0]; //读取表写入缓存
|
||||
SQLiteHelpers.Close();
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where " + "StartTime>='" + SysTime + "'and StartTime<='" + SysTimeDays + "'", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
GridWorkOrder.ItemsSource = WorkOrder.DefaultView;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.DispenseMachinesSet"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
mc:Ignorable="d"
|
||||
Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1200">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<DataGrid x:Name="Griddata" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=999}"
|
||||
Background="#FFC7C7C7" HorizontalGridLinesBrush="{x:Null}" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" FontSize="15"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
HorizontalAlignment="Right" Width="500" MouseDoubleClick="Griddata_MouseDoubleClick">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTemplateColumn Width="70" Header="{x:Static lang:Resources.State}">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<materialDesign:PackIcon Kind="StateMachine" Width="25" Height="30" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Machine}" Binding="{Binding Name}" Width="210" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Group}" Binding="{Binding Groups}" Width="210" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding IP}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding PORT}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding User}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Passsword}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding LOCK}" Width="0" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Image HorizontalAlignment="Left" x:Name="IMAGE" VerticalAlignment="Bottom" Width="400" Height="400" Margin="10,200,0,100" />
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,10,0,0" x:Name="comboBoxMachine" VerticalAlignment="Top" Width="270" FontSize="20" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,10,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,150,0,0" x:Name="User" VerticalAlignment="Top" Width="270" FontSize="20" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,150,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.USER}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,200,0,0" x:Name="Password" VerticalAlignment="Top" Width="270" FontSize="20" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,200,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Password}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<CheckBox x:Name="dLICK" Content="{x:Static lang:Resources._lock}" HorizontalAlignment="Left" Height="35 " Margin="10,250,0,0" VerticalAlignment="Top" Width="200" FontSize="20"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,50,0,0" x:Name="TextMachineGroup" VerticalAlignment="Top" Width="270" FontSize="20"
|
||||
DropDownClosed="TextMachineGroup_DropDownClosed" TextBoxBase.TextChanged="TextMachineGroup_DropDownClosed"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,50,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.MachineGroup}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,100,0,0" x:Name="IP" VerticalAlignment="Top" Width="200" FontSize="20" MaxLines="1"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="350,100,0,0" TextWrapping="Wrap" Text=":" VerticalAlignment="Top" Width="20" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="360,100,0,0" x:Name="PORT" VerticalAlignment="Top" Width="60" FontSize="20" MaxLines="1" Text="5901"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,100,0,0" TextWrapping="Wrap" Text="IP/PORT" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,600,0,15" x:Name="textlog" TextWrapping="Wrap" Text="------------" VerticalAlignment="Bottom" Width="140" FontSize="20"/>
|
||||
<Button Content="{x:Static lang:Resources.Save}" HorizontalAlignment="Left" Height="35" Margin="250,600,0,15" VerticalAlignment="Bottom" Width="80" Click="Save_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Delete}" HorizontalAlignment="Left" Height="35" Margin="340,600,0,15" VerticalAlignment="Bottom" Width="80" Click="Delete_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Test}" HorizontalAlignment="Left" Height="35" Margin="160,600,50,15" VerticalAlignment="Bottom" Width="80" Click="Test_Click"/>
|
||||
|
||||
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,272 @@
|
||||
using SkiaSharp;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
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;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// MachinesSet.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DispenseMachinesSet : UserControl
|
||||
{
|
||||
int type_;
|
||||
public DispenseMachinesSet()
|
||||
{
|
||||
InitializeComponent();
|
||||
//
|
||||
string[] Machine_ = { "252", "252RB", "252-2T", "252RDRM", "242W", "302", "303", "303PDW" };
|
||||
TextMachineGroup.ItemsSource = Machine_;
|
||||
}
|
||||
|
||||
private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
//private string SYS_machines = null;
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DataTable dataTable = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from MachinesDispense Order by id", null).Tables[0];
|
||||
Griddata.ItemsSource = dataTable.DefaultView;
|
||||
}
|
||||
|
||||
private void Griddata_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
comboBoxMachine.Text = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
TextMachineGroup.Text = (Griddata.Columns[2].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
IP.Text = (Griddata.Columns[3].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
PORT.Text = (Griddata.Columns[4].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
User.Text = (Griddata.Columns[5].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
Password.Text = (Griddata.Columns[6].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
string TYR= (Griddata.Columns[7].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;
|
||||
dLICK.IsChecked = Convert.ToBoolean((Griddata.Columns[7].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text);//定位第列,
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void Save_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxMachine.Text) && !string.IsNullOrEmpty(TextMachineGroup.Text) && !string.IsNullOrEmpty(IP .Text))
|
||||
{
|
||||
WriteableBitmap wb = new WriteableBitmap((BitmapSource)IMAGE.Source);
|
||||
byte[] imageData = SourceToArray(wb);
|
||||
|
||||
Dictionary<string, object> dr_new = new Dictionary<string, object>();//缓存函数
|
||||
dr_new.Add("Name", comboBoxMachine.Text);
|
||||
dr_new.Add("Groups", TextMachineGroup.Text);
|
||||
dr_new.Add("IP", IP.Text);
|
||||
dr_new.Add("PORT", PORT.Text);
|
||||
dr_new.Add("type", type_);
|
||||
dr_new.Add("State", "899");
|
||||
dr_new.Add("User", User.Text);
|
||||
dr_new.Add("Password", Password.Text);
|
||||
dr_new.Add("LOCK", dLICK.IsChecked.ToString());
|
||||
dr_new.Add("DATA",imageData);
|
||||
|
||||
if (MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from MachinesDispense where name ='" + comboBoxMachine.Text + "'", null).Tables[0].Rows.Count == 0)
|
||||
{
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("MachinesDispense", dr_new);
|
||||
}
|
||||
else
|
||||
{
|
||||
MainWindowViewModel.SQLiteHelpers.Update("MachinesDispense", dr_new, "name='" + comboBoxMachine.Text + "'", null);
|
||||
}
|
||||
Griddata.ItemsSource = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select Name,Groups,IP,PORT,DATA from MachinesDispense Order by id", null).Tables[0].DefaultView;
|
||||
MessageBox.Show(Properties.Resources.Save + comboBoxMachine.Text, "SCCM", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.ERR , "SCCM", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
private void Delete_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
MessageBoxResult vr = System.Windows.MessageBox.Show(Properties.Resources.Delete + comboBoxMachine.Text, "SCCM", MessageBoxButton.OKCancel, MessageBoxImage.Question);
|
||||
if (vr == MessageBoxResult.OK) // 如果是确定,就执行下面代码
|
||||
{
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("MachinesDispense", "Name='" + comboBoxMachine.Text + "'", null);
|
||||
Griddata.ItemsSource = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select Name,Groups,IP,PORT,DATA from MachinesDispense Order by id", null).Tables[0].DefaultView;
|
||||
comboBoxMachine.Text = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
textlog.Text = "Invalid";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
private void Test_Click(object sender, RoutedEventArgs e)//测试按钮
|
||||
{
|
||||
if (!string.IsNullOrEmpty(IP.Text) && !string.IsNullOrEmpty(PORT.Text))
|
||||
{
|
||||
textlog.Text = "TEST";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255));
|
||||
//------------使用ping类------
|
||||
string host = IP.Text;
|
||||
Ping p1 = new Ping();
|
||||
PingReply reply = p1.Send(host); //发送主机名或Ip地址
|
||||
//StringBuilder sbuilder;
|
||||
if (reply.Status == IPStatus.Success)
|
||||
{
|
||||
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
//连接服务器,绑定IP 与 端口
|
||||
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(IP.Text), int.Parse(PORT.Text));
|
||||
try
|
||||
{
|
||||
socket.Connect(iPEndPoint);
|
||||
socket.Close();//离线
|
||||
textlog.Text = "Link succeed";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 255, 0));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
textlog.Text = "Link failed";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 0));
|
||||
}
|
||||
}
|
||||
else if (reply.Status == IPStatus.TimedOut)
|
||||
{
|
||||
textlog.Text = "Link timeout";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
textlog.Text = "No links";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
textlog.Text = "Invalid";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void TextMachineGroup_DropDownClosed(object sender, EventArgs e)
|
||||
{
|
||||
Uri uri;
|
||||
BitmapImage bitmapImage;
|
||||
switch (TextMachineGroup.Text)//步骤用时计算
|
||||
{
|
||||
case "252":
|
||||
uri = new Uri("pack://application:,,,/LOGO/252-2t.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 1;
|
||||
break;
|
||||
case "252-2T":
|
||||
uri = new Uri("pack://application:,,,/LOGO/252-2t.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 1;
|
||||
break;
|
||||
case "252RB":
|
||||
uri = new Uri("pack://application:,,,/LOGO/252RB.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 1;
|
||||
break;
|
||||
case "252RDRM":
|
||||
uri = new Uri("pack://application:,,,/LOGO/252RMRD.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 1;
|
||||
break;
|
||||
case "242W":
|
||||
uri = new Uri("pack://application:,,,/LOGO/242w.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 1;
|
||||
break;
|
||||
case "302":
|
||||
uri = new Uri("pack://application:,,,/LOGO/302.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 2;
|
||||
break;
|
||||
case "303":
|
||||
uri = new Uri("pack://application:,,,/LOGO/303.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 3;
|
||||
break;
|
||||
case "302PDW":
|
||||
uri = new Uri("pack://application:,,,/LOGO/303pdw.png");
|
||||
bitmapImage = new BitmapImage(uri);
|
||||
IMAGE.Source = bitmapImage;
|
||||
type_ = 3;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] BitmapImageToByteArray(BitmapImage bmp)
|
||||
{
|
||||
byte[] byteArray = null;
|
||||
try
|
||||
{
|
||||
Stream sMarket = bmp.StreamSource;
|
||||
if (sMarket != null && sMarket.Length > 0)
|
||||
{
|
||||
//很重要,因为Position经常位于Stream的末尾,导致下面读取到的长度为0。
|
||||
sMarket.Position = 0;
|
||||
|
||||
using (BinaryReader br = new BinaryReader(sMarket))
|
||||
{
|
||||
byteArray = br.ReadBytes((int)sMarket.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
//other exception handling
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
public static byte[] SourceToArray(WriteableBitmap source)
|
||||
{
|
||||
byte[] byteArray = null;
|
||||
try
|
||||
{
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
JpegBitmapEncoder coder = new JpegBitmapEncoder();
|
||||
coder.QualityLevel = 100;
|
||||
coder.Frames.Add(BitmapFrame.Create(source));
|
||||
coder.Save(ms);
|
||||
byteArray = ms.ToArray();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message.ToString());
|
||||
}
|
||||
return byteArray;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.DispenseView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
mc:Ignorable="d"
|
||||
Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1200">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="60"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Grid.Row="0">
|
||||
<ScrollViewer Margin="0" VerticalScrollBarVisibility="Auto">
|
||||
<WrapPanel Orientation="Horizontal" x:Name="DispenseMacView" Background="White">
|
||||
|
||||
</WrapPanel>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Height="60" Background="#FF00204E" Orientation="Horizontal">
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,180 @@
|
||||
using LiveChartsCore.Geo;
|
||||
using SkiaSharp;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserControls;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ConvertMoels;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using System.Numerics;
|
||||
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;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using System.Windows.Threading;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Xml.Linq;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// MachinesSet.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DispenseView : UserControl
|
||||
{
|
||||
public DispenseView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
DataTable DispenseMac = new DataTable();
|
||||
UserControls.DispenseMacInfo[] dispenseMacInfo = new UserControls.DispenseMacInfo[99]; //定义总览信息卡
|
||||
//private string SYS_machines = null;
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DispenseMac = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from MachinesDispense ", null).Tables[0];//缓存
|
||||
/// <summary>
|
||||
/// 生成总览信息卡
|
||||
/// </summary>
|
||||
for (int i = 0; i < DispenseMac.Rows.Count; i++)
|
||||
{
|
||||
string x = DispenseMac.AsEnumerable().Select(row => row.Field<string>("State")).ElementAt(i);
|
||||
bool y = DispenseMac.AsEnumerable().Select(row => row.Field<bool>("LOCK")).ElementAt(i);
|
||||
|
||||
dispenseMacInfo[i] = new UserControls.DispenseMacInfo();
|
||||
dispenseMacInfo[i].Margin = new Thickness(5, 5, 0, 5);
|
||||
dispenseMacInfo[i].Width = 400;
|
||||
dispenseMacInfo[i].Height = 600;
|
||||
dispenseMacInfo[i].IP.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("IP")).ElementAt(i);
|
||||
dispenseMacInfo[i].USER.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("User")).ElementAt(i);
|
||||
dispenseMacInfo[i].PORT.Text = DispenseMac.AsEnumerable().Select(row => row.Field<int>("PORT")).ElementAt(i).ToString();
|
||||
dispenseMacInfo[i].PASSWD.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("Password")).ElementAt(i);
|
||||
dispenseMacInfo[i].type_.Text = DispenseMac.AsEnumerable().Select(row => row.Field<int>("type")).ElementAt(i).ToString();
|
||||
dispenseMacInfo[i].type_N.Text = StatenClassConvert.Convert(DispenseMac.AsEnumerable().Select(row => row.Field<int>("type")).ElementAt(i));
|
||||
dispenseMacInfo[i].mac.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("name")).ElementAt(i);
|
||||
dispenseMacInfo[i].macg.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("Groups")).ElementAt(i);
|
||||
dispenseMacInfo[i].state.Text = StatenClassConvert.Convert(x);
|
||||
if (x == "899")
|
||||
{
|
||||
dispenseMacInfo[i].state.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
dispenseMacInfo[i].state.Background = new SolidColorBrush(Color.FromRgb(255, 255, 255));
|
||||
}
|
||||
dispenseMacInfo[i].WorkingStatus.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("WorkingStatus")).ElementAt(i);
|
||||
if (y)
|
||||
{
|
||||
dispenseMacInfo[i].mlock.Visibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
dispenseMacInfo[i].mlock.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
//dispenseMacInfo[i].name.Text = Selet_Machines(MainWindowViewModel.Machines, "name", i).ToString();
|
||||
// dispenseMacInfo[i].IMAGE = ;
|
||||
|
||||
MemoryStream memoryStream = new MemoryStream(DispenseMac.AsEnumerable().Select(row => row.Field<byte[]>("DATA")).ElementAt(i));
|
||||
//数据流生成图片显示
|
||||
BitmapImage bitmapImage = new BitmapImage();
|
||||
bitmapImage.BeginInit();
|
||||
bitmapImage.StreamSource = memoryStream;
|
||||
bitmapImage.EndInit();
|
||||
dispenseMacInfo[i].IMAGE.Source = bitmapImage;
|
||||
DispenseMacView.Children.Add(dispenseMacInfo[i]);
|
||||
|
||||
CountDown();
|
||||
}
|
||||
}
|
||||
|
||||
private void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每10秒调用一次Tick
|
||||
{
|
||||
Interval = TimeSpan.FromSeconds(10)//秒
|
||||
};
|
||||
timer1s.Tick += Tick_Event_1S;
|
||||
timer1s.Start();
|
||||
}//时间周期初始化
|
||||
async void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
{
|
||||
for (int i = 0; i < DispenseMac.Rows.Count; i++)
|
||||
{
|
||||
if (await PingTest(dispenseMacInfo[i].IP.Text))
|
||||
{
|
||||
DataRow drEmployee = DispenseMac.Select("IP='" + dispenseMacInfo[i].IP.Text + "'").First();
|
||||
drEmployee.BeginEdit();
|
||||
drEmployee["State"] = "802";
|
||||
drEmployee.EndEdit();
|
||||
drEmployee.AcceptChanges();
|
||||
drEmployee.ClearErrors();
|
||||
}
|
||||
|
||||
string x = DispenseMac.AsEnumerable().Select(row => row.Field<string>("State")).ElementAt(i);
|
||||
bool y = DispenseMac.AsEnumerable().Select(row => row.Field<bool>("LOCK")).ElementAt(i);
|
||||
|
||||
dispenseMacInfo[i].state.Text = StatenClassConvert.Convert(x);
|
||||
dispenseMacInfo[i].WorkingStatus.Text = DispenseMac.AsEnumerable().Select(row => row.Field<string>("WorkingStatus")).ElementAt(i);
|
||||
if (x == "899")
|
||||
{
|
||||
dispenseMacInfo[i].state.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
dispenseMacInfo[i].Disconnect.Visibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
dispenseMacInfo[i].state.Background = new SolidColorBrush(Color.FromRgb(255, 255, 255));
|
||||
dispenseMacInfo[i].Disconnect.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
if (y)
|
||||
{
|
||||
dispenseMacInfo[i].mlock.Visibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
dispenseMacInfo[i].mlock.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async Task<bool> PingTest(string ip)
|
||||
{
|
||||
bool result = false;
|
||||
Ping pingSender = new Ping();
|
||||
|
||||
try
|
||||
{
|
||||
PingReply reply = await pingSender.SendPingAsync(ip, 3000);
|
||||
|
||||
if (reply.Status == IPStatus.Success)
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
catch (PingException )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.DyeingPlanView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
mc:Ignorable="d" Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1100">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid Background="White" Cursor="">
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="140,30,10,0" x:Name="comboBoxWorkOrder" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" KeyDown="comboBoxWorkOrder_KeyDown"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,30,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.orders}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="140,80,10,0" x:Name="comboBoxDyelot" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" KeyDown="comboBoxDyelot_KeyDown" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,80,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Dyelot}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="140,130,10,0" x:Name="comboBoxMachine" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" DropDownClosed="comboBoxMachine_DropDownClosed" IsReadOnly="True" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,130,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,180,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.ColorNumber}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="360,180,280,0" x:Name="color" TextWrapping="Wrap"
|
||||
VerticalAlignment="Top" Width="50" Background="#FF336FA8" MouseDown="color_color_MouseDoubleClick"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,180,10,0" x:Name="TEXTColorNumber" VerticalAlignment="Top" Width="200"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,230,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.ColorName}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,230,10,0" x:Name="TEXTColorName" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,280,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Client}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,280,10,0" x:Name="TEXTClient" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,330,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.ClothSpecies}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,330,10,0" x:Name="TEXTClothSpecies" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,380,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.ClothWeight}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,380,10,0" x:Name="TEXTClothWeight" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" PreviewTextInput="Tb_KeyTEXTClothWeight" InputMethod.IsInputMethodEnabled="False"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,430,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.BathRatio}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,430,10,0" x:Name="TEXTBathRatio" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" PreviewTextInput="Tb_KeyTEXTBathRatio" InputMethod.IsInputMethodEnabled="False"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,480,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Total}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,480,10,0" x:Name="TEXTTotal" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" PreviewTextInput="Tb_KeyTEXTTotal" InputMethod.IsInputMethodEnabled="False"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,530,280,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.USER}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="140,530,10,0" x:Name="TEXTUSER" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="10,80,480,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Pump}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Right" Height="40" Margin="140,80,380,0" x:Name="PumpSpeed" VerticalAlignment="Top" Width="100"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="240,80,150,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Blower}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Right" Height="40" Margin="360,80,50,0" x:Name="Blower" VerticalAlignment="Top" Width="100"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="10,130,480,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Swing}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Right" Height="40" Margin="140,130,380,0" x:Name="Swing" VerticalAlignment="Top" Width="100"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="240,130,150,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.ClothWheel}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Right" Height="40" Margin="360,130,50,0" x:Name="ClothWheel" VerticalAlignment="Top" Width="100"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="10,180,480,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Nozzle}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Right" Height="40" Margin="140,180,380,0" x:Name="Nozzle" VerticalAlignment="Top" Width="100"
|
||||
FontSize="15" BorderBrush="#FF673AB7" />
|
||||
|
||||
<ComboBox HorizontalAlignment="Right" Height="40" Margin="150,30,50,0" x:Name="comboBoxProgram" VerticalAlignment="Top" Width="470"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" DropDownClosed="comboBoxProgram_DropDownClosed"
|
||||
TextBoxBase.TextChanged="comboBoxProgram_TextChanged"/>
|
||||
<TextBlock HorizontalAlignment="Right" Height="40" Margin="10,30,480,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.process}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<DataGrid x:Name="Grid_data" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=99}"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" MouseDoubleClick="Grid_data_MouseDoubleClick"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
Margin="0,250,10,60" Width="600" HorizontalAlignment="Right" BorderBrush="#FFC9C9C9" FontSize="16" BorderThickness="5,5,5,5" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="100" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="{x:Static lang:Resources.edit}" Click="MenuItem_edit"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Insert}" Click="MenuItem_Insert"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Delete}" Click="MenuItem_Delete"/>
|
||||
</ContextMenu>
|
||||
</DataGrid.ContextMenu>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Binding="{Binding ProgramID}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Program}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}"
|
||||
Width="60" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter1}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter2}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter3}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter4}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter5}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="300" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0,0,0.5">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.Function}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding StepName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0.5,0,0">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.ParameterSet}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding ParameterName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S1,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S2,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S3 ,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Button x:Name="Save" Content="{x:Static lang:Resources.Save}" HorizontalAlignment="Right" Height="35" Margin="450,0,50,10" VerticalAlignment="Bottom" Width="80" Click="Button_Click"/>
|
||||
<Button HorizontalAlignment="Left" Height="35" Margin="0,0,50,10" VerticalAlignment="Bottom" Width="60" Click="Button_Quit" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}">
|
||||
<materialDesign:PackIcon Kind="ArrowRight" Foreground="#FF00204E" HorizontalAlignment="Center" VerticalAlignment="Center" Width="50" Height="35" />
|
||||
</Button>
|
||||
|
||||
<Grid Background="White" Margin="10,500,300,45" HorizontalAlignment="Left" VerticalAlignment="Bottom" Height="250" Width="400">
|
||||
<ContentControl x:Name="Picture"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,672 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using nGantt.GanttChart;
|
||||
using ScottPlot.Palettes;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
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;
|
||||
using System.Xml.Linq;
|
||||
using TouchSocket.Core;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// ProductionPlanningEdit.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DyeingPlanView : UserControl
|
||||
{
|
||||
DataTable ProgramName = new DataTable();
|
||||
DataTable WorkOrder =new DataTable();
|
||||
DataTable dat = new DataTable();
|
||||
DataTable TEMPTable = new DataTable();
|
||||
DataTable DyelotsBulkedRecipe=new DataTable();
|
||||
public string WorkOrder_n;
|
||||
string Numder = null;
|
||||
string ID = null;
|
||||
string P1, P2, P3, P4, P5;
|
||||
public DyeingPlanView()
|
||||
{
|
||||
InitializeComponent();
|
||||
ProgramName = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from ProgramName order by ProgramID desc", null).Tables[0];//缓存
|
||||
comboBoxMachine.ItemsSource = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field<string>("name")).ToList();//转换机台
|
||||
comboBoxProgram.ItemsSource = ProgramName.AsEnumerable().Select(rowdata => rowdata.Field<string>("ProgramName")).ToList();//转换工艺代码
|
||||
TEXTUSER.Text = MainWindow.user_;
|
||||
|
||||
TEMPTable.Columns.Add("Time", Type.GetType("System.String"));
|
||||
TEMPTable.Columns.Add("MST", Type.GetType("System.Double"));
|
||||
}
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
private void comboBoxMachine_DropDownClosed(object sender, EventArgs e)//机台选择
|
||||
{
|
||||
string[] sArray = Regex.Split(comboBoxMachine.Text, @"\+", RegexOptions.IgnoreCase);
|
||||
if (sArray.Length <= 1)
|
||||
{
|
||||
comboBoxDyelot.IsEnabled = true;
|
||||
DataTable DatDyelot = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where Machine='" + comboBoxMachine.Text + "' and State='101' order by Dyelot desc", null).Tables[0]; //读取计划表写入缓存
|
||||
comboBoxDyelot.ItemsSource = DatDyelot.AsEnumerable().Select(rowdata => rowdata.Field<string>("Dyelot")).ToList();//转换代码
|
||||
}
|
||||
}
|
||||
private void Button_Click(object sender, RoutedEventArgs e)//保存按钮
|
||||
{
|
||||
if (string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
MessageBox.Show("Not Machine", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(comboBoxProgram.Text))
|
||||
{
|
||||
MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
string[] pArray = Regex.Split(comboBoxProgram.Text, @"\+", RegexOptions.IgnoreCase);
|
||||
|
||||
//单机器信息写入
|
||||
string sTime;
|
||||
string StartTime_;
|
||||
string WorkOrder_ = comboBoxMachine.Text + "_" + DateTime.Now.ToString("yyMMddHHmmss");
|
||||
if (!string.IsNullOrEmpty(comboBoxWorkOrder.Text)) WorkOrder_ = comboBoxWorkOrder.Text;
|
||||
string ProgramName_ = comboBoxProgram.Text;
|
||||
string ProgramID_ = null;
|
||||
for (int j = 0; j < pArray.Length; j++)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (j == 0)
|
||||
{
|
||||
ProgramID_ = ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgramID_ = ProgramID_ + "+" + ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
}
|
||||
string Machines_ = comboBoxMachine.Text;
|
||||
string State_ = "100";
|
||||
string Dyelot_ = comboBoxDyelot.Text;
|
||||
string color_ = color.Background.ToString();
|
||||
try
|
||||
{
|
||||
sTime = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where Machines='" + comboBoxMachine.Text + "' order by EndTime desc", null).
|
||||
Tables[0].Select().First().Field<object>("EndTime").ToString(); //读取计划表写入缓存
|
||||
if (DateTime.Now < DateTime.Parse(sTime))
|
||||
{
|
||||
StartTime_ = DateTime.Parse(sTime).AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
|
||||
string Time_ = "0:00";
|
||||
for (int k = 0; k < pArray.Length; k++)
|
||||
{
|
||||
string t = ProgramName.Select("ProgramName='" + pArray[k] + "'").
|
||||
First().Field<object>("Time").ToString();
|
||||
Time_ = (DateTime.Parse(Time_) + DateTime.Parse(t).TimeOfDay).ToString("HH:mm:ss");
|
||||
}
|
||||
string EndTime_ = (DateTime.Parse(StartTime_) + DateTime.Parse(Time_).TimeOfDay).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
//插入数据信息
|
||||
Dictionary<string, object> WorkOrder_new = new Dictionary<string, object>();//缓存函数
|
||||
WorkOrder_new.Add("StartTime", StartTime_);
|
||||
WorkOrder_new.Add("EndTime", EndTime_);
|
||||
WorkOrder_new.Add("Time", Time_);
|
||||
WorkOrder_new.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_new.Add("ProgramName", ProgramName_);
|
||||
WorkOrder_new.Add("ProgramID", ProgramID_);
|
||||
WorkOrder_new.Add("Machines", Machines_);
|
||||
WorkOrder_new.Add("State", State_);
|
||||
WorkOrder_new.Add("Dyelot", Dyelot_);
|
||||
WorkOrder_new.Add("Remark", null);
|
||||
WorkOrder_new.Add("lock", 0);
|
||||
WorkOrder_new.Add("color", color_);
|
||||
WorkOrder_new.Add("ColorNumber", TEXTColorNumber.Text);
|
||||
WorkOrder_new.Add("Client", TEXTClient.Text);
|
||||
WorkOrder_new.Add("ClothWeight", TEXTClothWeight.Text);
|
||||
WorkOrder_new.Add("ClothSpecies", TEXTClothSpecies.Text);
|
||||
WorkOrder_new.Add("BathRatio", TEXTBathRatio.Text);
|
||||
WorkOrder_new.Add("Total", TEXTTotal.Text);
|
||||
WorkOrder_new.Add("USER", TEXTUSER.Text);
|
||||
WorkOrder_new.Add("ColorName", TEXTColorName.Text);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkOrder", WorkOrder_new);// 执行插入
|
||||
|
||||
//插入信息
|
||||
Dictionary<string, object> WorkOrder_set = new Dictionary<string, object>();//缓存函数
|
||||
WorkOrder_set.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_set.Add("PumpSpeed", PumpSpeed.Text);
|
||||
WorkOrder_set.Add("Blower", Blower.Text);
|
||||
WorkOrder_set.Add("Swing", Swing.Text);
|
||||
WorkOrder_set.Add("ClothWheel", ClothWheel.Text);
|
||||
WorkOrder_set.Add("Nozzle", Nozzle.Text);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkOrderSet", WorkOrder_set);// 执行插入
|
||||
|
||||
Dictionary<string, object> WorkOrder_DAT = new Dictionary<string, object>();//缓存函数
|
||||
for (int x = 0; x < dat.Rows.Count; x++)
|
||||
{
|
||||
WorkOrder_DAT = MainWindowViewModel.SQLiteHelpers.ToDictionary(dat.Rows[x]);
|
||||
WorkOrder_DAT.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_DAT.Add("Dyelot", Dyelot_);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkorderSteps", WorkOrder_DAT);//行插入
|
||||
WorkOrder_DAT.Clear();
|
||||
}
|
||||
if (!String.IsNullOrEmpty(comboBoxDyelot.Text))//料单信息
|
||||
{
|
||||
for (int x = 0; x < DyelotsBulkedRecipe.Rows.Count; x++)
|
||||
{
|
||||
WorkOrder_DAT.Add("WorkOrder", comboBoxWorkOrder.Text);
|
||||
WorkOrder_DAT.Add("Dyelot", DyelotsBulkedRecipe.Rows[x]["Dyelot"]);
|
||||
WorkOrder_DAT.Add("Redye", DyelotsBulkedRecipe.Rows[x]["Redye"]);
|
||||
WorkOrder_DAT.Add("Step", DyelotsBulkedRecipe.Rows[x]["StepNumber"]);
|
||||
WorkOrder_DAT.Add("TIME", DyelotsBulkedRecipe.Rows[x]["Created"]);
|
||||
WorkOrder_DAT.Add("Tank", DyelotsBulkedRecipe.Rows[x]["TankNo"]);
|
||||
WorkOrder_DAT.Add("State", DyelotsBulkedRecipe.Rows[x]["DispenseResult"]);
|
||||
WorkOrder_DAT.Add("Machine", comboBoxMachine.Text);
|
||||
WorkOrder_DAT.Add("ProductCode", DyelotsBulkedRecipe.Rows[x]["ProductCode"]);
|
||||
WorkOrder_DAT.Add("ProductName", DyelotsBulkedRecipe.Rows[x]["ProductName"]);
|
||||
WorkOrder_DAT.Add("ProductType", DyelotsBulkedRecipe.Rows[x]["ProductType"]);
|
||||
WorkOrder_DAT.Add("Grams", DyelotsBulkedRecipe.Rows[x]["Grams"]);
|
||||
WorkOrder_DAT.Add("Amount", DyelotsBulkedRecipe.Rows[x]["Amount"]);
|
||||
WorkOrder_DAT.Add("DispenseStartTime", DyelotsBulkedRecipe.Rows[x]["DispenseStartTime"]);
|
||||
WorkOrder_DAT.Add("DispenseEndTime", DyelotsBulkedRecipe.Rows[x]["DispenseEndTime"]);
|
||||
WorkOrder_DAT.Add("DispenseGrams", DyelotsBulkedRecipe.Rows[x]["DispenseGrams"]);
|
||||
WorkOrder_DAT.Add("Dispense", DyelotsBulkedRecipe.Rows[x]["Dispenser"]);
|
||||
WorkOrder_DAT.Add("UserAccount", DyelotsBulkedRecipe.Rows[x]["UserAccount"]);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("Dyelot", WorkOrder_DAT);//行插入
|
||||
WorkOrder_DAT.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
LogGing.ExchangeDATA("Dyelot=" + comboBoxWorkOrder.Text + ";Machine=" + comboBoxMachine.Text +
|
||||
";Program=" + comboBoxProgram.Text + ";User=" + TEXTUSER.Text + ";");
|
||||
|
||||
this.Visibility = Visibility.Collapsed;
|
||||
ProductionPlanningView.UI = true;
|
||||
}
|
||||
private void Button_Quit(object sender, RoutedEventArgs e)//退出
|
||||
{
|
||||
this.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
public void DatSteps(DataTable db)//行号刷新
|
||||
{
|
||||
int a = db.Rows.Count;
|
||||
for (int i = 0; i < a; i++)
|
||||
{
|
||||
DataRow dr = db.Rows[i];
|
||||
dr.BeginEdit();
|
||||
dr["Step"] = i + 1;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
private void comboBoxProgram_DropDownClosed(object sender, EventArgs e)//工艺选择事件
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxProgram.Text))
|
||||
{
|
||||
dat.Clear();
|
||||
dat = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from ProgramSteps where Program='" + comboBoxProgram.SelectedValue + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
}
|
||||
private void comboBoxProgram_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
dat.Clear();
|
||||
string text = comboBoxProgram.Text;
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
try
|
||||
{
|
||||
string[] sArray = Regex.Split(text, @"\+", RegexOptions.IgnoreCase);
|
||||
/* if (!string.IsNullOrEmpty(WorkOrder_n))
|
||||
{
|
||||
dat = SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkorderSteps where WorkOrder='" + WorkOrder_n + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
}//插入工单不为空时载入细节信息*/
|
||||
for (int i = 0; i < sArray.Length; i++)
|
||||
{
|
||||
DataTable temp = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from ProgramSteps where Program='" + sArray[i] + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
if (dat.Columns.Count == 0) dat = temp.Clone();
|
||||
foreach (DataRow drT in temp.Rows)
|
||||
{
|
||||
dat.Rows.Add(drT.ItemArray);
|
||||
}
|
||||
}//以工艺名组合工艺细节
|
||||
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
|
||||
TEMP();
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
|
||||
}//工艺修改事件
|
||||
private void MenuItem_edit(object sender, RoutedEventArgs e)
|
||||
{
|
||||
int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid_data.Columns[3].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid_data.Columns[6].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid_data.Columns[7].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid_data.Columns[8].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid_data.Columns[9].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid_data.Columns[10].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = dat.Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, dat.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
}
|
||||
}
|
||||
private void MenuItem_Insert(object sender, RoutedEventArgs e)//右键插入
|
||||
{
|
||||
int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位列,
|
||||
|
||||
int d = 0;
|
||||
if (ID != null) { d = Convert.ToInt32(ID); } else { return; }
|
||||
string ProgramID = dat.Select().First().Field<string>("ProgramID").ToString();
|
||||
string ProgramNAME = dat.Select().First().Field<string>("Program").ToString();
|
||||
DataRow dr = dat.NewRow();//添加表数据
|
||||
dr["ProgramID"] = ProgramID;
|
||||
dr["Program"] = ProgramNAME;
|
||||
dat.Rows.InsertAt(dr, d - 1);
|
||||
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = dat.Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, dat.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
}
|
||||
}
|
||||
private void MenuItem_Delete(object sender, RoutedEventArgs e)//右键删除
|
||||
{
|
||||
int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
dat.Rows.RemoveAt( Convert.ToInt32(ID)-1);
|
||||
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
}
|
||||
private void Grid_data_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid_data.Columns[3].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid_data.Columns[6].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid_data.Columns[7].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid_data.Columns[8].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid_data.Columns[9].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid_data.Columns[10].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = dat.Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, dat.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
}
|
||||
}
|
||||
private void Address_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
|
||||
{
|
||||
int n = Convert.ToInt16(ID);
|
||||
ID = null;
|
||||
if (e.PNAME != "")
|
||||
{
|
||||
DataRow dr = dat.Rows[n - 1];
|
||||
dr.BeginEdit();
|
||||
dr["StepID"] = e.StepID;
|
||||
dr["StepName"] = e.StepNAME;
|
||||
dr["ParameterName"] = e.PNAME;
|
||||
dr["Parameter1"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter2"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter3"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter4"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter5"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter1_S1"] = e.Row_DAT.Field<double>("Parameter1_S1");
|
||||
dr["Parameter2_S1"] = e.Row_DAT.Field<double>("Parameter2_S1");
|
||||
dr["Parameter3_S1"] = e.Row_DAT.Field<double>("Parameter3_S1");
|
||||
dr["Parameter4_S1"] = e.Row_DAT.Field<double>("Parameter4_S1");
|
||||
dr["Parameter5_S1"] = e.Row_DAT.Field<double>("Parameter5_S1");
|
||||
dr["Parameter1_S2"] = e.Row_DAT.Field<double>("Parameter1_S2");
|
||||
dr["Parameter2_S2"] = e.Row_DAT.Field<double>("Parameter2_S2");
|
||||
dr["Parameter3_S2"] = e.Row_DAT.Field<double>("Parameter3_S2");
|
||||
dr["Parameter4_S2"] = e.Row_DAT.Field<double>("Parameter4_S2");
|
||||
dr["Parameter5_S2"] = e.Row_DAT.Field<double>("Parameter5_S2");
|
||||
dr["Parameter1_S3"] = e.Row_DAT.Field<double>("Parameter1_S3");
|
||||
dr["Parameter2_S3"] = e.Row_DAT.Field<double>("Parameter2_S3");
|
||||
dr["Parameter3_S3"] = e.Row_DAT.Field<double>("Parameter3_S3");
|
||||
dr["Parameter4_S3"] = e.Row_DAT.Field<double>("Parameter4_S3");
|
||||
dr["Parameter5_S3"] = e.Row_DAT.Field<double>("Parameter5_S3");
|
||||
dr["StepName_S1"] = e.Row_DAT.Field<string>("StepName_S1");
|
||||
dr["StepName_S2"] = e.Row_DAT.Field<string>("StepName_S2");
|
||||
dr["StepName_S3"] = e.Row_DAT.Field<string>("StepName_S3");
|
||||
dr["StepID_S1"] = e.Row_DAT.Field<string>("StepID_S1");
|
||||
dr["StepID_S2"] = e.Row_DAT.Field<string>("StepID_S2");
|
||||
dr["StepID_S3"] = e.Row_DAT.Field<string>("StepID_S3");
|
||||
dr.EndEdit();
|
||||
Grid_data.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MainWindowViewModel.dt_TP.Rows.RemoveAt(n - 1);
|
||||
DatSteps(dat);
|
||||
Grid_data.SelectedIndex = -1;
|
||||
}
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
private void TEMP()
|
||||
{
|
||||
//处理计划温度图表
|
||||
TEMPTable.Clear();
|
||||
|
||||
string TIMET = "00:00:00";
|
||||
Double MSTT = 30.0;
|
||||
Double TT;
|
||||
Double TC;
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
for (int i = 0; i < dat.Rows.Count; i++)
|
||||
{
|
||||
switch (dat.Rows[i].Field<string>("StepID"))//步骤用时计算
|
||||
{
|
||||
case "001":
|
||||
TT = MSTT;
|
||||
TC = dat.Rows[i].Field<double>("Parameter2");
|
||||
if (TC > 9.9 || TC < 0.1) TC = 9.9;//计算限制
|
||||
MSTT = dat.Rows[i].Field<double>("Parameter1");
|
||||
TT = Math.Abs(MSTT - TT) / TC * 60;
|
||||
TIMET = Convert.ToDateTime(TIMET).AddSeconds(TT).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter3")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "007":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(5).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "008":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(5).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "013":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter3") * dat.Rows[i].Field<double>("Parameter4")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "015":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter3")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "017":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter3")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "020":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(5).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "022":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(5).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "031":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter1")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "065":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter3")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "091":
|
||||
TT = MSTT;
|
||||
TC = (Double)dat.Rows[i][7];
|
||||
if (TC > 9.9 || TC < 0.1) TC = 9.9;//计算限制
|
||||
MSTT = (Double)dat.Rows[i][6];
|
||||
TT = Math.Abs(MSTT - TT) / TC * 60;
|
||||
TIMET = Convert.ToDateTime(TIMET).AddSeconds(TT).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
case "093":
|
||||
TIMET = Convert.ToDateTime(TIMET).AddMinutes(dat.Rows[i].Field<double>("Parameter1")).ToString("HH:mm:ss");
|
||||
TEMPTable.Rows.Add(new object[] { TIMET, MSTT });
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
Picture.Content = new View.CurveTemp(TEMPTable);
|
||||
} //计划温度图表
|
||||
private async void comboBoxWorkOrder_KeyDown(object sender, KeyEventArgs e)//工单输入
|
||||
{
|
||||
if (e.Key == Key.Enter && MainWindowViewModel.DyelotsDispenser)
|
||||
{
|
||||
int dat_c = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from WorkOrder where WorkOrder = '" + comboBoxWorkOrder.Text + "'", null).Tables[0].Rows.Count;//缓存
|
||||
|
||||
if (dat_c > 0)//查询料单是否可用
|
||||
{
|
||||
comboBoxWorkOrder.Text = null;
|
||||
MessageBox.Show(Properties.Resources.TTAE, "WorkOrder", MessageBoxButton.OK, MessageBoxImage.Information); //连接成功提示是否保存
|
||||
return;
|
||||
}
|
||||
|
||||
string Connstr_SC;
|
||||
string DYELOTS_sql = "SELECT * FROM [dbo].[DYELOTS] WHERE Dyelot = '" + comboBoxWorkOrder.Text + "'";//单号查询语句
|
||||
string DyelotsBulkedRecipe_sql = "SELECT * FROM [dbo].[DyelotsBulkedRecipe] WHERE Dyelot = '" + comboBoxWorkOrder.Text + "'";
|
||||
try
|
||||
{
|
||||
if (MainWindowViewModel.SQMOD == "Windows Authentication")
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";User ID=" + MainWindowViewModel.SQLUSER + ";Password=" + MainWindowViewModel.SQLPASWORD;
|
||||
}
|
||||
SqlConnection conn_SC = new SqlConnection(Connstr_SC);
|
||||
await conn_SC.OpenAsync(); //连接数据库
|
||||
SqlDataAdapter DYELOTS_data = new SqlDataAdapter(DYELOTS_sql, Connstr_SC); //查询
|
||||
SqlDataAdapter DyelotsBulkedRecipe_ = new SqlDataAdapter(DyelotsBulkedRecipe_sql, Connstr_SC);
|
||||
conn_SC.Close();
|
||||
DyelotsBulkedRecipe_.Fill(DyelotsBulkedRecipe);
|
||||
|
||||
DataTable ds = new DataTable();//载入信息
|
||||
DYELOTS_data.Fill(ds);
|
||||
TEXTColorNumber.Text = ds.AsEnumerable().Select(row => row.Field<string>("ColorNo")).First();
|
||||
TEXTColorName.Text = ds.AsEnumerable().Select(row => row.Field<string>("ColorName")).First();
|
||||
TEXTClient.Text = ds.AsEnumerable().Select(row => row.Field<string>("CustomerName")).First();
|
||||
TEXTClothSpecies.Text = ds.AsEnumerable().Select(row => row.Field<string>("FabricName")).First();
|
||||
TEXTClothWeight.Text = ds.AsEnumerable().Select(row => row.Field<Double>("TotalWeight")).First().ToString();
|
||||
TEXTBathRatio.Text = ds.AsEnumerable().Select(row => row.Field<string>("LiquidRatio")).First();
|
||||
TEXTTotal.Text = ds.AsEnumerable().Select(row => row.Field<string>("TotalVolume")).First();
|
||||
comboBoxDyelot.Text = ds.AsEnumerable().Select(row => row.Field<string>("Dyelot")).First();
|
||||
|
||||
string machine_ = ds.AsEnumerable().Select(row => row.Field<string>("Machine")).First();//机台
|
||||
if (MainWindowViewModel.Machines.Select("Name ='"+machine_+"'").Length == 0)
|
||||
{
|
||||
comboBoxMachine.Text = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
comboBoxMachine.Text = machine_;
|
||||
}
|
||||
string user_ = ds.AsEnumerable().Select(row => row.Field<string>("UserAccount")).First();//用户名
|
||||
if (!String.IsNullOrEmpty(user_)) TEXTUSER.Text = user_;
|
||||
comboBoxProgram.Text = ds.AsEnumerable().Select(row => row.Field<string>("Program")).First();
|
||||
|
||||
if (ds.AsEnumerable().Select(row => row.Field<int>("color")).First() > 0)//颜色
|
||||
{
|
||||
string colorValue = string.Format("{0:X6}", ds.AsEnumerable().Select(row => row.Field<int>("color")).First());//十进制RGB数值转十六进制六位RGB并补0位例“C0C0C0”
|
||||
color.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(
|
||||
"#FF" + colorValue.Substring(4, 2) + colorValue.Substring(2, 2) + colorValue.Substring(0, 2)));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
private async void comboBoxDyelot_KeyDown(object sender, KeyEventArgs e)//料单输入
|
||||
{
|
||||
if (e.Key == Key.Enter && MainWindowViewModel.DyelotsDispenser)
|
||||
{
|
||||
string Connstr_SC;
|
||||
string DYELOTS_sql = "SELECT * FROM [dbo].[DYELOTS] WHERE Dyelot = '" + comboBoxDyelot.Text + "'";//单号查询语句
|
||||
try
|
||||
{
|
||||
int dat_c = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where Dyelot = '" + comboBoxDyelot.Text + "'", null).Tables[0].Rows.Count;//缓存
|
||||
|
||||
if (dat_c > 0)//查询料单是否可用
|
||||
{
|
||||
comboBoxDyelot.Text = null;
|
||||
MessageBox.Show(Properties.Resources.TPLHBU, "Dyelot", MessageBoxButton.OK, MessageBoxImage.Information); //连接成功提示是否保存
|
||||
return;
|
||||
}
|
||||
|
||||
if (MainWindowViewModel.SQMOD == "Windows Authentication")
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";Trusted_Connection=SSPI";
|
||||
}
|
||||
else
|
||||
{
|
||||
Connstr_SC = "server=" + MainWindowViewModel.SQLIP + ";database=" + MainWindowViewModel.SQLNAME + ";User ID=" + MainWindowViewModel.SQLUSER + ";Password=" + MainWindowViewModel.SQLPASWORD;
|
||||
}
|
||||
SqlConnection conn_SC = new SqlConnection(Connstr_SC);
|
||||
await conn_SC.OpenAsync(); //连接数据库
|
||||
SqlDataAdapter DYELOTS_data = new SqlDataAdapter(DYELOTS_sql, Connstr_SC); //查询
|
||||
conn_SC.Close();
|
||||
|
||||
DataTable ds = new DataTable();//载入信息
|
||||
DYELOTS_data.Fill(ds);
|
||||
TEXTColorNumber.Text = ds.AsEnumerable().Select(row => row.Field<string>("ColorNo")).First();
|
||||
TEXTColorName.Text = ds.AsEnumerable().Select(row => row.Field<string>("ColorName")).First();
|
||||
TEXTClient.Text = ds.AsEnumerable().Select(row => row.Field<string>("CustomerName")).First();
|
||||
TEXTClothSpecies.Text = ds.AsEnumerable().Select(row => row.Field<string>("FabricName")).First();
|
||||
TEXTClothWeight.Text = ds.AsEnumerable().Select(row => row.Field<Double>("TotalWeight")).First().ToString();
|
||||
TEXTBathRatio.Text = ds.AsEnumerable().Select(row => row.Field<string>("LiquidRatio")).First();
|
||||
TEXTTotal.Text = ds.AsEnumerable().Select(row => row.Field<string>("TotalVolume")).First();
|
||||
// comboBoxDyelot.Text = ds.AsEnumerable().Select(row => row.Field<string>("Dyelot")).First();
|
||||
|
||||
string machine_ = ds.AsEnumerable().Select(row => row.Field<string>("Machine")).First();//机台
|
||||
if (MainWindowViewModel.Machines.Select("Name ='" + machine_ + "'").Length == 0)
|
||||
{
|
||||
comboBoxMachine.Text = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
comboBoxMachine.Text = machine_;
|
||||
}
|
||||
string user_ = ds.AsEnumerable().Select(row => row.Field<string>("UserAccount")).First();//用户名
|
||||
if (!String.IsNullOrEmpty(user_)) TEXTUSER.Text = user_;
|
||||
comboBoxProgram.Text = ds.AsEnumerable().Select(row => row.Field<string>("Program")).First();
|
||||
|
||||
if (ds.AsEnumerable().Select(row => row.Field<int>("color")).First() > 0)//颜色
|
||||
{
|
||||
string colorValue = string.Format("{0:X6}", ds.AsEnumerable().Select(row => row.Field<int>("color")).First());//十进制RGB数值转十六进制六位RGB并补0位例“C0C0C0”
|
||||
color.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(
|
||||
"#FF" + colorValue.Substring(4, 2) + colorValue.Substring(2, 2) + colorValue.Substring(0, 2)));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogGing.ERRDATA(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private void Tb_KeyTEXTClothWeight(object sender, TextCompositionEventArgs e)//输入事件
|
||||
{
|
||||
Regex numbeRegex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
|
||||
e.Handled =
|
||||
!numbeRegex.IsMatch(
|
||||
TEXTClothWeight.Text.Insert(
|
||||
TEXTClothWeight.SelectionStart, e.Text));
|
||||
TEXTClothWeight.Text = TEXTClothWeight.Text.Trim();
|
||||
}
|
||||
private void Tb_KeyTEXTBathRatio(object sender, TextCompositionEventArgs e)//输入事件
|
||||
{
|
||||
Regex numbeRegex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
|
||||
e.Handled =
|
||||
!numbeRegex.IsMatch(
|
||||
TEXTBathRatio.Text.Insert(
|
||||
TEXTBathRatio.SelectionStart, e.Text));
|
||||
TEXTBathRatio.Text = TEXTBathRatio.Text.Trim();
|
||||
}
|
||||
private void Tb_KeyTEXTTotal(object sender, TextCompositionEventArgs e)//输入事件
|
||||
{
|
||||
Regex numbeRegex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
|
||||
e.Handled =
|
||||
!numbeRegex.IsMatch(
|
||||
TEXTTotal.Text.Insert(
|
||||
TEXTTotal.SelectionStart, e.Text));
|
||||
TEXTTotal.Text = TEXTTotal.Text.Trim();
|
||||
}
|
||||
private void color_color_MouseDoubleClick(object sender, MouseButtonEventArgs e)//颜色
|
||||
{
|
||||
System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog();//使用调色盘控件ColorDialog
|
||||
if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)//打开调色盘
|
||||
{
|
||||
|
||||
System.Drawing.Color DColor = colorDialog.Color;////获取选中色彩信息
|
||||
//System.Windows.Media.Color MColor = new System.Windows.Media.Color();//转换
|
||||
System.Windows.Media.Color MColor = System.Windows.Media.Color.FromArgb(DColor.A, DColor.R, DColor.G, DColor.B);//转换并配置ARGB参数
|
||||
color.Background = new SolidColorBrush(MColor);//ARGB参数输出至Color的背景色
|
||||
//string colorCode = string.Format("{0:X2}", DColor.B) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.R);//反向十六进制RGB
|
||||
//string colorCode = string.Format("{0:X2}", DColor.R) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.B);//正向十六进制RGB
|
||||
//ColorCode_SQL = Convert.ToInt32(colorCode, 16);//十六进制RGB转存储数值
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.DyelotView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
mc:Ignorable="d" Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatenConvert x:Key="StatenConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<DataGrid x:Name="Grid_data" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=99}"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
Margin="0,0,0,0" BorderBrush="#FFC9C9C9" FontSize="16" BorderThickness="5,5,5,5" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="25" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}" Width="80" IsReadOnly="True" />
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ProductCode}" Width="150" Binding="{Binding ProductCode}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ProductName}" Width="150" Binding="{Binding ProductName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ProductType}" Width="100" Binding="{Binding ProductType}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.State}" Width="80" Binding="{Binding Path=State,Converter={StaticResource StatenConvert}}" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Grams}" Width="150" Binding="{Binding Grams}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.DispenseGrams}" Width="150" Binding="{Binding Amount}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.DispenseEndTime}" Width="200" Binding="{Binding DispenseEndTime}" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,51 @@
|
||||
using DyeingComputer.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
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;
|
||||
using System.Windows.Threading;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// Whole.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DyelotView : UserControl
|
||||
{
|
||||
public DyelotView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
public void Dyelot(object dat)
|
||||
{
|
||||
DataTable dat_c = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where WorkOrder = '" + dat + "'", null).Tables[0];//缓存
|
||||
|
||||
Grid_data.ItemsSource = dat_c.DefaultView;
|
||||
}
|
||||
public void DyelotDatatable(DataTable dat)
|
||||
{
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -8,24 +8,31 @@
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="630" d:DesignWidth="1280" VerticalAlignment="Top">
|
||||
<Grid>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,10,0,0" x:Name="comboBoxCOM0" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged" FontSize="20" />
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,10,0,0" x:Name="comboBoxCOM0" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged0" FontSize="16" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,10,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Port}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,50,0,0" x:Name="comboBoxCOM1" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged" FontSize="20"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,90,0,0" x:Name="comboBoxCOM2" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged" FontSize="20"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,130,0,0" x:Name="comboBoxLanguage" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxLanguage_SelectionChanged" FontSize="20"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,50,0,0" x:Name="comboBoxCOM1" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged1" FontSize="16"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,90,0,0" x:Name="comboBoxCOM2" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxCOM_SelectionChanged2" FontSize="16"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,130,0,0" x:Name="comboBoxLanguage" VerticalAlignment="Top" Width="200" SelectionChanged="comboBoxLanguage_SelectionChanged" FontSize="16"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,130,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Language}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,170,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.SERVER}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,210,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Mode}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,250,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.SQL}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,290,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.USER}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,330,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Password}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox x:Name="TEXT_SQLIP" HorizontalAlignment="Left" Height="40" Margin="150,170,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="20"/>
|
||||
<TextBox x:Name="TEXT_SQLIP" HorizontalAlignment="Left" Height="40" Margin="150,170,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<ComboBox x:Name="TEXT_SQMOD" Height="40" Margin="150,210,0,0" VerticalAlignment="Top" Width="200" FontSize="16" HorizontalAlignment="Left"/>
|
||||
<TextBox x:Name="TEXT_SQLNAME" HorizontalAlignment="Left" Height="40" Margin="150,250,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="20"/>
|
||||
<TextBox x:Name="TEXT_SQLUSER" HorizontalAlignment="Left" Height="40" Margin="150,290,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="20"/>
|
||||
<TextBox x:Name="TEXT_SQLPASWORD" HorizontalAlignment="Left" Height="40" Margin="150,330,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="20"/>
|
||||
<TextBox x:Name="TEXT_SQLNAME" HorizontalAlignment="Left" Height="40" Margin="150,250,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<TextBox x:Name="TEXT_SQLUSER" HorizontalAlignment="Left" Height="40" Margin="150,290,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<TextBox x:Name="TEXT_SQLPASWORD" HorizontalAlignment="Left" Height="40" Margin="150,330,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<Button Content="{x:Static lang:Resources.Test}" HorizontalAlignment="Left" Height="35" Margin="270,375,0,0" VerticalAlignment="Top" Width="80" Click="Test_Click"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,375,0,0" x:Name="textlog" TextWrapping="Wrap" Text="------------" VerticalAlignment="Top" Width="140" FontSize="20"/>
|
||||
<CheckBox x:Name="dDispenser" Content="{x:Static lang:Resources.LinkDispenser}" HorizontalAlignment="Left" Height="35 " Margin="410,10,0,0" VerticalAlignment="Top" Width="200"
|
||||
Checked="dDispenser_Checked" Unchecked="dDispenser_Checked" FontSize="20"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,450,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Speed}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox x:Name="VOICE_V1" HorizontalAlignment="Left" Height="40" Margin="150,450,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,490,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Vol}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox x:Name="VOICE_V2" HorizontalAlignment="Left" Height="40" Margin="150,490,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="200" FontSize="16"/>
|
||||
<Button Content="{x:Static lang:Resources.VOICE}" HorizontalAlignment="Left" Height="35" Margin="270,535,0,0" VerticalAlignment="Top" Width="80" Click="VOICE_Click"/>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -1,8 +1,11 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using ScottPlot.TickGenerators.TimeUnits;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Speech.Synthesis;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
@@ -27,36 +30,56 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
InitializeComponent();
|
||||
// 获取所有可用串口端口,并添加到comboBoxCOM
|
||||
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
|
||||
ports.Append("COM");
|
||||
comboBoxCOM0.ItemsSource = ports;
|
||||
comboBoxCOM0.Text = Configini.IniReadvalue("SYS", "COM");
|
||||
comboBoxCOM0.Text = Configini.IniReadvalue("SYS", "COMP1");
|
||||
|
||||
comboBoxCOM1.ItemsSource = ports;
|
||||
comboBoxCOM1.Text = Configini.IniReadvalue("SYS", "COM");
|
||||
comboBoxCOM1.Text = Configini.IniReadvalue("SYS", "COMP2");
|
||||
|
||||
comboBoxCOM2.ItemsSource = ports;
|
||||
comboBoxCOM2.Text = Configini.IniReadvalue("SYS", "COM");
|
||||
comboBoxCOM2.Text = Configini.IniReadvalue("SYS", "COMP3");
|
||||
|
||||
string[] Language = {"en-US","zh-CN","zh-TW" };
|
||||
string[] SQMOD = { "Windows Authentication", "SQL SERVER"};
|
||||
comboBoxLanguage.ItemsSource = Language;
|
||||
TEXT_SQMOD.ItemsSource = SQMOD;
|
||||
try
|
||||
{
|
||||
comboBoxLanguage.Text = Configini.IniReadvalue("SYS", "Language");
|
||||
TEXT_SQLIP.Text = Configini.IniReadvalue("SQL_SERVER", "SQL1"); //读配置文件
|
||||
TEXT_SQLNAME.Text = Configini.IniReadvalue("SQL_SERVER", "SQL2");
|
||||
TEXT_SQMOD.Text = Configini.IniReadvalue("SQL_SERVER", "SQL3");
|
||||
TEXT_SQLUSER.Text = Configini.IniReadvalue("SQL_SERVER", "SQL4");
|
||||
TEXT_SQLPASWORD.Text = Configini.IniReadvalue("SQL_SERVER", "SQL5");
|
||||
dDispenser.IsChecked = Convert.ToBoolean(Configini.IniReadvalue("SYS", "DyelotsDispenser"));
|
||||
VOICE_V1.Text = Configini.IniReadvalue("VOICE", "V1");
|
||||
VOICE_V2.Text = Configini.IniReadvalue("VOICE", "V2");
|
||||
}
|
||||
catch (Exception ex) { LogGing.ERRDATA(ex); }
|
||||
}
|
||||
//调用配置文件
|
||||
private UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
private SpeechSynthesizer synth = new SpeechSynthesizer();//语音
|
||||
|
||||
private void comboBoxCOM_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
private void comboBoxCOM_SelectionChanged0(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
Configini.IniWritevalue("SYS", "COM0", comboBoxCOM0.SelectedValue.ToString());
|
||||
Configini.IniWritevalue("SYS", "COM1", comboBoxCOM1.SelectedValue.ToString());
|
||||
Configini.IniWritevalue("SYS", "COM2", comboBoxCOM2.SelectedValue.ToString());
|
||||
Configini.IniWritevalue("SYS", "COMP1", comboBoxCOM0.SelectedValue.ToString());
|
||||
// Configini.IniWritevalue("SYS", "COMP1", comboBoxCOM1.SelectedValue.ToString());
|
||||
// Configini.IniWritevalue("SYS", "COMP2", comboBoxCOM2.SelectedValue.ToString());
|
||||
}
|
||||
private void comboBoxCOM_SelectionChanged1(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
//Configini.IniWritevalue("SYS", "COMP0", comboBoxCOM0.SelectedValue.ToString());
|
||||
Configini.IniWritevalue("SYS", "COMP2", comboBoxCOM1.SelectedValue.ToString());
|
||||
// Configini.IniWritevalue("SYS", "COMP2", comboBoxCOM2.SelectedValue.ToString());
|
||||
}
|
||||
private void comboBoxCOM_SelectionChanged2(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
//Configini.IniWritevalue("SYS", "COMP0", comboBoxCOM0.SelectedValue.ToString());
|
||||
// Configini.IniWritevalue("SYS", "COMP1", comboBoxCOM1.SelectedValue.ToString());
|
||||
Configini.IniWritevalue("SYS", "COMP3", comboBoxCOM2.SelectedValue.ToString());
|
||||
}
|
||||
|
||||
private void comboBoxLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
Configini.IniWritevalue("SYS", "Language", comboBoxLanguage.SelectedValue.ToString());
|
||||
@@ -102,9 +125,27 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
MainWindowViewModel.SQLNAME = TEXT_SQLNAME.Text;
|
||||
MainWindowViewModel.SQMOD = TEXT_SQMOD.Text;
|
||||
MainWindowViewModel.SQLUSER = TEXT_SQLUSER.Text;
|
||||
MainWindowViewModel.SQLNAME = TEXT_SQLNAME.Text;
|
||||
MainWindowViewModel.SQL_LINK();//更新设定
|
||||
MainWindowViewModel.SQLPASWORD = TEXT_SQLPASWORD.Text;
|
||||
}
|
||||
}
|
||||
|
||||
private void dDispenser_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Configini.IniWritevalue("SYS", "DyelotsDispenser", dDispenser.IsChecked.ToString());
|
||||
MainWindowViewModel.DyelotsDispenser = (bool)dDispenser.IsChecked;
|
||||
}
|
||||
|
||||
private void VOICE_Click(object sender, RoutedEventArgs e)//语言测试按钮
|
||||
{
|
||||
try
|
||||
{
|
||||
synth.Rate = int.Parse(VOICE_V1.Text);
|
||||
synth.Volume = int.Parse(VOICE_V2.Text);
|
||||
synth.SpeakAsync(Properties.Resources.TESTVOICE);
|
||||
Configini.IniWritevalue("VOICE", "V1", VOICE_V1.Text);
|
||||
Configini.IniWritevalue("VOICE", "V2", VOICE_V2.Text);
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.LogView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="1200">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="600"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ComboBox Height="45" x:Name="comboBox_log" VerticalAlignment="Top" FontSize="20" Background="#FF90BEFF"
|
||||
DropDownClosed="comboBox_log_DropDownClosed" BorderBrush="#FF00204E" Padding="1,1,1,1"/>
|
||||
<DataGrid Grid.Column="0" x:Name="gridLog" Margin="0,50,0,0" HeadersVisibility ="Column"
|
||||
IsReadOnly="True" AutoGenerateColumns="False" MouseDoubleClick="DataGrid_gridLogClick" >
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="195" MaxWidth="195" MinWidth="195" CanUserReorder="False"/>
|
||||
<DataGridTextColumn Binding="{Binding Length}" Header="Volume" Width="50" MaxWidth="150" MinWidth="100" CanUserReorder="False"/>
|
||||
<DataGridTextColumn Binding="{Binding CreationTimeUtc}" Header="Creation time" Width="150" MaxWidth="150" MinWidth="150" CanUserReorder="False"/>
|
||||
<DataGridTextColumn Binding="{Binding LastWriteTimeUtc}" Header="Last modified time" Width="150" MaxWidth="150" MinWidth="150" CanUserReorder="False"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" Background="#FF00204E"/>
|
||||
<RichTextBox Grid.Column="2" x:Name="Logtext" IsReadOnly="True" Background="White" SelectionBrush="White"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,111 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
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 SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// LogView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class LogView : UserControl
|
||||
{
|
||||
string Log_time = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
DataTable logdataTable = new DataTable(); //建立RRODUCT缓存
|
||||
long TEXT_L;
|
||||
|
||||
public LogView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
comboBox_log.ItemsSource = new string[3] { "Log", "ERR", "Exchange" };
|
||||
comboBox_log.Text = "Log";
|
||||
|
||||
logdataTable.Columns.Add("Name", typeof(string));
|
||||
logdataTable.Columns.Add("Length", typeof(int));
|
||||
logdataTable.Columns.Add("CreationTimeUtc", typeof(string));
|
||||
logdataTable.Columns.Add("LastWriteTimeUtc", typeof(string));
|
||||
|
||||
LOG_file();
|
||||
}
|
||||
private void LOG_file()//建立列表
|
||||
{
|
||||
DirectoryInfo loginfo = new DirectoryInfo(System.Environment.CurrentDirectory + "\\"+comboBox_log.Text); //new文件夹
|
||||
logdataTable.Clear();
|
||||
foreach (var item in loginfo.GetFiles())
|
||||
{
|
||||
DataRow FileRow = logdataTable.NewRow();
|
||||
FileRow["Name"] = item.Name;
|
||||
FileRow["Length"] = item.Length / 1024;
|
||||
FileRow["CreationTimeUtc"] = item.CreationTimeUtc;
|
||||
FileRow["LastWriteTimeUtc"] = item.LastWriteTimeUtc;
|
||||
logdataTable.Rows.Add(FileRow);
|
||||
}
|
||||
logdataTable.DefaultView.Sort = "Name DESC";
|
||||
gridLog.ItemsSource = logdataTable.DefaultView.ToTable().DefaultView;
|
||||
}
|
||||
|
||||
private void DataGrid_gridLogClick(object sender, MouseButtonEventArgs e)//数据表双击事件
|
||||
{
|
||||
int rownum = gridLog.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
/*定位选中行及指定列单元格文本信息*/
|
||||
LOGDATA_file((gridLog.Columns[0].GetCellContent(gridLog.Items[rownum]) as TextBlock).Text.TrimEnd());//
|
||||
TEXT_L = long.Parse((gridLog.Columns[1].GetCellContent(gridLog.Items[rownum]) as TextBlock).Text.ToString()) *1024+1024;//
|
||||
}
|
||||
}
|
||||
|
||||
private async void LOGDATA_file(string dat) //读取文件显示到前端
|
||||
{
|
||||
Logtext.SelectAll();
|
||||
Logtext.Cut();
|
||||
Logtext.Document = new FlowDocument();
|
||||
string filePath = System.Environment.CurrentDirectory + "\\"+comboBox_log.Text+ "\\";
|
||||
try
|
||||
{
|
||||
Logtext.AppendText("Loading...");
|
||||
string log_ = null;
|
||||
string log_DAT = await Task<string>.Run(() =>
|
||||
{
|
||||
// 使用StreamReader读取文件
|
||||
using (StreamReader reader = new StreamReader(filePath + dat))
|
||||
{
|
||||
// 读取文件直到文件的末尾
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
// 添加文件的每一行到RichTextBox
|
||||
log_ = log_ + reader.ReadLine() + "\n";
|
||||
}
|
||||
}
|
||||
return log_;
|
||||
});
|
||||
Logtext.SelectAll();
|
||||
Logtext.Cut();
|
||||
Logtext.AppendText(log_DAT);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 处理可能发生的任何异常
|
||||
MessageBox.Show("Error reading file: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void comboBox_log_DropDownClosed(object sender, EventArgs e)
|
||||
{
|
||||
LOG_file();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,26 +63,31 @@
|
||||
<DataGridTextColumn Binding="{Binding IP}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding PORT}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Serial}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Baud}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Station}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding ID}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Model}" Width="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Type}" Width="0" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,10,0,0" x:Name="comboBoxMachine" VerticalAlignment="Top" Width="270" FontSize="20" IsEditable="True" />
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="150,10,0,0" x:Name="comboBoxMachine" VerticalAlignment="Top" Width="270" FontSize="20" IsEditable="True" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,10,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,50,0,0" x:Name="TextMachineGroup" VerticalAlignment="Top" Width="270" FontSize="20" MaxLines="1"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="150,50,0,0" x:Name="TextMachineGroup" VerticalAlignment="Top" Width="270" FontSize="20" MaxLines="1"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,50,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.MachineGroup}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="150,100,0,0" x:Name="IP" VerticalAlignment="Top" Width="200" FontSize="20" MaxLines="1"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="350,100,0,0" TextWrapping="Wrap" Text=":" VerticalAlignment="Top" Width="20" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="360,100,0,0" x:Name="PORT" VerticalAlignment="Top" Width="60" FontSize="20" MaxLines="1" Text="7789"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,100,0,0" TextWrapping="Wrap" Text="IP/PORT" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,150,0,0" x:Name="comboBoxCOM0" VerticalAlignment="Top" Width="200" FontSize="20" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,150,0,0" TextWrapping="Wrap" Text="COM" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="30" Margin="360,150,0,0" x:Name="BAUD" VerticalAlignment="Top" Width="60" FontSize="20" MaxLines="1" Text="57600"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="150,100,0,0" x:Name="comboBoxtype" VerticalAlignment="Top" Width="270" FontSize="20" IsEditable="True" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,100,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Type}" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="150,150,0,0" x:Name="IP" VerticalAlignment="Top" Width="200" FontSize="20" MaxLines="1"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="350,150,0,0" TextWrapping="Wrap" Text=":" VerticalAlignment="Top" Width="20" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,200,0,0" x:Name="textlog" TextWrapping="Wrap" Text="------------" VerticalAlignment="Top" Width="140" FontSize="20"/>
|
||||
<Button Content="{x:Static lang:Resources.Save}" HorizontalAlignment="Left" Height="35" Margin="250,200,0,5" VerticalAlignment="Top" Width="80" Click="Save_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Delete}" HorizontalAlignment="Left" Height="35" Margin="340,200,0,5" VerticalAlignment="Top" Width="80" Click="Delete_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Test}" HorizontalAlignment="Left" Height="35" Margin="160,200,50,5" VerticalAlignment="Top" Width="80" Click="Test_Click"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="360,150,0,0" x:Name="PORT" VerticalAlignment="Top" Width="60" FontSize="20" MaxLines="1" Text="7789"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,150,0,0" TextWrapping="Wrap" Text="IP/PORT" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="40" Margin="150,200,0,0" x:Name="comboBoxCOM0" VerticalAlignment="Top" Width="200" FontSize="20" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,200,0,0" TextWrapping="Wrap" Text="COM" VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<TextBox HorizontalAlignment="Left" Height="40" Margin="360,200,0,0" x:Name="Station" VerticalAlignment="Top" Width="60" FontSize="20" MaxLines="1" Text="00"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="350,200,0,0" TextWrapping="Wrap" Text=":" VerticalAlignment="Top" Width="20" FontSize="25"/>
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,250,0,0" x:Name="textlog" TextWrapping="Wrap" Text="------------" VerticalAlignment="Top" Width="140" FontSize="20"/>
|
||||
<Button Content="{x:Static lang:Resources.Save}" HorizontalAlignment="Left" Height="35" Margin="250,250,0,5" VerticalAlignment="Top" Width="80" Click="Save_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Delete}" HorizontalAlignment="Left" Height="35" Margin="340,250,0,5" VerticalAlignment="Top" Width="80" Click="Delete_Click"/>
|
||||
<Button Content="{x:Static lang:Resources.Test}" HorizontalAlignment="Left" Height="35" Margin="160,250,50,5" VerticalAlignment="Top" Width="80" Click="Test_Click"/>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using System.Runtime.Remoting.Metadata.W3cXsd2001;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
@@ -34,15 +35,19 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
InitializeComponent();
|
||||
|
||||
// 获取所有可用串口端口,并添加到comboBoxCOM
|
||||
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
|
||||
// string[] ports = System.IO.Ports.SerialPort.GetPortNames();
|
||||
comboBoxCOM0.ItemsSource = ports;
|
||||
comboBoxCOM0.Text = Configini.IniReadvalue("SYS", "COM");
|
||||
comboBoxMachine.ItemsSource = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field<string>("name")).ToList();//转换机台
|
||||
comboBoxtype.ItemsSource = type_;
|
||||
}
|
||||
|
||||
private SQLiteHelper SQLiteHelpers = null; //定义数据库
|
||||
private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径
|
||||
string[] ports = { "PORT1", "PORT2", "PORT3", "PORT4" };
|
||||
string[] type_ = { "828", "838" };
|
||||
string link_model = "838" ;
|
||||
private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
private string SYS_machines = null;
|
||||
//private string SYS_machines = null;
|
||||
int ID_;
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView;
|
||||
@@ -53,47 +58,129 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID_ = int.Parse((Griddata.Columns[7].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text);
|
||||
comboBoxMachine.Text = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
TextMachineGroup.Text = (Griddata.Columns[2].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
IP.Text = (Griddata.Columns[3].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
PORT.Text = (Griddata.Columns[4].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
comboBoxCOM0.Text = (Griddata.Columns[5].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
BAUD.Text = (Griddata.Columns[6].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
Station.Text = (Griddata.Columns[6].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
||||
comboBoxtype.Text = (Griddata.Columns[8].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;
|
||||
}
|
||||
}
|
||||
|
||||
private void Save_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(Station.Text)) Station.Text = "255";
|
||||
if (!string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
Dictionary<string, object> dr_new = new Dictionary<string, object>();//缓存函数
|
||||
dr_new.Add("Name", comboBoxMachine.Text);
|
||||
dr_new.Add("Groups", TextMachineGroup.Text);
|
||||
dr_new.Add("IP", IP.Text);
|
||||
dr_new.Add("PORT", PORT.Text);
|
||||
dr_new.Add("Serial", comboBoxCOM0.Text);
|
||||
dr_new.Add("Baud", BAUD.Text);
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
|
||||
if (SQLiteHelpers.ExecuteDataSet("select * from Machines where name ='" + comboBoxMachine.Text + "'", null).Tables[0].Rows.Count == 0)
|
||||
Dictionary<string, object> Machines_DAT = new Dictionary<string, object>();//缓存函数
|
||||
if (MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Machines where name ='" + comboBoxMachine.Text + "'", null).Tables[0].Rows.Count == 0)
|
||||
{
|
||||
SQLiteHelpers.InsertData("Machines", dr_new);
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow dat_ = MainWindowViewModel.Machines.NewRow();
|
||||
dat_.BeginEdit();
|
||||
dat_["Name"] = comboBoxMachine.Text;
|
||||
dat_["Groups"] = TextMachineGroup.Text;
|
||||
dat_["IP"] = IP.Text;
|
||||
dat_["PORT"] = PORT.Text;
|
||||
dat_["Serial"] = comboBoxCOM0.Text;
|
||||
dat_["Model"] = comboBoxtype.Text;
|
||||
dat_["Station"] = Station.Text;
|
||||
dat_["ID"] = 999;
|
||||
dat_["ERR"] = false;
|
||||
dat_["AUTO"] = false;
|
||||
dat_["CALL"] = false;
|
||||
dat_["LOCK"] = false;
|
||||
dat_["State"] = 800;
|
||||
dat_["Temperature"] = 0;
|
||||
dat_["WaterLevel"] = 0;
|
||||
dat_["WORK_RUN"] = -1;
|
||||
dat_["UserInfoStart"] = 900;
|
||||
if (comboBoxtype.Text.Contains(link_model))
|
||||
{
|
||||
dat_["Desktop"] = true;
|
||||
dat_["Type"] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
SQLiteHelpers.Update("Machines",dr_new,"name='"+comboBoxMachine.Text+"'",null);
|
||||
dat_["Desktop"] = false;
|
||||
dat_["Type"] = false;
|
||||
}
|
||||
dat_.EndEdit();
|
||||
MainWindowViewModel.Machines.Rows.Add(dat_);
|
||||
DatSteps(MainWindowViewModel.Machines);
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("Machines", null, null);//
|
||||
for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++)
|
||||
{
|
||||
Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]);
|
||||
Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]);
|
||||
Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]);
|
||||
Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]);
|
||||
Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]);
|
||||
Machines_DAT.Add("Station", MainWindowViewModel.Machines.Rows[x]["Station"]);
|
||||
Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]);
|
||||
Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]);
|
||||
Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]);
|
||||
Machines_DAT.Add("Type", MainWindowViewModel.Machines.Rows[x]["Type"]);
|
||||
Machines_DAT.Add("Model", MainWindowViewModel.Machines.Rows[x]["Model"]);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入
|
||||
Machines_DAT.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
DataRow dr = MainWindowViewModel.Machines.Rows[ID_];
|
||||
dr.BeginEdit();
|
||||
dr["Name"] = comboBoxMachine.Text;
|
||||
dr["Groups"] = TextMachineGroup.Text;
|
||||
dr["IP"] = IP.Text;
|
||||
dr["PORT"] = PORT.Text;
|
||||
dr["Serial"] = comboBoxCOM0.Text;
|
||||
dr["Model"] = comboBoxtype.Text;
|
||||
dr["Station"] = Station.Text;
|
||||
if (comboBoxtype.Text.Contains(link_model))
|
||||
{
|
||||
dr["Desktop"] = true;
|
||||
dr["Type"] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dr["Desktop"] = false;
|
||||
dr["Type"] = false;
|
||||
}
|
||||
dr.EndEdit();
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("Machines", null, null);//
|
||||
for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++)
|
||||
{
|
||||
Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]);
|
||||
Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]);
|
||||
Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]);
|
||||
Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]);
|
||||
Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]);
|
||||
Machines_DAT.Add("Station", MainWindowViewModel.Machines.Rows[x]["Station"]);
|
||||
Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]);
|
||||
Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]);
|
||||
Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]);
|
||||
Machines_DAT.Add("Type", MainWindowViewModel.Machines.Rows[x]["Type"]);
|
||||
Machines_DAT.Add("Model", MainWindowViewModel.Machines.Rows[x]["Model"]);
|
||||
Machines_DAT.Add("LOCK", "FALSE");
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入
|
||||
Machines_DAT.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
MainWindowViewModel.Machines = SQLiteHelpers.ExecuteDataSet("select * from Machines Order by id", null).Tables[0]; //读取表写入缓存
|
||||
SQLiteHelpers.Close();
|
||||
Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView;
|
||||
comboBoxMachine.Text = null;
|
||||
TextMachineGroup.Text = null;
|
||||
IP.Text = null;
|
||||
PORT.Text = "7789";
|
||||
comboBoxCOM0.Text = null;
|
||||
BAUD.Text = "57600";
|
||||
Station.Text = "00";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -101,18 +188,37 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
private void Delete_Click(object sender, RoutedEventArgs e)
|
||||
private void Delete_Click(object sender, RoutedEventArgs e)//删除
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
MessageBoxResult vr = System.Windows.MessageBox.Show(Properties.Resources.Delete + comboBoxMachine.Text, "SCCM", MessageBoxButton.OKCancel, MessageBoxImage.Question);
|
||||
if (vr == MessageBoxResult.OK) // 如果是确定,就执行下面代码
|
||||
{
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.Delete("Machines", "Name='" + comboBoxMachine.Text + "'", null);
|
||||
MainWindowViewModel.Machines = SQLiteHelpers.ExecuteDataSet("select * from Machines Order by id", null).Tables[0]; //读取表写入缓存
|
||||
SQLiteHelpers.Close();
|
||||
lock (MainWindowViewModel.Machines.Rows.SyncRoot)
|
||||
{
|
||||
MainWindowViewModel.Machines.Rows.RemoveAt(ID_ - 1);
|
||||
DatSteps(MainWindowViewModel.Machines);
|
||||
}
|
||||
Dictionary<string, object> Machines_DAT = new Dictionary<string, object>();//缓存函数
|
||||
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("Machines", null, null);//
|
||||
for (int x = 0; x < MainWindowViewModel.Machines.Rows.Count; x++)
|
||||
{
|
||||
Machines_DAT.Add("ID", MainWindowViewModel.Machines.Rows[x]["ID"]);
|
||||
Machines_DAT.Add("Name", MainWindowViewModel.Machines.Rows[x]["Name"]);
|
||||
Machines_DAT.Add("IP", MainWindowViewModel.Machines.Rows[x]["IP"]);
|
||||
Machines_DAT.Add("PORT", MainWindowViewModel.Machines.Rows[x]["PORT"]);
|
||||
Machines_DAT.Add("Serial", MainWindowViewModel.Machines.Rows[x]["Serial"]);
|
||||
Machines_DAT.Add("Station", MainWindowViewModel.Machines.Rows[x]["Station"]);
|
||||
Machines_DAT.Add("Groups", MainWindowViewModel.Machines.Rows[x]["Groups"]);
|
||||
Machines_DAT.Add("Desktop", MainWindowViewModel.Machines.Rows[x]["Desktop"]);
|
||||
Machines_DAT.Add("Dispense", MainWindowViewModel.Machines.Rows[x]["Dispense"]);
|
||||
Machines_DAT.Add("LOCK", "FALSE");
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("Machines", Machines_DAT);//行插入
|
||||
Machines_DAT.Clear();
|
||||
}
|
||||
|
||||
Griddata.ItemsSource = MainWindowViewModel.Machines.DefaultView;
|
||||
comboBoxMachine.Text = null;
|
||||
}
|
||||
@@ -123,14 +229,31 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
public void DatSteps(DataTable db)//行号刷新
|
||||
{
|
||||
int a = db.Rows.Count;
|
||||
for (int i = 0; i < a; i++)
|
||||
{
|
||||
DataRow dr = db.Rows[i];
|
||||
dr.BeginEdit();
|
||||
dr["ID"] = i;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
private void Test_Click(object sender, RoutedEventArgs e)//测试按钮
|
||||
{
|
||||
|
||||
if (comboBoxtype.Text.Contains(link_model))
|
||||
{//网络
|
||||
if (!string.IsNullOrEmpty(IP.Text) && !string.IsNullOrEmpty(PORT.Text))
|
||||
{
|
||||
textlog.Text = "TEST";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255));
|
||||
//------------使用ping类------
|
||||
string host = IP.Text;
|
||||
try
|
||||
{
|
||||
Ping p1 = new Ping();
|
||||
PingReply reply = p1.Send(host); //发送主机名或Ip地址
|
||||
//StringBuilder sbuilder;
|
||||
@@ -163,6 +286,12 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
textlog.Text = "No links";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(comboBoxCOM0.Text))
|
||||
{
|
||||
|
||||
@@ -174,5 +303,43 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{//串口
|
||||
if (!string.IsNullOrEmpty(comboBoxCOM0.Text) && !string.IsNullOrEmpty(Station.Text))
|
||||
{
|
||||
textlog.Text = "TEST";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255));
|
||||
//------------使用ping类------
|
||||
string host = IP.Text;
|
||||
Ping p1 = new Ping();
|
||||
PingReply reply = p1.Send(host); //发送主机名或Ip地址
|
||||
//StringBuilder sbuilder;
|
||||
if (reply.Status == IPStatus.Success)
|
||||
{
|
||||
try
|
||||
{
|
||||
textlog.Text = "Link succeed";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(0, 255, 0));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
textlog.Text = "Link failed";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
textlog.Text = "No links";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
textlog.Text = "Invalid";
|
||||
textlog.Foreground = new SolidColorBrush(Color.FromRgb(255, 0, 0));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,452 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.MachinesView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
xmlns:localUserClass="clr-namespace:DyeingComputer.UserClass"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
d:DataContext="{d:DesignInstance Type=local:MachinesView}"
|
||||
mc:Ignorable="d"
|
||||
Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1200">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:BoolToVisidilityConvert x:Key="BoolToVisidilityConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
<ConvertMoels:BoolRBConvert x:Key="BoolRBConvert"/>
|
||||
<ConvertMoels:IORBConvert x:Key="IORBConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="60"/>
|
||||
</Grid.RowDefinitions>
|
||||
<DataGrid Grid.Row="0" x:Name="Griddata" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=999}"
|
||||
ItemsSource="{Binding Path=TechnologicalMachine_View,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
Background="White" GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True"
|
||||
AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalAlignment="Left" Width="250" MouseDoubleClick="Griddata_MouseDoubleClick">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Resources>
|
||||
<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}">
|
||||
<Setter Property="Focusable" Value="False"/>
|
||||
<Setter Property="Background" Value="#FFFFFFFF"/>
|
||||
<Setter Property="BorderBrush" Value="#FFFFFFFF"/>
|
||||
<Setter Property="Foreground" Value="#000000"/>
|
||||
</Style>
|
||||
</DataGrid.Resources>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTemplateColumn Width="100" Header="{x:Static lang:Resources.State}">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<UniformGrid VerticalAlignment="Bottom" HorizontalAlignment="Left">
|
||||
<Border>
|
||||
<Grid>
|
||||
<StackPanel Width="100" Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Width="25" Height="30"
|
||||
Kind="{Binding Path=State,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
<materialDesign:PackIcon Width="25" Height="30" Kind="Lock"
|
||||
Visibility="{Binding Path=LOCK,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Machine}" Binding="{Binding Name}" Width="150" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<Grid Grid.Row="0" Margin="250,0,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="0"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<ContentControl Grid.Row="0" x:Name="machineView"/>
|
||||
<GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" Background="#FF00204E"/>
|
||||
<Grid Grid.Row="2" x:Name="LOG_GRID" Visibility="Collapsed">
|
||||
<DataGrid x:Name="LOG_Grid" AlternationCount="2" Margin="0,0,0,0"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" Grid.ColumnSpan="2"
|
||||
Background="White" SelectionMode="Single" FontSize="15" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" x:Name="SET_GRID" Visibility="Collapsed">
|
||||
<DataGrid x:Name="SET_Grid" AlternationCount="2" Margin="0,0,0,0" d:ItemsSource="{d:SampleData ItemCount=99}" AutoGenerateColumns="False"
|
||||
ItemsSource="{Binding Path=Paramete_Set,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" Grid.ColumnSpan="2" AllowDrop="False"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" InputMethod.IsInputMethodEnabled ="False"
|
||||
CellEditEnding="SET_Grid_CellEditEnding" BeginningEdit="SET_Grid_BeginningEdit" Background="White" SelectionMode="Single" FontSize="15" Cursor="AppStarting" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Type}" Width="200" Binding="{Binding Category}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="200" Binding="{Binding ParameterID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="*" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<localUserClass:NumericTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="200" Binding="{Binding Value}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" x:Name="SYS_GRID" Visibility="Collapsed">
|
||||
<DataGrid x:Name="SYS_Grid" AlternationCount="2" Margin="0,0,0,0" d:ItemsSource="{d:SampleData ItemCount=99}" AutoGenerateColumns="False"
|
||||
ItemsSource="{Binding Path=Sys_Set,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" Grid.ColumnSpan="2" AllowDrop="False"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" InputMethod.IsInputMethodEnabled ="False"
|
||||
CellEditEnding="SYS_Grid_CellEditEnding" BeginningEdit="SYS_Grid_BeginningEdit" Background="White" SelectionMode="Single" FontSize="15" Cursor="AppStarting" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Type}" Width="200" Binding="{Binding Category}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="200" Binding="{Binding ParameterID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="*" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="400" Binding="{Binding Value}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" x:Name="IO_GRID" Visibility="Visible">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<DataGrid x:Name="Grid_D" AlternationCount="2" SelectionChanged="Grid_D_SelectionChanged"
|
||||
CellEditEnding="Grid_D_CellEditEnding" BeginningEdit="Grid_D_BeginningEdit" d:ItemsSource="{d:SampleData ItemCount=512}"
|
||||
Margin="0,0,0,0" ItemsSource="{Binding Path=SYSData_D,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" AllowDrop="False"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" Grid.Column="0"
|
||||
Background="White" SelectionMode="Single" FontSize="15" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="DIO" Width="100" Binding="{Binding ID}" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=type,Converter={StaticResource IORBConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="PLC" Width="100" Binding="{Binding PLC}">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=type,Converter={StaticResource IORBConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="NAME" Width="*" Binding="{Binding IOName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="info" Width="100" Binding="{Binding DIO}" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Path= DIO}" Value="False">
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Path= DIO}" Value="True">
|
||||
<Setter Property="Foreground" Value="Red"></Setter>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<DataGrid x:Name="Grid_A" AlternationCount="2" SelectionChanged="Grid_A_SelectionChanged"
|
||||
CellEditEnding="Grid_A_CellEditEnding" BeginningEdit="Grid_A_BeginningEdit" d:ItemsSource="{d:SampleData ItemCount=256}"
|
||||
Margin="0,0,0,0" ItemsSource="{Binding Path=SYSData_A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" AllowDrop="False"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" Grid.Column="1"
|
||||
Background="White" SelectionMode="Single" FontSize="15" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="AIO" Width="100" Binding="{Binding ID}" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=type,Converter={StaticResource IORBConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="PLC" Width="100" Binding="{Binding PLC}">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=type,Converter={StaticResource IORBConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="NAME" Width="*" Binding="{Binding IOName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="info" Width="100" Binding="{Binding AIO}" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<DataGrid x:Name="Grid_M" AlternationCount="2" IsReadOnly="True" SelectionChanged="Grid_M_SelectionChanged" d:ItemsSource="{d:SampleData ItemCount=200}"
|
||||
Margin="0,0,0,0" ItemsSource="{Binding Path=SYSData_M,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" GridLinesVisibility="All" BorderBrush="#CCCCCC"
|
||||
BorderThickness="1,1,1,1" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" AllowDrop="False"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" Grid.Column="3"
|
||||
Background="White" SelectionMode="Single" FontSize="15" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="ID" Width="100" Binding="{Binding ID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="NAME" Width="*" Binding="{Binding IOName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="info" Width="100" Binding="{Binding Value}" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<StackPanel Grid.Row="2" x:Name="mt" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="0,0,0,0" >
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_ArrowLeftRight">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="ArrowLeftRight" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.InOut}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_VideoHomeSystem">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="VideoHomeSystem" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.SysSet}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Dharmachakra">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Dharmachakra" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.ParameterSet}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_LOG">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="MathLog" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.log}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="2" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="0,0,0,0" Width="400" HorizontalAlignment="Right">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="ChatProcessing" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Machine}" FontSize="20" VerticalAlignment="Center" Margin="20 10" Foreground="White" />
|
||||
<TextBlock x:Name="MAC_name" FontSize="20" VerticalAlignment="Center" Margin="20 10" Foreground="White" FontWeight="Bold" />
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,617 @@
|
||||
using SkiaSharp;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using System.Reflection;
|
||||
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;
|
||||
using System.Windows.Threading;
|
||||
using TouchSocket.Core;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.ViewModel.MainWindowViewModel;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// MachinesSet.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class MachinesView : UserControl, INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
protected virtual void OnPropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
public void RaisePropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
{
|
||||
if (propertyName != null)
|
||||
{
|
||||
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
public MachinesView()
|
||||
{
|
||||
DataContext = this;
|
||||
InitializeComponent();
|
||||
CountDown();
|
||||
}
|
||||
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
string machine;
|
||||
int LOG_ = 0;
|
||||
public static DataTable LOG_dataTable = new DataTable();
|
||||
private void Griddata_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
machine = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
MAC_name.Text= machine;
|
||||
|
||||
MainWindowViewModel.dt_d.Clear();
|
||||
MainWindowViewModel.dt_a.Clear();
|
||||
MainWindowViewModel.dt_m.Clear();
|
||||
MainWindowViewModel.dt_ParameterSet.Clear();
|
||||
MainWindowViewModel.dt_SysSet.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
private void ListViewItem_ArrowLeftRight(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
LOG_GRID.Visibility = Visibility.Collapsed;
|
||||
IO_GRID.Visibility = Visibility.Visible;
|
||||
SYS_GRID.Visibility = Visibility.Collapsed;
|
||||
SET_GRID.Visibility = Visibility.Collapsed;
|
||||
view = 0;
|
||||
}
|
||||
private void ListViewItem_VideoHomeSystem(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
LOG_GRID.Visibility = Visibility.Collapsed;
|
||||
IO_GRID.Visibility = Visibility.Collapsed;
|
||||
SYS_GRID.Visibility = Visibility.Visible;
|
||||
SET_GRID.Visibility = Visibility.Collapsed;
|
||||
view = 2;
|
||||
}
|
||||
private void ListViewItem_LOG(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (LOG_ >= 3) { LOG_ = 0; }
|
||||
else
|
||||
{ LOG_++; }
|
||||
|
||||
LOG_GRID.Visibility = Visibility.Visible;
|
||||
IO_GRID.Visibility = Visibility.Collapsed;
|
||||
SYS_GRID.Visibility = Visibility.Collapsed;
|
||||
SET_GRID.Visibility = Visibility.Collapsed;
|
||||
view = 3;
|
||||
LOG_dataTable.Clear();
|
||||
Dictionary<string, object> dat_859 =new Dictionary<string, object>();
|
||||
|
||||
if (LOG_ == 0)
|
||||
{
|
||||
MAC_name.Text = machine+ "(SERVER)";
|
||||
dat_859.Add("INSTRUCTION", "SERVER");
|
||||
dat_859.Add("TIME_S", DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
dat_859.Add("TIME_E", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
}
|
||||
else if (LOG_ == 1)
|
||||
{
|
||||
MAC_name.Text = machine + "(OperationLog)";
|
||||
dat_859.Add("INSTRUCTION", "OperationLog");
|
||||
dat_859.Add("TIME_S", DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
dat_859.Add("TIME_E", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
}
|
||||
else if (LOG_ == 2)
|
||||
{
|
||||
MAC_name.Text = machine + "(IOLog)";
|
||||
dat_859.Add("INSTRUCTION", "IOLog");
|
||||
dat_859.Add("TIME_S", DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
dat_859.Add("TIME_E", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
}
|
||||
else
|
||||
{
|
||||
MAC_name.Text = machine + "(ERRLog)";
|
||||
dat_859.Add("INSTRUCTION", "ERRLog");
|
||||
dat_859.Add("TIME_S", DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
dat_859.Add("TIME_E", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(machine))
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
||||
int State_ = Convert.ToInt16(drEmployee.Field<object>("State"));
|
||||
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
||||
if ((State_ == 101) || (State_ == 201) || (State_ == 202) || (State_ == 309))//获得细节信息
|
||||
{
|
||||
if (drEmployee.Field<bool>("Type"))//
|
||||
{//网络
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC859" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
+ dat_859.ToJsonString()
|
||||
});
|
||||
}
|
||||
else
|
||||
{//串口
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void ListViewItem_Dharmachakra(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
LOG_GRID.Visibility = Visibility.Collapsed;
|
||||
IO_GRID.Visibility = Visibility.Collapsed;
|
||||
SYS_GRID.Visibility = Visibility.Collapsed;
|
||||
SET_GRID.Visibility = Visibility.Visible;
|
||||
view = 1;
|
||||
}
|
||||
private void Grid_D_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Grid_A_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Grid_M_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Grid_D_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
|
||||
{
|
||||
string ID;
|
||||
string newValue = (e.EditingElement as TextBox).Text;//获得输入单元格信息
|
||||
|
||||
int rownum = Grid_D.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_D.Columns[0].GetCellContent(Grid_D.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
|
||||
Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数
|
||||
datagrid_v.Add("PLC", newValue);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("IOName", datagrid_v, "ID ='" + ID + "'", null);//更新
|
||||
}
|
||||
IO_data();//重新获得io表
|
||||
D_view = true;
|
||||
}
|
||||
|
||||
private void Grid_D_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
|
||||
{
|
||||
D_view = false;
|
||||
}
|
||||
|
||||
private void Grid_A_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
|
||||
{
|
||||
string ID;
|
||||
string newValue = (e.EditingElement as TextBox).Text;//获得输入单元格信息
|
||||
|
||||
int rownum = Grid_A.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_A.Columns[0].GetCellContent(Grid_A.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
|
||||
Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数
|
||||
datagrid_v.Add("PLC", newValue);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("IOName", datagrid_v, "ID ='" + ID + "'", null);//更新
|
||||
}
|
||||
A_view = true;
|
||||
}
|
||||
|
||||
private void Grid_A_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
|
||||
{
|
||||
A_view = false;
|
||||
}
|
||||
|
||||
private void SYS_Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
|
||||
{
|
||||
string newValue = (e.EditingElement as TextBox).Text;//获得输入单元格信息
|
||||
int rownum = SYS_Grid.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
string ID = (SYS_Grid.Columns[1].GetCellContent(SYS_Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
|
||||
Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数
|
||||
datagrid_v.Add("Value", newValue);
|
||||
datagrid_v.Add("ID", ID);
|
||||
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
||||
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
||||
if (drEmployee.Field<bool>("Type"))//
|
||||
{//网络
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC862" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + datagrid_v.ToJsonString()
|
||||
});//发送862指令修改系统设置
|
||||
}
|
||||
else
|
||||
{//串口
|
||||
|
||||
}
|
||||
}
|
||||
SysSet_view = true;
|
||||
}
|
||||
|
||||
private void SET_Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
|
||||
{
|
||||
string newValue = (e.EditingElement as TextBox).Text;//获得输入单元格信息
|
||||
int rownum = SET_Grid.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
string ID = (SET_Grid.Columns[1].GetCellContent(SET_Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
|
||||
Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数
|
||||
datagrid_v.Add("Value", newValue);
|
||||
datagrid_v.Add("ID", ID);
|
||||
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
||||
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
||||
if (drEmployee.Field<bool>("Type"))//
|
||||
{//网络
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC861" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + datagrid_v.ToJsonString()
|
||||
});//发送861指令修改程序设置
|
||||
}
|
||||
else
|
||||
{//串口
|
||||
|
||||
}
|
||||
}
|
||||
ParameterSet_view = true;
|
||||
}
|
||||
|
||||
private void SYS_Grid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
|
||||
{
|
||||
SysSet_view = false;
|
||||
}
|
||||
|
||||
private void SET_Grid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
|
||||
{
|
||||
ParameterSet_view = false;
|
||||
}
|
||||
|
||||
private int view = 0;
|
||||
private void IO_data()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(machine))
|
||||
{
|
||||
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
||||
|
||||
if (drEmployee.Field<bool>("Type"))//
|
||||
{//网络
|
||||
int State_ = Convert.ToInt16(drEmployee.Field<object>("State"));
|
||||
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
||||
if ((State_ == 101) || (State_ == 201) || (State_ == 202) || (State_ == 309))//获得细节信息
|
||||
{
|
||||
if (view == 0)
|
||||
{
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC851" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
});
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC852" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
});
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC853" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
});
|
||||
}
|
||||
else if (view == 1)
|
||||
{
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC854" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
});
|
||||
}
|
||||
else if (view == 2)
|
||||
{
|
||||
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
||||
{
|
||||
ID = index,
|
||||
DAT = "SC855" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{//串口
|
||||
int State_ = Convert.ToInt16(drEmployee.Field<object>("State"));
|
||||
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
||||
if ((State_ == 101) || (State_ == 201) || (State_ == 202) || (State_ == 309))//获得细节信息
|
||||
{
|
||||
if (view == 0)
|
||||
{
|
||||
|
||||
}
|
||||
else if (view == 1)
|
||||
{
|
||||
|
||||
}
|
||||
else if (view == 2)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
|
||||
{
|
||||
Interval = TimeSpan.FromSeconds(1.5)//秒
|
||||
};
|
||||
timer1s.Tick += Tick_Event_1S;
|
||||
timer1s.Start();
|
||||
}//时间周期初始化
|
||||
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
{
|
||||
IO_data();
|
||||
DATA_view();
|
||||
if (LOG_dataTable.Rows.Count > 0) {
|
||||
LOG_Grid.ItemsSource = LOG_dataTable.DefaultView;
|
||||
// LOG_dataTable.Clear();
|
||||
}
|
||||
}
|
||||
private async void DATA_view()//IO显示
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dt_m.Rows.Count >= 0)
|
||||
{
|
||||
SYSData_M = ToObservableCollection<DATA_M>(dt_m);
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
if (dt_a.Rows.Count >= 0)
|
||||
{
|
||||
if ((bool)A_view) SYSData_A = ToObservableCollection<DATA_A>(dt_a);
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
if (dt_d.Rows.Count >= 0)
|
||||
{
|
||||
if ((bool)D_view) SYSData_D = ToObservableCollection<DATA_D>(dt_d);
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
TechnologicalMachine_View = ToObservableCollection<TechnologicalM>(Machines);
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
if (dt_ParameterSet.Rows.Count >= 0)
|
||||
{
|
||||
if (ParameterSet_view) Paramete_Set = ToObservableCollection<ParameterSet>(dt_ParameterSet);
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
try
|
||||
{
|
||||
if (dt_SysSet.Rows.Count >= 0)
|
||||
{
|
||||
if (SysSet_view) Sys_Set = ToObservableCollection<SysSet>(dt_SysSet);
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
});
|
||||
}
|
||||
|
||||
bool A_view =true;
|
||||
bool D_view =true;
|
||||
bool ParameterSet_view = true;
|
||||
bool SysSet_view = true;
|
||||
ObservableCollection<DATA_A> sysData_A = new ObservableCollection<DATA_A>();
|
||||
ObservableCollection<DATA_D> sysData_D = new ObservableCollection<DATA_D>();
|
||||
ObservableCollection<DATA_M> sysData_M = new ObservableCollection<DATA_M>();
|
||||
ObservableCollection<ParameterSet> paramete_Set = new ObservableCollection<ParameterSet>();
|
||||
ObservableCollection<SysSet> sys_Set = new ObservableCollection<SysSet>();
|
||||
ObservableCollection<TechnologicalM> technologicalMachine_View = new ObservableCollection<TechnologicalM>();
|
||||
public ObservableCollection<DATA_A> SYSData_A
|
||||
{
|
||||
|
||||
get { return sysData_A; }
|
||||
set
|
||||
{
|
||||
sysData_A = value;
|
||||
RaisePropertyChanged("SYSData_A");
|
||||
}
|
||||
}
|
||||
public ObservableCollection<DATA_D> SYSData_D
|
||||
{
|
||||
|
||||
get { return sysData_D; }
|
||||
set
|
||||
{
|
||||
sysData_D = value;
|
||||
RaisePropertyChanged("SYSData_D");
|
||||
}
|
||||
}
|
||||
public ObservableCollection<DATA_M> SYSData_M
|
||||
{
|
||||
get { return sysData_M; }
|
||||
set
|
||||
{
|
||||
sysData_M = value;
|
||||
RaisePropertyChanged("SYSData_M");
|
||||
}
|
||||
}
|
||||
public ObservableCollection<TechnologicalM> TechnologicalMachine_View
|
||||
{
|
||||
get { return technologicalMachine_View; }
|
||||
set
|
||||
{
|
||||
technologicalMachine_View = value;
|
||||
RaisePropertyChanged("TechnologicalMachine_View");
|
||||
}
|
||||
}
|
||||
public ObservableCollection<ParameterSet> Paramete_Set
|
||||
{
|
||||
get { return paramete_Set; }
|
||||
set
|
||||
{
|
||||
paramete_Set = value;
|
||||
RaisePropertyChanged("Paramete_Set");
|
||||
}
|
||||
}
|
||||
public ObservableCollection<SysSet> Sys_Set
|
||||
{
|
||||
get { return sys_Set; }
|
||||
set
|
||||
{
|
||||
sys_Set = value;
|
||||
RaisePropertyChanged("Sys_Set");
|
||||
}
|
||||
}
|
||||
public class DATA_A
|
||||
{
|
||||
public string IOName { get; set; }
|
||||
public int AIO { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string PLC { get; set; }
|
||||
public string type { get; set; }
|
||||
}
|
||||
public class DATA_D
|
||||
{
|
||||
public string IOName { get; set; }
|
||||
public bool DIO { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string PLC { get; set; }
|
||||
public string type { get; set; }
|
||||
}
|
||||
public class DATA_M
|
||||
{
|
||||
public string IOName { get; set; }
|
||||
public double Value { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string PLC { get; set; }
|
||||
public string type { get; set; }
|
||||
}
|
||||
public class TechnologicalM
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string WorkOrder { get; set; }
|
||||
public string Dyelot { get; set; }
|
||||
public string Temperature { get; set; }
|
||||
public string WaterLevel { get; set; }
|
||||
public string Process { get; set; }
|
||||
public string Step { get; set; }
|
||||
public string Message { get; set; }
|
||||
public string State { get; set; }
|
||||
public string LOCK { get; set; }
|
||||
|
||||
}
|
||||
public class ParameterSet
|
||||
{
|
||||
public string Category { get; set; }
|
||||
public string ParameterID { get; set; }
|
||||
public string ParameterName { get; set; }
|
||||
public string Value { get; set; }
|
||||
|
||||
}
|
||||
public class SysSet
|
||||
{
|
||||
public string Category { get; set; }
|
||||
public string ParameterID { get; set; }
|
||||
public string ParameterName { get; set; }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
public ObservableCollection<T> ToObservableCollection<T>(DataTable dt) where T : class, new()
|
||||
{
|
||||
try
|
||||
{
|
||||
Type t = typeof(T);
|
||||
PropertyInfo[] propertys = t.GetProperties();
|
||||
ObservableCollection<T> lst = new ObservableCollection<T>();
|
||||
string typeName = string.Empty;
|
||||
foreach (DataRow dr in dt.Rows)
|
||||
{
|
||||
T entity = new T();
|
||||
foreach (PropertyInfo pi in propertys)
|
||||
{
|
||||
typeName = pi.Name;
|
||||
if (dt.Columns.Contains(typeName))
|
||||
{
|
||||
if (!pi.CanWrite) continue;
|
||||
object value = dr[typeName];
|
||||
if (value == DBNull.Value) continue;
|
||||
if (pi.PropertyType == typeof(string))
|
||||
{
|
||||
pi.SetValue(entity, value.ToString(), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int?))
|
||||
{
|
||||
pi.SetValue(entity, int.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(DateTime?) || pi.PropertyType == typeof(DateTime))
|
||||
{
|
||||
pi.SetValue(entity, DateTime.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(float))
|
||||
{
|
||||
pi.SetValue(entity, float.Parse(value.ToString()), null);
|
||||
}
|
||||
else if (pi.PropertyType == typeof(double))
|
||||
{
|
||||
pi.SetValue(entity, double.Parse(value.ToString()), null);
|
||||
}
|
||||
else
|
||||
{
|
||||
pi.SetValue(entity, value, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
lst.Add(entity);
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
catch (Exception) { return null; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,28 +6,49 @@
|
||||
xmlns:local="clr-namespace:SunlightCentralizedControlManagement_SCCM_.View"
|
||||
xmlns:lang="clr-namespace:SunlightCentralizedControlManagement_SCCM_.Properties"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:rdp="clr-namespace:VncSharpWpf;assembly=VncSharpWpf"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
|
||||
xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
d:DataContext="{d:DesignInstance Type=local:MonitorView}"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="1000" d:DesignWidth="1900">
|
||||
<Grid Cursor="">
|
||||
<Grid.ColumnDefinitions/>
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:BoolToVisidilityConvert x:Key="BoolToVisidilityConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
<ContextMenu x:Key="PersoncontextMenu">
|
||||
<MenuItem Header="{x:Static lang:Resources._lock}" Click="MenuItem_LOCK_XML"/>
|
||||
<MenuItem Header="{x:Static lang:Resources._Auto}" Click="MenuItem_AUTO_XML"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Stop}" Click="MenuItem_Stop_XML"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Start}" Click="MenuItem_Start_XML"/>
|
||||
</ContextMenu>
|
||||
<ContextMenu x:Key="PersoncontextMenuStep">
|
||||
<MenuItem Header="{x:Static lang:Resources.edit}" Click="MenuItem_edit"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Insert}" Click="MenuItem_Insert"/>
|
||||
<MenuItem Header="{x:Static lang:Resources.Delete}" Click="MenuItem_Delete"/>
|
||||
</ContextMenu>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="300"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="60"/>
|
||||
</Grid.RowDefinitions>
|
||||
<DataGrid Grid.Row="0" Grid.Column="0" x:Name="Griddata" AlternationCount="2" IsReadOnly="True" SelectionChanged="Griddata_SelectionChanged"
|
||||
<DataGrid Grid.Row="0" Grid.Column="0" x:Name="Griddata" AlternationCount="2" IsReadOnly="True"
|
||||
SelectionChanged="Griddata_SelectionChanged" EnableRowVirtualization="True" EnableColumnVirtualization="True"
|
||||
VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"
|
||||
d:ItemsSource="{d:SampleData ItemCount=999}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" Background="White"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True">
|
||||
ItemsSource="{Binding Path=TechnologicalMachine_View,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
Background="White" GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="True"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
@@ -36,6 +57,27 @@
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
<DataTrigger Binding="{Binding State}" Value="309">
|
||||
<Setter Property="Background" Value="Red"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="308">
|
||||
<Setter Property="Background" Value="Yellow"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="800">
|
||||
<Setter Property="IsHitTestVisible" Value="False"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="101">
|
||||
<Setter Property="ContextMenu" Value="{StaticResource PersoncontextMenu}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="201">
|
||||
<Setter Property="ContextMenu" Value="{StaticResource PersoncontextMenu}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="202">
|
||||
<Setter Property="ContextMenu" Value="{StaticResource PersoncontextMenu}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding State}" Value="309">
|
||||
<Setter Property="ContextMenu" Value="{StaticResource PersoncontextMenu}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
@@ -43,6 +85,7 @@
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
@@ -52,35 +95,98 @@
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Resources>
|
||||
<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}">
|
||||
<Setter Property="Focusable" Value="False"/>
|
||||
<Setter Property="Background" Value="#FFFFFFFF"/>
|
||||
<Setter Property="BorderBrush" Value="#FFFFFFFF"/>
|
||||
<Setter Property="Foreground" Value="#000000"/>
|
||||
</Style>
|
||||
</DataGrid.Resources>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Machine}" Binding="{Binding Name}" Width="150" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.WorkOrder}" Binding="{Binding WorkOrder}" Width="200" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Dyelot}" Binding="{Binding Dyelot}" Width="200" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding State}" Width="0" MaxWidth="0" IsReadOnly="True"/>
|
||||
<DataGridTemplateColumn Width="100" Header="{x:Static lang:Resources.State}">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<UniformGrid VerticalAlignment="Bottom" HorizontalAlignment="Left">
|
||||
<Border>
|
||||
<Grid>
|
||||
<StackPanel Width="100" Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Width="25" Height="30"
|
||||
Kind="{Binding Path=State,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
<materialDesign:PackIcon Width="25" Height="30" Kind="Lock"
|
||||
Visibility="{Binding Path=LOCK,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
<materialDesign:PackIcon Width="25" Height="30" Kind="HandBackRight"
|
||||
Visibility="{Binding Path=AUTO,Converter={StaticResource StatexmlConvert}}"
|
||||
Foreground="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Machine}" Binding="{Binding Name}" Width="80" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="{x:Type TextBlock}">
|
||||
<Setter Property="Foreground" Value="{Binding Path=State,Converter={StaticResource StateToColorConvert}}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.WorkOrder}" Binding="{Binding WorkOrder}" Width="200" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
||||
<Setter Property="ToolTip" Value="{Binding WorkOrder}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Dyelot}" Binding="{Binding Dyelot}" Width="0" MaxWidth="0" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Temperature}" Binding="{Binding Temperature}" Width="100" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.WaterLevel}" Binding="{Binding WaterLevel}" Width="100" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.process}" Binding="{Binding Process}" Width="300" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}" Width="300" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.process}" Binding="{Binding Process}" Width="300" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
||||
<Setter Property="ToolTip" Value="{Binding Process}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}" Width="300" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
||||
<Setter Property="ToolTip" Value="{Binding Step}"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.message}" Binding="{Binding Message}" Width="*" IsReadOnly="True"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" Background="#FF00204E"/>
|
||||
<Grid Grid.Row="2">
|
||||
<Grid Grid.Row="2" >
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition MinWidth="1200"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<DataGrid Grid.Column="2" x:Name="Gridstep" AlternationCount="2" IsReadOnly="True" SelectionChanged="Gridstep_SelectionChanged"
|
||||
<DataGrid Grid.Column="2" x:Name="Gridstep" AlternationCount="2" SelectionChanged="Gridstep_SelectionChanged"
|
||||
EnableRowVirtualization="True" EnableColumnVirtualization="True"
|
||||
VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"
|
||||
d:ItemsSource="{d:SampleData ItemCount=90}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
ItemsSource="{Binding Path=TechnologicalProcess_View,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" Background="White"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" BorderBrush="{x:Null}"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True">
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" CanUserAddRows="False">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="IsHitTestVisible" Value="{Binding DataContext.IsInteractive,
|
||||
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
|
||||
<Setter Property="Height" Value="100" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
@@ -90,17 +196,29 @@
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="1">
|
||||
<Setter Property="Background" Value="#FF00D6FF"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="2">
|
||||
<Setter Property="Background" Value="Yellow"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="9">
|
||||
<Setter Property="Background" Value="Red"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding DataContext.IsInteractive,
|
||||
RelativeSource={RelativeSource AncestorType=DataGrid}}" Value="true">
|
||||
<Setter Property="ContextMenu" Value="{StaticResource PersoncontextMenuStep}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Style TargetType="{x:Type DataGridCell}">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Background" Value="#FF00D6FF"/>
|
||||
<Setter Property="BorderBrush" Value="#FF00D6FF"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
@@ -110,30 +228,102 @@
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Binding="{Binding ProgramID}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Program}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}" Width="70" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="0" MinWidth="0" MaxWidth="0" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="300" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="*" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}"
|
||||
Width="80" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter1}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter2}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter3}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter4}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter5}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter6}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter7}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter8}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter9}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter10}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding DYELOT}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="600" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0,0,0.5">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.Function}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding StepName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0.5,0,0">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.ParameterSet}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding ParameterName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S1,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S2,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S3 ,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Remark}" Binding="{Binding Remark}"
|
||||
Width="*" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="TextWrapping" Value="Wrap"/>
|
||||
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<TextBlock Grid.Column="0" x:Name="machin_LOG" TextWrapping="Wrap" FontSize="27" VerticalAlignment="Top" Height="40" Background="#FF2793FF" Foreground="White" FontWeight="Bold"/>
|
||||
<TextBlock Grid.Column="0" x:Name="log" TextWrapping="Wrap" FontSize="25" Background="White" Margin="0,42,4,-2" Grid.ColumnSpan="2"/>
|
||||
<Grid Margin="0,40,0,0" Grid.ColumnSpan="2" Grid.Column="0" >
|
||||
<rdp:RemoteDesktopWpf x:Name="rdp" Visibility="Collapsed" />
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto" PanningMode="VerticalOnly">
|
||||
<TextBlock x:Name="log" Text="{Binding Sys_machine}" TextWrapping="Wrap" FontSize="25" Background="White"/>
|
||||
</ScrollViewer>
|
||||
<ContentControl x:Name="Picture" Background="White"/>
|
||||
</Grid>
|
||||
<GridSplitter Grid.Row="0" Grid.Column="1" Width="5" HorizontalAlignment="Center" Background="#FF00204E"/>
|
||||
</Grid>
|
||||
<StackPanel Grid.Row="3" x:Name="mt" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="0,0,0,0" Width="700" HorizontalAlignment="Left">
|
||||
<StackPanel Grid.Row="3" x:Name="mt" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Width="800" HorizontalAlignment="Left">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_DyeingMachine">
|
||||
<ListViewItem MinWidth="150" MouseLeftButtonUp="ListViewItem_DyeingMachine" IsHitTestVisible="False" x:Name="DyeingMachine">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="CoffeeMachine" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.DyeingMachine}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -141,15 +331,23 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Conveyor">
|
||||
<ListViewItem MinWidth="150" MouseLeftButtonUp="ListViewItem_Curve" IsHitTestVisible="False" x:Name="Curve">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Pipe" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Conveyor}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
<materialDesign:PackIcon Kind="ChartBellCurve" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Curve}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Receipt">
|
||||
<ListViewItem MinWidth="150" MouseLeftButtonUp="ListViewItem_Screen" IsHitTestVisible="False" x:Name="Screen">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Monitor" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Screen}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem MinWidth="150" MouseLeftButtonUp="ListViewItem_Receipt" IsHitTestVisible="False" x:Name="Receipt">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="ReceiptText" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Receipt}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -157,9 +355,9 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="3" x:Name="scr" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="700,0,0,0">
|
||||
<StackPanel Grid.Row="3" x:Name="scr" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="800,0,0,0">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Resume" IsEnabled="False" x:Name="Resume">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Resume" IsHitTestVisible="False" x:Name="Resume">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="Resume" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Resume}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -167,7 +365,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Paused" IsEnabled="False" x:Name="Paused">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Paused" IsHitTestVisible="False" x:Name="Paused">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Pause" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Paused}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -175,7 +373,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Stop" IsEnabled="False" x:Name="Stop">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Stop" IsHitTestVisible="False" x:Name="Stop">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Stop" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Stop}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -183,7 +381,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsEnabled="False" x:Name="edit">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsHitTestVisible="False" x:Name="edit">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Edit" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.edit}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -191,7 +389,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Jump" IsEnabled="False" x:Name="Jump">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Jump" IsHitTestVisible="False" x:Name="Jump">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Jump" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Jump}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -199,7 +397,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Insert" IsEnabled="False" x:Name="Insert">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Insert" IsHitTestVisible="False" x:Name="Insert">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="InsertInvitation" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Insert}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -207,7 +405,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsEnabled="False" x:Name="Delete">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsHitTestVisible="False" x:Name="Delete">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Delete" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Delete}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.ProductionPlanningEdit"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
mc:Ignorable="d" Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="550">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid Background="White" Cursor="">
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,30,0,0" x:Name="comboBoxMachine" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" DropDownClosed="comboBoxMachine_DropDownClosed" IsReadOnly="True" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,30,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Machine}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<Button Content="{x:Static lang:Resources.Multi}" Height="35" Margin="450,30,0,0" VerticalAlignment="Top" Width="80"
|
||||
Click="Multi_Click" HorizontalAlignment="Left"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,80,0,0" x:Name="comboBoxProgram" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" DropDownClosed="comboBoxProgram_DropDownClosed"
|
||||
TextBoxBase.TextChanged="comboBoxProgram_TextChanged"/>
|
||||
<TextBox x:Name="color_color" HorizontalAlignment="Left" Height="35" Margin="450,80,0,0" TextWrapping="Wrap" BorderBrush="#FF673AB7" Background="#FF336FA8"
|
||||
VerticalAlignment="Top" Width="80" FontSize="20" MouseDoubleClick="color_color_MouseDoubleClick" IsReadOnly="True" Cursor="Arrow" BorderThickness="5,5,5,5" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,80,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.process}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<ComboBox HorizontalAlignment="Left" Height="30" Margin="150,130,0,0" x:Name="comboBoxDyelot" VerticalAlignment="Top" Width="270"
|
||||
FontSize="15" IsEditable="True" BorderBrush="#FF673AB7" Background="White" />
|
||||
<TextBlock HorizontalAlignment="Left" Height="40" Margin="10,130,0,0" TextWrapping="Wrap" Text="{x:Static lang:Resources.Dyelot}"
|
||||
VerticalAlignment="Top" Width="120" FontSize="25"/>
|
||||
<DataGrid x:Name="Grid_data" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=90}"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" MouseDoubleClick="Grid_data_MouseDoubleClick"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
Margin="0,200,0,60" >
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="100" />
|
||||
<Setter Property="FontSize" Value="15" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
<Setter Property="Background" Value="#FFFFFFFF" />
|
||||
</Trigger>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Binding="{Binding ProgramID}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Program}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}"
|
||||
Width="60" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter1}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter2}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter3}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter4}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter5}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="300" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0,0,0.5">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.Function}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding StepName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0.5,0,0">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.ParameterSet}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding ParameterName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S1,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S2,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S3 ,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
|
||||
<Button x:Name="Save" Content="{x:Static lang:Resources.Save}" HorizontalAlignment="Left" Height="35" Margin="450,0,0,10" VerticalAlignment="Bottom" Width="80" Click="Button_Click"/>
|
||||
<Button HorizontalAlignment="Left" Height="35" Margin="0,0,50,10" VerticalAlignment="Bottom" Width="60" Click="Button_Quit" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}">
|
||||
<materialDesign:PackIcon Kind="ArrowRight" Foreground="#FF00204E" HorizontalAlignment="Center" VerticalAlignment="Center" Width="50" Height="35" />
|
||||
</Button>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,472 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using nGantt.GanttChart;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
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;
|
||||
using System.Xml.Linq;
|
||||
using TouchSocket.Core;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// ProductionPlanningEdit.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ProductionPlanningEdit : UserControl
|
||||
{
|
||||
DataTable ProgramName = new DataTable();
|
||||
DataTable WorkOrder =new DataTable();
|
||||
DataTable dat = new DataTable();
|
||||
public string WorkOrder_n;
|
||||
public ProductionPlanningEdit(string workOrder, bool save)
|
||||
{
|
||||
InitializeComponent();
|
||||
ProgramName = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from ProgramName order by ProgramID desc", null).Tables[0]; //读取计划表写入缓存
|
||||
if (!string.IsNullOrEmpty(workOrder))
|
||||
{
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Workorder where Workorder='" + workOrder + "' order by EndTime desc", null).Tables[0];
|
||||
// dat = SQLiteHelpers.ExecuteDataSet("select * from WorkorderSteps order by Step asc", null).Tables[0];
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(workOrder))
|
||||
{
|
||||
//WorkOrder.Select().First().Field<object>("WorkOrder").ToString();
|
||||
WorkOrder_n=workOrder;
|
||||
comboBoxMachine.Text = WorkOrder.Select().First().Field<object>("Machines").ToString();
|
||||
comboBoxProgram.Text = WorkOrder.Select().First().Field<object>("ProgramName").ToString();
|
||||
comboBoxDyelot.Text = WorkOrder.Select().First().Field<object>("Dyelot").ToString();
|
||||
}
|
||||
if (save)//允许编辑
|
||||
{
|
||||
comboBoxMachine.ItemsSource = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field<string>("name")).ToList();//转换机台
|
||||
comboBoxProgram.ItemsSource = ProgramName.AsEnumerable().Select(rowdata => rowdata.Field<string>("ProgramName")).ToList();//转换工艺代码
|
||||
}
|
||||
else
|
||||
{
|
||||
Save.IsEnabled = false;
|
||||
comboBoxMachine.IsEnabled = false;
|
||||
comboBoxProgram.IsEnabled = false;
|
||||
comboBoxDyelot.IsEnabled = false;
|
||||
Grid_data.IsEnabled = false;
|
||||
}
|
||||
}
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
private void comboBoxMachine_DropDownClosed(object sender, EventArgs e)//机台选择
|
||||
{
|
||||
string[] sArray = Regex.Split(comboBoxMachine.Text, @"\+", RegexOptions.IgnoreCase);
|
||||
if (sArray.Length <= 1)
|
||||
{
|
||||
comboBoxDyelot.IsEnabled = true;
|
||||
DataTable DatDyelot = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where Machine='" + comboBoxMachine.Text + "' and State='101' order by Dyelot desc", null).Tables[0]; //读取计划表写入缓存
|
||||
comboBoxDyelot.ItemsSource = DatDyelot.AsEnumerable().Select(rowdata => rowdata.Field<string>("Dyelot")).ToList();//转换代码
|
||||
}
|
||||
}
|
||||
private void Multi_Click(object sender, RoutedEventArgs e)//机台组
|
||||
{
|
||||
MachineSelection machineSelection = new MachineSelection();
|
||||
machineSelection.AddressUpdated += new MachineSelection.AddressUpdateHandler(Address_Multi_Click);
|
||||
//machineSelection.data = "ID";
|
||||
machineSelection.ShowDialog();
|
||||
}
|
||||
private void Address_Multi_Click(object sender, MachineSelection.AddressUpdateEventArgs e)//机台组返回结果
|
||||
{
|
||||
if(!string.IsNullOrEmpty(e.Groups)) comboBoxMachine.Text = e.Groups;
|
||||
comboBoxDyelot.Text = null;
|
||||
comboBoxDyelot.IsEnabled = false;
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)//保存按钮
|
||||
{
|
||||
if (string.IsNullOrEmpty(comboBoxMachine.Text))
|
||||
{
|
||||
MessageBox.Show("Not Machine","SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(comboBoxProgram.Text))
|
||||
{
|
||||
MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
string[] sArray = Regex.Split(comboBoxMachine.Text, @"\+", RegexOptions.IgnoreCase);
|
||||
string[] pArray = Regex.Split(comboBoxProgram.Text, @"\+", RegexOptions.IgnoreCase);
|
||||
|
||||
if (sArray.Length <= 1)
|
||||
{
|
||||
//单机器信息写入
|
||||
string sTime;
|
||||
string StartTime_;
|
||||
string WorkOrder_ = comboBoxMachine.Text + "_" + DateTime.Now.ToString("yyMMddHHmmss");
|
||||
if (!string.IsNullOrEmpty(WorkOrder_n)) WorkOrder_ = WorkOrder_n;
|
||||
string ProgramName_ = comboBoxProgram.Text;
|
||||
string ProgramID_ =null;
|
||||
for (int j = 0; j < pArray.Length; j++)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (j == 0)
|
||||
{
|
||||
ProgramID_ = ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgramID_ = ProgramID_ + "+" + ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
}
|
||||
string Machines_ = comboBoxMachine.Text;
|
||||
string State_ = "100";
|
||||
string Dyelot_ = comboBoxDyelot.Text;
|
||||
string color_ = color_color.Background.ToString();
|
||||
try
|
||||
{
|
||||
sTime = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where Machines='" + comboBoxMachine.Text + "' order by EndTime desc", null).
|
||||
Tables[0].Select().First().Field<object>("EndTime").ToString(); //读取计划表写入缓存
|
||||
if (DateTime.Now < DateTime.Parse(sTime))
|
||||
{
|
||||
StartTime_=DateTime.Parse(sTime).AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
StartTime_= DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
StartTime_= DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
|
||||
string Time_ ="0:00";
|
||||
for (int k = 0; k < pArray.Length; k++)
|
||||
{
|
||||
string t = ProgramName.Select("ProgramName='" + pArray[k] + "'").
|
||||
First().Field<object>("Time").ToString();
|
||||
Time_ = (DateTime.Parse(Time_) + DateTime.Parse(t).TimeOfDay).ToString("HH:mm:ss");
|
||||
}
|
||||
string EndTime_ = (DateTime.Parse(StartTime_)+ DateTime.Parse(Time_).TimeOfDay).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
//插入数据信息
|
||||
Dictionary<string, object> WorkOrder_new = new Dictionary<string, object>();//缓存函数
|
||||
WorkOrder_new.Add("StartTime", StartTime_);
|
||||
WorkOrder_new.Add("EndTime", EndTime_);
|
||||
WorkOrder_new.Add("Time", Time_);
|
||||
WorkOrder_new.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_new.Add("ProgramName", ProgramName_);
|
||||
WorkOrder_new.Add("ProgramID", ProgramID_);
|
||||
WorkOrder_new.Add("Machines", Machines_);
|
||||
WorkOrder_new.Add("State", State_);
|
||||
WorkOrder_new.Add("Dyelot", Dyelot_);
|
||||
WorkOrder_new.Add("Remark", null);
|
||||
WorkOrder_new.Add("lock", 0);
|
||||
WorkOrder_new.Add("color", color_);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkOrder", WorkOrder_new);// 执行插入
|
||||
|
||||
Dictionary<string, object> WorkOrder_DAT = new Dictionary<string, object>();//缓存函数
|
||||
for (int x = 0; x < dat.Rows.Count; x++)
|
||||
{
|
||||
WorkOrder_DAT.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_DAT.Add("Dyelot", Dyelot_);
|
||||
WorkOrder_DAT.Add("ProgramID", dat.Rows[x]["ProgramID"]);
|
||||
WorkOrder_DAT.Add("Program", dat.Rows[x]["Program"]);
|
||||
WorkOrder_DAT.Add("Step", dat.Rows[x]["Step"]);
|
||||
WorkOrder_DAT.Add("StepID", dat.Rows[x]["StepID"]);
|
||||
WorkOrder_DAT.Add("StepName", dat.Rows[x]["StepName"]);
|
||||
WorkOrder_DAT.Add("ParameterName", dat.Rows[x]["ParameterName"]);
|
||||
WorkOrder_DAT.Add("Parameter1", dat.Rows[x]["Parameter1"]);
|
||||
WorkOrder_DAT.Add("Parameter2", dat.Rows[x]["Parameter2"]);
|
||||
WorkOrder_DAT.Add("Parameter3", dat.Rows[x]["Parameter3"]);
|
||||
WorkOrder_DAT.Add("Parameter4", dat.Rows[x]["Parameter4"]);
|
||||
WorkOrder_DAT.Add("Parameter5", dat.Rows[x]["Parameter5"]);
|
||||
WorkOrder_DAT.Add("Parameter6", dat.Rows[x]["Parameter6"]);
|
||||
WorkOrder_DAT.Add("Parameter7", dat.Rows[x]["Parameter7"]);
|
||||
WorkOrder_DAT.Add("Parameter8", dat.Rows[x]["Parameter8"]);
|
||||
WorkOrder_DAT.Add("Parameter9", dat.Rows[x]["Parameter9"]);
|
||||
WorkOrder_DAT.Add("Parameter10", dat.Rows[x]["Parameter10"]);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkorderSteps", WorkOrder_DAT);//行插入
|
||||
WorkOrder_DAT.Clear();
|
||||
}
|
||||
}
|
||||
else
|
||||
{//多机器载入
|
||||
for (int i = 0; i < sArray.Length; i++)
|
||||
{
|
||||
string sTime;
|
||||
string StartTime_;
|
||||
string WorkOrder_ = sArray[i] + "_" + DateTime.Now.ToString("yyMMddHHmmss")+i;
|
||||
if (!string.IsNullOrEmpty(WorkOrder_n)) WorkOrder_ = WorkOrder_n;
|
||||
string ProgramName_ = comboBoxProgram.Text;
|
||||
string ProgramID_ = null;
|
||||
for (int j = 0; j < pArray.Length; j++)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (j == 0)
|
||||
{
|
||||
ProgramID_ = ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgramID_ = ProgramID_ + "+" + ProgramName.Select("ProgramName='" + pArray[j] + "'").
|
||||
First().Field<object>("ProgramID").ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("Not Program", "SCCM", MessageBoxButton.OK, MessageBoxImage.Question);
|
||||
return;
|
||||
}
|
||||
}
|
||||
string Machines_ = sArray[i];
|
||||
string State_ = "100";
|
||||
string Dyelot_ = comboBoxDyelot.Text;
|
||||
string color_ = color_color.Background.ToString();
|
||||
try
|
||||
{
|
||||
sTime = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where Machines='" + sArray[i] + "' order by EndTime desc", null).
|
||||
Tables[0].Select().First().Field<object>("EndTime").ToString(); //读取计划表写入缓存
|
||||
if (DateTime.Now < DateTime.Parse(sTime))
|
||||
{
|
||||
StartTime_ = DateTime.Parse(sTime).AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
StartTime_ = DateTime.Now.AddMinutes(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
// SQLiteHelpers.Close(); //关闭连接
|
||||
string Time_ = "0:00";
|
||||
for (int k = 0; k < pArray.Length; k++)
|
||||
{
|
||||
string t = ProgramName.Select("ProgramName='" + pArray[k] + "'").
|
||||
First().Field<object>("Time").ToString();
|
||||
Time_ = (DateTime.Parse(Time_) + DateTime.Parse(t).TimeOfDay).ToString("HH:mm:ss");
|
||||
}
|
||||
string EndTime_ = (DateTime.Parse(StartTime_) + DateTime.Parse(Time_).TimeOfDay).ToString();
|
||||
|
||||
//插入数据信息
|
||||
Dictionary<string, object> WorkOrder_new = new Dictionary<string, object>();//缓存函数
|
||||
WorkOrder_new.Add("StartTime", StartTime_);
|
||||
WorkOrder_new.Add("EndTime", EndTime_);
|
||||
WorkOrder_new.Add("Time", Time_);
|
||||
WorkOrder_new.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_new.Add("ProgramName", ProgramName_);
|
||||
WorkOrder_new.Add("ProgramID", ProgramID_);
|
||||
WorkOrder_new.Add("Machines", Machines_);
|
||||
WorkOrder_new.Add("State", State_);
|
||||
WorkOrder_new.Add("Dyelot", Dyelot_);
|
||||
WorkOrder_new.Add("Remark", null);
|
||||
WorkOrder_new.Add("lock", 0);
|
||||
WorkOrder_new.Add("color", color_);
|
||||
//SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
//SQLiteHelpers.Open(); //打开数据库
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkOrder", WorkOrder_new);// 执行插入
|
||||
|
||||
Dictionary<string, object> WorkOrder_DAT = new Dictionary<string, object>();//缓存函数
|
||||
for (int x = 0; x < dat.Rows.Count; x++)
|
||||
{
|
||||
WorkOrder_DAT.Add("WorkOrder", WorkOrder_);
|
||||
WorkOrder_DAT.Add("Dyelot", Dyelot_);
|
||||
WorkOrder_DAT.Add("ProgramID", dat.Rows[x]["ProgramID"]);
|
||||
WorkOrder_DAT.Add("Program", dat.Rows[x]["Program"]);
|
||||
WorkOrder_DAT.Add("Step", dat.Rows[x]["Step"]);
|
||||
WorkOrder_DAT.Add("StepID", dat.Rows[x]["StepID"]);
|
||||
WorkOrder_DAT.Add("StepName", dat.Rows[x]["StepName"]);
|
||||
WorkOrder_DAT.Add("ParameterName", dat.Rows[x]["ParameterName"]);
|
||||
WorkOrder_DAT.Add("Parameter1", dat.Rows[x]["Parameter1"]);
|
||||
WorkOrder_DAT.Add("Parameter2", dat.Rows[x]["Parameter2"]);
|
||||
WorkOrder_DAT.Add("Parameter3", dat.Rows[x]["Parameter3"]);
|
||||
WorkOrder_DAT.Add("Parameter4", dat.Rows[x]["Parameter4"]);
|
||||
WorkOrder_DAT.Add("Parameter5", dat.Rows[x]["Parameter5"]);
|
||||
WorkOrder_DAT.Add("Parameter6", dat.Rows[x]["Parameter6"]);
|
||||
WorkOrder_DAT.Add("Parameter7", dat.Rows[x]["Parameter7"]);
|
||||
WorkOrder_DAT.Add("Parameter8", dat.Rows[x]["Parameter8"]);
|
||||
WorkOrder_DAT.Add("Parameter9", dat.Rows[x]["Parameter9"]);
|
||||
WorkOrder_DAT.Add("Parameter10", dat.Rows[x]["Parameter10"]);
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("WorkorderSteps", WorkOrder_DAT);//行插入
|
||||
WorkOrder_DAT.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
this.Visibility = Visibility.Collapsed;
|
||||
ProductionPlanningView.UI = true;
|
||||
}
|
||||
private void Button_Quit(object sender, RoutedEventArgs e)//退出
|
||||
{
|
||||
this.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
public void DatSteps(DataTable db)//行号刷新
|
||||
{
|
||||
int a = db.Rows.Count;
|
||||
for (int i = 0; i < a; i++)
|
||||
{
|
||||
DataRow dr = db.Rows[i];
|
||||
dr.BeginEdit();
|
||||
dr["Step"] = i + 1;
|
||||
dr.EndEdit();
|
||||
}
|
||||
}
|
||||
private void comboBoxProgram_DropDownClosed(object sender, EventArgs e)//工艺选择事件
|
||||
{
|
||||
if (!string.IsNullOrEmpty(comboBoxProgram.Text))
|
||||
{
|
||||
dat.Clear();
|
||||
dat = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from ProgramSteps where Program='" + comboBoxProgram.SelectedValue + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
}
|
||||
|
||||
private void comboBoxProgram_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
dat.Clear();
|
||||
string text = comboBoxProgram.Text;
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
try
|
||||
{
|
||||
string[] sArray = Regex.Split(text, @"\+", RegexOptions.IgnoreCase);
|
||||
for (int i = 0; i < sArray.Length; i++)
|
||||
{
|
||||
DataTable temp = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from ProgramSteps where Program='" + sArray[i] + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
if (dat.Columns.Count == 0) dat = temp.Clone();
|
||||
foreach (DataRow drT in temp.Rows)
|
||||
{
|
||||
dat.Rows.Add(drT.ItemArray);
|
||||
}
|
||||
}//以工艺名组合工艺细节
|
||||
if (!string.IsNullOrEmpty(WorkOrder_n))
|
||||
{
|
||||
dat = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkorderSteps where WorkOrder='" + WorkOrder_n + "' order by Step asc", null).Tables[0]; //读取计划表写入缓存
|
||||
}//插入工单不为空时载入细节信息
|
||||
DatSteps(dat);
|
||||
Grid_data.ItemsSource = dat.DefaultView;//显示
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
|
||||
}//工艺修改事件
|
||||
|
||||
private void color_color_MouseDoubleClick(object sender, MouseButtonEventArgs e)//颜色
|
||||
{
|
||||
System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog();//使用调色盘控件ColorDialog
|
||||
if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)//打开调色盘
|
||||
{
|
||||
|
||||
System.Drawing.Color DColor = colorDialog.Color;////获取选中色彩信息
|
||||
//System.Windows.Media.Color MColor = new System.Windows.Media.Color();//转换
|
||||
System.Windows.Media.Color MColor = System.Windows.Media.Color.FromArgb(DColor.A, DColor.R, DColor.G, DColor.B);//转换并配置ARGB参数
|
||||
color_color.Background = new SolidColorBrush(MColor);//ARGB参数输出至Color的背景色
|
||||
//string colorCode = string.Format("{0:X2}", DColor.B) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.R);//反向十六进制RGB
|
||||
//string colorCode = string.Format("{0:X2}", DColor.R) + string.Format("{0:X2}", DColor.G) + string.Format("{0:X2}", DColor.B);//正向十六进制RGB
|
||||
//ColorCode_SQL = Convert.ToInt32(colorCode, 16);//十六进制RGB转存储数值
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//string ProgramID;
|
||||
//string ProgramNAME;
|
||||
string Numder = null;
|
||||
string ID = null;
|
||||
string P1, P2, P3, P4, P5;
|
||||
|
||||
private void Grid_data_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
int rownum = Grid_data.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid_data.Columns[2].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid_data.Columns[3].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid_data.Columns[6].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid_data.Columns[7].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid_data.Columns[8].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid_data.Columns[9].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid_data.Columns[10].GetCellContent(Grid_data.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = dat.Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, dat.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
}
|
||||
}
|
||||
private void Address_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
|
||||
{
|
||||
int i = dat.Rows.Count;
|
||||
int n = StrToInt.To16Convert10(ID);
|
||||
|
||||
DataRow dr = dat.Rows[n - 1];
|
||||
dr.BeginEdit();
|
||||
dr["StepID"] = e.StepID;
|
||||
dr["StepName"] = e.StepNAME;
|
||||
dr["ParameterName"] = e.PNAME;
|
||||
dr["Parameter1"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter2"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter3"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter4"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter5"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter1_S1"] = e.Row_DAT.Field<double>("Parameter1_S1");
|
||||
dr["Parameter2_S1"] = e.Row_DAT.Field<double>("Parameter2_S1");
|
||||
dr["Parameter3_S1"] = e.Row_DAT.Field<double>("Parameter3_S1");
|
||||
dr["Parameter4_S1"] = e.Row_DAT.Field<double>("Parameter4_S1");
|
||||
dr["Parameter5_S1"] = e.Row_DAT.Field<double>("Parameter5_S1");
|
||||
dr["Parameter1_S2"] = e.Row_DAT.Field<double>("Parameter1_S2");
|
||||
dr["Parameter2_S2"] = e.Row_DAT.Field<double>("Parameter2_S2");
|
||||
dr["Parameter3_S2"] = e.Row_DAT.Field<double>("Parameter3_S2");
|
||||
dr["Parameter4_S2"] = e.Row_DAT.Field<double>("Parameter4_S2");
|
||||
dr["Parameter5_S2"] = e.Row_DAT.Field<double>("Parameter5_S2");
|
||||
dr["Parameter1_S3"] = e.Row_DAT.Field<double>("Parameter1_S3");
|
||||
dr["Parameter2_S3"] = e.Row_DAT.Field<double>("Parameter2_S3");
|
||||
dr["Parameter3_S3"] = e.Row_DAT.Field<double>("Parameter3_S3");
|
||||
dr["Parameter4_S3"] = e.Row_DAT.Field<double>("Parameter4_S3");
|
||||
dr["Parameter5_S3"] = e.Row_DAT.Field<double>("Parameter5_S3");
|
||||
dr["StepName_S1"] = e.Row_DAT.Field<string>("StepName_S1");
|
||||
dr["StepName_S2"] = e.Row_DAT.Field<string>("StepName_S2");
|
||||
dr["StepName_S3"] = e.Row_DAT.Field<string>("StepName_S3");
|
||||
dr["StepID_S1"] = e.Row_DAT.Field<string>("StepID_S1");
|
||||
dr["StepID_S2"] = e.Row_DAT.Field<string>("StepID_S2");
|
||||
dr["StepID_S3"] = e.Row_DAT.Field<string>("StepID_S3");
|
||||
dr.EndEdit();
|
||||
|
||||
Grid_data.ItemsSource = dat.DefaultView;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<UserControl x:Class="SunlightCentralizedControlManagement_SCCM_.View.ProductionPlanningView "
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
|
||||
xmlns:Ngantt="clr-namespace:nGantt;assembly=nGantt"
|
||||
d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
|
||||
mc:Ignorable="d" Loaded="UserControl_Loaded"
|
||||
d:DesignHeight="900" d:DesignWidth="1800">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:RowToIndexConverter x:Key="RowToIndexConverter"/>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="60"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Grid.Row="0">
|
||||
<Ngantt:GanttControl x:Name="GanttChart"/>
|
||||
<ContentControl x:Name="Picture" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Height="60" Background="#FF00204E" Orientation="Horizontal">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="DateRange" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.SelectDate}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
<DatePicker x:Name="Sdatepicker" Width="150" FontSize="20" Height="40" FontWeight="Bold" Padding="1,1,0,1"
|
||||
Focusable="False" Text="{x:Static lang:Resources.Startdate}" SelectedDateChanged="Sdatepicker_SelectedDateChanged" />
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Before" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="NavigateBefore" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Before}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_Today" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="NavigationVariantOutline" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Today}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_DayAfter" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="NavigateNext" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.DayAfter}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" x:Name="WNumder">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="Number0CircleOutline" Width="40" Height="30" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.WorkOrderNumder}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
<TextBox x:Name="Select_WorkOrderNumder" Width="300" Background="White" FontSize="20" VerticalAlignment="Center" Height="40" />
|
||||
<Button Width="80" Height="40" VerticalAlignment="Center" Click="WorkOrderNumder_Click" Content="{x:Static lang:Resources.Search}"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="1" Height="60" Background="#FF00204E" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Plan" IsEnabled="{Binding USER_Capacity[5]}">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="MoonNew" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Plan}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_New" x:Name="Quit" IsEnabled="{Binding USER_Capacity[5]}">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="NewBox" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.New}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,298 @@
|
||||
using LiveChartsCore;
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Entity;
|
||||
using System.Data.SQLite;
|
||||
using System.Diagnostics.Eventing.Reader;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using LiveChartsCore.SkiaSharpView.WPF;
|
||||
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
|
||||
using nGantt.GanttChart;
|
||||
using nGantt;
|
||||
using nGantt.PeriodSplitter;
|
||||
using ScottPlot.TickGenerators.TimeUnits;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Windows.Markup;
|
||||
using System.Collections.ObjectModel;
|
||||
using SkiaSharp;
|
||||
using System.Windows.Threading;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ConvertMoels;
|
||||
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
/// ProgramgroupView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ProductionPlanningView : UserControl
|
||||
{
|
||||
public ProductionPlanningView()
|
||||
{
|
||||
InitializeComponent();
|
||||
Sdatepicker.Language = XmlLanguage.GetLanguage(Configini.IniReadvalue("SYS", "Language"));
|
||||
CountDown();
|
||||
}
|
||||
|
||||
private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
|
||||
DataTable WorkOrder;
|
||||
private DateTime minDate;
|
||||
private DateTime maxDate;
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)//打开页面时的操作
|
||||
{
|
||||
Sdatepicker.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
|
||||
minDate = DateTime.Now.Date;
|
||||
maxDate = minDate.AddDays(1);
|
||||
//添加表右键功能
|
||||
ganttTaskContextMenuItems.Add(new ContextMenuItem(DyelotClicked, Properties.Resources.Dyelot + "..."));
|
||||
ganttTaskContextMenuItems.Add(new ContextMenuItem(ViewClicked, Properties.Resources.View + "..."));
|
||||
ganttTaskContextMenuItems.Add(new ContextMenuItem(DelayedClicked, Properties.Resources.State + "..."));
|
||||
ganttTaskContextMenuItems.Add(new ContextMenuItem(EditClicked, Properties.Resources.edit + "..."));
|
||||
ganttTaskContextMenuItems.Add(new ContextMenuItem(DeleteClicked, Properties.Resources.Delete + "..."));
|
||||
GanttChart.GanttTaskContextMenuItems = ganttTaskContextMenuItems;
|
||||
|
||||
GanttChartNEW();
|
||||
}
|
||||
|
||||
private ObservableCollection<ContextMenuItem> ganttTaskContextMenuItems = new ObservableCollection<ContextMenuItem>();
|
||||
public void GanttChartNEW()
|
||||
{
|
||||
WorkOrder = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where StartTime>'" + DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd HH:mm:ss")
|
||||
+ "'or EndTime>'" + DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd HH:mm:ss") + "'Order by StartTime", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
//生成表
|
||||
GanttChart.ClearGantt();
|
||||
GanttChart.Initialize(minDate, maxDate);
|
||||
var gridLineTimeLine = GanttChart.CreateTimeLine(new PeriodDaySplitter(minDate, maxDate), FormatDay);
|
||||
GanttChart.CreateTimeLine(new PeriodHourSplitter(minDate, maxDate), FormatHour);
|
||||
// Set the timeline to atatch gridlines to
|
||||
GanttChart.SetGridLinesTimeline(gridLineTimeLine, DetermineBackground);
|
||||
var rowgroup = GanttChart.CreateGanttRowGroup();
|
||||
|
||||
//生成表信息
|
||||
List<string> Chart_machines = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field<string>("name")).ToList();//转换列名为机台
|
||||
for (int i = 0; i < Chart_machines.Count(); i++)//列表机台号
|
||||
{
|
||||
var row = GanttChart.CreateGanttRow(rowgroup, Chart_machines[i]);
|
||||
DataRow[] dataRows = WorkOrder.Select("Machines='" + Chart_machines[i] + "'");
|
||||
|
||||
for (int j = 0; j < dataRows.Count(); j++) //列表排程
|
||||
{
|
||||
System.Windows.Media.Color colorBackground = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF336FA8");
|
||||
System.Windows.Media.Color colorStatus = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF336FA8");
|
||||
if (dataRows[j].Field<int>("State") == 100) colorStatus = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("red");
|
||||
try
|
||||
{
|
||||
colorBackground = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(dataRows[j].Field<string>("color"));
|
||||
}
|
||||
catch (Exception) { }
|
||||
//FF336FA8
|
||||
GanttChart.AddGanttTask(row, new GanttTask()
|
||||
{
|
||||
Start = DateTime.Parse(dataRows[j].Field<string>("StartTime")),
|
||||
End = DateTime.Parse(dataRows[j].Field<string>("EndTime")),
|
||||
Name = Properties.Resources.ProcessName + ": " + dataRows[j].Field<string>("ProgramName"),
|
||||
Background = colorBackground,
|
||||
Status = colorStatus,
|
||||
WorkOrder = dataRows[j].Field<string>("WorkOrder").ToString(),
|
||||
ID = Properties.Resources.WorkOrder + ": " + dataRows[j].Field<string>("WorkOrder").ToString(),
|
||||
Dyelot = Properties.Resources.Dyelot + ": " + dataRows[j].Field<string>("Dyelot"),
|
||||
Remark = Properties.Resources.Remark + ": " + dataRows[j].Field<string>("Remark"),
|
||||
ColorNumber = Properties.Resources.ColorNumber + ": " + dataRows[j].Field<string>("ColorNumber"),
|
||||
ColorName = Properties.Resources.ColorName + ": " + dataRows[j].Field<string>("ColorName"),
|
||||
Client = Properties.Resources.Client + ": " + dataRows[j].Field<string>("Client"),
|
||||
ClothSpecies = Properties.Resources.ClothSpecies + ": " + dataRows[j].Field<string>("ClothSpecies"),
|
||||
ClothWeight = Properties.Resources.ClothWeight + ": " + dataRows[j].Field<string>("ClothWeight"),
|
||||
BathRatio = Properties.Resources.BathRatio + ": " + dataRows[j].Field<string>("BathRatio"),
|
||||
Total = Properties.Resources.Total + ": " + dataRows[j].Field<string>("Total"),
|
||||
USER = Properties.Resources.USER + ": " + dataRows[j].Field<string>("user"),
|
||||
STATE = Properties.Resources.State + ": " +StatenClassConvert.Convert( dataRows[j].Field<Int32 >("State").ToString()),
|
||||
TaskProgressVisibility = System.Windows.Visibility.Hidden
|
||||
});
|
||||
}
|
||||
}
|
||||
}//创建日程图
|
||||
private void ViewClicked(GanttTask ganttTask)
|
||||
{
|
||||
Picture.Content = null;
|
||||
Picture.Width = 600;
|
||||
Picture.Content = new ProductionPlanningEdit(ganttTask.WorkOrder,false);
|
||||
}
|
||||
private void DyelotClicked(GanttTask ganttTask)//领料单查看
|
||||
{
|
||||
UserMessage userMessage = new UserMessage();
|
||||
userMessage.Dyelots(ganttTask.WorkOrder);
|
||||
userMessage.ShowDialog();
|
||||
}
|
||||
private void DelayedClicked(GanttTask ganttTask)
|
||||
{
|
||||
|
||||
}
|
||||
private void EditClicked(GanttTask ganttTask)
|
||||
{
|
||||
if (MainWindowViewModel.USER_Capacity[6])
|
||||
{
|
||||
DataTable WorkOrder_dt = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where WorkOrder='" + ganttTask.WorkOrder + "'Order by StartTime", null).Tables[0]; //读取表写入缓存
|
||||
|
||||
if (DateTime.Now > DateTime.Parse(WorkOrder_dt.Select().First().Field<object>("EndTime").ToString()))
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.EHCIP, "SCCM", MessageBoxButton.OK, MessageBoxImage.Warning);//禁止编辑历史工艺
|
||||
}
|
||||
else
|
||||
{
|
||||
string wdt = WorkOrder_dt.Select().First().Field<object>("State").ToString();
|
||||
if (wdt == "101" || wdt == "100")
|
||||
{
|
||||
Picture.Content = null;
|
||||
Picture.Width = 600;
|
||||
Picture.Content = new ProductionPlanningEdit(ganttTask.WorkOrder, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.ENWOIP, "SCCM", MessageBoxButton.OK, MessageBoxImage.Warning);//禁止编辑非等待中的工单
|
||||
}
|
||||
}
|
||||
}
|
||||
}//编辑
|
||||
private void DeleteClicked(GanttTask ganttTask)//删除
|
||||
{
|
||||
if (MainWindowViewModel.USER_Capacity[7])
|
||||
{
|
||||
if (System.Windows.Forms.MessageBox.Show(Properties.Resources.Confirm + Properties.Resources.Delete + ganttTask.Name, "Delete ",
|
||||
System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
///执行删除
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("WorkOrder", "WorkOrder='" + ganttTask.WorkOrder + "'", null);
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("WorkOrderSteps", "WorkOrder='" + ganttTask.WorkOrder + "'", null);
|
||||
GanttChartNEW();
|
||||
}
|
||||
}
|
||||
}
|
||||
private string FormatYear(Period period)
|
||||
{
|
||||
return period.Start.Year.ToString();
|
||||
}
|
||||
private string FormatMonth(Period period)
|
||||
{
|
||||
return period.Start.Month.ToString();
|
||||
}
|
||||
private string FormatDay(Period period)
|
||||
{
|
||||
return period.Start.Day.ToString();
|
||||
}
|
||||
private string FormatDayName(Period period)
|
||||
{
|
||||
return period.Start.DayOfWeek.ToString();
|
||||
}
|
||||
private string FormatHour(Period period)
|
||||
{
|
||||
return period.Start.Hour.ToString();
|
||||
}
|
||||
private System.Windows.Media.Brush DetermineBackground(TimeLineItem timeLineItem)
|
||||
{
|
||||
if (timeLineItem.End.Date.DayOfWeek == DayOfWeek.Saturday || timeLineItem.End.Date.DayOfWeek == DayOfWeek.Sunday)
|
||||
return new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.LightBlue);
|
||||
else
|
||||
return new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);
|
||||
}
|
||||
private void ListViewItem_Plan(object sender, System.Windows.Input.MouseButtonEventArgs e)//计划事件
|
||||
{
|
||||
Picture.Content = null;
|
||||
Picture.Width = 1100;
|
||||
Picture.Content = new DyeingPlanView();
|
||||
}
|
||||
private void ListViewItem_New(object sender, System.Windows.Input.MouseButtonEventArgs e)//新建事件
|
||||
{
|
||||
Picture.Content = null;
|
||||
Picture.Width = 600;
|
||||
Picture.Content = new ProductionPlanningEdit(null, true);
|
||||
}
|
||||
private void WorkOrderNumder_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Picture.Content = null;
|
||||
int con = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(
|
||||
"select * from WorkOrder where WorkOrder='" + Select_WorkOrderNumder.Text +
|
||||
"'Order by StartTime", null).Tables[0].Rows.Count;
|
||||
|
||||
if (con > 0)
|
||||
{
|
||||
Picture.Content = null;
|
||||
Picture.Width = 600;
|
||||
Picture.Content = new ProductionPlanningEdit(Select_WorkOrderNumder.Text, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.WorkOrderNumder+ Select_WorkOrderNumder.Text + Properties.Resources.DoesNotExist,
|
||||
"SCCM", MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
}
|
||||
}//搜索并打开
|
||||
private void ListViewItem_Before(object sender, MouseButtonEventArgs e)//前一天
|
||||
{
|
||||
Picture.Content = null;
|
||||
Sdatepicker.Text = DateTime.Parse(Sdatepicker.Text).AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
private void ListViewItem_Today(object sender, MouseButtonEventArgs e)//今天
|
||||
{
|
||||
Picture.Content = null;
|
||||
Sdatepicker.Text = DateTime.Now.ToString("yyyy/MM/dd");
|
||||
}
|
||||
private void ListViewItem_DayAfter(object sender, MouseButtonEventArgs e)//后一天
|
||||
{
|
||||
Picture.Content = null;
|
||||
Sdatepicker.Text = DateTime.Parse(Sdatepicker.Text).AddDays(1).ToString("yyyy/MM/dd HH:mm:ss");
|
||||
}
|
||||
private void Sdatepicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)//时间控件
|
||||
{
|
||||
Picture.Content = null;
|
||||
minDate = DateTime.Parse(sender.ToString());
|
||||
maxDate = DateTime.Parse(sender.ToString()).AddDays(1);
|
||||
GanttChartNEW();
|
||||
}
|
||||
|
||||
public void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
|
||||
{
|
||||
Interval = TimeSpan.FromSeconds(5)//秒
|
||||
};
|
||||
timer1s.Tick += Tick_Event_1S;
|
||||
timer1s.Start();
|
||||
}
|
||||
public static bool UI;
|
||||
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
{
|
||||
// if (UI)
|
||||
// {
|
||||
GanttChartNEW();
|
||||
// UI= false;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,7 +65,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsEnabled="False" x:Name="edit">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsHitTestVisible="False" x:Name="edit">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Edit" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.edit}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -73,7 +73,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Rename" IsEnabled="False" x:Name="Rename">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Rename" IsHitTestVisible="False" x:Name="Rename">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Rename" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Rename}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -81,7 +81,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Remark" IsEnabled="False" x:Name="Remark">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Remark" IsHitTestVisible="False" x:Name="Remark">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Note" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Remark}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -89,7 +89,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsEnabled="False" x:Name="Delete">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsHitTestVisible="False" x:Name="Delete">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Delete" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Delete}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
@@ -18,26 +19,28 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
InitializeComponent();
|
||||
Programgroup_sql();
|
||||
|
||||
string[] group_data = { "en-US", "zh-CN", "zh-TW" };
|
||||
Group.ItemsSource = group_data;
|
||||
Group.Text = "ALL";
|
||||
}
|
||||
|
||||
private SQLiteHelper SQLiteHelpers = null; //定义数据库
|
||||
private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径
|
||||
DataSet sql; //内存数据缓存
|
||||
|
||||
public void Programgroup_sql()
|
||||
{
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
|
||||
string sql_script = "select * from ProgramName order by ProgramID desc";
|
||||
string sql_ProgramGroup = "select * from ProgramGroup order by ID desc";
|
||||
|
||||
if (sql != null) sql.Clear(); //清空缓存
|
||||
sql = SQLiteHelpers.ExecuteDataSet(sql_script, null); //读取计划表写入缓存
|
||||
sql = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(sql_script, null); //读取计划表写入缓存
|
||||
if (sql != null) Grid.ItemsSource = sql.Tables[0].DefaultView; //转换显示计划表
|
||||
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
DataTable GROUP = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(sql_ProgramGroup, null).Tables[0]; //获得程序组
|
||||
List<string> result = new List<string>();
|
||||
result.Add("ALL");
|
||||
for (int i =0; i<GROUP.Rows.Count;i++)
|
||||
{
|
||||
result.Add (GROUP.Rows[i][1].ToString());
|
||||
}
|
||||
Group.ItemsSource = result.ToArray();
|
||||
}
|
||||
|
||||
public static string Programgroup_Numder { get; set; }
|
||||
@@ -51,10 +54,10 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Programgroup_ID = (Grid.Columns[0].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Programgroup_Numder = (Grid.Columns[1].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
}
|
||||
edit.IsEnabled = true;
|
||||
Rename.IsEnabled = true;
|
||||
Remark.IsEnabled = true;
|
||||
Delete.IsEnabled = true;
|
||||
edit.IsHitTestVisible = true;
|
||||
Rename.IsHitTestVisible = true;
|
||||
Remark.IsHitTestVisible = true;
|
||||
Delete.IsHitTestVisible = true;
|
||||
}
|
||||
|
||||
private void Grid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)//双击表格编辑事件
|
||||
@@ -89,10 +92,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Program_new.Add("Time", "0:00");
|
||||
Program_new.Add("Notes", null);
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.InsertData("ProgramName", Program_new);// 执行插入
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
MainWindowViewModel.SQLiteHelpers.InsertData("ProgramName", Program_new);// 执行插入
|
||||
|
||||
Programgroup_Numder = VALUE;
|
||||
Programgroup_ID = ID;
|
||||
@@ -102,20 +102,20 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void ListViewItem_edit(object sender, System.Windows.Input.MouseButtonEventArgs e)//编辑事件
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Rename.IsEnabled = false;
|
||||
Remark.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Rename.IsHitTestVisible = false;
|
||||
Remark.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
if (Programgroup_ID == null) return;
|
||||
container.Content = new ProgramstepsView();
|
||||
}
|
||||
|
||||
private void ListViewItem_Rename(object sender, System.Windows.Input.MouseButtonEventArgs e)//重命名
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Rename.IsEnabled = false;
|
||||
Remark.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Rename.IsHitTestVisible = false;
|
||||
Remark.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
if (Programgroup_ID == null) return;
|
||||
InputBox frm = new InputBox();
|
||||
frm.Accept += new EventHandler(InputBox_Rename_accept);
|
||||
@@ -129,11 +129,13 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
string VALUE = frm.InputValue;
|
||||
Dictionary<string, object> Program_Rename = new Dictionary<string, object>();//缓存函数
|
||||
Program_Rename.Add("ProgramName", VALUE);
|
||||
Program_Rename.Add("Groups", Group.Text);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("ProgramName", Program_Rename, "ProgramID='" + Programgroup_ID + "'", null);
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.Update("ProgramName", Program_Rename, "ProgramID='" + Programgroup_ID + "'", null);
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
|
||||
Dictionary<string, object> Program_Steps = new Dictionary<string, object>();//缓存函数
|
||||
Program_Steps.Add("Program", VALUE);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("ProgramSteps", Program_Steps, "ProgramID='" + Programgroup_ID + "'", null);
|
||||
|
||||
Programgroup_sql();
|
||||
Programgroup_Numder = null;
|
||||
@@ -142,10 +144,10 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void ListViewItem_Remark(object sender, System.Windows.Input.MouseButtonEventArgs e)//备注
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Rename.IsEnabled = false;
|
||||
Remark.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Rename.IsHitTestVisible = false;
|
||||
Remark.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
if (Programgroup_ID == null) return;
|
||||
InputBox frm = new InputBox();
|
||||
frm.Accept += new EventHandler(InputBox_Remark_accept);
|
||||
@@ -160,10 +162,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Dictionary<string, object> Program_Remark = new Dictionary<string, object>();//缓存函数
|
||||
Program_Remark.Add("Notes", VALUE);
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.Update("ProgramName", Program_Remark, "ProgramID='" + Programgroup_ID + "'", null);
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
MainWindowViewModel.SQLiteHelpers.Update("ProgramName", Program_Remark, "ProgramID='" + Programgroup_ID + "'", null);
|
||||
|
||||
Programgroup_sql();
|
||||
Programgroup_Numder = null;
|
||||
@@ -172,20 +171,18 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void ListViewItem_Delete(object sender, System.Windows.Input.MouseButtonEventArgs e)//删除
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Rename.IsEnabled = false;
|
||||
Remark.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Rename.IsHitTestVisible = false;
|
||||
Remark.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
if (Programgroup_Numder == null) return;
|
||||
///弹窗提示确认删除
|
||||
if (System.Windows.Forms.MessageBox.Show(Properties.Resources.Confirm + Properties.Resources.Delete + Programgroup_Numder, "Delete ",
|
||||
System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
///执行删除
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.Delete("ProgramName", "ProgramID='" + Programgroup_ID + "'", null);
|
||||
SQLiteHelpers.Close();
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("ProgramName", "ProgramID='" + Programgroup_ID + "'", null);
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("ProgramSteps", "ProgramID='" + Programgroup_ID + "'", null);
|
||||
Programgroup_sql();
|
||||
}
|
||||
Programgroup_Numder = null;
|
||||
|
||||
@@ -11,18 +11,24 @@
|
||||
d:DesignHeight="630" d:DesignWidth="1280">
|
||||
<UserControl.Resources>
|
||||
<ConvertMoels:RowToIndexConverter x:Key="RowToIndexConverter"/>
|
||||
<ConvertMoels:StatexmlConvert x:Key="StatexmlConvert"/>
|
||||
<ConvertMoels:StateToColorConvert x:Key="StateToColorConvert"/>
|
||||
<ConvertMoels:BoolToVisidilityConvert x:Key="BoolToVisidilityConvert"/>
|
||||
<ConvertMoels:StatenToImageConvert x:Key="StatenToImageConvert"/>
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<DataGrid x:Name="Grid" AlternationCount="2" IsReadOnly="True" d:ItemsSource="{d:SampleData ItemCount=90}"
|
||||
PreviewMouseLeftButtonUp="Grid_PreviewMouseLeftButtonUp" MouseDoubleClick="Grid_MouseDoubleClick"
|
||||
Background="White" HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" FontSize="15"
|
||||
Grid.ColumnSpan="2" CanUserResizeRows="False" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility ="Column" SelectionMode="Single"
|
||||
Margin="0,0,0,60">
|
||||
<DataGrid x:Name="Grid_step" AlternationCount="2" MouseDoubleClick="Grid_MouseDoubleClick"
|
||||
MouseLeftButtonUp="Grid_PreviewMouseLeftButtonUp"
|
||||
d:ItemsSource="{d:SampleData ItemCount=90}" AutoGenerateColumns="False" MinColumnWidth="30"
|
||||
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" Background="White"
|
||||
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" BorderBrush="{x:Null}"
|
||||
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
|
||||
CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" CanUserAddRows="True">
|
||||
<DataGrid.RowStyle >
|
||||
<Style TargetType="{x:Type DataGridRow}">
|
||||
<Setter Property="Height" Value="30" />
|
||||
<Setter Property="IsHitTestVisible" Value="{Binding DataContext.IsInteractive,
|
||||
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
|
||||
<Setter Property="Height" Value="100" />
|
||||
<Setter Property="FontSize" Value="25" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
|
||||
@@ -32,41 +38,115 @@
|
||||
<Setter Property="Background" Value="#FFF0F0F0" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="False"/>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="1">
|
||||
<Setter Property="Background" Value="#FF00D6FF"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="2">
|
||||
<Setter Property="Background" Value="Yellow"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RUN}" Value="9">
|
||||
<Setter Property="Background" Value="Red"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.CellStyle>
|
||||
<Style TargetType="DataGridCell">
|
||||
<Style TargetType="{x:Type DataGridCell}">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="MinWidth" Value="20"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="#FFC0C0C0"/>
|
||||
<Setter Property="BorderBrush" Value="#FFC0C0C0"/>
|
||||
<Setter Property="Background" Value="#FF00D6FF"/>
|
||||
<Setter Property="BorderBrush" Value="#FF00D6FF"/>
|
||||
<Setter Property="Foreground" Value="Black"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.CellStyle>
|
||||
|
||||
<DataGrid.Columns>
|
||||
<!--列信息绑定-->
|
||||
<DataGridTextColumn Binding="{Binding ProgramID}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Program}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}" Width="60" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="100" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="300" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="*" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Step}" Binding="{Binding Step}"
|
||||
Width="80" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Code}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepID}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Directives}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding StepName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.ParameterSet}" Width="0" MinWidth="0"
|
||||
MaxWidth="0" Binding="{Binding ParameterName}" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter1}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter2}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter3}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter4}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter5}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter6}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter7}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter8}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter9}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTextColumn Binding="{Binding Parameter10}" Width="0" MinWidth="0" MaxWidth="0"/>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Directives}" Width="600" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0,0,0.5">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.Function}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding StepName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
<Border BorderBrush="#FFC9C9C9" BorderThickness="0,0.5,0,0">
|
||||
<TextBlock Height="50" >
|
||||
<Run Text="{x:Static lang:Resources.ParameterSet}"/>
|
||||
<Run Text=":"/>
|
||||
<Run Text="{Binding ParameterName}"/>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S1,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S2,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTemplateColumn Header="{x:Static lang:Resources.Subroutine}" Width="100" IsReadOnly="True">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding Path=StepID_S3 ,Converter={StaticResource StatenToImageConvert}}" Height="100" Width="100"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="{x:Static lang:Resources.Remark}" Binding="{Binding Remark}"
|
||||
Width="*" IsReadOnly="True">
|
||||
<DataGridTextColumn.ElementStyle>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="TextWrapping" Value="Wrap"/>
|
||||
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
||||
</Style>
|
||||
</DataGridTextColumn.ElementStyle>
|
||||
</DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<StackPanel x:Name="scr" VerticalAlignment="Bottom" Height="60" Background="#FF00204E" Orientation="Horizontal" Margin="0,0,400,0">
|
||||
@@ -79,7 +159,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsEnabled="False" x:Name="edit">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_edit" IsHitTestVisible="False" x:Name="edit">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Edit" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.edit}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -87,7 +167,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Insert" IsEnabled="False" x:Name="Insert">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Insert" IsHitTestVisible="False" x:Name="Insert">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="InsertComment" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Insert}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
@@ -103,7 +183,7 @@
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsEnabled="False" x:Name="Delete">
|
||||
<ListViewItem Width="150" MouseLeftButtonUp="ListViewItem_Delete" IsHitTestVisible="False" x:Name="Delete">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<materialDesign:PackIcon Kind="Delete" Width="40" Height="30" Margin="10" VerticalAlignment="Center" Foreground="#FF1368BD"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.Delete}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
|
||||
|
||||
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
||||
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
||||
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -24,6 +27,7 @@ using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Xml.Linq;
|
||||
using TouchSocket.Core;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
@@ -46,50 +50,36 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
Programgroup_sql();
|
||||
}
|
||||
|
||||
private SQLiteHelper SQLiteHelpers = null; //定义数据库
|
||||
private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db"; //数据库路径
|
||||
DataSet sql; //内存数据缓存
|
||||
|
||||
// DataSet sql; //内存数据缓存
|
||||
DataTable Step;
|
||||
string ProgramID;
|
||||
string ProgramNAME;
|
||||
string Numder = null;
|
||||
string ID = null;
|
||||
string P1, P2, P3, P4, P5;
|
||||
string StepTime = null;
|
||||
public void Programgroup_sql()
|
||||
{
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
|
||||
string sql_script = "select * from ProgramSteps where ProgramID='" + ProgramID + "' order by Step asc";
|
||||
|
||||
if (sql != null) sql.Clear(); //清空缓存
|
||||
sql = SQLiteHelpers.ExecuteDataSet(sql_script, null); //读取计划表写入缓存
|
||||
//sql.Tables[0].Rows.Add(datatable_t);
|
||||
DataRow dr = sql.Tables[0].NewRow();//添加表数据
|
||||
dr["ProgramID"] = ProgramID;
|
||||
dr["Program"] = ProgramNAME;
|
||||
sql.Tables[0].Rows.Add(dr);
|
||||
Dat();
|
||||
if (sql != null) Grid.ItemsSource = sql.Tables[0].DefaultView; //转换显示计划表
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
Step = MainWindowViewModel.SQLiteHelpers.ExecuteDataSet(sql_script, null).Tables[0]; //读取计划表写入缓存
|
||||
Grid_step.ItemsSource = Step.DefaultView; //转换显示计划表
|
||||
}
|
||||
|
||||
public void Dat()//行号刷新
|
||||
public void Dat(DataTable dat)//行号刷新
|
||||
{
|
||||
int a = sql.Tables[0].Rows.Count;
|
||||
int a = dat.Rows.Count;
|
||||
for (int i = 0; i < a; i++)
|
||||
{
|
||||
DataRow dr = sql.Tables[0].Rows[i];
|
||||
DataRow dr = dat.Rows[i];
|
||||
dr.BeginEdit();
|
||||
dr["Step"] = i + 1;
|
||||
dr.EndEdit();
|
||||
}
|
||||
dat.AcceptChanges();
|
||||
}
|
||||
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)//打开页面时的操作
|
||||
{
|
||||
if (ID == null) ID = sql.Tables[0].Rows.Count.ToString();
|
||||
Grid.SelectedIndex = Convert.ToInt32(ID)-1;
|
||||
}
|
||||
public static T GetVisualChild<T>(Visual parent) where T : Visual
|
||||
{
|
||||
@@ -113,41 +103,83 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void Grid_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)//表格选择事件
|
||||
{
|
||||
edit.IsEnabled = true;
|
||||
Insert.IsEnabled = true;
|
||||
Delete.IsEnabled = true;
|
||||
int rownum = Grid.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
edit.IsHitTestVisible = true;
|
||||
Insert.IsHitTestVisible = true;
|
||||
Delete.IsHitTestVisible = true;
|
||||
int rownum = Grid_step.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid.Columns[2].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid.Columns[3].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid.Columns[6].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid.Columns[7].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid.Columns[8].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid.Columns[9].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid.Columns[10].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
ID = (Grid_step.Columns[2].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid_step.Columns[3].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid_step.Columns[6].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid_step.Columns[7].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid_step.Columns[8].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid_step.Columns[9].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid_step.Columns[10].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
StepTime = (Grid_step.Columns[16].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//
|
||||
}
|
||||
}
|
||||
|
||||
private void Grid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)//双击表格编辑事件
|
||||
{
|
||||
edit.IsEnabled = true;
|
||||
Insert.IsEnabled = true;
|
||||
Delete.IsEnabled = true;
|
||||
int rownum = Grid.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
edit.IsHitTestVisible = true;
|
||||
Insert.IsHitTestVisible = true;
|
||||
Delete.IsHitTestVisible = true;
|
||||
int rownum = Grid_step.SelectedIndex;//获取鼠标选中行并定义变量
|
||||
if (rownum != -1)//判断鼠标定位是否有效
|
||||
{
|
||||
ID = (Grid.Columns[2].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid.Columns[3].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid.Columns[6].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid.Columns[7].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid.Columns[8].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid.Columns[9].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid.Columns[10].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
ID = (Grid_step.Columns[2].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第0列,
|
||||
Numder = (Grid_step.Columns[3].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第1列,
|
||||
P1 = (Grid_step.Columns[6].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第6列,
|
||||
P2 = (Grid_step.Columns[7].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第7列,
|
||||
P3 = (Grid_step.Columns[8].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第8列,
|
||||
P4 = (Grid_step.Columns[9].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第9列,
|
||||
P5 = (Grid_step.Columns[10].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//定位第10列,
|
||||
StepTime = (Grid_step.Columns[16].GetCellContent(Grid_step.Items[rownum]) as TextBlock).Text;//
|
||||
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = sql.Tables[0].Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5);
|
||||
if (string.IsNullOrEmpty(ID))
|
||||
{
|
||||
DataRow dr = Step.NewRow();//添加表数据
|
||||
dr["ProgramID"] = ProgramID;
|
||||
dr["Program"] = ProgramNAME;
|
||||
dr["Parameter1"] = 0;
|
||||
dr["Parameter2"] = 0;
|
||||
dr["Parameter3"] = 0;
|
||||
dr["Parameter4"] = 0;
|
||||
dr["Parameter5"] = 0;
|
||||
dr["Parameter6"] = 0;
|
||||
dr["Parameter7"] = 0;
|
||||
dr["Parameter8"] = 0;
|
||||
dr["Parameter9"] = 0;
|
||||
dr["Parameter10"] = 0;
|
||||
dr["Parameter1_S1"] = 0;
|
||||
dr["Parameter2_S1"] = 0;
|
||||
dr["Parameter3_S1"] = 0;
|
||||
dr["Parameter4_S1"] = 0;
|
||||
dr["Parameter5_S1"] = 0;
|
||||
dr["Parameter1_S2"] = 0;
|
||||
dr["Parameter2_S2"] = 0;
|
||||
dr["Parameter3_S2"] = 0;
|
||||
dr["Parameter4_S2"] = 0;
|
||||
dr["Parameter5_S2"] = 0;
|
||||
dr["Parameter1_S3"] = 0;
|
||||
dr["Parameter2_S3"] = 0;
|
||||
dr["Parameter3_S3"] = 0;
|
||||
dr["Parameter4_S3"] = 0;
|
||||
dr["Parameter5_S3"] = 0;
|
||||
dr["StepName_S1"] = " ";
|
||||
dr["StepName_S2"] = " ";
|
||||
dr["StepName_S3"] = " ";
|
||||
dr["StepID_S1"] = "000";
|
||||
dr["StepID_S2"] = "000";
|
||||
dr["StepID_S3"] = "000";
|
||||
Step.Rows.InsertAt(dr, Step.Rows.Count);
|
||||
Dat(Step);
|
||||
ID = (Step.Rows.Count).ToString();
|
||||
}
|
||||
|
||||
ViewStep viewstop = new ViewStep(Numder, Step.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
@@ -161,93 +193,205 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void ListViewItem_edit(object sender, System.Windows.Input.MouseButtonEventArgs e)//编辑事件
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Insert.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Insert.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
||||
if (ID == null) ID = sql.Tables[0].Rows.Count.ToString();
|
||||
ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5);
|
||||
if (string.IsNullOrEmpty(ID))
|
||||
{
|
||||
DataRow dr = Step.NewRow();//添加表数据
|
||||
dr["ProgramID"] = ProgramID;
|
||||
dr["Program"] = ProgramNAME;
|
||||
dr["Parameter1"] = 0;
|
||||
dr["Parameter2"] = 0;
|
||||
dr["Parameter3"] = 0;
|
||||
dr["Parameter4"] = 0;
|
||||
dr["Parameter5"] = 0;
|
||||
dr["Parameter6"] = 0;
|
||||
dr["Parameter7"] = 0;
|
||||
dr["Parameter8"] = 0;
|
||||
dr["Parameter9"] = 0;
|
||||
dr["Parameter10"] = 0;
|
||||
dr["Parameter1_S1"] = 0;
|
||||
dr["Parameter2_S1"] = 0;
|
||||
dr["Parameter3_S1"] = 0;
|
||||
dr["Parameter4_S1"] = 0;
|
||||
dr["Parameter5_S1"] = 0;
|
||||
dr["Parameter1_S2"] = 0;
|
||||
dr["Parameter2_S2"] = 0;
|
||||
dr["Parameter3_S2"] = 0;
|
||||
dr["Parameter4_S2"] = 0;
|
||||
dr["Parameter5_S2"] = 0;
|
||||
dr["Parameter1_S3"] = 0;
|
||||
dr["Parameter2_S3"] = 0;
|
||||
dr["Parameter3_S3"] = 0;
|
||||
dr["Parameter4_S3"] = 0;
|
||||
dr["Parameter5_S3"] = 0;
|
||||
dr["StepName_S1"] = " ";
|
||||
dr["StepName_S2"] = " ";
|
||||
dr["StepName_S3"] = " ";
|
||||
dr["StepID_S1"] = "000";
|
||||
dr["StepID_S2"] = "000";
|
||||
dr["StepID_S3"] = "000";
|
||||
Step.Rows.InsertAt(dr, Step.Rows.Count);
|
||||
Dat(Step);
|
||||
ID = Step.Rows.Count.ToString();
|
||||
}
|
||||
ViewStep viewstop = new ViewStep(Numder, Step.Select("STEP = " + ID).First());
|
||||
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
|
||||
viewstop.data = ID;
|
||||
viewstop.ShowDialog();
|
||||
}
|
||||
private void Address_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
|
||||
{
|
||||
int i = sql.Tables[0].Rows.Count;
|
||||
int n = StrToInt.To16Convert10(ID);
|
||||
if (i == n)
|
||||
int i = Step.Rows.Count;
|
||||
int n = Convert.ToInt16(ID);
|
||||
|
||||
int steptime = 0;//时间秒
|
||||
string[] time_D = { "001", "013", "015", "017", "065" };
|
||||
string[] time_J = { "031", "093" };
|
||||
string[] time_T = { "054", "055", "056" };
|
||||
foreach (var item in time_D)
|
||||
{
|
||||
DataRow dr_ = sql.Tables[0].NewRow();//添加表数据
|
||||
dr_["ProgramID"] = ProgramID;
|
||||
dr_["Program"] = ProgramNAME;
|
||||
sql.Tables[0].Rows.Add(dr_);
|
||||
Dat();
|
||||
ID = (n + 1).ToString();
|
||||
if (item == e.StepID)
|
||||
{
|
||||
steptime = Convert.ToUInt16(e.Row_DAT.Field<double>("Parameter3")) * 60;
|
||||
}
|
||||
}
|
||||
foreach (var item in time_J)
|
||||
{
|
||||
if (item == e.StepID)
|
||||
{
|
||||
steptime = Convert.ToUInt16(e.Row_DAT.Field<double>("Parameter1")) * 60;
|
||||
}
|
||||
}
|
||||
foreach (var item in time_T)
|
||||
{
|
||||
if (item == e.StepID)
|
||||
{
|
||||
steptime = 5;
|
||||
}
|
||||
}
|
||||
if (steptime == 0)
|
||||
{
|
||||
steptime = 300;
|
||||
}
|
||||
|
||||
DataRow dr = sql.Tables[0].Rows[n - 1];
|
||||
DataRow dr = Step.Rows[n - 1];
|
||||
dr.BeginEdit();
|
||||
dr["StepID"] = e.StepID;
|
||||
dr["StepName"] = e.StepNAME;
|
||||
dr["ParameterName"] = e.PNAME;
|
||||
dr["Parameter1"] = e.P1;
|
||||
dr["Parameter2"] = e.P2;
|
||||
dr["Parameter3"] = e.P3;
|
||||
dr["Parameter4"] = e.P4;
|
||||
dr["Parameter5"] = e.P5;
|
||||
dr["Parameter1"] = e.Row_DAT.Field<double>("Parameter1");
|
||||
dr["Parameter2"] = e.Row_DAT.Field<double>("Parameter2");
|
||||
dr["Parameter3"] = e.Row_DAT.Field<double>("Parameter3");
|
||||
dr["Parameter4"] = e.Row_DAT.Field<double>("Parameter4");
|
||||
dr["Parameter5"] = e.Row_DAT.Field<double>("Parameter5");
|
||||
dr["Parameter1_S1"] = e.Row_DAT.Field<double>("Parameter1_S1");
|
||||
dr["Parameter2_S1"] = e.Row_DAT.Field<double>("Parameter2_S1");
|
||||
dr["Parameter3_S1"] = e.Row_DAT.Field<double>("Parameter3_S1");
|
||||
dr["Parameter4_S1"] = e.Row_DAT.Field<double>("Parameter4_S1");
|
||||
dr["Parameter5_S1"] = e.Row_DAT.Field<double>("Parameter5_S1");
|
||||
dr["Parameter1_S2"] = e.Row_DAT.Field<double>("Parameter1_S2");
|
||||
dr["Parameter2_S2"] = e.Row_DAT.Field<double>("Parameter2_S2");
|
||||
dr["Parameter3_S2"] = e.Row_DAT.Field<double>("Parameter3_S2");
|
||||
dr["Parameter4_S2"] = e.Row_DAT.Field<double>("Parameter4_S2");
|
||||
dr["Parameter5_S2"] = e.Row_DAT.Field<double>("Parameter5_S2");
|
||||
dr["Parameter1_S3"] = e.Row_DAT.Field<double>("Parameter1_S3");
|
||||
dr["Parameter2_S3"] = e.Row_DAT.Field<double>("Parameter2_S3");
|
||||
dr["Parameter3_S3"] = e.Row_DAT.Field<double>("Parameter3_S3");
|
||||
dr["Parameter4_S3"] = e.Row_DAT.Field<double>("Parameter4_S3");
|
||||
dr["Parameter5_S3"] = e.Row_DAT.Field<double>("Parameter5_S3");
|
||||
dr["StepName_S1"] = e.Row_DAT.Field<string>("StepName_S1");
|
||||
dr["StepName_S2"] = e.Row_DAT.Field<string>("StepName_S2");
|
||||
dr["StepName_S3"] = e.Row_DAT.Field<string>("StepName_S3");
|
||||
dr["StepID_S1"] = e.Row_DAT.Field<string>("StepID_S1");
|
||||
dr["StepID_S2"] = e.Row_DAT.Field<string>("StepID_S2");
|
||||
dr["StepID_S3"] = e.Row_DAT.Field<string>("StepID_S3");
|
||||
dr["StepTime"] = steptime;//
|
||||
dr.EndEdit();
|
||||
|
||||
Grid.ItemsSource = sql.Tables[0].DefaultView;
|
||||
Grid_step.ItemsSource = Step.DefaultView;
|
||||
}
|
||||
|
||||
private void ListViewItem_Insert(object sender, System.Windows.Input.MouseButtonEventArgs e)//插入事件
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Insert.IsEnabled = false;
|
||||
Delete.IsEnabled = false; int d = 0;
|
||||
edit.IsHitTestVisible = false;
|
||||
Insert.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
int d = 0;
|
||||
if (ID != null) { d = Convert.ToInt32(ID); } else { return; }
|
||||
DataRow dr = sql.Tables[0].NewRow();//添加表数据
|
||||
DataRow dr = Step.NewRow();//添加表数据
|
||||
dr["ProgramID"] = ProgramID;
|
||||
dr["Program"] = ProgramNAME;
|
||||
sql.Tables[0].Rows.InsertAt(dr, d - 1);
|
||||
dr["Parameter1"] = 0;
|
||||
dr["Parameter2"] = 0;
|
||||
dr["Parameter3"] = 0;
|
||||
dr["Parameter4"] = 0;
|
||||
dr["Parameter5"] = 0;
|
||||
dr["Parameter6"] = 0;
|
||||
dr["Parameter7"] = 0;
|
||||
dr["Parameter8"] = 0;
|
||||
dr["Parameter9"] = 0;
|
||||
dr["Parameter10"] = 0;
|
||||
dr["Parameter1_S1"] = 0;
|
||||
dr["Parameter2_S1"] = 0;
|
||||
dr["Parameter3_S1"] = 0;
|
||||
dr["Parameter4_S1"] = 0;
|
||||
dr["Parameter5_S1"] = 0;
|
||||
dr["Parameter1_S2"] = 0;
|
||||
dr["Parameter2_S2"] = 0;
|
||||
dr["Parameter3_S2"] = 0;
|
||||
dr["Parameter4_S2"] = 0;
|
||||
dr["Parameter5_S2"] = 0;
|
||||
dr["Parameter1_S3"] = 0;
|
||||
dr["Parameter2_S3"] = 0;
|
||||
dr["Parameter3_S3"] = 0;
|
||||
dr["Parameter4_S3"] = 0;
|
||||
dr["Parameter5_S3"] = 0;
|
||||
dr["StepName_S1"] = " ";
|
||||
dr["StepName_S2"] = " ";
|
||||
dr["StepName_S3"] = " ";
|
||||
dr["StepID_S1"] = "000";
|
||||
dr["StepID_S2"] = "000";
|
||||
dr["StepID_S3"] = "000";
|
||||
Step.Rows.InsertAt(dr, d - 1);
|
||||
ID = null;
|
||||
|
||||
Dat();
|
||||
Grid.ItemsSource = sql.Tables[0].DefaultView; //转换显示计划表
|
||||
Dat(Step);
|
||||
Grid_step.ItemsSource = Step.DefaultView; //转换显示计划表
|
||||
}
|
||||
|
||||
private void ListViewItem_Save(object sender, System.Windows.Input.MouseButtonEventArgs e)//保存事件
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Insert.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Insert.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
int r = 0;
|
||||
|
||||
SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
|
||||
SQLiteHelpers.Open(); //打开数据库
|
||||
SQLiteHelpers.Delete("ProgramSteps", "ProgramID = '" + ProgramID + "'", null);
|
||||
|
||||
MainWindowViewModel.SQLiteHelpers.Delete("ProgramSteps", "ProgramID = '" + ProgramID + "'", null);
|
||||
DataTable data_t = new DataTable();
|
||||
data_t = sql.Tables[0].Clone();
|
||||
data_t = Step.Clone();
|
||||
|
||||
int a = sql.Tables[0].Rows.Count;
|
||||
for (int i = 0; i < a - 1; i++)
|
||||
int a = Step.Rows.Count;
|
||||
for (int i = 0; i < a ; i++)
|
||||
{
|
||||
data_t.Clear();//清空
|
||||
|
||||
DataRow dt = sql.Tables[0].Rows[i];//行转换
|
||||
DataRow dt = Step.Rows[i];//行转换
|
||||
DataRow dr = data_t.NewRow();
|
||||
dr.ItemArray = dt.ItemArray;
|
||||
data_t.Rows.InsertAt(dr, 0);
|
||||
|
||||
r = SQLiteHelpers.InsertData("ProgramSteps", SQLiteHelpers.DataTableToDictionary(data_t));//行插入
|
||||
r = MainWindowViewModel.SQLiteHelpers.InsertData("ProgramSteps", MainWindowViewModel.SQLiteHelpers.DataTableToDictionary(data_t));//行插入
|
||||
}
|
||||
|
||||
int time =Convert.ToUInt16( Step.Compute("sum(StepTime)", ""))/60;
|
||||
string time_ =DateTime.Parse( TimeSpan.FromMinutes(time).ToString()).ToString("HH:mm");// DateTime.Parse(time.ToString()).ToString("HH:mm");
|
||||
Dictionary<string, object> Program_Step = new Dictionary<string, object>();//缓存函数
|
||||
Program_Step.Add("Step", a - 1);
|
||||
SQLiteHelpers.Update("ProgramName", Program_Step, "ProgramID='" + ProgramID + "'", null);
|
||||
Program_Step.Add("Time", time_);
|
||||
MainWindowViewModel.SQLiteHelpers.Update("ProgramName", Program_Step, "ProgramID='" + ProgramID + "'", null);
|
||||
|
||||
SQLiteHelpers.Close(); //关闭连接
|
||||
if (r != 0)
|
||||
{
|
||||
System.Windows.Forms.MessageBox.Show(ProgramNAME, Properties.Resources.Save);
|
||||
@@ -257,20 +401,17 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
|
||||
private void ListViewItem_Delete(object sender, System.Windows.Input.MouseButtonEventArgs e)//删除事件
|
||||
{
|
||||
edit.IsEnabled = false;
|
||||
Insert.IsEnabled = false;
|
||||
Delete.IsEnabled = false;
|
||||
edit.IsHitTestVisible = false;
|
||||
Insert.IsHitTestVisible = false;
|
||||
Delete.IsHitTestVisible = false;
|
||||
|
||||
int d = 0;
|
||||
int a = sql.Tables[0].Rows.Count;
|
||||
|
||||
if (ID != null) { d = Convert.ToInt32(ID); } else { return; }
|
||||
if (a != d)//如果删除不是最后一行执行
|
||||
int a = Step.Rows.Count;
|
||||
int rownum = Grid_step.SelectedIndex;
|
||||
if (rownum >= 0 && rownum<a)
|
||||
{
|
||||
sql.Tables[0].Rows.RemoveAt(d - 1);
|
||||
|
||||
Dat();
|
||||
Grid.ItemsSource = sql.Tables[0].DefaultView; //转换显示计划表
|
||||
Step.Rows.RemoveAt(rownum);
|
||||
Dat(Step);
|
||||
Grid_step.ItemsSource = Step.DefaultView; //转换显示计划表
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,14 @@
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_ConveyorCenters" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="Material" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.ConveyorCenters}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_EngineerSet" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
@@ -30,6 +38,14 @@
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
|
||||
<ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_log" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" >
|
||||
<materialDesign:PackIcon Kind="MathLog" Width="40" Height="30" Margin="10" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{x:Static lang:Resources.log}" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
|
||||
</StackPanel>
|
||||
</ListViewItem>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Background="White" Margin="0,0,0,60">
|
||||
|
||||
@@ -47,5 +47,14 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
Picture.Content = new View.EngineerSetView();
|
||||
}
|
||||
private void ListViewItem_log(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.LogView();
|
||||
}
|
||||
|
||||
private void ListViewItem_ConveyorCenters(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Picture.Content = new View.DispenseMachinesSet();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,7 @@
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<Grid>
|
||||
<ScrollViewer Margin="0" VerticalScrollBarVisibility="Auto">
|
||||
<WrapPanel Orientation="Horizontal" x:Name="WholeView" Background="White">
|
||||
|
||||
</WrapPanel>
|
||||
<WrapPanel Orientation="Horizontal" x:Name="WholeView" Background="White"/>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -17,6 +17,7 @@ using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Threading;
|
||||
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
|
||||
|
||||
namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
{
|
||||
/// <summary>
|
||||
@@ -29,7 +30,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
View.info[] inf = new View.info[999]; //定义总览信息卡
|
||||
UserControls.info[] inf = new UserControls.info[999]; //定义总览信息卡
|
||||
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
/// <summary>
|
||||
@@ -38,7 +39,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
//View.info[] inf = new View.info[999];
|
||||
for (int i = 0; i < MainWindowViewModel.Machines.Rows.Count; i++)
|
||||
{
|
||||
inf[i] = new View.info();
|
||||
inf[i] = new UserControls.info();
|
||||
inf[i].Margin = new Thickness(5, 5, 0, 5);
|
||||
inf[i].Width = 300;
|
||||
inf[i].Height = 400;
|
||||
@@ -54,15 +55,20 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
else
|
||||
{ inf[i].name.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0)); }
|
||||
|
||||
inf[i].temp.Text = (Selet_Machines(MainWindowViewModel.Machines, "Temperature", i) + "°C").ToString();
|
||||
inf[i].Process.Text = Selet_Machines(MainWindowViewModel.Machines, "Process", i).ToString();
|
||||
inf[i].Step.Text = Selet_Machines(MainWindowViewModel.Machines, "Step", i).ToString();
|
||||
inf[i].Message.Text = Selet_Machines(MainWindowViewModel.Machines, "Message", i).ToString();
|
||||
inf[i].Orders.Text = Selet_Machines(MainWindowViewModel.Machines, "WorkOrder", i).ToString();
|
||||
inf[i].time.Text = Selet_Machines(MainWindowViewModel.Machines, "time", i).ToString();
|
||||
inf[i].temp.Text = Selet_Machines(MainWindowViewModel.Machines, "Temperature", i).ToString() + "°C";
|
||||
inf[i].Process.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Process", i);
|
||||
inf[i].Step.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Step", i);
|
||||
inf[i].Message.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Message", i);
|
||||
inf[i].Orders.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "WorkOrder", i);
|
||||
inf[i].time.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "time", i);
|
||||
|
||||
WholeView.Children.Add(inf[i]);
|
||||
}
|
||||
for (int i = 0; i < MainWindowViewModel.Machines.Rows.Count; i++)
|
||||
{
|
||||
DataRow[] rows= MainWindowViewModel.Whole_dat.Select("Machine='" + inf[i].name.Text+"'");
|
||||
inf[i].DataROW(rows);
|
||||
}
|
||||
|
||||
CountDown();
|
||||
}
|
||||
@@ -85,17 +91,20 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
}
|
||||
}
|
||||
|
||||
int t30S = 0;
|
||||
private void CountDown()
|
||||
{
|
||||
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
|
||||
{
|
||||
Interval = TimeSpan.FromSeconds(1)//秒
|
||||
};
|
||||
timer1s.Tick += Tick_Event_1S;
|
||||
timer1s.Tick += Tick_Event_S;
|
||||
timer1s.Start();
|
||||
}//时间周期初始化
|
||||
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
|
||||
void Tick_Event_S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
||||
{
|
||||
DateTime dateTime = DateTime.Now;
|
||||
for (int i = 0; i < MainWindowViewModel.Machines.Rows.Count; i++)
|
||||
{
|
||||
string State_ = Selet_Machines(MainWindowViewModel.Machines, "State", i).ToString();
|
||||
@@ -104,18 +113,30 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
|
||||
else if (State_ == "201")
|
||||
{ inf[i].name.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0)); }
|
||||
else if (State_ == "202")
|
||||
{ inf[i].name.Background = new SolidColorBrush(Color.FromRgb(255, 255, 0)); }
|
||||
{ inf[i].name.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0)); }
|
||||
else
|
||||
{ inf[i].name.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0)); }
|
||||
inf[i].temp.Text = Selet_Machines(MainWindowViewModel.Machines, "Temperature", i).ToString() + "°C";
|
||||
inf[i].Process.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Process", i);
|
||||
inf[i].Step.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Step", i);
|
||||
inf[i].Message.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "Message", i);
|
||||
inf[i].Orders.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "WorkOrder", i);
|
||||
inf[i].time.Text = (string)Selet_Machines(MainWindowViewModel.Machines, "time", i);
|
||||
|
||||
inf[i].temp.Text = (Selet_Machines(MainWindowViewModel.Machines, "Temperature", i) + "°C").ToString();
|
||||
inf[i].Process.Text = Selet_Machines(MainWindowViewModel.Machines, "Process", i).ToString();
|
||||
inf[i].Step.Text = Selet_Machines(MainWindowViewModel.Machines, "Step", i).ToString();
|
||||
inf[i].Message.Text = Selet_Machines(MainWindowViewModel.Machines, "Message", i).ToString();
|
||||
inf[i].Orders.Text = Selet_Machines(MainWindowViewModel.Machines, "WorkOrder", i).ToString();
|
||||
inf[i].time.Text = Selet_Machines(MainWindowViewModel.Machines, "time", i).ToString();
|
||||
if ((t30S > 10)&&(State_!="800"))
|
||||
{
|
||||
t30S = 0;
|
||||
inf[i].DataAdd(dateTime,Convert.ToDouble( Selet_Machines(MainWindowViewModel.Machines, "Temperature", i)));
|
||||
|
||||
// DataRow whole_Dat = MainWindowViewModel.Whole_dat.NewRow();
|
||||
// whole_Dat["Machine"] = Selet_Machines(MainWindowViewModel.Machines, "NAME", i).ToString();
|
||||
// whole_Dat["DateTime"] = dateTime;
|
||||
// whole_Dat["DAT"] = (double)Selet_Machines(MainWindowViewModel.Machines, "Temperature", i);
|
||||
// MainWindowViewModel.Whole_dat.Rows.Add(whole_Dat);
|
||||
}
|
||||
|
||||
}
|
||||
t30S++;
|
||||
}
|
||||
}
|
||||
}
|
||||