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;
}
}
}