IGageMode.cs 3.41 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
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
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; }
37 38 39 40
        /// <summary>
        /// 开始
        /// </summary>
        /// <returns></returns>
41
        void Start();
42 43 44
        /// <summary>
        /// 停止
        /// </summary>
潘栩锋's avatar
潘栩锋 committed
45 46 47 48 49 50 51 52 53 54 55 56
        void Stop();
    }
    /// <summary>
    /// 设备模式管理器
    /// 当 GM_XXX.Start() 。后,  GageModeManager 收到通知,
    /// GageModeManager再通知其它GM_XXXn.Stop()
    /// 当 GM_XXX 自己停下来 Stop(), 
    /// GageModeManager 要确保 有一个 设备模式 在 运行
    /// 
    /// </summary>
    public class GageModeManager:INotifyPropertyChanged 
    {
57 58 59
        /// <summary>
        /// 当前动作模式
        /// </summary>
潘栩锋's avatar
潘栩锋 committed
60
        public CTRL_STATE State { get; set; } = CTRL_STATE.FIX;
潘栩锋's avatar
潘栩锋 committed
61 62 63 64 65

        /// <summary>
        /// 第1个GM,就是默认值
        /// </summary>
        List<IGageMode> GMs = new List< IGageMode>();
66

潘栩锋's avatar
潘栩锋 committed
67 68 69 70 71
        /// <summary>
        /// 正在运行的GM
        /// </summary>
        IGageMode GMofRunning=null;

72 73 74
        /// <summary>
        /// 运行模式管理器
        /// </summary>
潘栩锋's avatar
潘栩锋 committed
75 76
        public GageModeManager() 
        {
77

潘栩锋's avatar
潘栩锋 committed
78
        }
79 80 81 82
        /// <summary>
        /// 添加到运行模式队列
        /// </summary>
        /// <param name="gm"></param>
潘栩锋's avatar
潘栩锋 committed
83 84 85
        public void AddGM(IGageMode gm) 
        {
            GMs.Add(gm);
86
            gm.PropertyChanged += gm_PropertyChanged;
潘栩锋's avatar
潘栩锋 committed
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
        }

        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;
    }
}