using iWareSda_QQJF.RGV.RgvService;
|
using iWareSda_QQJF.SRM.SrmService;
|
using iWareSda_QQJF.SRMTRAN.SrmTranService;
|
using iWareSda_QQJF.WCS.EDM;
|
using iWareSda_QQJF.WEBAPI;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace iWareSda_QQJF.WCS
|
{
|
//public class WCS
|
//{
|
// static int centerEastId = 52;//中转台设备号
|
// static int centerWestId = 17;
|
// public static int safeLength = 1900 + 1900 + 1000 + 750;//RGV安全距离(RGV1长度一半+RGV2长度一半+安全距离+额外多算点)
|
// static int AgvLength = 1900;//RGV安全距离
|
|
// static Thread SendTranTaskThread;
|
// static Thread SendRgvTaskThread;
|
// static Thread SendSrmTaskThread;
|
// //static Thread TranTaskFinishThread;
|
// static Thread RgvTaskFinishThread;
|
// static Thread SrmTaskFinishThread;
|
// //static Thread ReturnThread;
|
// static Thread ReadMainTaskThread;
|
|
// static Thread ReadRgvPLCThread1;
|
// static Thread ReadRgvPLCThread2;
|
// static Thread ReadRgvPLCThread3;
|
// static Thread ReadRgvPLCThread4;
|
|
// static Thread ReadSrmPLCThread1;
|
// static Thread ReadSrmPLCThread2;
|
// static Thread ReadSrmPLCThread3;
|
// static Thread ReadSrmPLCThread4;
|
// static Thread ReadSrmPLCThread5;
|
// static Thread ReadSrmPLCThread6;
|
// static Thread ReadSrmPLCThread7;
|
// static Thread ReadSrmPLCThread8;
|
// static Thread ReadSrmPLCThread9;
|
|
// static Thread ReadTranThread;
|
|
// //static Thread ReadERPItemThread;
|
// //static Thread ReadERPTaskThread;
|
// //static Thread SaveDirectionThread;
|
|
// public static void init()
|
// {
|
|
|
// ReadRgvPLCThread1 = new Thread(new ParameterizedThreadStart(ReadRgvPLC));
|
// ReadRgvPLCThread2 = new Thread(new ParameterizedThreadStart(ReadRgvPLC));
|
// ReadRgvPLCThread3 = new Thread(new ParameterizedThreadStart(ReadRgvPLC));
|
// ReadRgvPLCThread4 = new Thread(new ParameterizedThreadStart(ReadRgvPLC));
|
// ReadRgvPLCThread1.Start(1);
|
// ReadRgvPLCThread2.Start(2);
|
// ReadRgvPLCThread3.Start(3);
|
// ReadRgvPLCThread4.Start(4);
|
|
// ReadSrmPLCThread1 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread2 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread3 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread4 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread5 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread6 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread7 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread8 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
// ReadSrmPLCThread9 = new Thread(new ParameterizedThreadStart(ReadSrmPLC));
|
|
// ReadSrmPLCThread1.Start(1);
|
// ReadSrmPLCThread2.Start(2);
|
// ReadSrmPLCThread3.Start(3);
|
// ReadSrmPLCThread4.Start(4);
|
// ReadSrmPLCThread5.Start(5);
|
// ReadSrmPLCThread6.Start(6);
|
// ReadSrmPLCThread7.Start(7);
|
// ReadSrmPLCThread8.Start(8);
|
// ReadSrmPLCThread9.Start(9);
|
|
// ReadTranThread = new Thread(ReadTranPLC);
|
// ReadTranThread.Start();
|
|
// //等待信号读取线程开启且读到信号
|
// Thread.Sleep(5000);
|
|
// SendTranTaskThread = new Thread(SendTranTask);
|
// //SendTranTaskThread.Start();
|
// SendRgvTaskThread = new Thread(SendRgvTask);
|
// //SendRgvTaskThread.Start();
|
// SendSrmTaskThread = new Thread(SendSrmTask);
|
// //SendSrmTaskThread.Start();
|
// //TranTaskFinishThread = new Thread(TranTaskFinish);
|
// //TranTaskFinishThread.Start();
|
// RgvTaskFinishThread = new Thread(RgvTaskFinish);
|
// //RgvTaskFinishThread.Start();
|
// SrmTaskFinishThread = new Thread(SrmTaskFinish);
|
// //SrmTaskFinishThread.Start();
|
// //ReturnThread = new Thread(Returnresult);
|
// //ReturnThread.Start();
|
// ReadMainTaskThread = new Thread(ReadMainTask);
|
// //ReadMainTaskThread.Start();
|
|
// ////ERP接口线程
|
// //初始化指针
|
// //using (Model edm = new Model())
|
// //{
|
// // OracleWord.oldidOfItem = long.Parse(edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfItem").VALUE.ToString());
|
// // OracleWord.oldidOfKanban = long.Parse(edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfKanban").VALUE.ToString());
|
// //}
|
|
// //ReadERPItemThread = new Thread(ReadERPItem);
|
// //ReadERPItemThread.Start();
|
// //ReadERPTaskThread = new Thread(ReadERPTask);
|
// //ReadERPTaskThread.Start();
|
|
// //SaveDirectionThread = new Thread(SaveDirection);
|
// //SaveDirectionThread.Start();
|
// }
|
|
// /// <summary>
|
// /// 定时存储指针线程
|
// /// </summary>
|
// public static void SaveDirection()
|
// {
|
// while (true)
|
// {
|
// //记录ERP指针
|
// using (Model edm = new Model())
|
// {
|
// KEYVALUE oldidOfItemkv = edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfItem");
|
// oldidOfItemkv.VALUE = int.Parse(OracleWord.oldidOfItem.ToString());
|
// KEYVALUE oldidOfKanbankv = edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfKanban");
|
// oldidOfKanbankv.VALUE = int.Parse(OracleWord.oldidOfKanban.ToString());
|
// if (edm.SaveChanges() == 0)
|
// {
|
// edm.SaveChanges();
|
// }
|
// }
|
// Thread.Sleep(1000 * 60 * 60);
|
|
// }
|
// }
|
|
// /// <summary>
|
// /// 关闭此类
|
// /// </summary>
|
// public static void Close()
|
// {
|
// try
|
// {
|
// //记录ERP指针
|
// using (Model edm = new Model())
|
// {
|
// KEYVALUE oldidOfItemkv = edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfItem");
|
// oldidOfItemkv.VALUE = int.Parse(OracleWord.oldidOfItem.ToString());
|
// KEYVALUE oldidOfKanbankv = edm.KEYVALUE.FirstOrDefault(x => x.NAME == "oldidOfKanban");
|
// oldidOfKanbankv.VALUE = int.Parse(OracleWord.oldidOfKanban.ToString());
|
// if (edm.SaveChanges() == 0)
|
// {
|
// edm.SaveChanges();
|
// }
|
// }
|
|
// }
|
// catch
|
// {
|
|
// }
|
// //SendTranTaskThread.Abort();
|
// //SendRgvTaskThread.Abort();
|
// //SendSrmTaskThread.Abort();
|
// ////TranTaskFinishThread.Abort();
|
// //RgvTaskFinishThread.Abort();
|
// //SrmTaskFinishThread.Abort();
|
// ////ReturnThread.Abort();
|
// //ReadMainTaskThread.Abort();
|
// //ReadRgvPLCThread1.Abort();
|
// //ReadRgvPLCThread2.Abort();
|
// //ReadRgvPLCThread3.Abort();
|
// //ReadRgvPLCThread4.Abort();
|
|
// //ReadSrmPLCThread1.Abort();
|
// //ReadSrmPLCThread2.Abort();
|
// //ReadSrmPLCThread3.Abort();
|
// //ReadSrmPLCThread4.Abort();
|
// //ReadSrmPLCThread5.Abort();
|
// //ReadSrmPLCThread6.Abort();
|
// //ReadSrmPLCThread7.Abort();
|
// //ReadSrmPLCThread8.Abort();
|
// //ReadSrmPLCThread9.Abort();
|
// //ReadTranThread.Abort();
|
// //ReadERPTaskThread.Abort();
|
// ////ReadERPItemThread.Abort();
|
// //SaveDirectionThread.Abort();
|
|
// }
|
|
// /// <summary>
|
// /// 循环读取ERP零件信息
|
// /// </summary>
|
// public static void ReadERPItem()
|
// {
|
// while (true)
|
// {
|
// //Thread.Sleep(10);
|
// //OracleWord.oldidOfItem++;
|
// //Thread st = new Thread(OracleWord.SearchItem);
|
// //st.Start();
|
// OracleWord.SearchItem();
|
// }
|
// }
|
|
// /// <summary>
|
// /// 循环读取ERP出库单信息
|
// /// </summary>
|
// public static void ReadERPTask()
|
// {
|
// while (true)
|
// {
|
// //Thread.Sleep(1000);
|
// OracleWord.SearchTask();
|
// }
|
// }
|
|
// /// <summary>
|
// /// 循环输送线心跳
|
// /// </summary>
|
// public static void ReadTranPLC()
|
// {
|
// SrmTranService srv = new SrmTranService();
|
// while (true)
|
// {
|
// try
|
// {
|
// Thread.Sleep(1000);
|
// srv.GetHeart();
|
// }
|
// catch
|
// {
|
|
// }
|
// }
|
// }
|
|
// /// <summary>
|
// /// 循环更新RGV数据
|
// /// </summary>
|
// public static void ReadRgvPLC(object id)
|
// {
|
// RgvService srv = new RgvService();
|
// while (true)
|
// {
|
// try
|
// {
|
// Thread.Sleep(300);
|
// srv.ReadPlc(Convert.ToInt32(id));
|
// }
|
// catch
|
// {
|
|
// }
|
// }
|
// }
|
|
|
// /// <summary>
|
// /// 循环更新堆垛机数据
|
// /// </summary>
|
// public static void ReadSrmPLC(object id)
|
// {
|
// SrmService srv = new SrmService();
|
// while (true)
|
// {
|
// try
|
// {
|
// Thread.Sleep(300);
|
// srv.ReadPlc(Convert.ToInt32(id));
|
|
// }
|
// catch
|
// {
|
|
// }
|
// }
|
// }
|
|
|
// /// <summary>
|
// /// 下发输送线线程
|
// /// </summary>
|
// public static void SendTranTask()
|
// {
|
// SrmTranService srmService = new SrmTranService();
|
// while (true)
|
// {
|
// using (Model edm = new Model())
|
// {
|
// //读取数据库输送线任务
|
// List<TranTask> tranTask = edm.TranTask.Where(x => x.ISRELEASED == 0).ToList();
|
// foreach (var task in tranTask)
|
// {
|
// //判断设备可行性
|
// if (srmService.TranReady(task.SOURCEPLACE) && srmService.TranReady(task.TOPLACE))
|
// {
|
// //下发任务
|
// if (srmService.SendGoodsType(task.SOURCEPLACE, task.PALLETTYPE ?? 0))
|
// {
|
// if (srmService.SendGoodsReady(task.SOURCEPLACE, task.TOPLACE, (task.ID % 32767) + 1,(task.FASTHERTASKID%32767)+1)==1)
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("输送线任务下发成功", "任务号:" + task.ID.ToString(), "主任务号:" + task.FASTHERTASKID.ToString());
|
// //修改数据
|
// task.ISRELEASED = 1;
|
// task.HASFINISHED = 1;
|
// edm.SaveChanges();
|
// Thread.Sleep(5000);
|
// break;
|
// }
|
// else
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("输送线任务下发失败", "任务号:" + task.ID.ToString(), "");
|
// Thread.Sleep(1000);
|
// break;
|
// }
|
// }
|
// else
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("输送线规格下发失败", "任务号:" + task.ID.ToString(), "");
|
// Thread.Sleep(1000);
|
// break;
|
// }
|
// }
|
// }
|
|
// }
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// 下发RGV任务
|
// /// </summary>
|
// public static void SendRgvTask()
|
// {
|
// RgvService rgvService = new RgvService();
|
// SrmTranService tranService=new SrmTranService();
|
// while (true)
|
// {
|
// //读取数据库RGV任务
|
// using (Model edm = new Model())
|
// {
|
// //RgvTask rgvTask = edm.RgvTask.FirstOrDefault(x => x.ISRELEASED == 0);
|
|
// for (int i = 1; i < 5; i++)
|
// {
|
// //判断设备可行性
|
// if (rgvService.IsRgvReady(i))
|
// {
|
// RgvTask rgvTask = edm.RgvTask.FirstOrDefault(x => x.ISRELEASED == 0 && x.USERGVID==i);
|
// if (rgvTask == null)
|
// {
|
// continue;
|
// }
|
// RgvTask preTask = edm.RgvTask.FirstOrDefault(x => x.ID == rgvTask.PRETASK);
|
// if (preTask != null && preTask.HASFINISHED != 1)//前置任务存在且未完成(前置任务字段现在可能没用,待考证)
|
// {
|
// continue;
|
// }
|
// if (rgvTask.TASKTYPE == 1)//搬运任务时
|
// {
|
// TranLock centerTo = edm.TranLock.FirstOrDefault(x => x.TRANID == rgvTask.TOPLACE);
|
// TranLock centerSource = edm.TranLock.FirstOrDefault(x => x.TRANID == rgvTask.SOURCEPLACE);
|
|
// if (tranService.GetSrmConveyorStationHasGoods(rgvTask.TOPLACE) == 0)
|
// {
|
// continue;
|
// }
|
// if ((tranService.GetSrmConveyorStationHasGoods(rgvTask.TOPLACE) == 1 || centerTo.ISFULL == 1) && (rgvTask.TOPLACE == 17 || rgvTask.TOPLACE == 52))//避免重复放至中转台(任务目标库位有货则暂时不放)
|
// {
|
// continue;
|
// }
|
// if ((tranService.GetSrmConveyorStationHasGoods(rgvTask.SOURCEPLACE) == 2 || centerSource.ISFULL == 0) && (rgvTask.SOURCEPLACE == 17 || rgvTask.SOURCEPLACE == 52))//(取货时目标没货则暂不执行,仅限中转台)
|
// {
|
// continue;
|
// }
|
// }
|
// //判断是否干涉
|
// if (!Helper.IsTouch(rgvTask.SOURCEPLACE, rgvTask.USERGVID) && !Helper.IsTouch(rgvTask.TOPLACE, rgvTask.USERGVID))//设备不干涉下
|
// {
|
// //下发任务
|
// if (rgvService.SendRgvTask(rgvTask.USERGVID, (rgvTask.ID % 32767)+1, rgvTask.SOURCEPLACE, rgvTask.TOPLACE, rgvTask.TASKTYPE, rgvTask.MainTask.PALLETTYPE ?? 0,(rgvTask.FASTHERTASKID%32767)+1) == 1)
|
// {
|
// //修改数据
|
// rgvTask.ISRELEASED = 1;
|
|
// if (edm.SaveChanges() > 0)
|
// {
|
|
// }
|
|
// //输送线锁定
|
// int sourceLocal = edm.TranLock.FirstOrDefault(x => x.TRANID == rgvTask.SOURCEPLACE).LOCAL;
|
// int toLocal = edm.TranLock.FirstOrDefault(x => x.TRANID == rgvTask.TOPLACE).LOCAL;
|
// if (rgvTask.USERGVID == 2 || rgvTask.USERGVID == 4)
|
// {
|
// sourceLocal = sourceLocal + safeLength;
|
// toLocal = toLocal + safeLength;
|
|
// }
|
// else
|
// {
|
// sourceLocal = sourceLocal - safeLength;
|
// toLocal = toLocal - safeLength;
|
|
// }
|
// //锁定单侧
|
// if (Helper.LockTran(rgvTask.USERGVID, sourceLocal, toLocal))
|
// {
|
|
// }
|
// Thread.Sleep(5000);
|
// }
|
// }
|
// }
|
// }
|
// }
|
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
|
|
// /// <summary>
|
// /// 下发堆垛机任务
|
// /// </summary>
|
// public static void SendSrmTask()
|
// {
|
// SrmService srmService = new SrmService();
|
// while (true)
|
// {
|
// using (Model edm = new Model())
|
// {
|
// for (int i = 1; i < 10; i++)
|
// {
|
// //判断设备可行性
|
// if (srmService.IsReady(i))
|
// {
|
// //读取数据库堆垛机任务
|
// SrmTask task = edm.SrmTask.FirstOrDefault(x => x.ISRELEASED == 0 && x.USESRMID == i);
|
// if (task == null)
|
// {
|
// continue;
|
// }
|
// //下发任务
|
// if (srmService.SendSrmTask(i, (task.ID % 32767)+1, task.SOURCEPLACE, task.TOPLACE, task.PALLETTYPE ?? 0, (task.FASTHERTASKID % 32767)+1) == 1)
|
// {
|
// //修改数据
|
// task.ISRELEASED = 1;
|
// if (edm.SaveChanges()>0)
|
// {
|
// Thread.Sleep(6000);
|
// }
|
// else
|
// {
|
// Thread.Sleep(1000);
|
// edm.SaveChanges();
|
// }
|
// }
|
// }
|
|
// }
|
// }
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// 输送线任务完成(超高检测)
|
// /// </summary>
|
// public static void TranTaskFinish()
|
// {
|
// SrmTranService srmtranService = new SrmTranService();
|
// while (true)
|
// {
|
// List<int> intList = new List<int> { 47, 48, 61, 65, 32, 15 };//各个出入库口号
|
// foreach (var tranid in intList)
|
// {
|
// //读取完成信号
|
// if (srmtranService.IsPassed(tranid) == 1)//检测有误则记录
|
// {
|
// ////查找对应数据库
|
// //using (Model edm = new Model())
|
// //{
|
// // int taskid = srmtranService.FinishTask(tranid);
|
// // TranTask task = edm.TranTask.OrderByDescending(x=>x.ID).FirstOrDefault(x => (x.ID % 32767)+1 == taskid);
|
// // //修改数据
|
// // task.MainTask.ERRORDEVICEID = tranid;
|
// // task.MainTask.ERRORMSG = 2;
|
// // task.MainTask.ISERROR = 1;
|
// // //反馈WMS同时删除对应子任务
|
|
// // edm.SaveChanges();
|
// // Thread.Sleep(1000);
|
// //}
|
// }
|
// }
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// RGV任务完成
|
// /// </summary>
|
// public static void RgvTaskFinish()
|
// {
|
// RgvService rgvService = new RgvService();
|
// while (true)
|
// {
|
|
// //读取完成信号
|
// for (int i = 1; i < 5; i++)
|
// {
|
// if (rgvService.IsTaskFinish(i))
|
// {
|
// int taskId = rgvService.FinishTask(i);
|
// using (Model edm = new Model())
|
// {
|
|
// //输送线更新锁定
|
|
// long local = rgvService.GetRgvPosation(i);
|
// if (i == 1 | i == 3)//北侧安全,当前坐标需要额外减
|
// {
|
// local = local - safeLength + AgvLength;//(当前坐标-AGV宽度一半=当前中心坐标)+安全距离
|
// }
|
// else//南侧安全,当前坐标需要额外加
|
// {
|
// local = local + safeLength - AgvLength;
|
// }
|
// //查找对应数据库
|
// RgvTask task = edm.RgvTask.OrderByDescending(x=>x.ID).FirstOrDefault(x => (x.ID % 32767)+1 == taskId);
|
// //修改数据
|
// if (task != null)
|
// {
|
// //去中转台占用中转台
|
// if (task.TASKTYPE == 1)
|
// {
|
// if (task.TOPLACE == 17 || task.TOPLACE == 52)
|
// {
|
// TranLock t = edm.TranLock.FirstOrDefault(x => x.TRANID == task.TOPLACE);
|
// t.ISFULL = 1;
|
// }
|
// else if (task.SOURCEPLACE == 17 || task.SOURCEPLACE == 52)
|
// {
|
// TranLock t = edm.TranLock.FirstOrDefault(x => x.TRANID == task.SOURCEPLACE);
|
// t.ISFULL = 0;
|
// }
|
// }
|
// //锁定单侧
|
// if (Helper.LockTran(i, local, local))
|
// {
|
|
// task.HASFINISHED = 1;
|
// //反馈mainTask
|
// RgvTask nextTask = edm.RgvTask.FirstOrDefault(x=>x.PreRgvTask.ID==task.ID);
|
// if (task.MainTask.TASKTYPE == 2 && nextTask==null)
|
// {
|
// task.MainTask.HASFINISHED = 1;
|
// }
|
// //任务完成复位完成信号
|
// if (edm.SaveChanges() > 0)
|
// {
|
// rgvService.SendRgvFinishConfirm(i);
|
// }
|
// }
|
// }
|
// else
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成触发,任务号" + taskId + "未找到,RGV:" + i + "时间:" + DateTime.Now, "", "");
|
// //rgvService.SendRgvFinishConfirm(i);
|
// }
|
// }
|
// }
|
// }
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// 堆垛机任务完成
|
// /// </summary>
|
// public static void SrmTaskFinish()
|
// {
|
// SrmService srmService = new SrmService();
|
// while (true)
|
// {
|
// using (Model edm = new Model())
|
// {
|
// //读取完成信号
|
// for (int i = 0; i < 10; i++)
|
// {
|
// if (srmService.IsTaskFinish(i) == 1)
|
// {
|
// int taskId = srmService.FinishTask(i);
|
// //查找对应数据库
|
// SrmTask task = edm.SrmTask.OrderByDescending(x=>x.ID).FirstOrDefault(x => (x.ID % 32767)+1 == taskId);
|
// if (task == null)//任务号有误,先复位,然后继续运行
|
// {
|
// //logtxtWrite.logtxt.txtWrite("任务完成触发,任务号"+taskId+"未找到,堆垛机:"+i+"时间:"+DateTime.Now,0);
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成触发,任务号" + taskId + "未找到,堆垛机:" + i + "时间:" + DateTime.Now, "", "");
|
// //srmService.SendSrmTaskFinishConfirm(i);
|
// continue;
|
// }
|
// //修改数据
|
// task.HASFINISHED = 1;
|
// //反馈mainTask
|
// if (task.MainTask.TASKTYPE == 1 || task.MainTask.TASKTYPE == 3)
|
// {
|
// task.MainTask.HASFINISHED = 1;
|
// }
|
// //任务完成复位完成信号
|
// if (edm.SaveChanges() > 0)
|
// {
|
// srmService.SendSrmTaskFinishConfirm(i);
|
// }
|
|
// }
|
|
// }
|
// }
|
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// 反馈任务结果
|
// /// </summary>
|
// public static void Returnresult()
|
// {
|
// while (true)
|
// {
|
// using (Model edm = new Model())
|
// {
|
// //获取完成且未推送的任务
|
// MainTask maintask = edm.MainTask.FirstOrDefault(x => x.HASPUSHED == 0 && x.HASFINISHED == 1);
|
|
// }
|
// Thread.Sleep(1000);
|
// }
|
// }
|
|
// /// <summary>
|
// /// 解析主任务
|
// /// </summary>
|
// public static void ReadMainTask()
|
// {
|
// while (true)
|
// {
|
// try
|
// {
|
// //读取数据库主任务任务
|
// using (Model edm = new Model())
|
// {
|
// MainTask mainTask = edm.MainTask.FirstOrDefault(x => x.HASREADED == 0);
|
// if (mainTask != null)
|
// {
|
// //堆垛机任务
|
// SrmTask srmTask = new SrmTask();
|
// srmTask.MainTask = mainTask;
|
// srmTask.HASFINISHED = 0;
|
// srmTask.ISRELEASED = 0;
|
// srmTask.PALLETTYPE = mainTask.PALLETTYPE;
|
// if (mainTask.TASKTYPE == 1)//入库
|
// {
|
// srmTask.USESRMID = int.Parse(mainTask.TOPLACE.Substring(0, 1));
|
// srmTask.SOURCEPLACE = Helper.GetSrmEnter(srmTask.USESRMID, mainTask.TASKTYPE, Helper.GetIsEast(int.Parse(mainTask.SOURCEPLACE)));
|
// srmTask.TOPLACE = mainTask.TOPLACE.Substring(2, 8);
|
// }
|
// else if (mainTask.TASKTYPE == 2)//出库
|
// {
|
// srmTask.USESRMID = int.Parse(mainTask.SOURCEPLACE.Substring(0, 1));
|
// srmTask.SOURCEPLACE = mainTask.SOURCEPLACE.Substring(2, 8);
|
// srmTask.TOPLACE = Helper.GetSrmEnter(srmTask.USESRMID, mainTask.TASKTYPE, Helper.GetIsEast(int.Parse(mainTask.TOPLACE)));
|
// }
|
// else if (mainTask.TASKTYPE == 3)//移库
|
// {
|
// srmTask.USESRMID = int.Parse(mainTask.TOPLACE.Substring(0, 1));
|
// srmTask.SOURCEPLACE = mainTask.SOURCEPLACE.Substring(2, 8);
|
// srmTask.TOPLACE = mainTask.TOPLACE.Substring(2, 8);
|
// }
|
|
// edm.SrmTask.Add(srmTask);
|
|
|
// if (mainTask.TASKTYPE != 3)//移库时只需动堆垛机
|
// {
|
// int tranid = 0;//记录输送线出入库口
|
// if (mainTask.TASKTYPE == 1)
|
// {
|
// tranid = int.Parse(mainTask.SOURCEPLACE);
|
// }
|
// else if (mainTask.TASKTYPE == 2)
|
// {
|
// tranid = int.Parse(mainTask.TOPLACE);
|
// }
|
// if (mainTask.TASKTYPE == 1)
|
// {
|
// //输送线任务
|
// TranTask tranTask = new TranTask();
|
// tranTask.MainTask = mainTask;
|
// tranTask.ISRELEASED = 0;
|
// tranTask.HASFINISHED = 0;
|
// tranTask.LENGTH = mainTask.LENGTH;
|
// tranTask.WIDTH = mainTask.WIDTH;
|
// tranTask.HEIGHT = mainTask.HEIGHT;
|
// tranTask.PALLETTYPE = mainTask.PALLETTYPE;
|
// //if (mainTask.TASKTYPE == 1)
|
// //{
|
// tranTask.SOURCEPLACE = int.Parse(mainTask.SOURCEPLACE);
|
// tranTask.TOPLACE = Helper.GetNextTran(tranTask.SOURCEPLACE);
|
// //tranid = tranTask.SOURCEPLACE;
|
// //}
|
// //else if (mainTask.TASKTYPE == 2)
|
// //{
|
// // tranTask.TOPLACE = int.Parse(mainTask.TOPLACE);
|
// // tranTask.SOURCEPLACE = Helper.GetNextTran(tranTask.TOPLACE);
|
// // tranid = tranTask.TOPLACE;
|
// //}
|
// edm.TranTask.Add(tranTask);
|
// }
|
// //RGV任务
|
// int srmTranid = Helper.GetTranEnter(srmTask.USESRMID, mainTask.TASKTYPE, Helper.GetIsEast(tranid));
|
// int enterTranId = Helper.GetNextTran(tranid);
|
// //判断是否需中转
|
// int useRgv = 0;
|
// if (Helper.NeedTwoRgv(srmTask.USESRMID, tranid, mainTask.TASKTYPE))
|
// {
|
// int centerId = 0;
|
// //定义东西中转台ID
|
// if (Helper.GetIsEast(tranid))
|
// {
|
// centerId = centerEastId;
|
// }
|
// else
|
// {
|
// centerId = centerWestId;
|
// }
|
// //if (mainTask.TASKTYPE == 1)
|
// //{
|
// // //创建三条RGV任务
|
// // RgvTask preTask = null;
|
// // bool result1 = Helper.AddRGVTask(edm, mainTask, enterTranId, centerId, 1, preTask, out useRgv, out preTask);//去中转台
|
// // //int safeTran = Helper.GetSafeTranId(useRgv);
|
// // //bool result2 = Helper.AddRGVTask(edm, mainTask, centerId, safeTran, 2, preTaskId, out useRgv, out preTaskId);//离开干涉
|
// // bool result3 = Helper.AddRGVTask(edm, mainTask, centerId, srmTranid, 1, preTask, out useRgv, out preTask);//拿中转台
|
// // if (!result1 || !result3)
|
// // {
|
// // //设备故障,不生成任务并反馈(通常不会,之前判断两RGV都是好的才会中转)
|
// // Helper.SetTaskOver(mainTask, useRgv);
|
// // continue;
|
// // }
|
// //}
|
// //else
|
// //{
|
// // //创建三条RGV任务
|
// // RgvTask preTask = null;
|
// // bool result1 = Helper.AddRGVTask(edm, mainTask, srmTranid, centerId, 1, preTask, out useRgv, out preTask);//去中转台
|
// // //int safeTran = Helper.GetSafeTranId(useRgv);
|
// // //bool result2 = Helper.AddRGVTask(edm, mainTask, centerId, safeTran, 2, preTaskId, out useRgv, out preTaskId);//离开干涉
|
// // bool result3 = Helper.AddRGVTask(edm, mainTask, centerId, enterTranId, 1, preTask, out useRgv, out preTask);//拿中转台
|
// // if (!result1 || !result3)
|
// // {
|
// // //设备故障,不生成任务并反馈(通常不会,之前判断两RGV都是好的才会中转)
|
// // Helper.SetTaskOver(mainTask, useRgv);
|
// // continue;
|
// // }
|
// //}
|
// }
|
// else
|
// {
|
// RgvTask preTask = null;
|
// //if (mainTask.TASKTYPE == 1)
|
// //{
|
// // if (!Helper.AddRGVTask(edm, mainTask, enterTranId, srmTranid, 1, preTask, out useRgv, out preTask))
|
// // {
|
// // //设备故障,不生成任务并反馈
|
// // Helper.SetTaskOver(mainTask, useRgv);
|
// // continue;
|
// // }
|
// //}
|
// //else
|
// //{
|
// // if (!Helper.AddRGVTask(edm, mainTask, srmTranid, enterTranId, 1, preTask, out useRgv, out preTask))
|
// // {
|
// // //设备故障,不生成任务并反馈
|
// // Helper.SetTaskOver(mainTask, useRgv);
|
// // continue;
|
// // }
|
// //}
|
// }
|
// }
|
|
// //置位解析完成
|
// mainTask.HASREADED = 1;
|
// edm.SaveChanges();
|
// }
|
// }
|
// }
|
// catch
|
// {
|
|
// }
|
// Thread.Sleep(1000);
|
// }
|
|
// }
|
|
|
|
|
|
|
//}
|
}
|