using BPASmartClient.Device; using BPASmartClient.Model; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Speech.Synthesis; using System.Text; using System.Threading.Tasks; namespace BPASmartClient.MorkS { public class GVL_MORKS : IStatus { public List HistorySuborderId { get; set; } = new List(); /// /// 机器人取面 /// PLC -> M0.3 /// ModbusTcp -> 323 /// public bool RobotTakeNoodle { get; set; } /// /// 机器人出餐 /// PLC -> M0.4 /// ModbusTcp -> 324 /// public bool RobotOutMeal { get; set; } /// /// 移动转台 /// PLC -> M0.5 /// ModbusTcp -> 325 /// public bool MoveTurntable { get; set; } #region 临时变量 /// /// 允许运行 /// //[Circuit(new string[] { "机器人取面", "取碗控制" }, "允许运行")] [VariableMonitor("允许运行")] public bool AllowRun { get; set; } /// /// 优先级判断 /// [VariableMonitor("优先级判断条件")] public bool PriorityJudgment { get; set; } /// /// 机器人任务互锁信号,false:取面,true:出餐 /// //[Circuit(new string[] { "机器人取面", "出面控制" }, "机器人互锁", new bool[] { true, false })] [VariableMonitor("机器人任务互锁信号")] public bool RobotTaskInterlock { get; set; } /// /// 取碗互锁信号 /// //[Circuit("取碗控制", "取碗互锁", true)] [VariableMonitor("取碗互锁信号")] public bool TakeBowlInterlock { get; set; } /// /// 取面互锁信号 /// //[Circuit(new string[] { "机器人取面", "出面控制" }, "取面互锁信号", new bool[] { true, true })] [VariableMonitor("取面互锁信号")] public bool TakeNoodleInterlock { get; set; } /// /// 出面中 /// //[Circuit("机器人取面", "出面中", true)] [VariableMonitor("出面中")] public bool OutNoodleing { get; set; } /// /// 允许取面 /// //[Circuit(new string[] { "转台控制", "机器人取面" }, "允许取面", new bool[] { true, false })] [VariableMonitor("允许取面")] public bool AllowTakeNoodle { get; set; } /// /// 转台互锁信号 /// [VariableMonitor("转台互锁信号")] public bool TurntableInterlock { get; set; } #endregion /// /// 初始化完成 /// PLC -> M100.0 /// ModbusTcp -> 1120 /// //[Circuit(new string[] { "允许运行", "转台控制", "转台控制" }, "初始化完成")] [VariableMonitor("初始化完成", "M100.0", "1120")] public bool InitComplete { get; set; } /// /// 取碗机构空闲,True:忙碌,false:空闲 /// PLC -> M100.1 /// ModbusTcp -> 1121 /// //[Circuit("取碗控制", "取碗机构空闲", true)] [VariableMonitor("取碗机构空闲", "M100.1", "1121")] public bool TakeBowlIdle { get; set; } /// /// 温度到达,True:表示到达,false:未到达 /// PLC -> M100.2 /// ModbusTcp -> 1122 /// //[Circuit("允许运行", "温度到达")] [VariableMonitor("温度到达", "M100.2", "1122")] public bool TemperatureReached { get; set; } /// /// 允许到面,配料完成 /// PLC -> M100.3 /// ModbusTcp -> 1123 /// //[Circuit("出面控制", "允许到面")] [VariableMonitor("允许到面", "M100.3", "1123")] public bool AllowFallNoodle { get; set; } /// /// 机器人取面完成 /// PLC -> M100.4 /// ModbusTcp -> 1124 /// [VariableMonitor("机器人取面完成", "M100.4", "1124")] public bool RbTakeNoodleComplete { get; set; } /// /// 机器人倒面完成 /// PLC -> M100.5 /// ModbusTcp -> 1125 /// [VariableMonitor("机器人倒面完成", "M100.5", "1125")] public bool RbFallNoodleComplete { get; set; } /// /// 机器人出餐完成,上报取餐完成 /// PLC -> M100.6 /// ModbusTcp -> 1126 /// [VariableMonitor("机器人出餐完成", "M100.6", "1126")] public bool RbOutMealComplete { get; set; } /// /// 机器人空闲 /// PLC -> M100.7 /// ModbusTcp -> 1127 /// //[Circuit(new string[] { "机器人取面", "出面控制" }, "机器人空闲")] [VariableMonitor("机器人空闲", "M100.7", "1127")] public bool RobotIdle { get; set; } /// /// 取餐口检测 /// PLC -> M101.0 /// ModbusTcp -> 1128 /// //[Circuit("出面控制", "取餐口检测", true)] [VariableMonitor("取餐口检测", "M101.0", "1128")] public bool TakeMealDetect { get; set; } /// /// 缺碗信号,false:缺碗,true:有碗 /// PLC -> M101.1 /// ModbusTcp -> 1129 /// [VariableMonitor("缺碗信号", "M101.1", "1129")] public bool MissingBowl { get; set; } /// /// 设备初始化中,执行中等于1,2秒后复位 /// PLC -> M101.2 /// ModbusTcp -> 1130 /// [VariableMonitor("设备初始化中", "M101.2", "1130")] public bool DeviceIniting { get; set; } /// /// 转台下限检测 /// PLC -> M101.3 /// ModbusTcp -> 1131 /// //[Circuit("转台控制", "转台下限检测有物料")] [VariableMonitor("转台下限检测", "M101.3", "1131")] public bool TurntableLowerLimit { get; set; } /// /// 缺碗信号 2 /// PLC -> M101.4 /// ModbusTcp -> 1132 /// [VariableMonitor("缺碗信号 2", "M101.4", "1132")] public bool MissingBowlSignal2 { get; set; } /// /// 转台上限检测 /// PLC -> M101.5 /// ModbusTcp -> 1133 /// [VariableMonitor("转台上限检测", "M101.5", "1133")] public bool TurntableUpLimit { get; set; } /// /// 补料完成 /// PLC -> M101.6 /// ModbusTcp -> 1134 /// [VariableMonitor("补料完成", "M101.6", "1134")] public bool FeedComplete { get; set; } /// /// 转台移动到位 /// PLC -> M101.7 /// ModbusTcp -> 1135 /// //[Circuit(new string[] { "转台控制", "机器人取面" }, "转台移动到位")] [VariableMonitor("转台移动到位", "M101.7", "1135")] public bool TurntableMoveInPlace { get; set; } /// /// 煮面炉状态,True:忙碌,false:空闲 /// M102.0 - M102.5 /// 1136 - 1141 /// [VariableMonitor("煮面炉状态", "M102.0", "1136")] public bool[] NoodleCookerStatus { get; set; } = new bool[6] { false, false, false, false, false, false }; /// /// 补料中 /// M102.6 /// 1142 /// [VariableMonitor("补料中", "M102.6", "1142")] public bool Feeding { get; set; } /// /// 煮面完成,上升后给信号 /// M103.0 - M103.5 /// 1144 - 1149 /// [VariableMonitor("煮面完成", "M103.0", "1144")] public bool[] CookNoodlesComplete { get; set; } = new bool[6] { false, false, false, false, false, false }; /// /// 硬件设备异常 /// PLC -> M235.0 /// True:设备正常,False:设备异常 /// [VariableMonitor("硬件设备异常", "M235.0", "")] public bool Error { get; set; } = false; /// /// 配方编号 /// PLC -> VW0 /// ModbusTcp -> 100 /// [VariableMonitor("配方编号", "VW0", "100")] public ushort RecipeNumber { get; set; } /// /// 转台设置位置 /// PLC -> VW2 /// ModbusTcp -> 101 /// [VariableMonitor("转台设置位置", "VW2", "101")] public ushort TurntableLoc { get; set; } /// /// 到面至煮面炉位置 /// PLC -> VW4 /// ModbusTcp -> 102 /// [VariableMonitor("到面至煮面炉位置", "VW4", "102")] public ushort FallNoodleLoc { get; set; } /// /// 取面位置 /// PLC -> VW6 /// ModbusTcp -> 103 /// [VariableMonitor("取面位置", "VW6", "103")] public ushort TakeNoodleLoc { get; set; } /// /// 转台反馈位置 /// PLC -> VW372 /// ModbusTcp -> 286 /// [VariableMonitor("转台反馈位置", "VW372", "286")] public ushort TurntableFeedbackloc { get; set; } /// /// 机器人取面位置队列 /// //[Circuit(new string[] { "转台控制", "机器人取面" }, "有机器人取面队列")] public ConcurrentQueue RBTakeNoodleTask { get; set; } = new ConcurrentQueue(); /// /// 出碗队列 /// //[Circuit("取碗控制", "有取碗队列数量")] public ConcurrentQueue TakeBowlTask { get; set; } = new ConcurrentQueue(); public List doOrderEvents { get; set; } = new List(); public ConcurrentDictionary doe { get; set; } = new ConcurrentDictionary(); /// /// 是否有面条 /// public bool IsNoodles { get; set; } = true; /// /// 制作完成标志 /// [VariableMonitor("制作完成标志")] public bool CookCompleteFlatBit { get; set; } [VariableMonitor("到面条件,煮面口忙碌数量")] public int InvertedNoodlesOpenBusy { get; set; } = 5; #region 订单ID记录 /// /// 取碗订单ID /// public string TakeBowlId = string.Empty; /// /// 取碗订单名称 /// public string TakeBowName = string.Empty; /// /// 配料完成订单名称 /// public int TakeBowSortNum = 0; /// /// 配料完成订单ID /// public string IngredientsCompleteId = string.Empty; /// /// 配料完成订单名称 /// public string IngredientsCompleteName = string.Empty; /// /// 配料完成订单名称 /// public int IngredientsCompleteSortNum = 0; /// /// 煮面口对应的订单ID /// public string[] CookNodelId = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, }; /// /// 出餐订单ID /// public string OutMealId = string.Empty; /// /// 出餐订单名称 /// public string OutMealName = string.Empty; /// /// 出餐排序号 /// public int OutMealSortNum = 0; /// /// 转台位置轮询 /// public List TurntableLocLists = new List(); /// /// 转台当前启动位置 /// [VariableMonitor("转台当前启动位置")] public ushort CurrentLoc { get; set; } = 0; public SpeechSynthesizer speech = new SpeechSynthesizer(); #endregion } }