Frm_Main.xaml.cs
6.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
using HHWCS.Model;
using HHWCSHost.Controls;
using OPCHelper;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Threading;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
namespace HHWCSHost.View
{
/// <summary>
/// Frm_Main.xaml 的交互逻辑
/// </summary>
public partial class Frm_Main : Window
{
#region 属性
//所有子窗口
Dictionary<string, Window> windows = new Dictionary<string, Window>();
private System.Timers.Timer timer = new System.Timers.Timer();
int inTimer = 0;
//OPC相关
/// <summary>
/// OPC地址
/// </summary>
public string PLCIP { get; set; }
public OPCHelp plc { get; set; }
/// <summary>
/// 创建item后返回的索引值,需要用到这个去进行数据读取
/// </summary>
public int[] serverHandle { get; set; }
//堆垛机
public StockerMonitor[] stockerMonitors { get; set; }
#endregion
public Frm_Main()
{
InitializeComponent();
InitMenu();
InitStatusBar();
SetTimer();
InitOPC();
InitStockerMonitor(2);
}
private void InitStockerMonitor(int count)
{
stockerMonitors = new StockerMonitor[2];
stockerMonitors[0] = new StockerMonitor(20, false, true,1500,800);
stockerMonitors[0].SetValue(Grid.RowProperty, 1);
stockerMonitors[0].SetValue(Grid.ColumnProperty, 0);
stockerMonitors[0].SetValue(Grid.ColumnSpanProperty, 2);
stockerMonitors[0].SetStocker(1, 3);
stockerMonitors[0].SetLocation(5, 0, 2);
stockerMonitors[0].SetLocation(12, 2, 1);
grid.Children.Add(stockerMonitors[0]);
stockerMonitors[1] = new StockerMonitor(20, false, true, 1500, 800);
stockerMonitors[1].SetValue(Grid.RowProperty, 2);
stockerMonitors[1].SetValue(Grid.ColumnProperty, 0);
stockerMonitors[1].SetValue(Grid.ColumnSpanProperty, 2);
grid.Children.Add(stockerMonitors[1]);
}
private void InitOPC()
{
try
{
PLCIP = ConfigurationManager.AppSettings["OPCServerIP"];
plc = new OPCHelp("192.168.10.100");
}
catch (Exception ex)
{
MessageBox.Show("未能获取到OPC的IP配置,请检查。","注意",MessageBoxButton.OK,MessageBoxImage.Error);
}
}
private void InitStatusBar()
{
statusBar.Items.Add("欢迎:"+AppCommon.User.UserName+" 登录时间:"+DateTime.Now.ToString());
}
private void InitMenu()
{
//构建菜单
//系统
MenuItem menu_sys = new MenuItem();
menu_sys.Header = "系统";
MenuItem menu_sys_exit = new MenuItem();
menu_sys_exit.Header = "退出";
menu_sys_exit.Click += Menu_sys_exit_Click;
menu_sys.Items.Add(menu_sys_exit);
//设备
MenuItem menu_device = new MenuItem();
menu_device.Header = "设备管理";
MenuItem menu_device_info = new MenuItem();
menu_device_info.Header = "设备信息管理";
menu_device_info.Click += Menu_device_info_Click;
menu_device.Items.Add(menu_device_info);
MenuItem menu_device_OPCTest = new MenuItem();
menu_device_OPCTest.Header = "OPC测试";
menu_device_OPCTest.Click += Menu_device_OPCTest_Click;
menu_device.Items.Add(menu_device_OPCTest);
//任务
MenuItem menu_task = new MenuItem();
menu_task.Header = "任务管理";
MenuItem menu_task_info = new MenuItem();
menu_task_info.Header = "任务查看";
menu_task_info.Click += Menu_task_info_Click;
menu_task.Items.Add(menu_task_info);
menu.Items.Add(menu_sys);
menu.Items.Add(menu_device);
menu.Items.Add(menu_task);
}
private void SetTimer()
{
timer.Interval = 3000; //3秒触发一次
timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
timer.AutoReset = true;//每到指定时间Elapsed事件是到时间就触发
timer.Enabled = true; //指示 Timer 是否应引发 Elapsed 事件。
}
/// <summary>
/// 程序主时钟
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
//同步线程防止重入
if(Interlocked.Exchange(ref inTimer, 1) == 0)
{
//todo:...
Interlocked.Exchange(ref inTimer, 0);
}
}
private void Menu_device_OPCTest_Click(object sender, RoutedEventArgs e)
{
Frm_OPCTest frm_OPCTest = (Frm_OPCTest)windows.FirstOrDefault(t => t.Key == "frm_OPCTest").Value;
if (frm_OPCTest == null)
{
frm_OPCTest = new Frm_OPCTest();
windows.Add("frm_OPCTest", frm_OPCTest);
}
frm_OPCTest.Show();
if (frm_OPCTest.WindowState == WindowState.Minimized)
frm_OPCTest.WindowState = WindowState.Normal;
frm_OPCTest.Activate();
}
private void Menu_task_info_Click(object sender, RoutedEventArgs e)
{
Frm_TaskInfo frm_TaskInfo =(Frm_TaskInfo)windows.FirstOrDefault(t => t.Key == "frm_taskinfo").Value;
if (frm_TaskInfo == null)
{
frm_TaskInfo = new Frm_TaskInfo();
windows.Add("frm_taskinfo", frm_TaskInfo);
}
frm_TaskInfo.Show();
if (frm_TaskInfo.WindowState == WindowState.Minimized)
frm_TaskInfo.WindowState = WindowState.Normal;
frm_TaskInfo.Activate();
}
private void Menu_device_info_Click(object sender, RoutedEventArgs e)
{
Frm_DeviceInfo frm_DeviceInfo = (Frm_DeviceInfo)windows.FirstOrDefault(t => t.Key == "frm_DeviceInfo").Value;
if (frm_DeviceInfo == null)
{
frm_DeviceInfo = new Frm_DeviceInfo();
windows.Add("frm_DeviceInfo", frm_DeviceInfo);
}
frm_DeviceInfo.Show();
if (frm_DeviceInfo.WindowState == WindowState.Minimized)
frm_DeviceInfo.WindowState = WindowState.Normal;
frm_DeviceInfo.Activate();
}
private void Menu_sys_exit_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void Window_Closed(object sender, EventArgs e)
{
Application.Current.Shutdown();
}
}
}