| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading;
 
- using WCS.Data;
 
- using WCS.Data.Models;
 
- using WCS.Data.Utils;
 
- using WCS.PLC;
 
- namespace WCS.Workflow
 
- {
 
-     public class ConveyorPlc01 : Base_Conv
 
-     {
 
-         #region 只读变量
 
-         private readonly string Conv_1002 = "1002";
 
-         private readonly string Conv_1004 = "1004";
 
-         private readonly string Conv_1013 = "1013";
 
-         private readonly string Conv_1023 = "1023";
 
-         private readonly string Conv_1009 = "1009";
 
-         private readonly string Conv_1454 = "1454";
 
-         private readonly string Conv_1455 = "1455";
 
-         private readonly string Conv_1456 = "1456";
 
-         private readonly string Conv_1441 = "1441";
 
-         private readonly string Conv_1440 = "1440";
 
-         private readonly string Conv_1442 = "1442";
 
-         private readonly string Conv_1445 = "1445";
 
-         private readonly string Conv_1447 = "1447";
 
-         private readonly string Conv_1449 = "1449";
 
-         private readonly string Conv_1451 = "1451";
 
-         #endregion;
 
-         #region 重载实现
 
-         /// <summary>
 
-         /// 调度PLC执行任务
 
-         /// </summary>
 
-         public override void Run()
 
-         {
 
-             //刷新任务数据
 
-             WCSWorkflow.RefreshData();
 
-             //扫码执行任务
 
-             Conv_ScanBarCodeExeTask();
 
-             //电控无扫码执行任务
 
-             Conv_NoScanExeTask();
 
-             //堆垛机出口任务执行
 
-             SrmOutConvExeTask();
 
-             //出口任务完成
 
-             ConvTaskFinish();
 
-             //输送机执行任务
 
-             ConveyorWriteTaskExecute();
 
-         }
 
-         #endregion;
 
-         #region 多线程调用
 
-         #endregion;
 
-         #region 模块调用
 
-         private void Conv_NoScanExeTask()
 
-         {
 
-             Conv_NotScannExeTask(Conv_1013, string.Empty);
 
-             //ThreadHelper.TaskThread(Conv_NotScannExeTask_1013);
 
-             //ThreadHelper.TaskThread(Conv_NotScannExeTask_1004);
 
-             //Conv_NotScannExeTask(Conv_1004, string.Empty, false, 1);
 
-         }
 
-         private static int _conv_NotScannExeTask = 0;
 
-         /// <summary>
 
-         /// 1013请求入库
 
-         /// </summary>
 
-         public void Conv_NotScannExeTask_1013()
 
-         {
 
-             if (Interlocked.Exchange(ref _conv_NotScannExeTask, 1) == 0)
 
-             {
 
-                 Conv_NotScannExeTask(Conv_1013, string.Empty, false, 0);
 
-                 Interlocked.Exchange(ref _conv_NotScannExeTask, 0);
 
-             }
 
-         }
 
-         //public void Conv_NotScannExeTask_1004()
 
-         //{
 
-         //    if (Interlocked.Exchange(ref _conv_NotScannExeTask, 1) == 0)
 
-         //    {
 
-         //        Conv_NotScannExeTask(Conv_1004, string.Empty, false, 0);
 
-         //        Interlocked.Exchange(ref _conv_NotScannExeTask, 0);
 
-         //    }
 
-         //}
 
-         private void ConvTaskFinish()
 
-         {
 
-             ConveyorTaskFinish(PlcName, Conv_1454);
 
-             ConveyorTaskFinish(PlcName, Conv_1455);
 
-             ConveyorTaskFinish(PlcName, Conv_1456, false, true);
 
-             ConveyorTaskFinish(PlcName, Conv_1445, false, true);
 
-             ConveyorTaskFinish(PlcName, Conv_1447, false, true);
 
-             ConveyorTaskFinish(PlcName, Conv_1449, false, true);
 
-         }
 
-         /// <summary>
 
-         /// 扫码执行任务
 
-         /// </summary>
 
-         private void Conv_ScanBarCodeExeTask()
 
-         {
 
-             Conv_Scanning_1456();
 
-             Conv_ScanningRequestIn(Conv_1451, Conv_1451);
 
-             Conv_ScanningRequest(Conv_1004, Current.WareHouseId, Conv_1002);
 
-         }
 
-         /// <summary>
 
-         /// WCS写入输送线执行任务
 
-         /// </summary>
 
-         private void ConveyorWriteTaskExecute()
 
-         {
 
-             ConveyorWriteTaskExecute(Conv_1009);
 
-             ConveyorWriteTaskExecute(Conv_1023);
 
-         }
 
-         private void SrmOutConvExeTask()
 
-         {
 
-             SrmOutConvExeTask(PlcName, Conv_1454, true);
 
-             SrmOutConvExeTask(PlcName, Conv_1455, true);
 
-             SrmOutConvExeTask(PlcName, Conv_1456, true);
 
-             SrmOutConvExeTask(PlcName, Conv_1441, false);
 
-             SrmOutConvExeTask(PlcName, Conv_1442, true);
 
-         }
 
-         #endregion;
 
-         #region 功能实现
 
-         private void Conv_ScanningRequestIn(string convNo, string exitNo, bool iscurPosNo = true)
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
 
-                 var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
 
-                 var cs = conveyor.EquSignal_Conv;
 
-                 if (!cs.DB521_Request) return;
 
-                 if (cs.DB520_Confirm) return;
 
-                 WCS_TASK task = QueryTaskByBarcode(cs, convNo);
 
-                 if (task == null)
 
-                 {
 
-                     var param = new GetInTaskParam()
 
-                     {
 
-                         ContainerBarCode = cs.BarCodeStr,
 
-                         ContainerType = cs.DB521_Goodstype > 0 ? cs.DB521_Goodstype : 1,
 
-                         MatBarCode = string.Empty,
 
-                         WareHouseId = Current.Pvchouseputong,
 
-                         EquipmentNo = convNo,
 
-                         EndPostion = srm,
 
-                         Memo2 = exitNo
 
-                     };
 
-                     task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
 
-                 }
 
-                 if (task == null) return;
 
-                 //判断任务是否已经执行
 
-                 if (task.TASK_WKSTATUS >= 2) return;
 
-                 bool notask = false;
 
-                 int goodsend = 0;
 
-                 if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
 
-                 {
 
-                     notask = true;
 
-                     goodsend = Convert.ToInt32(exitNo);
 
-                 }
 
-                 else
 
-                 {
 
-                     if (iscurPosNo)
 
-                     {
 
-                         goodsend = Convert.ToInt32(convNo);
 
-                     }
 
-                     else
 
-                     {
 
-                         var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
 
-                         var route = routeSet.FirstOrDefault(v => v.ROUTE_STARTPOS == convNo);
 
-                         goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
 
-                     }
 
-                 }
 
-                 if (goodsend == 0) return;
 
-                 var converywrite = new WCSWriteToConveyorSignal()
 
-                 {
 
-                     Plc = plc.Plc,
 
-                     DBName = plc.WriteDBName,
 
-                     ConveyorNo = convNo,
 
-                     WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox,
 
-                     Tasknum = task.TASK_NO,
 
-                     Goodstype = 1,
 
-                     Goodssize = 0,//
 
-                     Goodsstart = Convert.ToInt32(convNo),
 
-                     Goodsend = goodsend,
 
-                     Notask = notask
 
-                 };
 
-                 if (convNo == Conv_1451)
 
-                 {
 
-                     LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]任务[{1}]条码[{2}]外检高度[{3}](零值默认为1)。", convNo, task.TASK_NO, cs.BarCodeStr, cs.DB521_Goodstype), true, LogLevelEnum.INFO.ToString());
 
-                 }
 
-                 WriteInfoToConv(cs, converywrite);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         
 
-         protected override WCS_TASK ScanningCallWmsInterface(GetInTaskParam param)
 
-         {
 
-             //if (param.EquipmentNo == Conv_1004)
 
-             //{
 
-             //    param.Memo1 = "1";
 
-             //}
 
-             return base.ScanningCallWmsInterface(param);
 
-         }
 
-         /// <summary>
 
-         /// 输送线扫码执行
 
-         /// </summary>
 
-         private void Conv_Scanning_1456()
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
 
-                 var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == Conv_1456);
 
-                 var cs = conveyor.EquSignal_Conv;
 
-                 if (!cs.DB521_Request) return;
 
-                 if (cs.DB520_Confirm) return;
 
-                 if (cs.DB521_Tasknum <= 0) return;
 
-                 //if (cs.DB521_BCR_Noread) throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", Conv_1456));
 
-                 //if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", Conv_1456));
 
-                 //if (cs.BarCodeStr.ToUpper().Contains("ERROR") ||
 
-                 //    cs.BarCodeStr.ToUpper().Contains("N") ||
 
-                 //    cs.BarCodeStr.Contains("?"))
 
-                 //{
 
-                 //    throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", Conv_1456, cs.BarCodeStr));
 
-                 //}
 
-                 var converywrite = new WCSWriteToConveyorSignal();
 
-                 converywrite.Plc = plc.Plc;
 
-                 converywrite.DBName = plc.WriteDBName;
 
-                 converywrite.ConveyorNo = Conv_1456; 
 
-                 converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
 
-                 var tasktemp = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDTO == Conv_1456 && v.TASK_WKSTATUS > 1 && v.TASK_COMTYPE == 2);
 
-                 if (tasktemp != null) 
 
-                 {
 
-                     converywrite.Notask = true;
 
-                     string msg = string.Format("出入口[{0}]存在出库任务[{1}]不能执行入库", Conv_1456, tasktemp.TASK_NO);
 
-                     BaseWorkflow.AddLedErrorMsg(Conv_1456, msg, 1);
 
-                 }
 
-                 else
 
-                 {
 
-                     var task = QueryTaskByBarcode(cs, Conv_1456);
 
-                     //var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == cs.BarCodeStr);
 
-                     if (task == null)
 
-                     {
 
-                         var param = new GetInTaskParam()
 
-                         {
 
-                             ContainerBarCode = cs.BarCodeStr,
 
-                             ContainerType = 1,
 
-                             MatBarCode = string.Empty,
 
-                             WareHouseId = Current.Pvchouseputong,
 
-                             EquipmentNo = Conv_1456,
 
-                             EndPostion = srm,
 
-                             Memo1 = "1",
 
-                             Memo2 = Conv_1456
 
-                         };
 
-                         task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
 
-                     }
 
-                     if (task == null) return;
 
-                     //判断任务是否已经执行
 
-                     if (task.TASK_WKSTATUS >= 2) return;
 
-                     if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
 
-                     {
 
-                         converywrite.Notask = true;
 
-                     }
 
-                     converywrite.Tasknum = task.TASK_NO;
 
-                     converywrite.Goodstype = 1;
 
-                     converywrite.Goodssize = 0;//
 
-                     converywrite.Goodsstart = Convert.ToInt32(Conv_1456);
 
-                     converywrite.Goodsend = converywrite.Goodsstart;
 
-                 }
 
-                 
 
-                 //WriteInfoToConveyor(cs, converywrite);
 
-                 WriteInfoToConv(cs, converywrite);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 输送线无扫码执行任务
 
-         /// </summary>
 
-         /// <param name="convNo">扫码输送线</param>
 
-         /// <param name="exitNo">扫码异常退出口</param>
 
-         /// <param name="endPosIsCurConv">目标地址是否当前输送线</param>
 
-         /// <param name="plcindex">PLC索引</param>
 
-         private void Conv_NotScannExeTask(string convNo, string exitNo, bool endPosIsCurConv = false, int plcindex = 0)
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
 
-                 var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
 
-                 var cs = conveyor.EquSignal_Conv;
 
-                 if (cs.DB523_Fault) return;
 
-                 if (!cs.DB521_Request) return;
 
-                 var task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convNo && v.TASK_POSIDCUR == convNo && v.TASK_POSIDNEXT == convNo && v.TASK_WKSTATUS <= 1);
 
-                 if (task == null)
 
-                 {
 
-                     throw new Exception(string.Format("输送线[{0}]有请求未查询到任务信息", convNo));
 
-                 }
 
-                 var converywrite = new WCSWriteToConveyorSignal();
 
-                 converywrite.Plc = plc.PlcInstanceSet[plcindex];//plc.Plc;
 
-                 converywrite.DBName = plc.WriteDBName;
 
-                 converywrite.ConveyorNo = convNo;
 
-                 converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
 
-                 converywrite.Tasknum = task.TASK_NO;
 
-                 converywrite.Goodscode = 0;
 
-                 converywrite.Goodstype = 0;
 
-                 converywrite.Goodssize = 0;
 
-                 converywrite.Goodsstart = Convert.ToInt32(convNo);
 
-                 if (endPosIsCurConv)
 
-                 {
 
-                     converywrite.Goodsend = converywrite.Goodsstart;
 
-                 }
 
-                 else
 
-                 {
 
-                     //if (task.TASK_POSIDTO == srm)
 
-                     //{
 
-                     //    ThreadHelper.TaskThread(BaseWorkflow.AssignSrm, task, 2000);
 
-                     //    return;
 
-                     //}
 
-                     var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
 
-                     var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
 
-                     if (routes.Count == 1)
 
-                     {
 
-                         converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
 
-                     }
 
-                     else
 
-                     {
 
-                         converywrite.Goodsend = ConveyorWriteTaskExecuteToMoreAddress(convNo, task, routes);
 
-                     }
 
-                 }
 
-                 WriteInfoToConv(cs, converywrite);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 堆垛机出口输送线任务执行(任务目标地址的下个地址只支持单一地址)
 
-         /// </summary>
 
-         private void SrmOutConvExeTask(string plcName, string convNo, bool endPosIsCurConv = false)
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == plcName);
 
-                 var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
 
-                 var cs = conveyor.EquSignal_Conv;
 
-                 if (!cs.DB521_Request) return;
 
-                 if (cs.DB523_Fault) return;
 
-                 var taskSet = Current.TaskSet.Where(v => v.TASK_POSIDNEXT == convNo).ToList();
 
-                 var task = taskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.堆垛机完成);
 
-                 if (task == null)
 
-                 {
 
-                     throw new Exception(string.Format("堆垛机出口输送线[{0}]存在请求信号,但没查询到任务信息。", convNo));
 
-                 }
 
-                 var converywrite = new WCSWriteToConveyorSignal();
 
-                 converywrite.Plc = plc.Plc;
 
-                 converywrite.DBName = plc.WriteDBName;
 
-                 converywrite.ConveyorNo = convNo;
 
-                 converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
 
-                 converywrite.Tasknum = task.TASK_NO;
 
-                 converywrite.Goodscode = 0;
 
-                 converywrite.Goodstype = 0;
 
-                 converywrite.Goodssize = 0;
 
-                 converywrite.Goodsstart = Convert.ToInt32(convNo);
 
-                 if (endPosIsCurConv)
 
-                 {
 
-                     converywrite.Goodsend = converywrite.Goodsstart;
 
-                 }
 
-                 else
 
-                 {
 
-                     var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
 
-                     var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
 
-                     if (routes.Count == 1)
 
-                     {
 
-                         converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
 
-                     }
 
-                     else
 
-                     {
 
-                         throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
 
-                     }
 
-                 }
 
-                 //WriteInfoToConveyor(cs, converywrite);
 
-                 WriteInfoToConv(cs, converywrite);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         public override int ConveyorWriteTaskExecuteToMoreAddress(string convNo, WCS_TASK task, List<WCS_EQUIPMENTROUTE> routes)
 
-         {
 
-             int goodsend = 0;
 
-             if (convNo == Conv_1013 || convNo == Conv_1009)
 
-             {
 
-                 if (task.TASK_EndTunnelNum == "1" && task.TASK_SRMNO == "srm01")
 
-                 {
 
-                     goodsend = 1027;
 
-                 }
 
-                 else if (task.TASK_EndTunnelNum == "2" && task.TASK_SRMNO == "srm01")
 
-                 {
 
-                     goodsend = 1026;
 
-                 }
 
-                 else
 
-                 {
 
-                     throw new Exception(string.Format("任务[{0}]堆垛机编号[{1}]目标巷道[{2}]不正确。", task.TASK_NO, task.TASK_SRMNO, task.TASK_EndTunnelNum));
 
-                 }
 
-             }
 
-             else if (convNo == Conv_1023)
 
-             {
 
-                 BaseWorkflow.AssignSrm(task);
 
-                 if (task.TASK_EndTunnelNum == "1")
 
-                 {
 
-                     goodsend = 1027;
 
-                 }
 
-                 else if (task.TASK_EndTunnelNum == "2")
 
-                 {
 
-                     goodsend = 1026;
 
-                 }
 
-                 else
 
-                 {
 
-                     throw new Exception(string.Format("任务[{0}]分配巷道失败。", task.TASK_NO));
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 throw new Exception(string.Format("该函数不支持多个分支输送地址,请编写扩展接口。"));
 
-             }
 
-             return goodsend;
 
-         }
 
-         #endregion;
 
-     }
 
- }
 
 
  |