using EnumType; using iWareSda_QQJF.OPCService; using iWareSda_QQJF.SRM.SrmModel; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Threading; using Newtonsoft.Json; using logtxtWrite; using iWareSda_QQJF.WCSNEW.EDM; using iWareSda_QQJF.WCSNEW; using iWareSda_QQJF.WCSNEW.生成主任务; namespace iWareSda_QQJF.SRM.SrmService { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“SrmService”。 public class SrmService : ISrmService { List oldHandShake = new List { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; List times = new List { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /// 获取SrmEntity实体集合 /// /// /// public string GetSrmInfo(int srmId) { //循环读取信息 频率太高 不加日志 if (srmId < 1 || srmId > 9) return "ID号超出范围"; EntitySrmView srm = new EntitySrmView(); //中间显示类转换任务ID try { srm.SrmName = Srm_CacheEntity.Srms[srmId - 1].SrmName; srm.DeviceId = Srm_CacheEntity.Srms[srmId - 1].DeviceId; srm.RhandShake = Srm_CacheEntity.Srms[srmId - 1].RhandShake; srm.Rmode = Srm_CacheEntity.Srms[srmId - 1].Rmode; srm.Ralarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm; srm.RliftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull; srm.Rposx = Srm_CacheEntity.Srms[srmId - 1].Rposx; srm.Rposy = Srm_CacheEntity.Srms[srmId - 1].Rposy; srm.Rposz = Srm_CacheEntity.Srms[srmId - 1].Rposz; srm.Rposxmm = Srm_CacheEntity.Srms[srmId - 1].Rposxmm; srm.Rposymm = Srm_CacheEntity.Srms[srmId - 1].Rposymm; srm.Rposzmm = Srm_CacheEntity.Srms[srmId - 1].Rposzmm; srm.RpickFinish = Srm_CacheEntity.Srms[srmId - 1].RpickFinish; srm.RdeliveryFinish = Srm_CacheEntity.Srms[srmId - 1].RdeliveryFinish; srm.RtaskFinish = Srm_CacheEntity.Srms[srmId - 1].RtaskFinish; srm.RalarmNumber = Srm_CacheEntity.Srms[srmId - 1].RalarmNumber; srm.Rstate = Srm_CacheEntity.Srms[srmId - 1].Rstate; srm.Ractuallane = Srm_CacheEntity.Srms[srmId - 1].Ractuallane; srm.RDevicetaskNO = Srm_CacheEntity.Srms[srmId - 1].RtaskNO; srm.RtaskNO = Srm_CacheEntity.Srms[srmId - 1].RtaskNO; srm.ack = Srm_CacheEntity.Srms[srmId - 1].ack; using (Model edm = new Model()) { if (srm.RtaskNO != 0) { //srm.RtaskNO = edm.SrmTask.FirstOrDefault(x => x.ID == srm.RtaskNO).MainTask.TASKID; srm.RtaskNO = edm.SrmTask.OrderByDescending(x => x.ID).FirstOrDefault(x => (x.ID % 32767) + 1 == srm.RtaskNO).TASK_TASK.ID; } } } catch { } return JsonConvert.SerializeObject(srm); } /// /// 读取更新数据 /// /// public void ReadPlc(int srmId) { try { //object o = FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].handShakeR); Srm_CacheEntity.Srms[srmId - 1].RhandShake = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].handShakeR)); if (Srm_CacheEntity.Srms[srmId - 1].RhandShake == oldHandShake[srmId - 1]) { times[srmId - 1]++; } else { times[srmId - 1] = 0; } if (times[srmId - 1] > 3) { //断线重连 FormMain.srmgs[srmId - 1].Close(); Thread.Sleep(1000); FormMain.srmgs[srmId - 1].Open(); } int value = Srm_CacheEntity.Srms[srmId - 1].RhandShake; oldHandShake[srmId - 1] = value; if (FormMain.srmgs[(int)srmId - 1].IsConnected) { int Rmode = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].modeR)); int Ralarm = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].alarmISR)); int RliftFull = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].liftFullR)); int Rposx = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posXR)); int Rposy = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posYR)); int Rposz = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posZR)); long Rposxmm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posxmmR)); long Rposymm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posymmR)); long Rposzmm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].poszmmR)); int RpickFinish = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].pickFinishR)); int RtaskFinish = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].taskFinishR)); int RalarmNumber = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].alarmNOR)); int Rstate = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].stateR)); int Ractuallane = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].actualLaneR)); int RtaskNO = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].tasknoR)); string ack = FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].ackW).ToString(); //校验信号 if (true) { //验证正确,统一赋值 //Srm_CacheEntity.Srms[srmId - 1].RhandShake = RhandShake; Srm_CacheEntity.Srms[srmId - 1].Rmode = Rmode; Srm_CacheEntity.Srms[srmId - 1].Ralarm = Ralarm; Srm_CacheEntity.Srms[srmId - 1].RliftFull = RliftFull; Srm_CacheEntity.Srms[srmId - 1].Rposx = Rposx; Srm_CacheEntity.Srms[srmId - 1].Rposy = Rposy; Srm_CacheEntity.Srms[srmId - 1].Rposz = Rposz; Srm_CacheEntity.Srms[srmId - 1].Rposxmm = Rposxmm; Srm_CacheEntity.Srms[srmId - 1].Rposymm = Rposymm; Srm_CacheEntity.Srms[srmId - 1].Rposzmm = Rposzmm; Srm_CacheEntity.Srms[srmId - 1].RpickFinish = RpickFinish; Srm_CacheEntity.Srms[srmId - 1].RtaskFinish = RtaskFinish; Srm_CacheEntity.Srms[srmId - 1].RalarmNumber = RalarmNumber; Srm_CacheEntity.Srms[srmId - 1].Rstate = Rstate; Srm_CacheEntity.Srms[srmId - 1].Ractuallane = Ractuallane; Srm_CacheEntity.Srms[srmId - 1].RtaskNO = RtaskNO; Srm_CacheEntity.Srms[srmId - 1].ack = ack; } } } catch (Exception) { } } /// 删除堆垛机任务 /// /// /// public int SendSrmDelete(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmDelete 错误srmId:" + srmId.ToString(), 0); return 0; } try { FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, 4); logtxt.txtWrite("类名:SrmService,函数名:SendSrmDelete srmId:" + srmId.ToString(), 1); return 1; } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:SendSrmDelete/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2); return 0; } } /// 堆垛机任务完成确认信号发送 /// /// 设备号 /// public int SendSrmTaskFinishConfirm(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmTaskFinishConfirm 错误srmId:" + srmId.ToString(), 0); return 0; } try { FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFinishW, 1); logtxt.txtWrite("类名:SrmService/函数名:SendSrmTaskFinishConfirm/ srmId:" + srmId.ToString(), 1); return 1; } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:SendSrmTaskFinishConfirm/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2); return 0; } } /// 发送急停 /// /// /// public int SendSrmEStop(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误srmId:" + srmId.ToString(), 0); return 0; } try { FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].emergencyStopW, 1); logtxt.txtWrite("类名:SrmService/函数名:SendSrmEStop/ srmId:" + srmId.ToString(), 1); return 1; } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:SendSrmEStop/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2); return 0; } } /// 发送堆垛机单放和移动任务 /// /// /// 堆垛机号 /// 任务id /// 目的地址 /// 2是单放,3是移动 /// /// public int SendSrmMove(int srmId, int taskId, string toPlace, int command, int palletType, int taskFather) { if (command < 2 || command > 3 || srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误srmId:" + srmId.ToString(), 0); return 2; } try { UInt16 taskid; bool istaskid = UInt16.TryParse(taskId.ToString(), out taskid); if (!istaskid) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误taskID:" + taskId.ToString(), 0); return 2; } string[] places = toPlace.Split('-'); if (places.Length != 3) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误toPlace:" + toPlace.ToString(), 0); return 2; } int[] placenos = new int[3]; for (int i = 0; i < 3; i++) { bool isconso = int.TryParse(places[i], out placenos[i]); if (!isconso) { logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误toPlace:" + toPlace.ToString(), 0); return 2; } } FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskNOW, taskId); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFather, taskFather); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].palletTypeW, palletType);//暂时强写 FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosXW, placenos[1]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosYW, placenos[2]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosZW, placenos[0]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, command); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].stbW, 1); logtxt.txtWrite("类名:SrmService/函数名:SendSrmMove/ srmId:" + srmId.ToString() + "taskID:" + taskId.ToString() + "toPlace" + toPlace.ToString() + "command" + command.ToString(), 1); } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:SendSrmMove/ srmId:" + srmId.ToString() + "taskID:" + taskId.ToString() + "toPlace" + toPlace.ToString() + "command" + command.ToString() + logtxt.oneRow(ex.ToString()), 2); return 0; } //发送握手确认 isack(srmId); return 1; //返回1 执行成功 ,0 执行失败 2 参数格式错误 } /// 发送堆垛机搬运任务 /// /// /// 堆垛机号 /// 任务ID /// 起始位 /// 货物放置目的地 /// 托盘类型 1-6暂定 /// public int SendSrmTask(int srmId, int taskId, string sourcePlace, string toPlace, int pallet, int fatherId) { if (pallet < 1 || pallet > 13 || srmId < 1 || srmId > 13) { logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误pallet:" + pallet.ToString() + "错误srmId:" + srmId.ToString(), 0); return 0; } try { UInt16 taskID; bool istaskId = UInt16.TryParse(taskId.ToString(), out taskID); if (!istaskId) { logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0); return 0; } string[] places = (sourcePlace + "-" + toPlace).Split('-'); if (places.Length != 6) { logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0); return 0; } int[] placenos = new int[6]; for (int i = 0; i < 6; i++) { bool isconso = int.TryParse(places[i], out placenos[i]); if (!isconso) { logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0); return 0; } } #region opc写值 FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskNOW, taskId); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFather, fatherId); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].palletTypeW, pallet); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosXW, placenos[1]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosYW, placenos[2]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosZW, placenos[0]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosXW, placenos[4]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosYW, placenos[5]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosZW, placenos[3]); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, 1); FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].stbW, 1); logtxt.txtWrite("类名:SrmService/函数名:sendSrmTask/ srmId:" + srmId.ToString() + "taskId:" + taskId.ToString() + "sourcePlace" + sourcePlace.ToString() + "toPlace" + toPlace.ToString() + "pallet" + pallet.ToString(), 1); #endregion WZ.Useful.Commons.LogTextHelper.WriteLine("堆垛机", "任务下发成功:", "堆垛机:" + srmId + " 任务号:" + taskId + "主任务号:" + fatherId); } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:sendSrmTask/ srmId:" + srmId.ToString() + "taskId:" + taskId.ToString() + "sourcePlace" + sourcePlace.ToString() + "toPlace" + toPlace.ToString() + "pallet" + pallet.ToString() + logtxt.oneRow(ex.ToString()), 2); return 0; } //发送握手确认 isack(srmId); return 1; //返回1 执行成功 ,0 执行失败 2 参数格式错误 } /// 堆垛机ACK确认 握手通信 /// /// /// /// public void isack(int srmid) { Thread th = new Thread(new ParameterizedThreadStart(ack)); th.IsBackground = true; th.Start(srmid); } public void ack(object srmid) { string srmAck = string.Empty; int times = 0; while (true) { //超过5秒 ack不置1返回失败 if (times > 10) { times = 0; logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString() + "ACK超时不置1,返回失败", 1); //更新数据库 using (Model edm = new Model()) { int sid = (int)srmid; SrmTask task = edm.SrmTask.OrderByDescending(x => x.ID).FirstOrDefault(x => x.USESRMID == sid && x.ISRELEASED == 1 && x.HASFINISHED == 0); task.ISRELEASED = 0;//初始化任务进行重发 edm.SaveChanges(); } break; } Thread.Sleep(500); try { //读取ack值 srmAck = Srm_CacheEntity.Srms[(int)srmid - 1].ack; if (srmAck == "1") { //ack为1时stb改为0 一次握手执行完成 FormMain.srmgs[(int)srmid - 1].WriteValuePoint(FormMain.srmDBS[(int)srmid - 1].stbW, 0); logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString(), 1); WZ.Useful.Commons.LogTextHelper.WriteLine("stbW", "写入:", "0"); break; } } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString() + logtxt.oneRow(ex.ToString()), 2); } times++; } } /// 堆垛机解警 /// /// /// public void SrmRlsAlert(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:SrmRlsAlert 错误srmId:" + srmId.ToString(), 0); return; } try { FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].alarmAckW, 1); logtxt.txtWrite("类名:SrmService/函数名:SrmRlsAlert(解警)/ srmid:" + srmId.ToString(), 1); } catch (Exception ex) { logtxt.txtWrite("类名:SrmService/函数名:SrmRlsAlert(解警)/ srmid:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2); } } /// 任务是否完成 /// /// /// /// /// public int IsTaskFinish(int srmId) { //GetSrmInfo(srmId); if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:IsTaskFinish 错误srmId:" + srmId.ToString(), 0); return 2; } logtxt.txtWrite("类名:SrmService,函数名:IsTaskFinish 任务完成srmId:" + srmId.ToString(), 0); if (Srm_CacheEntity.Srms[srmId - 1].RtaskFinish == 1) { WZ.Useful.Commons.LogTextHelper.WriteLine("堆垛机", "任务完成:", "堆垛机:" + srmId + " 任务号:" + (Srm_CacheEntity.Srms[srmId - 1].RtaskNO - 1)); } return Srm_CacheEntity.Srms[srmId - 1].RtaskFinish; } /// /// 获取完成任务号 /// /// /// public int FinishTask(int srmId) { //GetSrmInfo(srmId); int taskid = Srm_CacheEntity.Srms[srmId - 1].RtaskNO; return taskid; } /// 堆垛机是否准备好 /// /// /// /// public bool IsReady(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0); return false; } //GetSrmInfo(srmId); int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode; int alarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm; int liftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull; int state = Srm_CacheEntity.Srms[srmId - 1].Rstate; if (mode != 1 || alarm == 1 || liftFull == 1 || state != 0) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0); return false; } logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0); return true; } /// 堆垛机是否故障 /// /// /// /// true:表示堆垛机没有故障,false:表示堆垛机有故障 public bool IsNotAlarm(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0); return false; } //GetSrmInfo(srmId); int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode; int alarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm; if (mode != 1 || alarm == 1) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0); return false; } logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0); return true; } /// 堆垛机是否准备好 /// /// /// /// public bool IsNotUse(int srmId) { if (srmId < 1 || srmId > 9) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0); return false; } int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode; int liftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull; int state = Srm_CacheEntity.Srms[srmId - 1].Rstate; if (mode != 1 || liftFull == 1 || state != 0) { logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0); return false; } logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0); return true; } ///// ///// 获取任务是否完成 ///// ///// //public iWareSda_QQJF.WCS.TaskFinishClass TaskFinish(int taskId) //{ // iWareSda_QQJF.WCS.TaskFinishClass result = new WCS.TaskFinishClass(); // using (Model edm = new Model()) // { // TASK_TASK task = edm.TASK_TASK.FirstOrDefault(x => x.ID == taskId); // if (task == null) // { // result.result = false; // result.statusId = 0; // result.message = "无此任务号"; // result.isError = 0; // } // else // { // if (task.HASFINISHED == 1 || task.HASFINISHED == 2) // { // result.result = true; // result.statusId = 0; // if (task.ISERROR == 1) // { // result.result = false; // result.statusId = task.ERRORMSG ?? 0; // result.isError = 1; // string msg = ""; // switch (result.statusId) // { // case 1: msg = "输送线"; break; // case 2: msg = "RGV"; break; // case 3: msg = "堆垛机"; break; // default: msg = "输送线"; break; // } // result.message = msg + " 设备ID:" + task.ERRORDEVICEID; // } // } // else // { // result.result = false; // result.statusId = 0; // result.message = "此任务号未完成"; // result.isError = 0; // } // } // } // WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成接口", result.result.ToString(), "任务号:"+taskId); // WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成接口详情", result.message, "任务号:" + result.statusId.ToString()); // return result; //} ///// ///// 下发主任务 ///// ///// ///// ///// ///// ///// ///// //public iWareSda_QQJF.WCS.SendTaskClass SendTask(int palletType, string sourcePlace, string toPlace, int taskId, int taskType, int outType) //{ // WZ.Useful.Commons.LogTextHelper.WriteLine("任务开始下发", taskId.ToString(), ""); // //初始化服务对象 // iWareSda_QQJF.RGV.RgvService.RgvService rgvService = new RGV.RgvService.RgvService(); // iWareSda_QQJF.SRMTRAN.SrmTranService.SrmTranService srmService = new SRMTRAN.SrmTranService.SrmTranService(); // iWareSda_QQJF.WCS.SendTaskClass result = new WCS.SendTaskClass(); // result.result = false; // result.statusId = 0; // result.deviceId = 0; // result.outTransId = 0;//出库时根据出口状态计算 // result.outType = outType; // int statusId = 0; // int deviceId = 0; // using (Model edm = new Model()) // { // MainTask oldTask = edm.MainTask.FirstOrDefault(x => x.TASKID == taskId); // if (oldTask != null) // { // result.result = true; // result.statusId = 90; // return result; // } // //判断设备是否允许下发 // if (Helper.TaskCouldSend(sourcePlace, toPlace, taskType, out statusId, out deviceId))//调试状态先屏蔽,不然太麻烦 // { // MainTask task = new MainTask(); // task.TASKID = taskId; // task.SOURCEPLACE = sourcePlace; // if (taskType != 2)//入库移库 // { // task.TOPLACE = toPlace; // } // else//出库 // { // WZ.Useful.Commons.LogTextHelper.WriteLine("出库", toPlace.ToString(), outType.ToString()); // //指定出库 // //if (!string.IsNullOrEmpty(toPlace)) // if (toPlace != "999" && toPlace != "997") // { // result.outTransId = int.Parse(toPlace); // task.TOPLACE = toPlace; // } // //类型出库 // else // { // if (toPlace == "999") // { // outType = 1; // } // if (toPlace == "997") // { // outType = 5; // } // result.outTransId = Helper.GetOutTran(outType, sourcePlace); // task.TOPLACE = result.outTransId.ToString(); // } // } // bool allowSend = true; // //检测是否会造成RGV堵塞(单出口只能发2条) // if (taskType == 2) // { // SRMTRAN.SrmTranService.SrmTranService srm = new SRMTRAN.SrmTranService.SrmTranService(); // int tranNum2 = 0; // if (task.TOPLACE == "19") // { // tranNum2 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE) + 1) == 1 ? 1 : 0; // } // else if (task.TOPLACE != "67" && task.TOPLACE != "34") // { // tranNum2 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE) - 1) == 1 ? 1 : 0; // } // else if (task.TOPLACE == "67" || task.TOPLACE == "34") // { // tranNum2 = 1;//分拣出口就一段 // } // int taskNum = edm.MainTask.Where(x => x.TOPLACE == task.TOPLACE && x.HASFINISHED == 0).Count(); // int tranNum1 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE)) == 1 ? 1 : 0; // if (taskNum + tranNum1 + tranNum2 >= 2) // { // allowSend = false; // } // } // if (allowSend) // { // task.UPDATETIME = DateTime.Now; // task.HASFINISHED = 0; // task.ISERROR = 0; // task.TASKTYPE = taskType; // task.OUTTYPE = outType; // task.HASREADED = 0; // task.HASPUSHED = 0; // task.PALLETTYPE = palletType; // edm.MainTask.Add(task); // if (edm.SaveChanges() > 0) // { // result.result = true; // } // else // { // result.result = false; // result.statusId = 99; // } // } // else // { // result.result = false; // result.statusId = 88;//出口堵塞 // } // } // else // { // //获取不可下发原因 // result.result = false; // result.statusId = statusId; // result.deviceId = deviceId; // WZ.Useful.Commons.LogTextHelper.WriteLine("下发失败", result.deviceId.ToString(), "状态:" + result.statusId.ToString()); // } // } // //WZ.Useful.Commons.LogTextHelper.WriteLine("出库", result.outTransId.ToString(), result.result.ToString()); // WZ.Useful.Commons.LogTextHelper.WriteLine("任务:" + taskId, "成功:"+result.result.ToString()," "+sourcePlace+" "+toPlace+" "+taskType); // WZ.Useful.Commons.LogTextHelper.WriteLine("任务下发", result.statusId.ToString(), result.result.ToString()); // return result; //} ///// ///// 关联删除 ///// ///// ///// //public int SendSrmDeleteAll(int srmID) //{ // List tranDoingId = new List(); // List rgvDoingId = new List(); // List srmDoingId = new List(); // int srmTaskId = Srm_CacheEntity.Srms[srmID - 1].RtaskNO; // //删除未执行的任务和删除已执行的任务 // bool result = WCS.Helper.DeleteAllBySrmTaskId(srmTaskId, out tranDoingId, out rgvDoingId, out srmDoingId); // //删除设备任务 // foreach (var i in rgvDoingId) // { // RGV.RgvService.RgvService srv = new RGV.RgvService.RgvService(); // srv.SendRgvDelete(i); // } // foreach (var i in tranDoingId) // { // SRMTRAN.SrmTranService.SrmTranService srv = new SRMTRAN.SrmTranService.SrmTranService(); // srv.SendTranDelete(i); // } // foreach (var i in srmDoingId) // { // SRM.SrmService.SrmService srv = new SRM.SrmService.SrmService(); // srv.SendSrmDelete(i); // } // if (result) // { // return 1; // } // else // { // return 0; // } //} /// /// 切换自动优化 /// /// /// public bool UseAutoMove(int srmId) { if (srmId < 1 || srmId > 9) { return false; } CreateMainTask.needMove[srmId - 1] = !CreateMainTask.needMove[srmId - 1]; return CreateMainTask.needMove[srmId - 1]; } /// /// 根据任务号删除任务 /// /// /// /// /// public bool DeleteMainTask(int id, out List tranDoingId, out List rgvDoingId, out List srmDoingId, out List placeList, out int dir) { dir = 0; WZ.Useful.Commons.LogTextHelper.WriteLine("任务关联删除", "任务号", id.ToString()); bool result = WCSNEW.Helper.DeleteAllTask(id, out tranDoingId, out rgvDoingId, out srmDoingId, out placeList, out dir); if (result) { //删除设备任务 foreach (var i in rgvDoingId) { RGV.RgvService.RgvService srv = new RGV.RgvService.RgvService(); srv.SendRgvDelete(i); } foreach (var i in tranDoingId) { SRMTRAN.SrmTranService.SrmTranService srv = new SRMTRAN.SrmTranService.SrmTranService(); srv.SendTranDelete(i); } foreach (var i in srmDoingId) { SRM.SrmService.SrmService srv = new SRM.SrmService.SrmService(); srv.SendSrmDelete(i); } WCSNEW.Helper.GetAlarmDevice(id); } return result; } /// /// 根据托盘号删除任务 /// /// /// /// /// public bool DeleteMainTaskByContainerName(string containerName, out List tranDoingId, out List rgvDoingId, out List srmDoingId, out List placeList, out int dir) { dir = 0; WZ.Useful.Commons.LogTextHelper.WriteLine("任务关联删除", "托盘:", containerName); TASK_TASK task = new TASK_TASK(); using (Model edm = new Model()) { //task = edm.TASK_TASK.FirstOrDefault(x => x.BASE_CONTAINER.CONTAINERNAME == containerName && (x.HASFINISHED ?? 0) == 0); task = edm.TASK_TASK.OrderByDescending(x => x.CREATETIME).FirstOrDefault(x => x.BASE_CONTAINER.CONTAINERNAME == containerName); } if (task != null) { bool result = DeleteMainTask(task.ID, out tranDoingId, out rgvDoingId, out srmDoingId, out placeList, out dir); return result; } else { tranDoingId = new List(); rgvDoingId = new List(); srmDoingId = new List(); placeList = new List(); dir = 0; return false; } } } }