|
- using BPASmartClient.AGV;
- using BPASmartClient.AGV.Enums;
- using BPASmartClient.AGV.Feedback;
- using BPASmartClient.CustomResource.Pages.Model;
- using BPASmartClient.Helper;
- using BPASmartClient.HubHelper;
- using FryPot_DosingSystem.Model;
- using FryPot_DosingSystem.ViewModel;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Media;
- using System.Windows;
- using FryPot_DosingSystem.AGV;
-
- namespace FryPot_DosingSystem.Control
- {
- internal class DosingLogicControl
- {
- public static DosingLogicControl _instance;
- public static DosingLogicControl GetInstance => _instance ??= new DosingLogicControl();
- public ConcurrentDictionary<string, object> PlcReadData = new ConcurrentDictionary<string, object>();
- /// <summary>
- /// 线体1配方队列
- /// </summary>
- public ConcurrentQueue<NewRecipeModel> RecipeQuene = new ConcurrentQueue<NewRecipeModel>();
- /// <summary>
- /// 线体2配方队列
- /// </summary>
- public ConcurrentQueue<NewRecipeModel> LTwoRecipeQuene = new ConcurrentQueue<NewRecipeModel>();
- /// <summary>
- /// 线体3配方队列
- /// </summary>
- public ConcurrentQueue<NewRecipeModel> LThreeRecipeQuene = new ConcurrentQueue<NewRecipeModel>();
- /// <summary>
- /// 线体1进料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> InputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 线体2进料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> LTwoInputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 线体3进料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> LThreeInputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 线体1出料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> OutputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 线体2出料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> LTwoOutputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 线体3出料原料队列
- /// </summary>
- public ConcurrentQueue<MaterialInfo> LThreeOutputMaterialQuene = new ConcurrentQueue<MaterialInfo>();
- /// <summary>
- /// 全局变量对象声明
- /// </summary>
- GlobalVariable globalVar;
- /// <summary>
- /// 线体状态对象声明
- /// </summary>
- HardWareStatusViewModel hardWareStatusModel;
- /// <summary>
- /// 报警信息对象声明
- /// </summary>
- #region 上位机内部变量
- int FryPotAlarm = 0;//炒锅1滚筒故障信号 1:无故障 -1:故障
- int FryPotTwoAlarm = 0;//炒锅2滚筒故障信号 1:无故障 -1:故障
- int FryPotThreeAlarm = 0;//炒锅3滚筒故障信号 1:无故障 -1:故障
- int FryPotFourAlarm = 0;//炒锅4滚筒故障信号 1:无故障 -1:故障
- int FryPotFiveAlarm = 0;//炒锅5滚筒故障信号 1:无故障 -1:故障
- int ReicpeNum = 0;//记录接收到的配方数
- bool ErrorRecipe;//线体1错误配方标识
- bool LTwoErrorRecipe;//线体2错误配方标识
- bool LThreeErrorRecipe;//线体3错误配方标识
- #endregion
- #region agv临时变量
- //bool agvArriveUpLoad = false;//agv是否到达线体1上料位置
- //bool agvArriveLTwoUpLoad = false;//agv是否到达线体2上料位置
- //bool agvArriveLThreeUpLoad = false;//agv是否到达线体3上料位置
-
- //bool agvArriveUnLoad = false;//线体1 agv是否到达炒锅送料位置
- //bool LTwoagvArriveUnLoad = false;//线体2 agv是否到达炒锅送料位置
- //bool LThreeagvArriveUnLoad = false;//线体3 agv是否到达炒锅送料位置
-
- //bool agvFryPotEmptyRollerArrive = false;// 线体1的agv是否拿到炒锅空桶
- //bool LTwoagvFryPotEmptyRollerArrive = false; //线体2的agv是否拿到炒锅空桶
- //bool LThreeagvFryPotEmptyRollerArrive = false;//线体3的agv是否拿到炒锅空桶
-
- string LOnerobotJobId = String.Empty;//线体1当前上游系统任务号,全局唯一
- string LTworobotJobId = String.Empty;//线体2当前上游系统任务号,全局唯一
- string LThreerobotJobId = String.Empty;//线体3当前上游系统任务号,全局唯一
- string LFourrobotJobId = String.Empty;//线体4当前上游系统任务号,全局唯一
-
- //bool loadInteractive = false;// fasle:不需要上料交互 true:需要上料交互
- #endregion
- /// <summary>
- /// 调试命令注册
- /// </summary>
- public void CommandRegist()
- {
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.rollerLineOne.OutMaterialingSingle = 1;
- }), "RollerLineRunning");
- ActionManage.GetInstance.Register(new Action<object>((obj) =>
- {
- globalVar.rollerLineOne.StationEight = (ushort)obj;
- }), "EightWorkLoc");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotOne.InputMaterialArrivedSingle = 1;
- globalVar.fryPotFour.InputMaterialArrivedSingle = 1;
- }), "FryPotInputArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotOne.EmptyBarrelArrivedSingle = 1;
- globalVar.fryPotFour.EmptyBarrelArrivedSingle = 1;
- }), "FryPotEmptyRollerArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveUpLoad = true;
- }), "AGVLOneArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveUnLoad = true;
- }), "AGVFryPotDownArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveUpLoad = true;
- }), "AGVFryPotUpArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvFryPotEmptyRollerArrive = true;
-
- }), "AGVFryPotGetEmptyRoller");
- //滚筒线2
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.rollerLineTwo.OutMaterialingSingle = 1;
- }), "RollerLineTwoRunning");
- ActionManage.GetInstance.Register(new Action<object>((obj) =>
- {
- globalVar.rollerLineTwo.StationEight = (ushort)obj;
- }), "TwoEightWorkLoc");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotTwo.InputMaterialArrivedSingle = 1;
- globalVar.fryPotFive.InputMaterialArrivedSingle = 1;
- }), "FryPotTwoInputArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotTwo.EmptyBarrelArrivedSingle = 1;
- globalVar.fryPotFive.EmptyBarrelArrivedSingle = 1;
- }), "FryPotTwoEmptyRollerArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveLTwoUpLoad = true;
- }), "AGVLTwoArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.LTwoagvArriveUnLoad = true;
- }), "AGVFryPotTwoDownArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveLTwoUpLoad = true;
- }), "AGVFryPotTwoUpArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.LTwoagvFryPotEmptyRollerArrive = true;
-
- }), "AGVFryPotTwoGetEmptyRoller");
- //滚筒线3
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.rollerLineThree.OutMaterialingSingle = 1;
- }), "RollerLineThreeRunning");
- ActionManage.GetInstance.Register(new Action<object>((obj) =>
- {
- globalVar.rollerLineThree.StationEight = (ushort)obj;
- }), "ThreeEightWorkLoc");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotThree.InputMaterialArrivedSingle = 1;
- }), "FryPotThreeInputArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.fryPotThree.EmptyBarrelArrivedSingle = 1;
- }), "FryPotThreeEmptyRollerArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveLThreeUpLoad = true;
- }), "AGVLThreeArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.LThreeagvArriveUnLoad = true;
- }), "AGVFryPotThreeDownArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.agvArriveLThreeUpLoad = true;
- }), "AGVFryPotThreeUpArrive");
- ActionManage.GetInstance.Register(new Action(() =>
- {
- globalVar.LThreeagvFryPotEmptyRollerArrive = true;
-
- }), "AGVFryPotThreeGetEmptyRoller");
- }
- public DosingLogicControl()
- {
- globalVar = new GlobalVariable();
- hardWareStatusModel = HardWareStatusViewModel.GetInstance;
- ActionManage.GetInstance.Register(new Action<object[]>(RecipeDataParse), "RecipeSetDown");
- ActionManage.GetInstance.Register(new Action(() => { RecipeQuene.Clear(); InputMaterialQuene.Clear(); OutputMaterialQuene.Clear(); LTwoInputMaterialQuene.Clear(); LTwoOutputMaterialQuene.Clear(); LThreeInputMaterialQuene.Clear(); LThreeOutputMaterialQuene.Clear(); }), "ClearRecipes");
- ActionManage.GetInstance.Register(new Action(() => { globalVar.PlcInite = 1; }), "StartPlcInite");
- ActionManage.GetInstance.Register(new Action(() => { globalVar.PlcInite = 0; }), "EndPlcInite");
- ActionManage.GetInstance.Register(new Action(() => { globalVar.ExitMainTask = true; }), "FryPotDosingMainTaskExit");
- HubHelper.GetInstance.Report = new Action<object>(AgvTaskUpReportDataAnalysis);
- HubHelper.GetInstance.Upstreamrequest = new Action<object>(AgvFeedBackUpReportDataAnalysis);
- // ResetProgram();
- ReadPlcData();
- MainTask();
- CommandRegist();
- }
-
- /// <summary>
- /// AGV上下料上报数据解析
- /// </summary>
- /// <param name="obj"></param>
- private void AgvFeedBackUpReportDataAnalysis(object obj)
- {
- //if (obj != null && obj is byte[] datas)
- //{
- //string strData = Encoding.UTF8.GetString(datas);
- Upstreamrequest objData = JsonConvert.DeserializeObject<Upstreamrequest>(obj.ToString());
- if (objData != null)
- {
-
- //线体1请求上下料
- if (objData.robotJobId == LOnerobotJobId && objData.command == "LOAD")//同一任务号且处于上料阶段,AGV请求上料
- {
- globalVar.agvArriveUpLoad = true;//AGV到达上料位置
-
- }
- if (objData.robotJobId == LOnerobotJobId && objData.command == "UNLOAD")//同一任务号且处于下料阶段
- {
- globalVar.agvArriveUnLoad = true;//AGV到达下料位置
-
- }
- //线体2请求上下料
- if (objData.robotJobId == LTworobotJobId && objData.command == "LOAD")
- {
- globalVar.agvArriveLTwoUpLoad = true;//AGV到达上料位置
-
- }
- if (objData.robotJobId == LTworobotJobId && objData.command == "UNLOAD")//同一任务号且处于下料阶段
- {
- globalVar.LTwoagvArriveUnLoad = true;//AGV到达下料位置
-
- }
- //线体3请求上下料
- if (objData.robotJobId == LThreerobotJobId && objData.command == "LOAD")
- {
- globalVar.agvArriveLThreeUpLoad = true;//AGV到达上料位置
-
- }
- if (objData.robotJobId == LThreerobotJobId && objData.command == "UNLOAD")//同一任务号且处于下料阶段
- {
- globalVar.LThreeagvArriveUnLoad = true;//AGV到达下料位置
-
- }
- }
-
- }
-
- /// <summary>
- /// AGV搬运任务上报数据解析
- /// </summary>
- /// <param name="obj"></param>
- private void AgvTaskUpReportDataAnalysis(object obj)
- {
- //if (obj != null && obj is byte[] datas)
- //{
- // string strData = Encoding.UTF8.GetString(datas);
- AGVToUpSystem objData = JsonConvert.DeserializeObject<AGVToUpSystem>(obj.ToString());
- if (objData != null)
- {
- #region 线体上下料任务信息回报
- //线体1任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LOnerobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指线体上料
- {
-
- }
- //线体2任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LTworobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指线体上料
- {
- //日志
- }
- //线体3任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LThreerobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指线体上料
- {
- //日志
- }
-
- //线体1任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LOnerobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指线体上料
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(1, (globalVar.LOneMaterialNum - 1).ToString());
- AgvViewModel.GetInstance().Set小车是否承载物品(1, IsBool.Yes);
- if (globalVar.LOneFryPotSerial == 1)
- {
- AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.yc_1_1);
- }
- else if (globalVar.LOneFryPotSerial == 4)
- {
- AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.yc_1_4);
- }
-
- }
- //线体2任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LTworobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指线体上料
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(2, (globalVar.LTwoMaterialNum - 1).ToString());
- AgvViewModel.GetInstance().Set小车是否承载物品(2, IsBool.Yes);
- if (globalVar.LTwoFryPotSerial == 2)
- {
- AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.yc_2_2);
- }
- else if (globalVar.LTwoFryPotSerial == 5)
- {
- AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.yc_2_5);
- }
- }
- //线体3任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LThreerobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指线体上料
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(3, (globalVar.LThreeMaterialNum - 1).ToString());
- AgvViewModel.GetInstance().Set小车是否承载物品(3, IsBool.Yes);
- AgvViewModel.GetInstance().Set小车运动(3, CartMotionTrajectory.yc_3_3);
-
- }
- //线体1任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LOnerobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指线体下料
- {
-
- }
- //线体2任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LTworobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指线体下料
- {
-
- }
- //线体3任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LThreerobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指线体下料
- {
-
- }
- //线体1任务上报
- if (objData.state == "DONE" && objData.robotJobId == LOnerobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指线体下料
- {
-
- }
- //线体2任务上报
- if (objData.state == "DONE" && objData.robotJobId == LTworobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指线体下料
- {
-
- }
- //线体3任务上报
- if (objData.state == "DONE" && objData.robotJobId == LThreerobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指线体下料
- {
-
- }
- #endregion
-
- #region 空桶上下料任务信息回报
- //线体1任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LOnerobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指空桶上料
- {
- //日志
- }
- //线体2任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LTworobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指空桶上料
- {
- //日志
- }
- //线体3任务上报
- if (objData.state == "ROLLER_LOAD_DOING" && objData.robotJobId == LThreerobotJobId && objData.jobData.startPointCode == "")// AGV正在上料,指空桶上料
- {
- //日志
- }
-
- //线体1任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LOnerobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指空桶上料
- {
- globalVar.agvFryPotEmptyRollerArrive = true;
- AgvViewModel.GetInstance().Set小车是否承载物品(1, IsBool.OnllYes);
- if (globalVar.LOneFryPotSerial == 1)
- {
- AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.hs_1);
- }
- else if (globalVar.LOneFryPotSerial == 4)
- {
- AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.hs_4);
- }
- }
- //线体2任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LTworobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指空桶上料
- {
- globalVar.LTwoagvFryPotEmptyRollerArrive = true;
- AgvViewModel.GetInstance().Set小车是否承载物品(2, IsBool.OnllYes);
- if (globalVar.LTwoFryPotSerial == 2)
- {
- AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.hs_2);
- }
- else if (globalVar.LTwoFryPotSerial == 5)
- {
- AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.hs_5);
- }
- }
- //线体3任务上报
- if (objData.state == "ROLLER_LOAD_FINISH" && objData.robotJobId == LThreerobotJobId && objData.jobData.startPointCode == "")//指定上料点上料完成,这里指空桶上料
- {
- globalVar.LThreeagvFryPotEmptyRollerArrive = true;
- AgvViewModel.GetInstance().Set小车是否承载物品(3, IsBool.OnllYes);
- AgvViewModel.GetInstance().Set小车运动(3, CartMotionTrajectory.hs_3);
- }
- //线体1任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LOnerobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指空桶下料
- {
- AgvViewModel.GetInstance().Set滚筒线状态(1, IsRun.Start);
- AgvViewModel.GetInstance().Set小车是否承载物品(1, IsBool.No);
- if (globalVar.LFourRollerNum >= 8)
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, "8");
- }
- else
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, (globalVar.LFourRollerNum + 1).ToString());
- }
- }
- //线体2任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LTworobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指空桶下料
- {
- AgvViewModel.GetInstance().Set滚筒线状态(2, IsRun.Start);
- AgvViewModel.GetInstance().Set小车是否承载物品(2, IsBool.No);
- if (globalVar.LFourRollerNum >= 8)
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, "8");
- }
- else
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, (globalVar.LFourRollerNum + 1).ToString());
- }
- }
- //线体3任务上报
- if (objData.state == "ROLLER_UNLOAD_DOING" && objData.robotJobId == LThreerobotJobId && objData.jobData.targetPointCode == "")//指定下料点正在下料,指空桶下料
- {
- AgvViewModel.GetInstance().Set滚筒线状态(3, IsRun.Start);
- AgvViewModel.GetInstance().Set小车是否承载物品(3, IsBool.No);
- if (globalVar.LFourRollerNum >= 8)
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, "8");
- }
- else
- {
- AgvViewModel.GetInstance().Set滚筒线上数量(4, (globalVar.LFourRollerNum + 1).ToString());
- }
- }
- //线体1任务上报
- if (objData.state == "DONE" && objData.robotJobId == LOnerobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指空桶下料
- {
- globalVar.EmptyRollerUnLoadcCom = true;
- AgvViewModel.GetInstance().Set小车运动(1, AgvViewModel.GetInstance().GetCommandValue("hj"));
- AgvViewModel.GetInstance().Set小车停止(1);
- AgvViewModel.GetInstance().Set停车桩(1, IsBool.Yes);
- }
- //线体2任务上报
- if (objData.state == "DONE" && objData.robotJobId == LTworobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指空桶下料
- {
- globalVar.LTwoEmptyRollerUnLoadcCom = true;
- AgvViewModel.GetInstance().Set小车运动(2, AgvViewModel.GetInstance().GetCommandValue("hj"));
- AgvViewModel.GetInstance().Set小车停止(2);
- AgvViewModel.GetInstance().Set停车桩(2, IsBool.Yes);
- }
- //线体3任务上报
- if (objData.state == "DONE" && objData.robotJobId == LThreerobotJobId && objData.jobData.targetPointCode == "")//指定下料位置下料完成,指空桶下料
- {
- globalVar.LThreeEmptyRollerUnLoadcCom = true;
- AgvViewModel.GetInstance().Set小车运动(3, AgvViewModel.GetInstance().GetCommandValue("hj"));
- AgvViewModel.GetInstance().Set小车停止(3);
- AgvViewModel.GetInstance().Set停车桩(3, IsBool.Yes);
- }
- #endregion
-
-
- }
-
- }
-
- /// <summary>
- /// 主任务重启
- /// </summary>
- private void ResetProgram()
- {
- ThreadManage.GetInstance().StartLong(new Action(() =>
- {
- if (RTrig.GetInstance("ResetProgram").Start(globalVar.PlcInite == 1))//判断是否初始化 一初始化就重启主任务
- {
- MessageLog.GetInstance.ShowUserLog("主任务正在重启");
-
- ThreadManage.GetInstance().StopTask("MainViewReadPlcData", new Action(() =>
- {
- ActionManage.GetInstance.CancelRegister("RecipeSetDown");
- ActionManage.GetInstance.Register(new Action<object>(RecipeDataParse), "RecipeSetDown");
- ActionManage.GetInstance.Send("ClearRecipes");
- ThreadManage.GetInstance().StopTask("滚筒线1任务线程", new Action(() =>
- {
- ThreadManage.GetInstance().StopTask("滚筒线2任务线程", new Action(() =>
- {
- ThreadManage.GetInstance().StopTask("滚筒线3任务线程", new Action(() =>
- {
- globalVar = null;
- globalVar = new GlobalVariable();
- ReicpeNum = 0;
- ReadPlcData();
- MainTask();
- MessageLog.GetInstance.ShowUserLog("主任务重启完成");
-
- }));
- }));
-
- }));
- }));
- }
-
- Thread.Sleep(10);
- }), "ResetProgram");
- }
- /// <summary>
- /// 实时获取plc数据
- /// </summary>
- public void ReadPlcData()
- {
- ThreadManage.GetInstance().StartLong(new Action(() =>
- {
- GetAddressData("D2001", new Action<ushort[]>((data) =>
- {
- globalVar.rollerLineOne.StationOne = data[0];
- globalVar.rollerLineOne.StationTwo = data[1];
- globalVar.rollerLineOne.StationThree = data[2];
- globalVar.rollerLineOne.StationFour = data[3];
- globalVar.rollerLineOne.StationFive = data[4];
- globalVar.rollerLineOne.StationSix = data[5];
- globalVar.rollerLineOne.StationSeven = data[6];
- globalVar.rollerLineOne.StationEight = data[7];
- }));
- GetAddressData("D2011", new Action<ushort[]>((data) =>
- {
- globalVar.rollerLineTwo.StationOne = data[0];
- globalVar.rollerLineTwo.StationTwo = data[1];
- globalVar.rollerLineTwo.StationThree = data[2];
- globalVar.rollerLineTwo.StationFour = data[3];
- globalVar.rollerLineTwo.StationFive = data[4];
- globalVar.rollerLineTwo.StationSix = data[5];
- globalVar.rollerLineTwo.StationSeven = data[6];
- globalVar.rollerLineTwo.StationEight = data[7];
- }));
- GetAddressData("D2021", new Action<ushort[]>((data) =>
- {
- globalVar.rollerLineThree.StationOne = data[0];
- globalVar.rollerLineThree.StationTwo = data[1];
- globalVar.rollerLineThree.StationThree = data[2];
- globalVar.rollerLineThree.StationFour = data[3];
- globalVar.rollerLineThree.StationFive = data[4];
- globalVar.rollerLineThree.StationSix = data[5];
- globalVar.rollerLineThree.StationSeven = data[6];
- globalVar.rollerLineThree.StationEight = data[7];
- }));
- GetAddressData("D2031", new Action<ushort[]>((data) =>
- {
- globalVar.rollerLineOne.OutMaterialingSingle = data[3];
- globalVar.rollerLineTwo.OutMaterialingSingle = data[4];
- globalVar.rollerLineThree.OutMaterialingSingle = data[5];
- //globalVar.rollerLineOne.OutMaterialingTroubleSingle = data[6];
- //globalVar.rollerLineTwo.OutMaterialingTroubleSingle = data[7];
- //globalVar.rollerLineThree.OutMaterialingTroubleSingle = data[8];
- AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble = data[6];
- AlarmHelper<AlarmInfo>.Alarm.LTwoRollerTrouble = data[7];
- AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble = data[8];
-
- }));
- GetAddressData("D2040", new Action<ushort[]>((data) =>
- {
- globalVar.fryPotOne.InputMaterialRollerRunningSingle = data[0];
- globalVar.fryPotTwo.InputMaterialRollerRunningSingle = data[1];
- globalVar.fryPotThree.InputMaterialRollerRunningSingle = data[2];
- globalVar.fryPotFour.InputMaterialRollerRunningSingle = data[3];
- globalVar.fryPotFive.InputMaterialRollerRunningSingle = data[4];
- }));
- GetAddressData("D2045", new Action<ushort[]>((data) =>
- {
- globalVar.fryPotOne.InputMaterialArrivedSingle = data[0];
- globalVar.fryPotTwo.InputMaterialArrivedSingle = data[1];
- globalVar.fryPotThree.InputMaterialArrivedSingle = data[2];
- globalVar.fryPotFour.InputMaterialArrivedSingle = data[3];
- globalVar.fryPotFive.InputMaterialArrivedSingle = data[4];
- }));
- GetAddressData("D2050", new Action<ushort[]>((data) =>
- {
- globalVar.fryPotOne.EmptyBarrelArrivedSingle = data[0];
- globalVar.fryPotTwo.EmptyBarrelArrivedSingle = data[1];
- globalVar.fryPotThree.EmptyBarrelArrivedSingle = data[2];
- globalVar.fryPotFour.EmptyBarrelArrivedSingle = data[3];
- globalVar.fryPotFive.EmptyBarrelArrivedSingle = data[4];
- }));
- GetAddressData("D2065", new Action<ushort[]>((data) =>
- {
- globalVar.fryPotOne.EmptyBarrelRollerRunningSingle = data[0];
- globalVar.fryPotTwo.EmptyBarrelRollerRunningSingle = data[1];
- globalVar.fryPotThree.EmptyBarrelRollerRunningSingle = data[2];
- globalVar.fryPotFour.EmptyBarrelRollerRunningSingle = data[3];
- globalVar.fryPotFive.EmptyBarrelRollerRunningSingle = data[4];
- }));
- GetAddressData("D2070", new Action<ushort[]>((data) =>
- {
- //globalVar.fryPotOne.RollerTroubleSingle = data[0];
- //globalVar.fryPotTwo.RollerTroubleSingle = data[1];
- //globalVar.fryPotThree.RollerTroubleSingle = data[2];
- //globalVar.fryPotFour.RollerTroubleSingle = data[3];
- //globalVar.fryPotFive.RollerTroubleSingle = data[4];
- AlarmHelper<AlarmInfo>.Alarm.FryPotOneRollerTrouble = data[0];
- AlarmHelper<AlarmInfo>.Alarm.FryPotTwoRollerTrouble = data[1];
- AlarmHelper<AlarmInfo>.Alarm.FryPotThreeRollerTrouble = data[2];
- AlarmHelper<AlarmInfo>.Alarm.FryPotFourRollerTrouble = data[3];
- AlarmHelper<AlarmInfo>.Alarm.FryPotFiveRollerTrouble = data[4];
- }));
- GetAddressData("D2078", new Action<ushort[]>(data =>
- {
- globalVar.rollerLineOne.RecipeCompleteSingle = data[0];
- globalVar.rollerLineTwo.RecipeCompleteSingle = data[1];
- globalVar.rollerLineThree.RecipeCompleteSingle = data[2];
- }));
- GetAddressData("D2075", new Action<ushort[]>(data =>
- {
-
- globalVar.CleadBarrelEnterSingle = data[0];
- }));
- GetAddressData("D2077", new Action<ushort[]>(data =>
- {
-
- globalVar.CleadBarrelExitSingle = data[0];
- }));
- //globalVar.rollerLineOne.OutMaterialingSingle = 0;
- //globalVar.rollerLineOne.StationOne = 401;
- //globalVar.rollerLineOne.StationTwo = 402;
- //globalVar.rollerLineOne.OutMaterialingTroubleSingle = 1;
- // AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble =1;
- RollerLineStatusDisplay();
- Thread.Sleep(10);
- }), "MainViewReadPlcData");
-
- }
- /// <summary>
- /// 滚筒线运行状态显示
- /// </summary>
- private void RollerLineStatusDisplay()
- {
- hardWareStatusModel.RollerOneModel.LocOneRollerSerial = globalVar.rollerLineOne.StationOne;
- hardWareStatusModel.RollerOneModel.LocTwoRollerSerial = globalVar.rollerLineOne.StationTwo;
- hardWareStatusModel.RollerOneModel.LocThreeRollerSerial = globalVar.rollerLineOne.StationThree;
- hardWareStatusModel.RollerOneModel.LocFourRollerSerial = globalVar.rollerLineOne.StationFour;
- hardWareStatusModel.RollerOneModel.LocFiveRollerSerial = globalVar.rollerLineOne.StationFive;
- hardWareStatusModel.RollerOneModel.LocSixRollerSerial = globalVar.rollerLineOne.StationSix;
- hardWareStatusModel.RollerOneModel.LocSevenRollerSerial = globalVar.rollerLineOne.StationSeven;
- hardWareStatusModel.RollerOneModel.LocEightRollerSerial = globalVar.rollerLineOne.StationEight;
- if (AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble == 0)
- {
-
- hardWareStatusModel.RollerOneModel.RollerAlarmState = Color.FromRgb(130, 232, 139);//无故障
- }
- else
- {
-
- hardWareStatusModel.RollerOneModel.RollerAlarmState = Color.FromRgb(255, 51, 153);//有故障
- }
- if (globalVar.rollerLineOne.OutMaterialingSingle == 1)//运行中
- {
-
- hardWareStatusModel.RollerOneModel.RollerRunState = Color.FromRgb(130, 232, 139);//运行中
- }
- else
- {
-
- hardWareStatusModel.RollerOneModel.RollerRunState = Color.FromRgb(84, 84, 84);//未运行
- }
- hardWareStatusModel.RollerTwoModel.LocOneRollerSerial = globalVar.rollerLineTwo.StationOne;
- hardWareStatusModel.RollerTwoModel.LocTwoRollerSerial = globalVar.rollerLineTwo.StationTwo;
- hardWareStatusModel.RollerTwoModel.LocThreeRollerSerial = globalVar.rollerLineTwo.StationThree;
- hardWareStatusModel.RollerTwoModel.LocFourRollerSerial = globalVar.rollerLineTwo.StationFour;
- hardWareStatusModel.RollerTwoModel.LocFiveRollerSerial = globalVar.rollerLineTwo.StationFive;
- hardWareStatusModel.RollerTwoModel.LocSixRollerSerial = globalVar.rollerLineTwo.StationSix;
- hardWareStatusModel.RollerTwoModel.LocSevenRollerSerial = globalVar.rollerLineTwo.StationSeven;
- hardWareStatusModel.RollerTwoModel.LocEightRollerSerial = globalVar.rollerLineTwo.StationEight;
- if (AlarmHelper<AlarmInfo>.Alarm.LTwoRollerTrouble == 0)
- {
- hardWareStatusModel.RollerTwoModel.RollerAlarmState = Color.FromRgb(130, 232, 139);//无故障
- }
- else
- {
- hardWareStatusModel.RollerTwoModel.RollerAlarmState = Color.FromRgb(255, 51, 153);//有故障
- }
- if (globalVar.rollerLineTwo.OutMaterialingSingle == 1)//运行中
- {
-
- hardWareStatusModel.RollerTwoModel.RollerRunState = Color.FromRgb(130, 232, 139);//运行中
-
- }
- else
- {
- hardWareStatusModel.RollerTwoModel.RollerRunState = Color.FromRgb(84, 84, 84);//未运行
- }
- hardWareStatusModel.RollerThreeModel.LocOneRollerSerial = globalVar.rollerLineThree.StationOne;
- hardWareStatusModel.RollerThreeModel.LocTwoRollerSerial = globalVar.rollerLineThree.StationTwo;
- hardWareStatusModel.RollerThreeModel.LocThreeRollerSerial = globalVar.rollerLineThree.StationThree;
- hardWareStatusModel.RollerThreeModel.LocFourRollerSerial = globalVar.rollerLineThree.StationFour;
- hardWareStatusModel.RollerThreeModel.LocFiveRollerSerial = globalVar.rollerLineThree.StationFive;
- hardWareStatusModel.RollerThreeModel.LocSixRollerSerial = globalVar.rollerLineThree.StationSix;
- hardWareStatusModel.RollerThreeModel.LocSevenRollerSerial = globalVar.rollerLineThree.StationSeven;
- hardWareStatusModel.RollerThreeModel.LocEightRollerSerial = globalVar.rollerLineThree.StationEight;
- if (AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble == 0)
- {
- hardWareStatusModel.RollerThreeModel.RollerAlarmState = Color.FromRgb(130, 232, 139);//无故障
- }
- else
- {
- hardWareStatusModel.RollerThreeModel.RollerAlarmState = Color.FromRgb(255, 51, 153);//有故障
- }
- if (globalVar.rollerLineThree.OutMaterialingSingle == 1)//运行中
- {
- hardWareStatusModel.RollerThreeModel.RollerRunState = Color.FromRgb(130, 232, 139);//运行中
- }
- else
- {
- hardWareStatusModel.RollerThreeModel.RollerRunState = Color.FromRgb(84, 84, 84);//未运行
- }
- //滚筒线4
-
- }
- /// <summary>
- /// 返回指定地址指定长度的数据
- /// </summary>
- /// <param name="address"></param>
- /// <returns></returns>
- public void GetAddressData(string address, Action<ushort[]> action)
- {
- PlcReadData = DeviceOperate.GetInstance.GetAllData();
- if (PlcReadData.ContainsKey(address))
- {
- action((ushort[])(PlcReadData[address]));
- }
- }
- /// <summary>
- /// 写Plc数据
- /// </summary>
- /// <param name="address"></param>
- /// <param name="Value"></param>
- public void WritePlcData(string address, ushort Value)
- {
- DeviceOperate.GetInstance.WritePlcData(address, Value);
- }
- /// <summary>
- /// 初始化任务
- /// </summary>
- //public void IniteTask()
- //{
- // ThreadManage.GetInstance().StartLong(new Action(() =>
- // {
- // MainTask();
- // }), "MainTask");
- //}
- /// <summary>
- /// 配方数据接收
- /// </summary>
- public void RecipeDataParse(object obj)
- {
- Task.Run(new Action(() =>
- {
- if (obj != null && obj is NewRecipeModel[] recipes)
- {
- ReicpeNum = ReicpeNum + recipes.Length;
- MessageLog.GetInstance.ShowUserLog($"新接收到{recipes.Length}个配方,总共{ReicpeNum}个配方");
- for (int i = 0; i < recipes.Length; i++)
- {
- int? res = recipes[i].materialCollection.ElementAt(0).MaterialLoc / 100;
- if (res != null)
- {
- switch (res)
- {
- case 1:
- case 4: RecipeQuene.Enqueue(recipes[i]); break;
- case 3: LThreeRecipeQuene.Enqueue(recipes[i]); break;
- case 2:
- case 5: LTwoRecipeQuene.Enqueue(recipes[i]); break;
- }
- }
- }
- }
-
- }));
-
- }
- /// <summary>
- /// 开启主任务
- /// </summary>
- public void MainTask()
- {
- ////RecipeDataToPlc();
- //LOneRecipeDataToPlc();
- //LTwoRecipeDataToPlc();
- //LThreeRecipeDataToPlc();
- ////AgvLoadRoller();
- //LOneLoadRoller();
- //LTwoAgvLoadRoller();
- //LThreeAgvLoadRoller();
- //// FryPotInputMaterial();
- //LOneFryPotInputMaterial();
- //LTwoFryPotInputMaterial();
- //LThreeFryPotInputMaterial();
- ////FryPotOutputMaterial();
- //LOneFryPotOutputMaterial();
- //LTwoFryPotOutputMaterial();
- //LThreeFryPotOutputMaterial();
-
- ThreadManage.GetInstance().StartLong(new Action(() => { LineOneProcessExecute(); Thread.Sleep(10); }), "滚筒线1任务线程");
- ThreadManage.GetInstance().StartLong(new Action(() => { LineTwoProcessExecute(); Thread.Sleep(10); }), "滚筒线2任务线程");
- ThreadManage.GetInstance().StartLong(new Action(() => { LineThreeProcessExecute(); Thread.Sleep(10); }), "滚筒线3任务线程");
-
-
- }
- /// <summary>
- /// 线体1的执行流程
- /// </summary>
- public void LineOneProcessExecute()
- {
- //if (!globalVar.LOneTaskLock)
- //{
- // globalVar.LOneTaskLock = true;
- LOneRecipeDataToPlc();
- LOneLoadRoller();
- LOneFryPotInputMaterial();
- LOneFallMaterial();
- LOneFryPotOutputMaterial();
- LOneEmptyOperate();
- // globalVar.LOneTaskLock = false;
- //}
-
- }
- /// <summary>
- /// 线体2的执行流程
- /// </summary>
- public void LineTwoProcessExecute()
- {
- //if (!globalVar.LTwoTaskLock)
- //{
- // globalVar.LTwoTaskLock = true;
- LTwoRecipeDataToPlc();
- LTwoAgvLoadRoller();
- LTwoFryPotInputMaterial();
- LTwoFallMaterial();
- LTwoFryPotOutputMaterial();
- LTwoEmptyOperate();
- // globalVar.LTwoTaskLock = false;
-
- //}
- }
- /// <summary>
- /// 线体3的执行流程
- /// </summary>
- public void LineThreeProcessExecute()
- {
- //if (!globalVar.LThreeTaskLock)
- //{
- // globalVar.LThreeTaskLock = true;
- LThreeRecipeDataToPlc();
- LThreeAgvLoadRoller();
- LThreeFryPotInputMaterial();
- LThreeFallMaterial();
- LThreeFryPotOutputMaterial();
- LThreeEmptyOperate();
- // globalVar.LThreeTaskLock = false;
-
- //}
- }
-
- /// <summary>
- /// 3号滚筒线数据下发 2022/7/4 新增
- /// </summary>
- /// <exception cref="NotImplementedException"></exception>
- private void LThreeRecipeDataToPlc()
- {
- if (LThreeOutputMaterialQuene.Count == 0 && LThreeInputMaterialQuene.Count == 0 && !LThreeErrorRecipe)
- {
- if (globalVar.LThreeCurrentRecipeName != string.Empty)
- {
- MessageLog.GetInstance.ShowUserLog($"【3】号滚筒线【{globalVar.LThreeCurrentRecipeName}】 配方制作完成");
- globalVar.LThreeCurrentRecipeName = string.Empty;
- }
- }
- if (LThreeRecipeQuene.Count > 0 && LThreeOutputMaterialQuene.Count == 0 && LThreeInputMaterialQuene.Count == 0)//后续添加其它限制条件
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_3.goodsName = string.Empty; }));
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_3.workflows = new ObservableCollection<WorkflowModel>(); }));
- AgvViewModel.GetInstance().Set启动或停止炒锅(3, IsRun.Stop);
- if (globalVar.LThreeCurrentRecipeName != string.Empty)
- MessageLog.GetInstance.ShowUserLog($"【3】号滚筒线【{globalVar.LThreeCurrentRecipeName}】 配方制作完成");
- if (LThreeRecipeQuene.TryDequeue(out NewRecipeModel result))
- {
- LThreeErrorRecipe = false;
- int headNum = result.materialCollection[0].MaterialLoc / 100;
- globalVar.LThreeMaterialNum = result.materialCollection.Count;
- globalVar.LThreeFryPotSerial = headNum;
- globalVar.LThreeCurrentRecipeName = result.RecipeName;
- AgvViewModel.GetInstance().Set滚筒线上数量(3, globalVar.LThreeMaterialNum.ToString());
- MessageLog.GetInstance.ShowUserLog($"【3】号滚筒线开始制作【{result.RecipeName}】 配方");
- for (int i = 0; i < result.materialCollection.Count; i++) //遍历单个配方中所有物料
- {
- if (result.materialCollection[i].MaterialLoc % 100 == i + 1 && result.materialCollection[i].MaterialLoc / 100 == headNum && headNum == 3)
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_3.goodsName = result.RecipeName; }));
- //将配方中原料加入新的队列
- LThreeInputMaterialQuene.Enqueue(new MaterialInfo()
- {
- materialType = result.materialCollection[i],
- materialId = result.RecipeId
- });
- RollerThreeDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight);//3号滚筒线桶号以及重量数据下发
- }
- else
- {
- MessageLog.GetInstance.ShowUserLog($"【3】号滚筒线配方桶号配置错误,取消【{result.RecipeName}】配方制作");
- LThreeInputMaterialQuene.Clear();
- LThreeErrorRecipe = true;
- return;
- }
- }
- DeviceOperate.GetInstance.WritePlcData("D1043", (ushort)result.materialCollection.Count);//发送3号滚筒线工序数据
- //AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LThreeFryPotSerial, IsRun.Stop);
- }
- }
-
-
-
- }
- /// <summary>
- /// 2号滚筒线数据下发 2022/7/4 新增
- /// </summary>
- /// <exception cref="NotImplementedException"></exception>
- private void LTwoRecipeDataToPlc()
- {
- if (LTwoOutputMaterialQuene.Count == 0 && LTwoInputMaterialQuene.Count == 0 && !LTwoErrorRecipe)
- {
- if (globalVar.LTwoCurrentRecipeName != string.Empty)
- {
- MessageLog.GetInstance.ShowUserLog($"【2】号滚筒线【{globalVar.LTwoCurrentRecipeName}】 配方制作完成");
- globalVar.LTwoCurrentRecipeName = string.Empty;
- }
- }
-
- if (LTwoRecipeQuene.Count > 0 && LTwoOutputMaterialQuene.Count == 0 && LTwoInputMaterialQuene.Count == 0)//后续添加其它限制条件
- {
- if (globalVar.LTwoFryPotSerial == 2)
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_2.goodsName = string.Empty; }));
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_2.workflows = new ObservableCollection<WorkflowModel>(); }));
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LTwoFryPotSerial, IsRun.Stop);
- }
- if (globalVar.LTwoFryPotSerial == 5)
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_5.goodsName = string.Empty; }));
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_5.workflows = new ObservableCollection<WorkflowModel>(); }));
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LTwoFryPotSerial, IsRun.Stop);
- }
- if (globalVar.LTwoCurrentRecipeName != string.Empty)
- MessageLog.GetInstance.ShowUserLog($"【2】号滚筒线【{globalVar.LTwoCurrentRecipeName}】 配方制作完成");
- if (LTwoRecipeQuene.TryDequeue(out NewRecipeModel result))
- {
- LTwoErrorRecipe = false;
- int headNum = result.materialCollection[0].MaterialLoc / 100;
- globalVar.LTwoMaterialNum = result.materialCollection.Count;
- globalVar.LTwoFryPotSerial = headNum;
- globalVar.LTwoCurrentRecipeName = result.RecipeName;
- AgvViewModel.GetInstance().Set滚筒线上数量(2, globalVar.LTwoMaterialNum.ToString());
- MessageLog.GetInstance.ShowUserLog($"【2】号滚筒线开始制作【{result.RecipeName}】 配方");
- for (int i = 0; i < result.materialCollection.Count; i++) //遍历单个配方中所有物料
- {
- if (result.materialCollection[i].MaterialLoc % 100 == i + 1 && result.materialCollection[i].MaterialLoc / 100 == headNum && (headNum == 2 || headNum == 5))
- {
- if (headNum == 1)//炒锅2
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_2.goodsName = result.RecipeName; }));
- }
- else//炒锅5
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_5.goodsName = result.RecipeName; }));
- }
- //将配方中原料加入新的队列
- LTwoInputMaterialQuene.Enqueue(new MaterialInfo()
- {
- materialType = result.materialCollection[i],
- materialId = result.RecipeId
- });
- RollerTwoDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight);//2号滚筒线桶号以及重量数据下发
- }
- else
- {
- MessageLog.GetInstance.ShowUserLog($"【2】号滚筒线配方桶号配置错误,取消【{result.RecipeName}】配方制作");
- LTwoInputMaterialQuene.Clear();
- LTwoErrorRecipe = true;
- return;
- }
- }
- DeviceOperate.GetInstance.WritePlcData("D1026", (ushort)result.materialCollection.Count);//发送2号滚筒线工序数据
-
- }
- }
-
-
-
- }
-
- /// <summary>
- /// 1号滚筒线数据下发 2022/7/4 新增
- /// </summary>
- private void LOneRecipeDataToPlc()
- {
- if (OutputMaterialQuene.Count == 0 && InputMaterialQuene.Count == 0 && !ErrorRecipe)
- {
- if (globalVar.LOneCurrentRecipeName != string.Empty)
- {
- MessageLog.GetInstance.ShowUserLog($"【1】号滚筒线【{globalVar.LOneCurrentRecipeName}】 配方制作完成");
- globalVar.LOneCurrentRecipeName = string.Empty;
-
- }
- }
- if (RecipeQuene.Count > 0 && OutputMaterialQuene.Count == 0 && InputMaterialQuene.Count == 0)//后续添加其它限制条件
- {
- if (globalVar.LOneFryPotSerial == 1)
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_1.goodsName = string.Empty; }));
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_1.workflows = new ObservableCollection<WorkflowModel>(); }));
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LOneFryPotSerial, IsRun.Stop);
- }
- if (globalVar.LOneFryPotSerial == 4)
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_4.goodsName = string.Empty; }));
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_4.workflows = new ObservableCollection<WorkflowModel>(); }));
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LOneFryPotSerial, IsRun.Stop);
- }
- if (RecipeQuene.TryDequeue(out NewRecipeModel result))
- {
- ErrorRecipe = false;
- int headNum = result.materialCollection[0].MaterialLoc / 100;
- globalVar.LOneMaterialNum = result.materialCollection.Count;
- globalVar.LOneFryPotSerial = headNum;
- globalVar.LOneCurrentRecipeName = result.RecipeName;
- AgvViewModel.GetInstance().Set滚筒线上数量(1, globalVar.LOneMaterialNum.ToString());
- MessageLog.GetInstance.ShowUserLog($"【1】号滚筒线开始制作【{result.RecipeName}】 配方");
- for (int i = 0; i < result.materialCollection.Count; i++) //遍历单个配方中所有物料
- {
- if (result.materialCollection.Count <= 8 && result.materialCollection[i].MaterialLoc % 100 == i + 1 && result.materialCollection[i].MaterialLoc / 100 == headNum && (headNum == 1 || headNum == 4))
- {
- if (headNum == 1)//炒锅1
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_1.goodsName = result.RecipeName; }));
- }
- else//炒锅4
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_4.goodsName = result.RecipeName; }));
- }
- //将配方中原料加入新的队列
- InputMaterialQuene.Enqueue(new MaterialInfo()
- {
- materialType = result.materialCollection[i],
- materialId = result.RecipeId
- });
- RollerOneDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight);//1号滚筒线桶号以及重量数据下发
- }
- else
- {
- MessageLog.GetInstance.ShowUserLog($"【1】号滚筒线配方桶号配置错误,取消【{result.RecipeName}】配方制作");
- InputMaterialQuene.Clear();
- ErrorRecipe = true;
- return;
- }
- }
- DeviceOperate.GetInstance.WritePlcData("D1009", (ushort)result.materialCollection.Count);//发送1号滚筒线工序数据
-
- }
- }
-
-
-
- }
-
- /// <summary>
- /// 数据下发PLC
- /// </summary>
- //public void RecipeDataToPlc()
- //{
- // if (RecipeQuene.Count > 0 && OutputMaterialQuene.Count == 0 && InputMaterialQuene.Count == 0)//后续添加其它限制条件
- // {
- // //NewRecipeModel newRecipe = new NewRecipeModel();
- // //MaterialType material = new MaterialType();
- // if (RecipeQuene.TryDequeue(out NewRecipeModel result))
- // {
- // //newRecipe = result;
- // MessageLog.GetInstance.ShowRunLog($"开始制作【{result.RecipeName}】 配方");
- // //for (int k = 0; k < newRecipe.materialCollection.Count - 1; k++)
- // //{
- // // for (int j = 0; j < newRecipe.materialCollection.Count - 1 - k; j++)
- // // {
- // // if (newRecipe.materialCollection[j].MaterialLoc > newRecipe.materialCollection[j + 1].MaterialLoc)
- // // {
- // // material = newRecipe.materialCollection[j];
- // // // newRecipe.materialCollection[j] = null;
- // // newRecipe.materialCollection[j] = newRecipe.materialCollection[j + 1];
- // // // newRecipe.materialCollection[j + 1] = null;
- // // newRecipe.materialCollection[j + 1] = material;
- // // }
- // // }
- // //}
- // for (int i = 0; i < result.materialCollection.Count; i++) //遍历单个配方中所有物料
- // {
- // //将配方中原料加入新的队列
- // InputMaterialQuene.Enqueue(new MaterialInfo()
- // {
- // materialType = result.materialCollection[i],
- // materialId = result.RecipeId
- // });
- // ushort n = result.materialCollection[i].MaterialLoc;
- // switch (n / 100)
- // {
- // case 1:
- // case 4: RollerOneDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight); break;//1号滚筒线桶号以及重量数据下发
- // case 2:
- // case 5: RollerTwoDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight); break;//2号滚筒线桶号以及重量数据下发
- // case 3: RollerThreeDataWrite(i, result.materialCollection[i].MaterialLoc, result.materialCollection[i].MaterialWeight); break;//3号滚筒线桶号以及重量数据下发
- // }
- // }
- // switch (result.materialCollection[0].MaterialLoc / 100)
- // {
- // case 1:
- // DeviceOperate.GetInstance.WritePlcData("D1009", (ushort)result.materialCollection.Count); break;//发送1号滚筒线工序数据
- // case 2:
- // DeviceOperate.GetInstance.WritePlcData("D1026", (ushort)result.materialCollection.Count); break;//发送2号滚筒线工序数据
- // case 3:
- // DeviceOperate.GetInstance.WritePlcData("D1043", (ushort)result.materialCollection.Count); break;//发送3号滚筒线工序数据
- // }
- // }
- // }
-
- //}
- /// <summary>
- /// AGV到配方线体1装桶以及出料到炒锅
- /// </summary>
- //public void AgvLoadRoller()
- //{
- // //lineAlarm = 0;
- // if (InputMaterialQuene.Count > 0)
- // {
- // switch (InputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- // {
- // case 1:
- // case 4: AgvToLineOneLoadRoller(); AgvFromLineOneToFryPot(); break;//AGV到1号线体装桶
- // case 2:
- // case 5: AgvToLineTwoLoadRoller(); AgvFromLineTwoToFryPot(); break;//AGV到2号线体装桶
- // case 3: AgvToLineThreeLoadRoller(); AgvFromLineThreeToFryPot(); break;//AGV到3号线体装桶
- // }
- // }
-
- //}
- /// <summary>
- /// AGV到配方线体1装桶以及出料到炒锅
- /// </summary>
- public void LOneLoadRoller()
- {
- if (InputMaterialQuene.Count > 0)
- {
- AgvToLineOneLoadRoller();
- AgvFromLineOneToFryPot();//AGV到1号线体装桶
- }
- }
- /// <summary>
- /// AGV到配方线体2装桶以及出料到炒锅
- /// </summary>
- public void LTwoAgvLoadRoller()
- {
- if (LTwoInputMaterialQuene.Count > 0)
- {
-
- AgvToLineTwoLoadRoller();
- AgvFromLineTwoToFryPot();//AGV到2号线体装桶
-
-
- }
- }
- /// <summary>
- /// AGV到配方线体3装桶以及出料到炒锅
- /// </summary>
- public void LThreeAgvLoadRoller()
- {
- if (LThreeInputMaterialQuene.Count > 0)
- {
-
- AgvToLineThreeLoadRoller();
- AgvFromLineThreeToFryPot();//AGV到2号线体装桶
-
-
- }
- }
- /// <summary>
- /// AGV从炒锅送料位置到倒料过程处理
- /// </summary>
- //public void FryPotInputMaterial()
- //{
- // if (OutputMaterialQuene.Count > 0 && !globalVar.InOrOutputLock)
- // {
- // while (!agvArriveUnLoad)//等待agv到达炒锅位置
- // {
- // Thread.Sleep(5);
- // if (globalVar.ExitMainTask)
- // return;
- // }
- // AgvArriveFryPotSingleSetDown();
- // FryPotRollerTroubleCheck();
- // if (FryPotAlarm == 1)//炒锅滚筒无故障
- // {
- // //炒锅滚筒进料运行到位处理
- // FryPotInputMaterialRollerOperate();
- // globalVar.InOrOutputLock = true;
- // }
-
- // }
-
- //}
- /// <summary>
- /// 线体1的AGV从炒锅送料位置到倒料过程处理
- /// </summary>
- public void LOneFryPotInputMaterial()
- {
- if (OutputMaterialQuene.Count > 0 && globalVar.agvArriveUnLoad && globalVar.AgvToFryPot && !globalVar.PotOneInputMaterialArrive)
- {
- //if (globalVar.LOneFryPotSerial == 1)
- //{
- // AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.yc_1_1);
- //}
- //else if (globalVar.LOneFryPotSerial == 4)
- //{
- // AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.yc_1_4);
- //}
-
- MessageLog.GetInstance.ShowRunLog($"AGV到达【{globalVar.LOneFryPotSerial}】号炒锅下料位置");
- AgvArriveFryPotOneOrFourSingleSetDown();
- globalVar.agvArriveUnLoad = false;
- globalVar.PotOneInputMaterialArrive = true;
- }
- }
-
- public void LOneFallMaterial()
- {
- if (!globalVar.InOrOutputLock && (globalVar.fryPotOne.InputMaterialArrivedSingle == 1 || globalVar.fryPotFour.InputMaterialArrivedSingle == 1) && globalVar.PotOneInputMaterialArrive && OutputMaterialQuene.Count > 0 && !globalVar.PotOneOutputRollerArrive)
- {
- FryPotOneRollerTroubleCheck();
- if (FryPotAlarm == 1 || FryPotFourAlarm == 1)//炒锅滚筒无故障
- {
- if (globalVar.LOneFryPotSerial == 1)
- {
-
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_1.workflows.Add(new WorkflowModel { id = globalVar.LOneCurrentCookingStep, Name = OutputMaterialQuene.ElementAt(0).materialType.MaterialName, isBool = IsBool.Yes }); }));
-
- }
- else
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_4.workflows.Add(new WorkflowModel { id = globalVar.LOneCurrentCookingStep, Name = OutputMaterialQuene.ElementAt(0).materialType.MaterialName, isBool = IsBool.Yes }); }));
- }
- AgvViewModel.GetInstance().Set小车是否承载物品(1, IsBool.No);
- //炒锅滚筒进料运行到位处理
- FryPotOneOrFourInputMaterialRollerOperate();
- AgvFromFryPotOneOrFourToClean();//上游下发搬运任务给AGV
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LOneFryPotSerial, IsRun.Start);
- globalVar.InOrOutputLock = true;
- globalVar.PotOneOutputRollerArrive = true;
- }
- }
- }
- /// <summary>
- /// 线体2的AGV从炒锅送料位置到倒料过程处理
- /// </summary>
- public void LTwoFryPotInputMaterial()
- {
- if (LTwoOutputMaterialQuene.Count > 0 && globalVar.LTwoagvArriveUnLoad && globalVar.LTwoAgvToFryPot && !globalVar.LTwoPotInputMaterialArrive)
- {
- //if (globalVar.LTwoFryPotSerial == 2)
- //{
- // AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.yc_2_2);
- //}
- //else if (globalVar.LTwoFryPotSerial == 5)
- //{
- // AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.yc_2_5);
- //}
- MessageLog.GetInstance.ShowRunLog($"AGV到达【{globalVar.LTwoFryPotSerial}】号炒锅下料位置");
- AgvArriveFryPotTwoOrFiveSingleSetDown();
- globalVar.LTwoagvArriveUnLoad = false;
- globalVar.LTwoPotInputMaterialArrive = true;
- }
- }
- public void LTwoFallMaterial()
- {
- if (!globalVar.LTwoInOrOutputLock && (globalVar.fryPotTwo.InputMaterialArrivedSingle == 1 || globalVar.fryPotFive.InputMaterialArrivedSingle == 1) && globalVar.LTwoPotInputMaterialArrive && LTwoOutputMaterialQuene.Count > 0 && !globalVar.LTwoPotOutputRollerArrive)
- {
- FryPotTwoRollerTroubleCheck();
- if (FryPotTwoAlarm == 1 || FryPotFiveAlarm == 1)//炒锅滚筒无故障
- {
- if (globalVar.LTwoFryPotSerial == 2)
- {
-
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_2.workflows.Add(new WorkflowModel { id = globalVar.LTwoCurrentCookingStep, Name = LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName, isBool = IsBool.Yes }); }));
-
- }
- else
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_5.workflows.Add(new WorkflowModel { id = globalVar.LTwoCurrentCookingStep, Name = LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName, isBool = IsBool.Yes }); }));
- }
- AgvViewModel.GetInstance().Set小车是否承载物品(2, IsBool.No);
- //炒锅滚筒进料运行到位处理
- FryPotTwoOrFiveInputMaterialRollerOperate();
- AgvFromFryPotTwoOrFiveToClean();//上游下发搬运任务给AGV
- AgvViewModel.GetInstance().Set启动或停止炒锅(globalVar.LTwoFryPotSerial, IsRun.Start);
- globalVar.LTwoInOrOutputLock = true;
- globalVar.LTwoPotOutputRollerArrive = true;
- }
- }
- }
- /// <summary>
- /// 线体3的AGV从炒锅送料位置到倒料过程处理
- /// </summary>
- public void LThreeFryPotInputMaterial()
- {
- if (LThreeOutputMaterialQuene.Count > 0 && globalVar.LThreeagvArriveUnLoad && globalVar.LThreeAgvToFryPot && !globalVar.LThreePotInputMaterialArrive)
- {
- // AgvViewModel.GetInstance().Set小车运动(3, CartMotionTrajectory.yc_3_3);
- MessageLog.GetInstance.ShowRunLog("AGV到达【3】号炒锅下料位置");
- AgvArriveFryPotThreeSingleSetDown();
- globalVar.LThreeagvArriveUnLoad = false;
- globalVar.LThreePotInputMaterialArrive = true;
- }
- }
-
- public void LThreeFallMaterial()
- {
- if (!globalVar.LThreeInOrOutputLock && globalVar.fryPotThree.InputMaterialArrivedSingle == 1 && globalVar.LThreePotInputMaterialArrive && LThreeOutputMaterialQuene.Count > 0 && !globalVar.LThreePotOutputRollerArrive)
- {
- FryPotThreeRollerTroubleCheck();
- if (FryPotThreeAlarm == 1)//炒锅滚筒无故障
- {
- Application.Current.Dispatcher.Invoke(new Action(() => { AgvViewModel.GetInstance().wokModel_3.workflows.Add(new WorkflowModel { id = globalVar.LThreeCurrentCookingStep, Name = LThreeOutputMaterialQuene.ElementAt(0).materialType.MaterialName, isBool = IsBool.Yes }); }));
- AgvViewModel.GetInstance().Set小车是否承载物品(3, IsBool.No);
- //炒锅滚筒进料运行到位处理
- FryPotThreeInputMaterialRollerOperate();
- AgvFromFryPotThreeToClean();//上游下发搬运任务给AGV
- AgvViewModel.GetInstance().Set启动或停止炒锅(3, IsRun.Start);
- globalVar.LThreeInOrOutputLock = true;
- globalVar.LThreePotOutputRollerArrive = true;
- }
- }
- }
- /// <summary>
- /// 炒锅出桶
- /// </summary>
- //public void FryPotOutputMaterial()
- //{
- // if (OutputMaterialQuene.Count > 0 && globalVar.InOrOutputLock)
- // {
- // AgvFromFryPotToClean();//上游下发搬运任务给AGV
- // while (!agvArriveUpLoad)//等待agv到达炒锅位置
- // {
- // Thread.Sleep(5);
- // if (globalVar.ExitMainTask)
- // return;
- // }
- // agvArriveUpLoad = false;
- // AgvArriveFryPotOutEmptyRollerSingleSetDown();//暂时考虑agv送完料后原地等待,不加条件,直接发送到位信号
- // FryPotRollerTroubleCheck();
- // if (FryPotAlarm == 1)//无故障
- // {
- // FryPotOutEmpetyRollerOperate();
- // if (OutputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))//空桶出桶后,出料原料队列移除对应原料
- // {
- // while (!agvFryPotEmptyRollerArrive)//等待AGV拿到出桶空桶
- // {
- // Thread.Sleep(5);
- // if (globalVar.ExitMainTask)
- // return;
- // }
- // //AGV拿到空桶,让AGV运桶到指定位置,同时可以让下一个AGV从线体装料运到炒锅
- // globalVar.AllowAgvToLineLoadRoller = true;
- // globalVar.InOrOutputLock = false;
- // }
- // }
-
- // }
- //}
- /// <summary>
- /// 线体1对应炒锅出桶
- /// </summary>
- public void LOneFryPotOutputMaterial()
- {
- if (OutputMaterialQuene.Count > 0 && globalVar.InOrOutputLock && globalVar.agvArriveUpLoad && globalVar.PotOneOutputRollerArrive && !globalVar.AgvArrivePot)
- {
-
- MessageLog.GetInstance.ShowRunLog($"AGV到达【{globalVar.LOneFryPotSerial}】号炒锅空桶上料位置");
- AgvArriveFryPotOneOrFourOutEmptyRollerSingleSetDown();//暂时考虑agv送完料后原地等待,不加条件,直接发送到位信号
- globalVar.agvArriveUpLoad = false;
- globalVar.AgvArrivePot = true;
- }
- }
- public void LOneEmptyOperate()
- {
- if ((globalVar.fryPotOne.EmptyBarrelArrivedSingle == 1 || globalVar.fryPotFour.EmptyBarrelArrivedSingle == 1) && OutputMaterialQuene.Count > 0 && globalVar.AgvArrivePot)
- {
-
- FryPotOneRollerTroubleCheck();
- if (FryPotAlarm == 1 || FryPotFourAlarm == 1)//无故障
- {
- if (globalVar.agvFryPotEmptyRollerArrive)
- {
- FryPotOneOrFourOutEmpetyRollerOperate();
- if (OutputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))//空桶出桶后,出料原料队列移除对应原料
- {
- //AgvViewModel.GetInstance().Set小车是否承载物品(1, IsBool.OnllYes);
- //if (globalVar.LOneFryPotSerial == 1)
- //{
- // AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.hs_1);
- //}
- //else if (globalVar.LOneFryPotSerial == 4)
- //{
- // AgvViewModel.GetInstance().Set小车运动(1, CartMotionTrajectory.hs_4);
- //}
- globalVar.agvFryPotEmptyRollerArrive = false;
- globalVar.InOrOutputLock = false;
- globalVar.LOneMaterialNum--;
- MessageLog.GetInstance.ShowRunLog($"AGV在【{globalVar.LOneFryPotSerial}】号炒锅将空桶回收到4号滚筒线");
- //AGV拿到空桶,让AGV运桶到指定位置,同时可以让下一个AGV从线体装料运到炒锅
- globalVar.AllowAgvToLineLoadRoller = true;
- globalVar.LoadRoller = false;
- globalVar.AgvToFryPot = false;
- globalVar.PotOneInputMaterialArrive = false;
- globalVar.PotOneOutputRollerArrive = false;
- globalVar.AgvArrivePot = false;
-
- }
- }
- }
- }
-
- }
-
- /// <summary>
- /// 线体2对应炒锅出桶
- /// </summary>
- public void LTwoFryPotOutputMaterial()
- {
- if (LTwoOutputMaterialQuene.Count > 0 && globalVar.LTwoInOrOutputLock && globalVar.agvArriveLTwoUpLoad && globalVar.LTwoPotOutputRollerArrive && !globalVar.LTwoAgvArrivePot)
- {
-
- MessageLog.GetInstance.ShowRunLog($"AGV到达【{globalVar.LTwoFryPotSerial}】号炒锅空桶上料位置");
- AgvArriveFryPotTwoOrFiveOutEmptyRollerSingleSetDown();//暂时考虑agv送完料后原地等待,不加条件,直接发送到位信号
- globalVar.agvArriveLTwoUpLoad = false;
- globalVar.LTwoAgvArrivePot = true;
- }
- }
-
- public void LTwoEmptyOperate()
- {
- if ((globalVar.fryPotTwo.EmptyBarrelArrivedSingle == 1 || globalVar.fryPotFive.EmptyBarrelArrivedSingle == 1) && LTwoOutputMaterialQuene.Count > 0 && globalVar.LTwoAgvArrivePot)
- {
- FryPotTwoRollerTroubleCheck();
- if (FryPotTwoAlarm == 1 || FryPotFiveAlarm == 1)//无故障
- {
- if (globalVar.LTwoagvFryPotEmptyRollerArrive)
- {
- FryPotTwoOrFiveOutEmpetyRollerOperate();
- if (LTwoOutputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))//空桶出桶后,出料原料队列移除对应原料
- {
- //AgvViewModel.GetInstance().Set小车是否承载物品(2, IsBool.OnllYes);
- //if (globalVar.LTwoFryPotSerial == 2)
- //{
- // AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.hs_2);
- //}
- //else if (globalVar.LTwoFryPotSerial == 5)
- //{
- // AgvViewModel.GetInstance().Set小车运动(2, CartMotionTrajectory.hs_5);
- //}
- globalVar.LTwoagvFryPotEmptyRollerArrive = false;
- globalVar.LTwoInOrOutputLock = false;
- globalVar.LTwoMaterialNum--;
- MessageLog.GetInstance.ShowRunLog($"AGV在【{globalVar.LTwoFryPotSerial}】号炒锅将空桶回收到4号滚筒线");
- //AGV拿到空桶,让AGV运桶到指定位置,同时可以让下一个AGV从线体装料运到炒锅
- globalVar.AllowAgvToLineTwoLoadRoller = true;
- globalVar.LTwoLoadRoller = false;
- globalVar.LTwoAgvToFryPot = false;
- globalVar.LTwoPotInputMaterialArrive = false;
- globalVar.LTwoPotOutputRollerArrive = false;
- globalVar.LTwoAgvArrivePot = false;
-
- }
- }
- }
- }
-
- }
- /// <summary>
- /// 线体3对应炒锅出桶
- /// </summary>
- public void LThreeFryPotOutputMaterial()
- {
- if (LThreeOutputMaterialQuene.Count > 0 && globalVar.LThreeInOrOutputLock && globalVar.agvArriveLThreeUpLoad && globalVar.LThreePotOutputRollerArrive && !globalVar.LThreeAgvArrivePot)
- {
-
- MessageLog.GetInstance.ShowRunLog($"AGV到达【{globalVar.LThreeFryPotSerial}】号炒锅空桶上料位置");
- AgvArriveFryPotThreeOutEmptyRollerSingleSetDown();//暂时考虑agv送完料后原地等待,不加条件,直接发送到位信号
- globalVar.agvArriveLThreeUpLoad = false;
- globalVar.LThreeAgvArrivePot = true;
- }
- }
-
- public void LThreeEmptyOperate()
- {
- if (globalVar.fryPotThree.EmptyBarrelArrivedSingle == 1 && LThreeOutputMaterialQuene.Count > 0 && globalVar.LThreeAgvArrivePot)
- {
- FryPotThreeRollerTroubleCheck();
- if (FryPotThreeAlarm == 1)//无故障
- {
- if (globalVar.LThreeagvFryPotEmptyRollerArrive)
- {
- FryPotThreeOutEmpetyRollerOperate();
- if (LThreeOutputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))//空桶出桶后,出料原料队列移除对应原料
- {
- //AgvViewModel.GetInstance().Set小车是否承载物品(3, IsBool.OnllYes);
- //AgvViewModel.GetInstance().Set小车运动(3, CartMotionTrajectory.hs_3);
- globalVar.LThreeagvFryPotEmptyRollerArrive = false;
- globalVar.LThreeInOrOutputLock = false;
- globalVar.LThreeMaterialNum--;
- MessageLog.GetInstance.ShowRunLog($"AGV在【{globalVar.LThreeFryPotSerial}】号炒锅将空桶回收到4号滚筒线");
- //AGV拿到空桶,让AGV运桶到指定位置,同时可以让下一个AGV从线体装料运到炒锅
- globalVar.AllowAgvToLineThreeLoadRoller = true;
- globalVar.LThreeLoadRoller = false;
- globalVar.LThreeAgvToFryPot = false;
- globalVar.LThreePotInputMaterialArrive = false;
- globalVar.LThreePotOutputRollerArrive = false;
- globalVar.LThreeAgvArrivePot = false;
-
- }
- }
- }
- }
-
- }
- /// <summary>
- /// 1号线体对应空桶清洗
- /// </summary>
- public void LOneEmptyRollerToClean()
- {
- if (globalVar.EmptyRollerUnLoadcCom)//agv在4号线体下料完成
- {
- erp: string id = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- {
- goto erp;
- }
- string info = AGVHelper.GetInstance.AgvLeaveFryPotOne(id);
- LOnerobotJobId = id;
- FryCarryTaskErrorCodeAnalysis(info, 1);
- globalVar.AllowAgvToLineLoadRoller = true;
- globalVar.LoadRoller = false;
- globalVar.AgvToFryPot = false;
- globalVar.PotOneInputMaterialArrive = false;
- globalVar.PotOneOutputRollerArrive = false;
- globalVar.AgvArrivePot = false;
- }
- }
- /// <summary>
- /// 2号线体对应空桶清洗
- /// </summary>
- public void LTwoEmptyRollerToClean()
- {
- if (globalVar.LTwoEmptyRollerUnLoadcCom)//agv在4号线体下料完成
- {
- globalVar.AllowAgvToLineTwoLoadRoller = true;
- globalVar.LTwoLoadRoller = false;
- globalVar.LTwoAgvToFryPot = false;
- globalVar.LTwoPotInputMaterialArrive = false;
- globalVar.LTwoPotOutputRollerArrive = false;
- globalVar.LTwoAgvArrivePot = false;
- }
- }
- /// <summary>
- /// 3号线体对应空桶清洗
- /// </summary>
- public void LThreeEmptyRollerToClean()
- {
- if (globalVar.LThreeEmptyRollerUnLoadcCom)//agv在4号线体下料完成
- {
- globalVar.AllowAgvToLineThreeLoadRoller = true;
- globalVar.LThreeLoadRoller = false;
- globalVar.LThreeAgvToFryPot = false;
- globalVar.LThreePotInputMaterialArrive = false;
- globalVar.LThreePotOutputRollerArrive = false;
- globalVar.LThreeAgvArrivePot = false;
- }
- }
-
- /// <summary>
- /// 炒锅滚筒进料运行到位处理
- /// </summary>
- public void FryPotInputMaterialRollerOperate(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- while (globalVar.fryPotOne.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【1】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 2:
- while (globalVar.fryPotTwo.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【2】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 3:
- while (globalVar.fryPotThree.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【3】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 4:
- while (globalVar.fryPotFour.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【4】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 5:
- while (globalVar.fryPotFive.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【5】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- }
-
- }
- /// <summary>
- /// 炒锅1,4滚筒进料运行到位处理
- /// </summary>
- public void FryPotOneOrFourInputMaterialRollerOperate()
- {
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- //while (globalVar.fryPotOne.InputMaterialArrivedSingle == 0)
- //{
- // Thread.Sleep(5); if (globalVar.ExitMainTask)
- // return;
- //}
- MessageLog.GetInstance.ShowRunLog($"炒锅【1】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 4:
- //while (globalVar.fryPotFour.InputMaterialArrivedSingle == 0)
- //{
- // Thread.Sleep(5); if (globalVar.ExitMainTask)
- // return;
- //}
- MessageLog.GetInstance.ShowRunLog($"炒锅【4】原料:{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- }
- }
- /// <summary>
- /// 炒锅2,5滚筒进料运行到位处理
- /// </summary>
- public void FryPotTwoOrFiveInputMaterialRollerOperate()
- {
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2:
- while (globalVar.fryPotTwo.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【2】原料:{LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- case 5:
- while (globalVar.fryPotFive.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【5】原料:{LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料"); break;
- }
- }
- public void FryPotThreeInputMaterialRollerOperate()
- {
- while (globalVar.fryPotThree.InputMaterialArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【3】原料:{LThreeOutputMaterialQuene.ElementAt(0).materialType.MaterialName}已到进料位置,准备倒料");
- }
- /// <summary>
- /// 炒锅滚筒空桶出桶处理
- /// </summary>
- public void FryPotOutEmpetyRollerOperate(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- while (globalVar.fryPotOne.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【1】原料:【{queue.ElementAt(0).materialType.MaterialName}】空桶到达出桶位置,正在出桶"); break;
- case 2:
- while (globalVar.fryPotTwo.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【2】原料:【{queue.ElementAt(0).materialType.MaterialName}】空桶到达出桶位置,正在出桶"); break;
- case 3:
- while (globalVar.fryPotThree.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【3】原料:【{queue.ElementAt(0).materialType.MaterialName}】空桶到达出桶位置,正在出桶"); break;
- case 4:
- while (globalVar.fryPotFour.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【4】原料:【{queue.ElementAt(0).materialType.MaterialName}】空桶到达出桶位置,正在出桶"); break;
- case 5:
- while (globalVar.fryPotFive.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【5】原料:【{queue.ElementAt(0).materialType.MaterialName}】空桶到达出桶位置,正在出桶"); break;
-
- }
- }
- /// <summary>
- /// 炒锅1,4滚筒空桶出桶处理
- /// </summary>
- public void FryPotOneOrFourOutEmpetyRollerOperate()
- {
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- //while (globalVar.fryPotOne.EmptyBarrelArrivedSingle == 0)
- //{
- // Thread.Sleep(5); if (globalVar.ExitMainTask)
- // return;
- //}
- MessageLog.GetInstance.ShowRunLog($"炒锅【1】原料:【{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}】空桶上料完成"); break;
- case 4:
- //while (globalVar.fryPotFour.EmptyBarrelArrivedSingle == 0)
- //{
- // Thread.Sleep(5); if (globalVar.ExitMainTask)
- // return;
- //}
- MessageLog.GetInstance.ShowRunLog($"炒锅【4】原料:【{OutputMaterialQuene.ElementAt(0).materialType.MaterialName}】空桶上料完成"); break;
- }
- }
- /// <summary>
- /// 炒锅2,5滚筒空桶出桶处理
- /// </summary>
- public void FryPotTwoOrFiveOutEmpetyRollerOperate()
- {
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2:
- while (globalVar.fryPotTwo.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【2】原料:【{LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName}】空桶上料完成"); break;
- case 5:
- while (globalVar.fryPotFive.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【5】原料:【{LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialName}】空桶上料完成"); break;
- }
- }
- /// <summary>
- /// 炒锅3滚筒空桶出桶处理
- /// </summary>
- public void FryPotThreeOutEmpetyRollerOperate()
- {
- while (globalVar.fryPotThree.EmptyBarrelArrivedSingle == 0)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog($"炒锅【3】原料:【{LThreeOutputMaterialQuene.ElementAt(0).materialType.MaterialName}】空桶上料完成");
- }
- /// <summary>
- /// 发送agv送料就位信号至PLC(线体到炒锅)
- /// </summary>
- public void AgvArriveFryPotSingleSetDown(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1: DeviceOperate.GetInstance.WritePlcData("D1055", 1); break;//agv到炒锅1送料就位信号
- case 2: DeviceOperate.GetInstance.WritePlcData("D1056", 1); break;//agv到炒锅2送料就位信号
- case 3: DeviceOperate.GetInstance.WritePlcData("D1057", 1); break;//agv到炒锅3送料就位信号
- case 4: DeviceOperate.GetInstance.WritePlcData("D1058", 1); break;//agv到炒锅4送料就位信号
- case 5: DeviceOperate.GetInstance.WritePlcData("D1059", 1); break;//agv到炒锅5送料就位信号
- }
- }
- /// <summary>
- /// 发送agv送料就位信号至PLC(线体1到炒锅)
- /// </summary>
- public void AgvArriveFryPotOneOrFourSingleSetDown()
- {
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1: DeviceOperate.GetInstance.WritePlcData("D1055", 1); break;//agv到炒锅1送料就位信号
- case 4: DeviceOperate.GetInstance.WritePlcData("D1058", 1); break;//agv到炒锅4送料就位信号
- }
- }
- /// <summary>
- /// 发送agv送料就位信号至PLC(线体2到炒锅)
- /// </summary>
- public void AgvArriveFryPotTwoOrFiveSingleSetDown()
- {
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2: DeviceOperate.GetInstance.WritePlcData("D1056", 1); break;//agv到炒锅2送料就位信号
- case 5: DeviceOperate.GetInstance.WritePlcData("D1059", 1); break;//agv到炒锅5送料就位信号
- }
- }
- /// <summary>
- /// 发送agv送料就位信号至PLC(线体3到炒锅)
- /// </summary>
- public void AgvArriveFryPotThreeSingleSetDown()
- {
- DeviceOperate.GetInstance.WritePlcData("D1057", 1); //agv到炒锅3送料就位信号
- }
- /// <summary>
- /// 发送agv回桶就位信号至PLC
- /// </summary>
- public void AgvArriveFryPotOutEmptyRollerSingleSetDown(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1: DeviceOperate.GetInstance.WritePlcData("D1060", 1); break;//agv到炒锅1送料就位信号
- case 2: DeviceOperate.GetInstance.WritePlcData("D1061", 1); break;//agv到炒锅2送料就位信号
- case 3: DeviceOperate.GetInstance.WritePlcData("D1062", 1); break;//agv到炒锅3送料就位信号
- case 4: DeviceOperate.GetInstance.WritePlcData("D1063", 1); break;//agv到炒锅4送料就位信号
- case 5: DeviceOperate.GetInstance.WritePlcData("D1064", 1); break;//agv到炒锅5送料就位信号
- }
- }
-
- public void AgvArriveFryPotOneOrFourOutEmptyRollerSingleSetDown()
- {
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1: DeviceOperate.GetInstance.WritePlcData("D1060", 1); break;//agv到炒锅1送料就位信号
- case 4: DeviceOperate.GetInstance.WritePlcData("D1063", 1); break;//agv到炒锅4送料就位信号
- }
- }
- public void AgvArriveFryPotTwoOrFiveOutEmptyRollerSingleSetDown()
- {
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2: DeviceOperate.GetInstance.WritePlcData("D1061", 1); break;//agv到炒锅2送料就位信号
- case 5: DeviceOperate.GetInstance.WritePlcData("D1064", 1); break;//agv到炒锅5送料就位信号
- }
- }
- public void AgvArriveFryPotThreeOutEmptyRollerSingleSetDown()
- {
- DeviceOperate.GetInstance.WritePlcData("D1062", 1);//agv到炒锅3送料就位信号
- }
- /// <summary>
- /// AGV离开炒锅运送空桶任务
- /// </summary>
- public void AgvFromFryPotToClean(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- erp: string id = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- {
- goto erp;
- }
- string info = AGVHelper.GetInstance.AgvLeaveFryPotOne(id);
- LOnerobotJobId = id;
- FryCarryTaskErrorCodeAnalysis(info, 1); break;
- case 2:
- erp1: string id1 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id1 == LTworobotJobId)
- {
- goto erp1;
- }
- string info1 = AGVHelper.GetInstance.AgvLeaveFryPotTwo(id1);
- LTworobotJobId = id1;
- FryCarryTaskErrorCodeAnalysis(info1, 2); break;
- case 3:
- erp2: string id2 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id2 == LThreerobotJobId)
- {
- goto erp2;
- }
- string info2 = AGVHelper.GetInstance.AgvLeaveFryPotThree(id2);
- LThreerobotJobId = id2;
- FryCarryTaskErrorCodeAnalysis(info2, 3); break;
- case 4:
- erp3: string id3 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id3 == LOnerobotJobId)
- {
- goto erp3;
- }
- string info3 = AGVHelper.GetInstance.AgvLeaveFryPotFour(id3);
- LOnerobotJobId = id3;
- FryCarryTaskErrorCodeAnalysis(info3, 4); break;
- case 5:
- erp4: string id4 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id4 == LTworobotJobId)
- {
- goto erp4;
- }
- string info4 = AGVHelper.GetInstance.AgvLeaveFryPotFive(id4);
- LTworobotJobId = id4;
- FryCarryTaskErrorCodeAnalysis(info4, 5); break;
- }
- }
- /// <summary>
- /// AGV离开炒锅1,4运送空桶任务
- /// </summary>
- public void AgvFromFryPotOneOrFourToClean()
- {
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- erp: string id = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- {
- goto erp;
- }
- MessageLog.GetInstance.ShowRunLog("AGV执行【1】号炒锅空桶回收任务");
- string info = AGVHelper.GetInstance.AgvLeaveFryPotOne(id);
- LOnerobotJobId = id;
- FryCarryTaskErrorCodeAnalysis(info, 1); break;
- case 4:
- erp3: string id3 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id3 == LOnerobotJobId || id3 == LTworobotJobId || id3 == LThreerobotJobId || id3 == LFourrobotJobId)
- {
- goto erp3;
- }
- MessageLog.GetInstance.ShowRunLog("AGV执行【4】号炒锅空桶回收任务");
- string info3 = AGVHelper.GetInstance.AgvLeaveFryPotFour(id3);
- LOnerobotJobId = id3;
- FryCarryTaskErrorCodeAnalysis(info3, 4); break;
- }
- }
- /// <summary>
- /// AGV离开炒锅2,5运送空桶任务
- /// </summary>
- public void AgvFromFryPotTwoOrFiveToClean()
- {
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2:
- erp1: string id1 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id1 == LOnerobotJobId || id1 == LTworobotJobId || id1 == LThreerobotJobId || id1 == LFourrobotJobId)
- {
- goto erp1;
- }
- MessageLog.GetInstance.ShowRunLog("AGV执行【2】号炒锅空桶回收任务");
- string info1 = AGVHelper.GetInstance.AgvLeaveFryPotTwo(id1);
- LTworobotJobId = id1;
- FryCarryTaskErrorCodeAnalysis(info1, 2); break;
- case 5:
- erp4: string id4 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id4 == LOnerobotJobId || id4 == LTworobotJobId || id4 == LThreerobotJobId || id4 == LFourrobotJobId)
- {
- goto erp4;
- }
- MessageLog.GetInstance.ShowRunLog("AGV执行【5】号炒锅空桶回收任务");
- string info4 = AGVHelper.GetInstance.AgvLeaveFryPotFive(id4);
- LTworobotJobId = id4;
- FryCarryTaskErrorCodeAnalysis(info4, 5); break;
- }
- }
- /// <summary>
- /// AGV离开炒锅3运送空桶任务
- /// </summary>
- public void AgvFromFryPotThreeToClean()
- {
- erp2: string id2 = Guid.NewGuid().ToString("N");//上游唯一ID
- if (id2 == LOnerobotJobId || id2 == LTworobotJobId || id2 == LThreerobotJobId || id2 == LFourrobotJobId)
- {
- goto erp2;
- }
- MessageLog.GetInstance.ShowRunLog("AGV执行【3】号炒锅空桶回收任务");
- string info2 = AGVHelper.GetInstance.AgvLeaveFryPotThree(id2);
- LThreerobotJobId = id2;
- FryCarryTaskErrorCodeAnalysis(info2, 3);
- }
- /// <summary>
- /// 处理agv从线体1到送料到炒锅的条件
- /// </summary>
- /// <param name="lineAlarm"></param>
- public void AgvFromLineOneToFryPot()
- {
- erp: if (AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble == 0)
- {
- if (globalVar.agvArriveUpLoad && globalVar.LoadRoller && globalVar.rollerLineOne.StationEight == InputMaterialQuene.ElementAt(0).materialType.MaterialLoc && !globalVar.AgvToFryPot)//无故障
- {
-
- MessageLog.GetInstance.ShowRunLog("AGV到达【1】号滚筒线装桶位置");
- AgvArriveLineSingelSetDown(InputMaterialQuene);
- if (InputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))
- {
- MessageLog.GetInstance.ShowRunLog($"AGV正在装载{materialInfo.materialType.MaterialLoc}号料桶");
- AgvViewModel.GetInstance().Set滚筒线状态(1, IsRun.Start);
- globalVar.LOneCurrentCookingStep++;
- OutputMaterialQuene.Enqueue(materialInfo);
- globalVar.agvArriveUpLoad = false;
- globalVar.AgvToFryPot = true;
- //原料到位,agv到位,agv自行运料到炒锅
- }
- }
- }
- else//有故障
- {
- while (AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble == 1)
- {
- Thread.Sleep(5);
- if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("线体【1】滚筒故障解除,继续运行");
- //lineAlarm = 1;
- goto erp;
- }
- }
- /// <summary>
- /// 处理agv从线体2到送料到炒锅的条件
- /// </summary>
- /// <param name="lineAlarm"></param>
- public void AgvFromLineTwoToFryPot()
- {
- erp: if (AlarmHelper<AlarmInfo>.Alarm.LTwoRollerTrouble == 0)//无故障
- {
- if (globalVar.agvArriveLTwoUpLoad && globalVar.LTwoLoadRoller && globalVar.rollerLineTwo.StationEight == LTwoInputMaterialQuene.ElementAt(0).materialType.MaterialLoc && !globalVar.LTwoAgvToFryPot)//无故障
- {
- MessageLog.GetInstance.ShowRunLog("AGV到达【2】号滚筒线装桶位置");
- AgvArriveLineSingelSetDown(LTwoInputMaterialQuene);
- if (LTwoInputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))
- {
- MessageLog.GetInstance.ShowRunLog($"AGV正在装载{materialInfo.materialType.MaterialLoc}号料桶");
- AgvViewModel.GetInstance().Set滚筒线状态(2, IsRun.Start);
- globalVar.LTwoCurrentCookingStep++;
- LTwoOutputMaterialQuene.Enqueue(materialInfo);
- globalVar.agvArriveLTwoUpLoad = false;
- globalVar.LTwoAgvToFryPot = true;
- //原料到位,agv到位,agv自行运料到炒锅
- }
-
-
- }
-
- }
- else//有故障
- {
- while (AlarmHelper<AlarmInfo>.Alarm.LTwoRollerTrouble == 1)
- {
- Thread.Sleep(5);
- if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("线体【2】滚筒故障解除,继续运行");
- // lineAlarm = 1;
- goto erp;
- }
- }
- /// <summary>
- /// 处理agv从线体3到送料到炒锅的条件
- /// </summary>
- /// <param name="lineAlarm"></param>
- public void AgvFromLineThreeToFryPot()
- {
- erp: if (AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble == 0)//无故障
- {
- if (globalVar.agvArriveLThreeUpLoad && globalVar.LThreeLoadRoller && globalVar.rollerLineThree.StationEight == LThreeInputMaterialQuene.ElementAt(0).materialType.MaterialLoc && !globalVar.LThreeAgvToFryPot)//无故障
- {
- MessageLog.GetInstance.ShowRunLog("AGV到达【3】号滚筒线装桶位置");
- AgvArriveLineSingelSetDown(LThreeInputMaterialQuene);
- if (LThreeInputMaterialQuene.TryDequeue(out MaterialInfo materialInfo))
- {
- MessageLog.GetInstance.ShowRunLog($"AGV正在装载{materialInfo.materialType.MaterialLoc}号料桶");
- AgvViewModel.GetInstance().Set滚筒线状态(3, IsRun.Start);
- globalVar.LThreeCurrentCookingStep++;
- LThreeOutputMaterialQuene.Enqueue(materialInfo);
- globalVar.agvArriveLThreeUpLoad = false;
- globalVar.LThreeAgvToFryPot = true;
- //原料到位,agv到位,agv自行运料到炒锅
- }
-
-
- }
-
- }
- else //有故障
- {
- while (AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble == 1)
- {
- Thread.Sleep(5);
- if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("线体【3】滚筒故障解除,继续运行");
- // lineAlarm = 1;
- goto erp;
- }
- }
- /// <summary>
- /// 线体搬运任务错误码分析
- /// </summary>
- /// <param name="errorCode"></param>
- /// <param name="num"></param>
- public void LineCarryTaskErrorCodeAnalysis(string errorCode, int num)
- {
- if (errorCode == "SUCCESS")
- {
- AgvViewModel.GetInstance().Set停车桩(num, IsBool.No);
- AgvViewModel.GetInstance().Set小车是否承载物品(num, IsBool.No);
- AgvViewModel.GetInstance().Set小车运动(num, AgvViewModel.GetInstance().GetCommandValue($"qc_{num}"));
- MessageLog.GetInstance.ShowRunLog($"AGV去{num}号滚筒线装桶");
- globalVar.AllowAgvToLineLoadRoller = false;
- }
- else if (errorCode == "Analysis Error")
- {
- MessageLog.GetInstance.ShowRunLog($"提示:AGV去{num}号滚筒线API调用失败,请检查");
- }
- else
- {
- MessageLog.GetInstance.ShowRunLog($"提示:AGV去{num}号滚筒线失败,错误码:{errorCode}");
- }
- }
- /// <summary>
- /// 炒锅搬运任务错误码分析
- /// </summary>
- /// <param name="errorCode"></param>
- /// <param name="num"></param>
- public void FryCarryTaskErrorCodeAnalysis(string errorCode, int num)
- {
- if (errorCode == "SUCCESS")
- {
- MessageLog.GetInstance.ShowRunLog($"AGV离开{num}号炒锅");
- }
- else if (errorCode == "Analysis Error")
- {
- MessageLog.GetInstance.ShowRunLog($"提示:AGV离开{num}号炒锅接口调用失败,请检查");
- }
- else
- {
- MessageLog.GetInstance.ShowRunLog($"提示:AGV离开{num}号炒锅失败,错误码:{errorCode}");
- }
- }
-
- public void AgvToLineOneLoadRoller()
- {
- if (AlarmHelper<AlarmInfo>.Alarm.LOneRollerTrouble == 0)//输送线无故障
- {
- if (InputMaterialQuene.Count > 0 && globalVar.AllowAgvToLineLoadRoller && globalVar.rollerLineOne.OutMaterialingSingle == 1 && !globalVar.LoadRoller)
- {
- e: string id = Guid.NewGuid().ToString("N");
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- goto e;
-
- string info = AGVHelper.GetInstance.AgvToLineOneLoadRoller(id);
- LOnerobotJobId = id;
- Thread.Sleep(500);
- LineCarryTaskErrorCodeAnalysis(info, 1);
- globalVar.LoadRoller = true;
-
-
- }
- }
- //else
- //{
- // MessageLog.GetInstance.ShowRunLog("警告:滚筒输送线体【1】故障!!!");
- // // lineAlarm = -1;
- //}
- //// lineAlarm = 1;
- }
- public void AgvToLineTwoLoadRoller()
- {
- if (AlarmHelper<AlarmInfo>.Alarm.LTwoRollerTrouble == 0)//输送线无故障
- {
- if (LTwoInputMaterialQuene.Count > 0 && globalVar.AllowAgvToLineTwoLoadRoller && globalVar.rollerLineTwo.OutMaterialingSingle == 1 && !globalVar.LTwoLoadRoller)
- {
- e: string id = Guid.NewGuid().ToString("N");
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- goto e;
-
- string info = AGVHelper.GetInstance.AgvToLineTwoLoadRoller(id);
- LTworobotJobId = id;
- Thread.Sleep(500);
- LineCarryTaskErrorCodeAnalysis(info, 2);
- globalVar.LTwoLoadRoller = true;
- }
- }
- }
- public void AgvToLineThreeLoadRoller()
- {
- if (AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble == 0)//输送线无故障
- {
- if (LThreeInputMaterialQuene.Count > 0 && globalVar.AllowAgvToLineThreeLoadRoller && globalVar.rollerLineThree.OutMaterialingSingle == 1 && !globalVar.LThreeLoadRoller)
- {
- e: string id = Guid.NewGuid().ToString("N");
- if (id == LOnerobotJobId || id == LTworobotJobId || id == LThreerobotJobId || id == LFourrobotJobId)
- goto e;
-
- string info = AGVHelper.GetInstance.AgvToLineThreeLoadRoller(id);
- LThreerobotJobId = id;
- Thread.Sleep(500);
- LineCarryTaskErrorCodeAnalysis(info, 3);
- globalVar.LThreeLoadRoller = true;
- }
- }
-
- //if (AlarmHelper<AlarmInfo>.Alarm.LThreeRollerTrouble == 0)//输送线无故障
- //{
- // if (LThreeInputMaterialQuene.Count > 0)
- // {
- // while (!globalVar.AllowAgvToLineThreeLoadRoller || globalVar.rollerLineThree.OutMaterialingSingle == 0) //后续考虑是否用while
- // {
- // Thread.Sleep(5);
- // if (globalVar.ExitMainTask)
- // return;
- // }
- // g: string id = Guid.NewGuid().ToString();
- // if (id == LThreerobotJobId)
- // goto g;
- // string info = AGVHelper.GetInstance.AgvToLineThreeLoadRoller(id);
- // // MessageLog.GetInstance.ShowRunLog("AGV去【3】号滚筒线装桶");
- // LThreerobotJobId = id;
- // Thread.Sleep(500);
- // LineCarryTaskErrorCodeAnalysis(info, 3);
- // }
-
- //}
- //else
- //{
- // MessageLog.GetInstance.ShowRunLog("警告:滚筒输送线体【3】故障!!!");
- // // lineAlarm = -1;
- //}
-
- }
- /// <summary>
- /// 1号线体数据下发
- /// </summary>
- /// <param name="count"></param>
- /// <param name="materialLoc"></param>
- /// <param name="materialWeight"></param>
- public void RollerOneDataWrite(int count, ushort materialLoc, ushort materialWeight)
- {
- switch (count)
- {
- case 0:
- DeviceOperate.GetInstance.WritePlcData("D1001", materialLoc);//桶1位置
- DeviceOperate.GetInstance.WritePlcData("D1010", materialWeight);//桶2重量
- break;
- case 1:
- DeviceOperate.GetInstance.WritePlcData("D1002", materialLoc);//桶2位置
- DeviceOperate.GetInstance.WritePlcData("D1011", materialWeight);//桶2重量
- break;
- case 2:
- DeviceOperate.GetInstance.WritePlcData("D1003", materialLoc);//桶3位置
- DeviceOperate.GetInstance.WritePlcData("D1012", materialWeight);//桶3重量
- break;
- case 3:
- DeviceOperate.GetInstance.WritePlcData("D1004", materialLoc);//桶4位置
- DeviceOperate.GetInstance.WritePlcData("D1013", materialWeight);//桶4重量
- break;
- case 4:
- DeviceOperate.GetInstance.WritePlcData("D1005", materialLoc);//桶5位置
- DeviceOperate.GetInstance.WritePlcData("D1014", materialWeight);//桶5重量
- break;
- case 5:
- DeviceOperate.GetInstance.WritePlcData("D1006", materialLoc);//桶6位置
- DeviceOperate.GetInstance.WritePlcData("D1015", materialWeight);//桶6重量
- break;
- case 6:
- DeviceOperate.GetInstance.WritePlcData("D1007", materialLoc);//桶7位置
- DeviceOperate.GetInstance.WritePlcData("D1016", materialWeight);//桶7重量
- break;
- case 7:
- DeviceOperate.GetInstance.WritePlcData("D1008", materialLoc);//桶8位置
- DeviceOperate.GetInstance.WritePlcData("D1017", materialWeight);//桶8重量
- break;
-
- }
- }
- /// <summary>
- /// 2号线体数据下发
- /// </summary>
- /// <param name="count"></param>
- /// <param name="materialLoc"></param>
- /// <param name="materialWeight"></param>
- public void RollerTwoDataWrite(int count, ushort materialLoc, ushort materialWeight)
- {
- switch (count)
- {
- case 0:
- DeviceOperate.GetInstance.WritePlcData("D1018", materialLoc);//桶1位置
- DeviceOperate.GetInstance.WritePlcData("D1027", materialWeight);//桶2重量
- break;
- case 1:
- DeviceOperate.GetInstance.WritePlcData("D1019", materialLoc);//桶2位置
- DeviceOperate.GetInstance.WritePlcData("D1028", materialWeight);//桶2重量
- break;
- case 2:
- DeviceOperate.GetInstance.WritePlcData("D1020", materialLoc);//桶3位置
- DeviceOperate.GetInstance.WritePlcData("D1029", materialWeight);//桶3重量
- break;
- case 3:
- DeviceOperate.GetInstance.WritePlcData("D1021", materialLoc);//桶4位置
- DeviceOperate.GetInstance.WritePlcData("D1030", materialWeight);//桶4重量
- break;
- case 4:
- DeviceOperate.GetInstance.WritePlcData("D1022", materialLoc);//桶5位置
- DeviceOperate.GetInstance.WritePlcData("D1031", materialWeight);//桶5重量
- break;
- case 5:
- DeviceOperate.GetInstance.WritePlcData("D1023", materialLoc);//桶6位置
- DeviceOperate.GetInstance.WritePlcData("D1032", materialWeight);//桶6重量
- break;
- case 6:
- DeviceOperate.GetInstance.WritePlcData("D1024", materialLoc);//桶7位置
- DeviceOperate.GetInstance.WritePlcData("D1033", materialWeight);//桶7重量
- break;
- case 7:
- DeviceOperate.GetInstance.WritePlcData("D1025", materialLoc);//桶8位置
- DeviceOperate.GetInstance.WritePlcData("D1034", materialWeight);//桶8重量
- break;
-
- }
- }
- /// <summary>
- /// 3号线体数据下发
- /// </summary>
- /// <param name="count"></param>
- /// <param name="materialLoc"></param>
- /// <param name="materialWeight"></param>
- public void RollerThreeDataWrite(int count, ushort materialLoc, ushort materialWeight)
- {
- switch (count)
- {
- case 0:
- DeviceOperate.GetInstance.WritePlcData("D1035", materialLoc);//桶1位置
- DeviceOperate.GetInstance.WritePlcData("D1044", materialWeight);//桶2重量
- break;
- case 1:
- DeviceOperate.GetInstance.WritePlcData("D1036", materialLoc);//桶2位置
- DeviceOperate.GetInstance.WritePlcData("D1045", materialWeight);//桶2重量
- break;
- case 2:
- DeviceOperate.GetInstance.WritePlcData("D1037", materialLoc);//桶3位置
- DeviceOperate.GetInstance.WritePlcData("D1046", materialWeight);//桶3重量
- break;
- case 3:
- DeviceOperate.GetInstance.WritePlcData("D1038", materialLoc);//桶4位置
- DeviceOperate.GetInstance.WritePlcData("D1047", materialWeight);//桶4重量
- break;
- case 4:
- DeviceOperate.GetInstance.WritePlcData("D1039", materialLoc);//桶5位置
- DeviceOperate.GetInstance.WritePlcData("D1048", materialWeight);//桶5重量
- break;
- case 5:
- DeviceOperate.GetInstance.WritePlcData("D1040", materialLoc);//桶6位置
- DeviceOperate.GetInstance.WritePlcData("D1049", materialWeight);//桶6重量
- break;
- case 6:
- DeviceOperate.GetInstance.WritePlcData("D1041", materialLoc);//桶7位置
- DeviceOperate.GetInstance.WritePlcData("D1050", materialWeight);//桶7重量
- break;
- case 7:
- DeviceOperate.GetInstance.WritePlcData("D1042", materialLoc);//桶8位置
- DeviceOperate.GetInstance.WritePlcData("D1051", materialWeight);//桶8重量
- break;
-
- }
-
- }
- /// <summary>
- /// AGV线体进料就位信号下发至PLC
- /// </summary>
- public void AgvArriveLineSingelSetDown(ConcurrentQueue<MaterialInfo> queue)
- {
- switch (queue.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- case 4: DeviceOperate.GetInstance.WritePlcData("D1052", 1); break;//AGV进料就位信号1
- case 2:
- case 5: DeviceOperate.GetInstance.WritePlcData("D1053", 1); break;//AGV进料就位信号2
- case 3: DeviceOperate.GetInstance.WritePlcData("D1054", 1); break;//AGV进料就位信号3
- }
-
- }
-
- /// <summary>
- /// 炒锅滚筒信号检测
- /// </summary>
- public void FryPotRollerTroubleCheck()
- {
- FryPotAlarm = 0;
- FryPotTwoAlarm = 0;
- FryPotThreeAlarm = 0;
- FryPotFourAlarm = 0;
- FryPotFiveAlarm = 0;
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotOneRollerTrouble == 1) { FryPotAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【1】输送滚筒发生故障"); } else { FryPotAlarm = 1; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotOneRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【1】输送滚筒故障解除,继续运行");
- FryPotAlarm = 1; break;
- case 2:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotTwoRollerTrouble == 1) { FryPotTwoAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【2】输送滚筒发生故障"); } else { FryPotTwoAlarm = 1; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotTwoRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【2】输送滚筒故障解除,继续运行");
- FryPotTwoAlarm = 1; break;
- case 3:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotThreeRollerTrouble == 1) { FryPotThreeAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【3】输送滚筒发生故障"); } else { FryPotThreeAlarm = 1; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotThreeRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【3】输送滚筒故障解除,继续运行");
- FryPotThreeAlarm = 1; break;
- case 4:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotFourRollerTrouble == 1) { FryPotFourAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【4】输送滚筒发生故障"); } else { FryPotFourAlarm = 1; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotFourRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【4】输送滚筒故障解除,继续运行");
- FryPotFourAlarm = 1; break;
- case 5:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotFiveRollerTrouble == 1) { FryPotFiveAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【5】输送滚筒发生故障"); } else { FryPotFiveAlarm = 1; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotFiveRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【5】输送滚筒故障解除,继续运行");
- FryPotFiveAlarm = 1; break;
-
- }
- }
- /// <summary>
- /// 炒锅1,4滚筒信号检测
- /// </summary>
- public void FryPotOneRollerTroubleCheck()
- {
- FryPotAlarm = 0;
- FryPotFourAlarm = 0;
- switch (OutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 1:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotOneRollerTrouble == 1) { FryPotAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【1】输送滚筒发生故障"); } else { FryPotAlarm = 1; return; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotOneRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【1】输送滚筒故障解除,继续运行");
- FryPotAlarm = 1; break;
- case 4:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotFourRollerTrouble == 1) { FryPotFourAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【4】输送滚筒发生故障"); } else { FryPotFourAlarm = 1; return; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotFourRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【4】输送滚筒故障解除,继续运行");
- FryPotFourAlarm = 1; break;
- }
-
- }
- /// <summary>
- /// 炒锅2,5滚筒信号检测
- /// </summary>
- public void FryPotTwoRollerTroubleCheck()
- {
- FryPotTwoAlarm = 0;
- FryPotFiveAlarm = 0;
- switch (LTwoOutputMaterialQuene.ElementAt(0).materialType.MaterialLoc / 100)
- {
- case 2:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotTwoRollerTrouble == 1) { FryPotTwoAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【1】输送滚筒发生故障"); } else { FryPotTwoAlarm = 1; return; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotTwoRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【1】输送滚筒故障解除,继续运行");
- FryPotTwoAlarm = 1; break;
- case 5:
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotFiveRollerTrouble == 1) { FryPotFiveAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【4】输送滚筒发生故障"); } else { FryPotFiveAlarm = 1; return; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotFiveRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【4】输送滚筒故障解除,继续运行");
- FryPotFiveAlarm = 1; break;
- }
- }
- /// <summary>
- /// 炒锅3滚筒信号检测
- /// </summary>
- public void FryPotThreeRollerTroubleCheck()
- {
- FryPotThreeAlarm = 0;
- if (AlarmHelper<AlarmInfo>.Alarm.FryPotThreeRollerTrouble == 1) { FryPotThreeAlarm = -1; MessageLog.GetInstance.ShowRunLog("警告:炒锅【3】输送滚筒发生故障"); } else { FryPotThreeAlarm = 1; return; } while (AlarmHelper<AlarmInfo>.Alarm.FryPotThreeRollerTrouble == 1)
- {
- Thread.Sleep(5); if (globalVar.ExitMainTask)
- return;
- }
- MessageLog.GetInstance.ShowRunLog("炒锅【3】输送滚筒故障解除,继续运行");
- FryPotThreeAlarm = 1;
- }
-
- }
- }
|