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
{
///
/// 设备模式,
/// 如:
/// GM_Origin 归原点
/// GM_Stop 停止
/// GM_Backw 后退
/// GM_Forw 前进
/// GM_Goto 执行运行指令
/// GM_Fix 定点
/// GM_Scan 扫描
/// GM_ScanCorr 机架修正
/// GM_SyncScan 同步
/// GM_GetSample 样品取样
/// GM_RenZiJiaScan 吹膜.扫描
/// GM_RenZiJiaFix 吹膜.定点
///
public interface IGageMode:INotifyPropertyChanged
{
///
/// 对应的运行模式枚举
///
CTRL_STATE GMState { get; }
///
/// 运行中
///
bool IsRunning { get; }
///
/// 开始
///
///
void Start();
///
/// 停止
///
void Stop();
}
///
/// 设备模式管理器
/// 当 GM_XXX.Start() 。后, GageModeManager 收到通知,
/// GageModeManager再通知其它GM_XXXn.Stop()
/// 当 GM_XXX 自己停下来 Stop(),
/// GageModeManager 要确保 有一个 设备模式 在 运行
///
///
public class GageModeManager:INotifyPropertyChanged
{
///
/// 当前动作模式
///
public CTRL_STATE State { get; set; } = CTRL_STATE.FIX;
///
/// 第1个GM,就是默认值
///
List GMs = new List< IGageMode>();
///
/// 正在运行的GM
///
IGageMode GMofRunning=null;
///
/// 运行模式管理器
///
public GageModeManager()
{
}
///
/// 添加到运行模式队列
///
///
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;
}
}