using DriverLib.Engine;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using XCore;
using XImagingXhandler.XDAL;
using XHandler.View.MethodProperty;
using XHandler.View;
using XHandler.Class.DataEx;
using HxSocket;
using DataEntity.Share;
using XCommon.Log;
using XHandler.Controls.Run.Com;
using static HxEnum.OperationTypeEnum;
using MySqlX.XDevAPI.Common;
using SqlSugar;
using XImaging.Automation.Service.Interface;
using DataRWDAL;
using DataEntity;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
namespace XHandler.Controls
{
public class UnloadTipsControl
{
string strCurrentCulture = "";
WellCalc wellCalc = new WellCalc();
LatticeBll latticeBll = new LatticeBll();
UnloadTipsBll unloadTipsBll = new UnloadTipsBll();
public RunWnd launchView = null;
public HxSocketClient socketTcpClientToRemote = null;
public UnloadTipsControl(string strCurrentCulture)
{
this.strCurrentCulture = strCurrentCulture;
}
#region 执行卸载吸头,返回结果字符串
///
/// 执行卸载吸头,返回结果字符串
///
///
/// 装载方法属性节点对象
/// 0:连接谁;1:仿真
///
public bool ExecuteUnloadTips(XmlNodeList platformNodeList, XmlNode methodNode, bool isSimulator)
{
bool result = true;
if (launchView._cancelSource.IsCancellationRequested)
{
result = false;
return result;
}
try
{
#region Start Log
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strStart.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】start:");
}
#endregion
#region 数据准备
string channelNums = methodNode.SelectSingleNode("channels").InnerText;
string armName = methodNode.SelectSingleNode("arm/text").InnerText;
string armId = methodNode.SelectSingleNode("arm/value").InnerText;
string latticeid = methodNode.SelectSingleNode("position/value").InnerText;
string latticenum = methodNode.SelectSingleNode("position/text").InnerText;
bool isputToSource = methodNode.SelectSingleNode("isputToSource").InnerText.ToLower() == "true" ? true : false;
#endregion
#region 数据验证
if (channelNums == "")
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler:【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strWithoutChannel.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler:Channel wasn't set, please check!");
}
if (launchView.isRemotingOper)
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1019", 5, Properties.MachineRunResource.strWithoutChannel, 2);
}
result = false;
return result;
}
#endregion
DataTable dt = null;
List dtTipBase = new List();
Lattice lattice = new Lattice();
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
if (tabletopTemplate == null)
{
lattice = LatticeDB.GetLatticeDataByIdFromdb(latticenum, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number); // 卸载位
}
else
{
string armid = methodNode.SelectSingleNode("arm/value").InnerText;
lattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(latticenum, Convert.ToInt32(armid), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
}
//Lattice lattice = LatticeDB.GetLatticeDataByIdFromdb(latticenum, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number); // 卸载位
if (isputToSource) // 原孔位放置
{
//查询板位上是否有空闲的耗材孔
foreach (XmlNode x in platformNodeList)
{
if (launchView.currentWellLatticeId != string.Empty)
{
string a = x.ChildNodes[0].InnerText;
int latticeId = 0;
if (tabletopTemplate == null)
{
a = ControlCom.GetLatticeId(Convert.ToInt32(a)).ToString();
}
else
{
string latticeNumber = "P" + a;
a = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(latticeNumber, Convert.ToInt32(Shared.DeviceArmList.SingleOrDefault(t => t.arm_type.Equals(1)).device_arm_id), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid).lattice_id;
}
if (a == launchView.currentWellLatticeId)
{
lattice = LatticeDB.GetLatticeDataByIdFromdb(launchView.currentWellLatticeId);
if (!string.IsNullOrEmpty(launchView.currentInValidWell))
{
XmlNodeList xmlNodeList = x.SelectNodes("labware");
Labware labware = LabwareDB.GetLabware(xmlNodeList[xmlNodeList.Count-1].ChildNodes[0].InnerText);
string t1 = launchView.currentInValidWell;
string p = lattice.lattice_id;
string[] tWells = t1.Split(',');
for (int i = 0; i < tWells.Length; i++)
{
TipsTable t = new TipsTable();
t.labware_id = labware.labware_id;
t.lattice_id = p;
t.wellname = tWells[i];
t.axis_b_X = 0.0f;
t.axis_b_Y = 0.0f;
t.axis_b_Z = 0.0f;
t.well_top_shape = 0;
t.axis_b_r = 0.0f;
t.isUsed = 0;
t.lattice_num = lattice.lattice_num;
dtTipBase.Add(t);
}
List lattices = new List();
lattices.Add(lattice);
dt = ControlCom.GenerateCurrentTablayoutWellCoordinate(labware, lattices);
}
else
{
result = false;
return result;
}
break;
}
else
{
continue;
}
}
}
List dtsTips = new List();
if(dt==null)
{
result = false;
return result;
}
// dt 转化为实体类对象集合
for (int i = 0; i < dt.Rows.Count; i++)
{
//去除未被选中的孔位(即非可用枪头孔位)
var a = dtTipBase.FirstOrDefault(x => x.labware_id.Equals(dt.Rows[i]["labware_id"].ToString()) &&
x.lattice_id.Equals(dt.Rows[i]["lattice_id"].ToString()) &&
x.lattice_num.Equals(dt.Rows[i]["lattice_num"].ToString()) &&
x.wellname.Equals(dt.Rows[i]["wellname"].ToString()));
if (a != null)
{
TipsTable tipsTable = new TipsTable();
tipsTable.labware_id = dt.Rows[i]["labware_id"].ToString();
tipsTable.lattice_id = dt.Rows[i]["lattice_id"].ToString();
tipsTable.wellname = dt.Rows[i]["wellname"].ToString();
tipsTable.axis_b_X = (float)Convert.ToDouble(dt.Rows[i]["axis_b_X"].ToString());
tipsTable.axis_b_Y = (float)Convert.ToDouble(dt.Rows[i]["axis_b_Y"].ToString());
tipsTable.axis_b_Z = (float)Convert.ToDouble(dt.Rows[i]["axis_b_Z"].ToString());
tipsTable.well_top_shape = Convert.ToInt32(dt.Rows[i]["well_top_shape"].ToString());
tipsTable.axis_b_r = (float)Convert.ToDouble(dt.Rows[i]["axis_b_r"].ToString());
tipsTable.isUsed = Convert.ToInt32(dt.Rows[i]["isUsed"].ToString());
tipsTable.lattice_num = dt.Rows[i]["lattice_num"].ToString();
dtsTips.Add(tipsTable);
}
}
// 通道号
string[] strCh = channelNums.Split(',');
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
TipsTable tipsTableSource = dtsTips.FirstOrDefault(t => t.lattice_num.Equals(lattice.lattice_num));
string strWell = launchView.currentInValidWell;
unloadTipsMParam.xAxisVal = (float)tipsTableSource.axis_b_X;
unloadTipsMParam.yAxisVal = (float)tipsTableSource.axis_b_Y;
unloadTipsMParam.zAxisVal = (float)tipsTableSource.axis_b_Z - 10f;
unloadTipsMParam.armId = Convert.ToInt32(armId);
launchView.SetWaitOne(); // 暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, tipsTableSource, strWell, latticenum);
#endregion
}
else//选定垃圾桶板位退枪头
{
if (!string.IsNullOrEmpty(latticenum))
{
//判断是否是垃圾桶板位
if (lattice.is_trash == 1)
{
if (Shared.ChannelCount == 1)
{
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
unloadTipsMParam.xAxisVal = (float)lattice.lattice_X+ (float)lattice.lattice_length/2f;
unloadTipsMParam.yAxisVal = (float)lattice.lattice_Y + (float)lattice.lattice_width / 2f;
unloadTipsMParam.zAxisVal = (float)lattice.lattice_Z - ControlCom.CurrentLengthOfTip - 50 - (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
unloadTipsMParam.armId = Convert.ToInt32(methodNode.SelectSingleNode("arm/value").InnerText);
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
launchView.SetWaitOne();//暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, null, string.Empty, latticenum);
#endregion
}
else if (Shared.ChannelCount > 1&&!Shared.ChannelCount.Equals(96))
{
UnloadTipsMParamSH unloadTipsMParam = new UnloadTipsMParamSH();
unloadTipsMParam.yAxisVal = (float)lattice.lattice_Y + 30f;
float[] f = new float[channelNums.Split(',').Length];
for (int i = 0; i < f.Length; i++)
{
f[i] = (float)lattice.lattice_Z-ControlCom.CurrentLengthOfTip-50- (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
}
unloadTipsMParam.channelCount = f.Length;
int[] c = new int[channelNums.Split(',').Length];
string[] cn = channelNums.Split(',');
for (int j = 0; j < c.Length; j++)
{
c[j] = Convert.ToInt32(cn[j]);
}
unloadTipsMParam.channelId = c;
unloadTipsMParam.zAxisVal = f;
unloadTipsMParam.yChannelGapVal = 9;
unloadTipsMParam.armId = Convert.ToInt32(methodNode.SelectSingleNode("arm/value").InnerText);
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
launchView.SetWaitOne();//暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, null, string.Empty, latticenum);
#endregion
}
else if (Shared.ChannelCount.Equals(96))
{
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
unloadTipsMParam.xAxisVal = (float)lattice.lattice_X;
unloadTipsMParam.yAxisVal = (float)lattice.lattice_Y+13;
unloadTipsMParam.zAxisVal = (float)lattice.lattice_Z-80;
unloadTipsMParam.armId = Convert.ToInt32(methodNode.SelectSingleNode("arm/value").InnerText);
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
launchView.SetWaitOne();//暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, null, string.Empty, latticenum);
#endregion
}
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.RunUnloadTipsResource.strUnloadTipTargetWrong);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】Target lattice isn't trash, please task will stop!");
}
if (launchView.isRemotingOper)
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1019", 5, Properties.RunUnloadTipsResource.strWithoutLattice, 2);
}
result = false;
return result;
}
}
else
{
result = ExecuteUnloadTipsInToTrash(platformNodeList, methodNode, isSimulator);
}
}
}
catch (Exception ex)
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strError.ToString() + " 源 " + ex.Source + " 错误信息 " + ex.Message + ";");
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】error:source:" + ex.Source + ";error:" + ex.Message + ";");
}
if (launchView.isRemotingOper)
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1001", 5, "error:source:" + ex.Source + ";error:" + ex.Message + ";", 2);
}
result = false;
}
return result;
}
private bool DoError(XmlNodeList labwareNode, XmlNode methodNode, bool isSimulator, HxResult ret, TipsTable tipsTableSource, string strWell, string latticenum)
{
bool result = true;
if (ret.Result != ResultType.Success)
{
#region 错误处理
OperateDialog plsConfirmOper = null;
if (!launchView.isRemotingOper)
{
System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
{
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.RunUnloadTipsResource.strFailWhatToDo : "unloadtips are fail! What do you want to do?");
plsConfirmOper.ShowDialog();
}));
}
else
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1043", 5, Properties.RunUnloadTipsResource.strFailWhatToDo, 2);
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.RunUnloadTipsResource.strFailWhatToDo : "unloadtips are fail! What do you want to do?");
plsConfirmOper.ShowDialog();
}
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
{
result = ExecuteUnloadTips(labwareNode, methodNode, isSimulator);
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress + Properties.RunUnloadTipsResource.strUnLoadTipWasStopped);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:unload tip was stopped!");
}
if (launchView.isRemotingOper)
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1044", 5, Properties.RunUnloadTipsResource.strUnLoadTipWasStopped, 2);
}
result = false;
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress + Properties.RunUnloadTipsResource.strUnLoadTipWasSkipped);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:unload tip was skipped!");
}
}
#endregion
}
else
{
if (tipsTableSource != null)
{
launchView.UpdateLabwaretipsPutIntoSrc(tipsTableSource, strWell);
}
launchView.currentIsLoadingTips = false;
ControlCom.CurrentLengthOfTip = 0f;
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress + Properties.RunUnloadTipsResource.strUnloadTipSuccess + "卸载到板位 " + latticenum);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:unload tips are success from " + latticenum + " lattice!");
}
}
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strEnd);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】complete;");
}
return result;
}
#endregion
#region 执行卸载吸头到垃圾桶板位,返回结果字符串
///
/// 执行卸载吸头到垃圾桶板位,返回结果字符串
///
///
/// 装载方法属性节点对象
/// 0:连接谁;1:仿真
///
public bool ExecuteUnloadTipsInToTrash(XmlNodeList platformNodeList, XmlNode methodNode, bool isSimulator)
{
bool result = true;
try
{
if (launchView._cancelSource.IsCancellationRequested)
{
result = false;
return result;
}
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【卸载枪头】" + Properties.MachineRunResource.strStart.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【unloadtip method】start:");
}
#region 数据准备
string channelNums = methodNode.SelectSingleNode("channels").InnerText;
string armName = methodNode.SelectSingleNode("arm/text").InnerText;
string armId = methodNode.SelectSingleNode("arm/value").InnerText;
#endregion
#region 数据验证
if (channelNums == "")
{
//MethodMsg methodMsg = new MethodMsg(Guid.NewGuid().ToString(), "ID202_Choice_machine", 5, "", "ExecuteUnloadTipsInToTrash", "1019",
// "卸载枪头方法未指定卸载的通道,卸载枪头方法终止运行。", 6, 0);
//if (socketTcpClientToRemote != null)
//{
// socketTcpClientToRemote.sendmessageError(socketTcpClientToRemote.CreateSendMsgContent(methodMsg, false), launchView.isRemotingOper);
//}
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler:【卸载枪头】" + Properties.MachineRunResource.strWithoutChannel.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler:Channel wasn't set, please check!");
}
if (launchView.isRemotingOper)
{
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1019", 5, Properties.MachineRunResource.strWithoutChannel, 2);
}
result = false;
return result;
}
#endregion
List lattice = LatticeDB.GetTrashLatticeDataByIdFromdb(armId, Shared.SoftwareInformation.software_device_number); // 获取当前垃圾桶台面板位信息
Random random = new Random();
int i = random.Next(0, lattice.Count);
launchView.SetWaitOne();//暂停
if (Shared.ChannelCount == 1)
{
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
//unloadTipsMParam.xAxisVal = (float)lattice[i].lattice_X;
//unloadTipsMParam.yAxisVal = (float)lattice[i].lattice_Y;
//unloadTipsMParam.zAxisVal = (float)lattice[i].lattice_Z;
unloadTipsMParam.xAxisVal = (float)lattice[i].lattice_X + ((float)lattice[i].lattice_length / (float)2f);
unloadTipsMParam.yAxisVal = (float)lattice[i].lattice_Y + ((float)lattice[i].lattice_width / (float)2f);
unloadTipsMParam.zAxisVal = (float)lattice[i].lattice_Z - ControlCom.CurrentLengthOfTip - 50 - (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
unloadTipsMParam.armId = Convert.ToInt32(armId);
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
launchView.SetWaitOne();//暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, null, string.Empty, lattice[i].lattice_num);
#endregion
}
else if(Shared.ChannelCount > 1)
{
UnloadTipsMParamSH unloadTipsMParam = new UnloadTipsMParamSH();
unloadTipsMParam.xAxisVal = (float)lattice[i].lattice_X;
unloadTipsMParam.yAxisVal = (float)lattice[i].lattice_Y;
float[] f = new float[channelNums.Split(',').Length];
for (int j = 0; j < f.Length; j++)
{
f[j] = (float)lattice[i].lattice_Z - ControlCom.CurrentLengthOfTip - 50- (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
}
unloadTipsMParam.channelCount = f.Length;
int[] c = new int[channelNums.Split(',').Length];
string[] cn = channelNums.Split(',');
for (int j = 0; j < c.Length; j++)
{
c[j] = Convert.ToInt32(cn[j]);
}
unloadTipsMParam.channelId = c;
unloadTipsMParam.zAxisVal = f;
unloadTipsMParam.armId = Convert.ToInt32(armId);
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
unloadTipsMParam.yChannelGapVal = (float)9f;
launchView.SetWaitOne();//暂停
HxResult ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, isSimulator);
#region 错误处理
result = DoError(platformNodeList, methodNode, isSimulator, ret, null, string.Empty, lattice[i].lattice_num);
#endregion
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
result = false;
}
return result;
}
#endregion
#region 控制面板用
///
/// 卸载枪头
///
///
public string UnLoadTip(string armValue="0")
{
string strMsg = string.Empty;
string currentArmValue = string.Empty;
// 获取当前垃圾桶台面板位信息
List lattice = new List();
if (armValue != "0" || armValue != Shared.ChanelArmId.ToString())
{
currentArmValue = armValue;
lattice = LatticeDB.GetTrashLatticeDataByIdFromdb(armValue, Shared.SoftwareInformation.software_device_number);
}
else
{
currentArmValue = Shared.ChanelArmId.ToString();
lattice = LatticeDB.GetTrashLatticeDataByIdFromdb(Shared.ChanelArmId.ToString(), Shared.SoftwareInformation.software_device_number);
}
Random random = new Random();
int index = random.Next(0, lattice.Count);
HxResult ret = new HxResult();
if (Shared.ChannelCount == 1)
{
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
if (Shared.SoftwareInformation.software_device_number == DeviceCategory.DeviceHXFX)
{
unloadTipsMParam.xAxisVal = (float)lattice[index].lattice_X + (float)lattice[index].lattice_length / 2f;
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_Y + (float)lattice[index].lattice_length / 2f;
}
else
{
unloadTipsMParam.xAxisVal = (float)lattice[index].lattice_X;
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_Y + 30f;
}
unloadTipsMParam.zAxisVal = (float)lattice[index].lattice_Z - ControlCom.CurrentLengthOfTip - 50 - (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
unloadTipsMParam.armId = Convert.ToInt32(currentArmValue);//Shared.ChanelArmId;
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, false);
}
else if (Shared.ChannelCount > 1)
{
UnloadTipsMParamSH unloadTipsMParam = new UnloadTipsMParamSH();
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_Y + 30f;
float[] f = new float[Shared.ChannelsId.Length];
for (int i = 0; i < f.Length; i++)
{
f[i] = (float)lattice[index].lattice_Z - ControlCom.CurrentLengthOfTip - 50-(float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
}
unloadTipsMParam.channelCount = f.Length;
unloadTipsMParam.channelId = Shared.ChannelsId;
unloadTipsMParam.zAxisVal = f;
unloadTipsMParam.yChannelGapVal = 9;
unloadTipsMParam.armId = Convert.ToInt32(currentArmValue);// Shared.ChanelArmId;
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, false);
}
if (ret.Result != ResultType.Success)
{
strMsg = string.Format("卸载Tip失败:{0}", ret.AlarmInfo);
}
return strMsg;
}
#endregion
#region 控制面板用
///
/// 卸载所有臂通道枪头
///
///
public string UnLoadTipFromAllArm()
{
string strMsg = string.Empty;
List deviceArmList = DeviceArmDB.GetDeviceArmFromdb(Shared.SoftwareInformation.software_information_id);
Shared.DeviceArmList = deviceArmList;
List deviceArmArray= Shared.DeviceArmList.Where(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)).ToList();
foreach (DeviceArm decArm in deviceArmArray)
{
DeviceArm deviceArm = decArm;
// 获取当前垃圾桶台面板位信息
List lattice = LatticeDB.GetTrashLatticeDataByIdFromdb(deviceArm.device_arm_id.ToString(), Shared.SoftwareInformation.software_device_number);
Random random = new Random();
int index = random.Next(0, lattice.Count);
HxResult ret = new HxResult();
if (deviceArm.channels == 1)
{
UnloadTipsMParam unloadTipsMParam = new UnloadTipsMParam();
unloadTipsMParam.xAxisVal = (float)lattice[index].lattice_X;
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_Y + 30f;
unloadTipsMParam.zAxisVal = (float)lattice[index].lattice_Z - ControlCom.CurrentLengthOfTip - 50 - (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
unloadTipsMParam.armId = deviceArm.device_arm_id;
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, false);
}
else if (deviceArm.channels > 1)
{
UnloadTipsMParamSH unloadTipsMParam = new UnloadTipsMParamSH();
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_X;
unloadTipsMParam.yAxisVal = (float)lattice[index].lattice_Y + 30f;
if (deviceArm.device_arm_property == "")
{
continue;
}
string[] strChannels = deviceArm.device_arm_property.Trim().Split(',');
int[] iChannels = new int[strChannels.Length];
for (int j = 0; j < strChannels.Length; j++)
{
iChannels[j] = Convert.ToInt32(strChannels[j]);
}
float[] f = new float[iChannels.Length];
for (int i = 0; i < f.Length; i++)
{
f[i] = (float)lattice[index].lattice_Z - ControlCom.CurrentLengthOfTip - 50 - (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisWasteVal"].ToString());
}
unloadTipsMParam.channelCount = f.Length;
unloadTipsMParam.channelId = iChannels;
unloadTipsMParam.zAxisVal = f;
unloadTipsMParam.yChannelGapVal = 9;
unloadTipsMParam.armId = deviceArm.device_arm_id;
unloadTipsMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
ret = unloadTipsBll.ExecuteUnLoadTips(unloadTipsMParam, false);
}
if (ret.Result != ResultType.Success)
{
strMsg = string.Format("卸载Tip失败:{0}", ret.AlarmInfo);
break;
}
}
return strMsg;
}
#endregion
}
}