using System.Collections.Generic;
using System.Threading;
using Bro.Common.FSM;
using System.Diagnostics;
namespace Bro.Common.Procedure
{
///
/// 流程状态
///
public enum ProcStat
{
PSInit = 0, // 初始化
PSOpen, // 打开
PSRunning, // 运行
PSReset, // 重置,
PSReseting, // 重置中
PSPause, // 暂停
PSClose, // 关闭
PSFnit // 销毁
}
///
/// 处理流程基类
///
/// 说明:
/// 工站,工位类都可继承此类
/// 定义如下动作
/// 1. 初始化/销毁
/// 2. 打开/关闭
/// 3. 读写
/// 4. 设置选项
/// 5. 事件订阅/取消
///
public abstract class ProcedureBase
{
#region 代理定义
// 状态变化事件
public delegate void StatChange(ProcedureBase procedure, ProcStat srcStat, ProcStat dstStat);
#endregion
#region 常量
// 线程默认等待时间(单位:毫秒)
protected const int DFT_WAIT_INTERVAL = 200;
#endregion
#region 事件代理
// 流程状态变化
public StatChange StatChangeEvent;
#endregion
#region 属性
// 流程描述
public string Desp { get; set; }
// 流程状态
public ProcStat Stat{ get { return curStat; } }
#endregion
#region 成员变量
// 流程状态机
protected SimpleFSM procFSM = new SimpleFSM();
// 流程状态
protected ProcStat curStat = ProcStat.PSInit;
// 生产工序同步事件
protected AutoResetEvent waitEvent = new AutoResetEvent(false);
// 输入队列
private Queue requestQueue = new Queue();
// 输入处理者
private List