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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FLY.Thick.Base.Common;
namespace FLY.Thick.Base.Server
{
/// <summary>
/// 设备模式,
/// 如:
/// GM_Origin 归原点
/// GM_Stop 停止
/// GM_Backw 后退
/// GM_Forw 前进
/// GM_Goto 执行运行指令
/// GM_Fix 定点
/// GM_Scan 扫描
/// GM_ScanCorr 机架修正
/// GM_SyncScan 同步
/// GM_GetSample 样品取样
/// GM_RenZiJiaScan 吹膜.扫描
/// GM_RenZiJiaFix 吹膜.定点
/// </summary>
public interface IGageMode:INotifyPropertyChanged
{
/// <summary>
/// 对应的运行模式枚举
/// </summary>
CTRL_STATE GMState { get; }
/// <summary>
/// 运行中
/// </summary>
bool IsRunning { get; }
/// <summary>
/// 开始
/// </summary>
/// <returns></returns>
bool Start();
/// <summary>
/// 停止
/// </summary>
void Stop();
}
/// <summary>
/// 设备模式管理器
/// 当 GM_XXX.Start() 。后, GageModeManager 收到通知,
/// GageModeManager再通知其它GM_XXXn.Stop()
/// 当 GM_XXX 自己停下来 Stop(),
/// GageModeManager 要确保 有一个 设备模式 在 运行
///
/// </summary>
public class GageModeManager:INotifyPropertyChanged
{
/// <summary>
/// 当前动作模式
/// </summary>
public CTRL_STATE State { get; set; } = CTRL_STATE.FIX;
/// <summary>
/// 第1个GM,就是默认值
/// </summary>
List<IGageMode> GMs = new List< IGageMode>();
/// <summary>
/// 正在运行的GM
/// </summary>
IGageMode GMofRunning=null;
/// <summary>
/// 运行模式管理器
/// </summary>
public GageModeManager()
{
}
/// <summary>
/// 添加到运行模式队列
/// </summary>
/// <param name="gm"></param>
public void AddGM(IGageMode gm)
{
GMs.Add(gm);
gm.PropertyChanged += gm_PropertyChanged;
}
void gm_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
IGageMode gm = sender as IGageMode;
if (e.PropertyName == "IsRunning")
{
if (gm.IsRunning == true)
{
//GM 启动
if (GMofRunning != null)//其中一个GM启动,停止上一次运行的GM
{
IGageMode g = GMofRunning;
GMofRunning = gm;
g.Stop();
}
else
{
GMofRunning = gm;
}
//更新当前状态
State = gm.GMState;
}
else
{
//GM 停止
if (gm == GMofRunning)
{
GMofRunning = null;//当前没有GM在运行
GMs[0].Start();//停止的GM,是当前运行的,启动默认GM
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}