using Hanhe.iWCS.Business; using Hanhe.iWCS.Common; using Hanhe.iWCS.DeviceDriver; using Hanhe.iWCS.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hanhe.iWCS.TaizhouGEMTwoProtocol { public class TSHelper { /// /// AGV进入 /// /// 任务号 /// 序号 /// 新的agv终点 //public static bool GoToAGV(string taskNo, int orderNo, int param1 = 1) { public static bool GoToAGV(string taskNo, int orderNo, int param1) { bool bResult = false; //TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, orderNo, 0); //TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, 1, 0); //if (GoToAction != null) { //HardwareAccessObject GoToAGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(GoToAction.CN_S_PROGRAM_CODE); HardwareAccessObject GoToAGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1"); if (GoToAGVHao != null) { //发送行走指令 到AGV CMMLog.Info($"【杭叉AGV】GoToAGVHao:{GoToAGVHao}"); Console.WriteLine($"【杭叉AGV】GoToAGVHao:{GoToAGVHao}"); StringBuilder sbMsg = new StringBuilder(); sbMsg.Append(""); sbMsg.Append(""); sbMsg.Append(""); try { object[] args = new object[1]; args[0] = sbMsg.ToString(); object errObject = GoToAGVHao._WebServiceInstance.Invoke("ChangeOrder", args); string errMsg = string.Empty; int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg); if (errCode == 0) { CMMLog.Info("【杭叉AGV】通知AGV行走成功!请求参数=" + sbMsg.ToString()); Console.WriteLine("【杭叉AGV】通知AGV行走成功!请求参数=" + sbMsg.ToString()); bResult = true; } else { CMMLog.Info("【杭叉AGV】占用失败;通知AGV行走失败!errCode=" + errCode + ";请求参数=" + sbMsg.ToString()); Console.WriteLine("【杭叉AGV】占用失败;通知AGV行走失败!errCode=" + errCode + ";请求参数=" + sbMsg.ToString()); } } catch (Exception ex) { CMMLog.Info("【杭叉AGV】通知AGV异常!Exception=" + ex.Message + ";请求参数=" + sbMsg.ToString()); Console.WriteLine("【杭叉AGV】通知AGV异常!Exception=" + ex.Message + ";请求参数=" + sbMsg.ToString()); } } else { CMMLog.Info($"【杭叉AGV】GoToAGVHao==null!"); Console.WriteLine($"【杭叉AGV】GoToAGVHao==null!"); } //} //else //{ // CMMLog.Info($"【杭叉AGV】GoToAction==null!"); // Console.WriteLine($"【杭叉AGV】GoToAction==null!"); //} return bResult; } //ams下发充电任务,TS99,参数0填写车号即可。 //当充电开始时,会发送s消息,带的三个参数分别为: 车号;81;99 //当充电结束或者任务被取消,会发送s消息,三个参数分别为: 车号,82,99 internal static int SendChargeTask(string agvNo, bool charge, bool full = false) { CMMLog.Info("推送充电任务:执行开始!"); Console.WriteLine("推送充电任务:执行开始!"); var command = charge ? "AddNewOrder" : "CancelOrder"; int code = -1; try { CMMLog.Info("推送充电任务:full=" + full); int to = full ? 1000 : 0; StringBuilder sbMsg = new StringBuilder(); sbMsg.Append(""); if (charge) { sbMsg.Append(""); CMMLog.Info($"推送充电任务:{sbMsg}"); } else { sbMsg.Append(""); CMMLog.Info($"推送充电任务:{sbMsg}"); } sbMsg.Append(""); HardwareAccessObject AGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1"); if (AGVHao != null) { object[] args = new object[1]; string errMsg = string.Empty; args[0] = sbMsg.ToString(); object xmlData = AGVHao._WebServiceInstance.Invoke(command, args); code = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)xmlData, out errMsg); CMMLog.Info("推送充电任务:param=" + sbMsg.ToString() + ";cmd=" + command + ";code=" + code + ";errMsg=" + errMsg); if (code == 60050) { code = 0; } } } catch (Exception ex) { CMMLog.Info("推送充电任务:异常:【agv=" + agvNo + ";cmd=" + command + "】charge task err:" + ex.Message.ToString()); } CMMLog.Info("推送充电任务:执行结束!"); return code; } /// /// 小车安全门交互 /// /// /// public static bool Traffic(string lockNo) { bool bResult = false; HardwareAccessObject AGVhao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1"); if (AGVhao != null) { //发送行走指令 到AGV StringBuilder sbMsg = new StringBuilder(); sbMsg.Append(""); //sbMsg.Append(""); sbMsg.Append(""); sbMsg.Append(""); var msg = string.Empty; try { object[] args = new object[1]; args[0] = sbMsg.ToString(); object errObject = AGVhao._WebServiceInstance.Invoke("StartNewOrderWithQCmd", args); string errMsg = string.Empty; int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg); if (errCode == 0) { bResult = true; } msg = string.Format($"【推送小车进入安全门】:" + "notice agv go errCode={0} errMsg={1} request={2}", errCode, errMsg, sbMsg.ToString()); //Console.WriteLine(msg); CMMLog.Debug(msg); } catch (Exception ex) { msg = string.Format($"【推送小车进入安全门:异常】:" + "notice agv go errMsg={0} request={1}", ex.Message, sbMsg.ToString()); //Console.WriteLine(msg); CMMLog.Debug(msg); } } return bResult; } /// /// 发送和取消充电任务 /// /// 任务号 /// 车号 /// 指令方法 /// //internal static int SendChargeTask(string taskNo, string agvNo, bool charge, bool full = false) { // Console.WriteLine("SendChargeTask"); // var command = charge ? "AddNewOrder" : "CancelOrder"; // // int code = SendAGVTaskInfo(taskNo, agvNo, "AddNewOrder"); // // int code = SendAGVTaskInfo(taskNo, agvNo, "CancelOrder"); // int code = -1; // try { // CMMLog.Info("full=" + full); // int to = full ? 1000 : 0; // StringBuilder sbMsg = new StringBuilder(); // sbMsg.Append(""); // if (charge) { // sbMsg.Append(""); // } // else { // sbMsg.Append(""); // } // sbMsg.Append(""); // HardwareAccessObject AGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO("1"); // if (AGVHao != null) { // object[] args = new object[1]; // string errMsg = string.Empty; // args[0] = sbMsg.ToString(); // object xmlData = AGVHao._WebServiceInstance.Invoke(command, args); // code = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)xmlData, out errMsg); // CMMLog.Info("send charge task:param=" + sbMsg.ToString() + ";cmd=" + command + ";code=" + code + ";errMsg=" + errMsg); // if (code == 60050) { // code = 0; // } // } // } // catch (Exception ex) { // CMMLog.Info("【agv=" + agvNo + ";cmd=" + command + "】charge task err:" + ex.Message.ToString()); // } // return code; //} public static bool ChangeParam(string taskNo, int paramNo, params int[] param) { bool bResult = false; TN_I_TASK_DTL_ACTION GoToAction = WorkFlowAction.GetActionNode(taskNo, 1, 0); if (GoToAction != null) { HardwareAccessObject GoToAGVHao = HardwareAccessHelper.Instance.GetEquipmentsHAO(GoToAction.CN_S_PROGRAM_CODE); if (GoToAGVHao != null) { //发送行走指令 到AGV var req = $" "; if (param.Length > 1) { req = $" "; } try { object[] args = new object[1]; args[0] = req; object errObject = GoToAGVHao._WebServiceInstance.Invoke("ChangeOrder", args); string errMsg = string.Empty; int errCode = Hanhe.iWCS.AGVWebService.AGVHelper.Instance.AGVXmlResult((string)errObject, out errMsg); if (errCode == 0) { CMMLog.Info("【杭叉AGV】通知AGV行走成功!请求参数=" + req); bResult = true; } else { CMMLog.Info("【杭叉AGV】占用失败;通知AGV行走失败!errCode=" + errCode + ";请求参数=" + req); } } catch (Exception ex) { CMMLog.Info("【杭叉AGV】通知AGV异常!Exception=" + ex.Message + ";请求参数=" + req); } } } return bResult; } } }