using DataEntity;
|
using DataEntity.Share;
|
using DataRWDAL;
|
using DriverLib.Engine;
|
using MySqlX.XDevAPI.Common;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Windows;
|
using System.Xml;
|
using XCommon;
|
using XCommon.Log;
|
using XCore;
|
using XCoreBLL;
|
using XHandler.Controls.Run.Com;
|
using XHandler.View;
|
using XHandler.View.MethodProperty;
|
using XImaging.Automation.Service.Interface;
|
using XImagingXhandler.XDAL;
|
using static HxEnum.OperationTypeEnum;
|
|
namespace XHandler.Controls
|
{
|
/// <summary>
|
/// 开关盖
|
/// </summary>
|
public class SwitchLidControl
|
{
|
string strCurrentCulture = "";
|
WellCalc wellCalc = new WellCalc();
|
LatticeBll latticeBll = new LatticeBll();
|
SwitchLidBll switchLidBll = new SwitchLidBll();
|
public RunWnd launchView = null;
|
|
public SwitchLidControl(string strCurrentCulture)
|
{
|
this.strCurrentCulture = strCurrentCulture;
|
}
|
|
#region 执行开关盖,返回结果字符串
|
/// <summary>
|
/// 执行开关盖,返回结果字符串
|
/// </summary>
|
/// <param name="xmlEnv">板位节点信息</param>
|
/// <param name="methodNode">装载方法属性节点对象</param>
|
/// <param name="zAxisVal">z轴安全距离</param>
|
/// <param name="isSimulator">0:连接谁;1:仿真</param>
|
/// <returns></returns>
|
public bool ExecuteSwitchLid(XmlNode xmlEnv, XmlNode methodNode, float zAxisVal, bool isSimulator)
|
{
|
bool result = true;
|
HxResult ret = new HxResult();
|
if (launchView._cancelSource.IsCancellationRequested)
|
{
|
result = false;
|
return result;
|
}
|
|
#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 数据准备
|
MethodSwitchLid methodSwitchLid = switchLidBll.GenerateMethodSwitchLidDataByXmlNode(methodNode);
|
#endregion
|
|
#region 数据验证
|
Labware labwares = LabwareDB.GetLabware(methodSwitchLid.labwareValue);
|
string strWells = methodSwitchLid.wellarray;
|
string[] wells = new string[] { };
|
string wellVariable = string.Empty;
|
if (!string.IsNullOrEmpty(strWells))
|
{
|
//判断是否包含等号,如果是包含等号的,则是变量控制孔位
|
if (strWells.Contains(","))
|
{
|
wells = strWells.Split(',');
|
}
|
else if (strWells.Contains("="))
|
{
|
}
|
}
|
|
else if (strWells.Contains("="))
|
{
|
wellVariable = strWells.Substring(strWells.LastIndexOf('=') + 1, (strWells.Length - strWells.LastIndexOf('=') - 1));
|
|
Variable variable = new Variable();
|
Stack<Variable> stackTem = new Stack<Variable>();//临时存储变量过得对象
|
int totalLoop = launchView.gloadVariable.Count;
|
// 从当前变量字典中取出变量的值
|
for (int i = 0; i < totalLoop; i++)
|
{
|
Variable v = launchView.gloadVariable.Pop(); //取出最近的一个匹配变量
|
stackTem.Push(v);
|
|
if (v.variablename == wellVariable)
|
{
|
variable = v;
|
break;
|
}
|
}
|
int totalLoopTem = stackTem.Count;
|
for (int i = 0; i < totalLoopTem; i++)
|
{
|
Variable v = stackTem.Pop();
|
launchView.gloadVariable.Push(v);
|
}
|
}
|
|
|
// 给孔位排序
|
if (strWells.Contains(','))
|
{
|
string suffix = wells[0].Substring(1, wells[0].Length - 1);
|
List<string> sortWellName = new List<string>();
|
|
if (Shared.ChannelCount == 1)
|
{
|
for (int i = 0; i < labwares.number_row; i++)
|
{
|
string rowName = ComUtility.GetRowChar(i);
|
string rowWellName = rowName + suffix;
|
if (wells.Contains(rowWellName))
|
{
|
sortWellName.Add(rowWellName);
|
}
|
}
|
wells = sortWellName.ToArray();
|
}
|
else if (Shared.ChannelCount > 1)
|
{
|
|
}
|
}
|
else if (!string.IsNullOrEmpty(strWells) &&
|
!strWells.Contains(',') &&
|
!strWells.Contains("=")) // 只有一个孔位
|
{
|
wells = new string[] { strWells };
|
}
|
else if (strWells.Contains("=")) // 利用循环
|
{
|
string strvariable = strWells.Substring(strWells.LastIndexOf('=') + 1, (strWells.Length - strWells.LastIndexOf('=') - 1));
|
Variable variable = new Variable();
|
Stack<Variable> stackTem = new Stack<Variable>();//临时存储变量过得对象
|
int totalLoop = launchView.gloadVariable.Count;
|
// 从当前变量字典中取出变量的值
|
for (int i = 0; i < totalLoop; i++)
|
{
|
Variable v = launchView.gloadVariable.Pop(); //取出最近的一个匹配变量
|
stackTem.Push(v);
|
|
if (v.variablename == strvariable)
|
{
|
variable = v;
|
break;
|
}
|
}
|
int totalLoopTem = stackTem.Count;
|
for (int i = 0; i < totalLoopTem; i++)
|
{
|
Variable v = stackTem.Pop();
|
launchView.gloadVariable.Push(v);
|
}
|
|
if (variable.variablename.Equals(string.Empty) && strvariable.Length >= 1)//没有查找到变量名,看看是不是表达式,并求出表达式值
|
{
|
totalLoop = launchView.gloadVariable.Count;
|
List<Variable> variablelist = new List<Variable>();
|
stackTem = new Stack<Variable>();//临时存储变量过得对象
|
for (int i = 0; i < totalLoop; i++) //看看表达式中包不包含变量,如果包含就把变量全部替换成值
|
{
|
Variable v = launchView.gloadVariable.Pop();
|
variablelist.Add(v);
|
stackTem.Push(v);
|
}
|
for(int i=0;i< variablelist.Count;i++)
|
{
|
if (strvariable.Contains(variablelist[i].variablename))
|
{
|
strvariable = strvariable.Replace(variable.variablename, variable.variablecurval);
|
break;
|
}
|
}
|
|
//恢复全局变量
|
for (int i = 0; i < variablelist.Count; i++)
|
{
|
Variable v = stackTem.Pop();
|
launchView.gloadVariable.Push(v);
|
}
|
|
Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
|
variable.variablecurval = Microsoft.JScript.Eval.JScriptEvaluate(strvariable, ve).ToString();
|
}
|
|
List<string> sortWellName = new List<string>();
|
for (int j = 1; j <= labwares.number_column; j++)
|
{
|
for (int i = 0; i < labwares.number_row; i++)
|
{
|
string rowName = ComUtility.GetRowChar(i);
|
|
string rowWellName = rowName + j;
|
sortWellName.Add(rowWellName);
|
}
|
}
|
wells = new string[1];
|
wells[0] = sortWellName[Convert.ToInt32(variable.variablecurval) - 1];
|
}
|
|
// 判断方法中的板位和板子是否能对应上设置的台面
|
Lattice lattice = new Lattice();
|
|
string armId = Shared.DeviceArmList.FirstOrDefault(x => x.arm_type.Equals(1)).device_arm_id.ToString();
|
string latticenum = methodSwitchLid.positionText.ToString();
|
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
|
if (tabletopTemplate == null)
|
{
|
lattice = LatticeDB.GetLatticeDataByIdFromdb(latticenum, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number);
|
}
|
else
|
{
|
lattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(latticenum, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
|
}
|
int xmlLatticeId = Convert.ToInt32(latticenum.Substring(1));
|
|
var latticeXn = xmlEnv.SelectSingleNode("platform[lattice_id='" + xmlLatticeId.ToString() + "']");
|
if (latticeXn != null)
|
{
|
labwares.labware_sname = latticeXn.SelectNodes("labware")[0].SelectSingleNode("labware_sname").InnerText;
|
}
|
else
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunAspirateResource.strWithoutLattice.ToString());
|
}
|
else
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: the lattice of aspirate liquid is wrong! please check!");
|
}
|
result = false;
|
return result;
|
}
|
//}
|
#endregion
|
|
#region 执行构建
|
try
|
{
|
|
// 获取当前台面的夹爪坐标
|
List<GripperCoordinate> gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodSwitchLid.armValue),lattice.lattice_num);
|
|
//转化成板位
|
Lattice slattice = new Lattice();
|
slattice.lattice_X = gripperCoordinates[0].lattice_X;
|
slattice.lattice_Y = gripperCoordinates[0].lattice_Y;
|
slattice.lattice_Z = gripperCoordinates[0].lattice_Z;
|
slattice.lattice_num = gripperCoordinates[0].lattice_num;
|
slattice.lattice_id = "";
|
|
// 获取板位孔的坐标数据
|
List<TipsTable> dtWells = ControlCom.GenerateWellCoordinateForChemistry(labwares, slattice);
|
|
//离心管耗材对象
|
Labware centrifugalLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
|
|
//根据循环处理孔位
|
TipsTable tipsTable = null;
|
tipsTable = dtWells.SingleOrDefault(t => t.lattice_num.Equals(lattice.lattice_num)
|
&& t.labware_id.Equals(labwares.labware_id)
|
&& t.wellname.Equals(wells[0]));
|
tipsTable.axis_b_Z = tipsTable.axis_b_Z + ControlCom.CurrentLengthOfTip;//被减的枪头要加回来
|
|
if (methodSwitchLid.armText == "夹爪臂")
|
{
|
ScrewTubeCapMParam screwTubeCapMParam = new ScrewTubeCapMParam();
|
screwTubeCapMParam.tubeRackNo = Convert.ToInt32(lattice.lattice_num.Substring(1)); //板位号,数字部分
|
screwTubeCapMParam.tubeCol = Convert.ToInt32(wells[0].Substring(1)); //孔所在列号,数字部分
|
screwTubeCapMParam.tubeScrewPitch = (float)centrifugalLabware.well_helical_distance;//螺纹螺距
|
screwTubeCapMParam.tubeDiameter = (float)centrifugalLabware.well_mouth_out_radius*2; //离心管主管外径
|
|
screwTubeCapMParam.tubeRow = 0;
|
|
screwTubeCapMParam.capDiameter = (float)centrifugalLabware.lid_out_radius*2;
|
screwTubeCapMParam.capExpandDistance = (float)centrifugalLabware.upgripper_spread;
|
screwTubeCapMParam.capPushDistance = (float)centrifugalLabware.upgripper_squeeze;
|
screwTubeCapMParam.capPushForce = (float)centrifugalLabware.upgripper_power;
|
screwTubeCapMParam.capScrewAngle =new float[] { (float)methodSwitchLid.numOfCircle * 360 };
|
screwTubeCapMParam.capScrewSpeed = (float)methodSwitchLid.switchSpeed;
|
screwTubeCapMParam.capScrewDistance =new float[] { (float)centrifugalLabware.well_helical_distance * (float)Math.Ceiling(methodSwitchLid.numOfCircle) };
|
screwTubeCapMParam.slotNo = 1;
|
screwTubeCapMParam.basezAxisVal = 0;
|
|
//下夹爪
|
screwTubeCapMParam.x2AxisVal = 0;
|
screwTubeCapMParam.y2AxisVal = 0;
|
screwTubeCapMParam.tubePushDistance = (float)centrifugalLabware.downgripper_squeeze;
|
screwTubeCapMParam.tubeExpandDistance =(float)centrifugalLabware.downgripper_spread;
|
screwTubeCapMParam.tubePushForce = (float)centrifugalLabware.downgripper_power;
|
|
//上夹爪
|
screwTubeCapMParam.xAxisVal = tipsTable.axis_b_X;
|
screwTubeCapMParam.yAxisVal = tipsTable.axis_b_Y;
|
|
//Labware centrifugalLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
|
screwTubeCapMParam.zAxisVal = tipsTable.axis_b_Z-((float)centrifugalLabware.labware_height+3f)+(float)centrifugalLabware.upgripper_zoffset;//孔口
|
|
|
|
launchView.SetWaitOne();//暂停
|
ret = switchLidBll.ExecuteSwitchLid(screwTubeCapMParam, methodSwitchLid.switchState, isSimulator);
|
|
if (ret.Result != ResultType.Success)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
}
|
}
|
else
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: switch to open lid was failed on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: switch to open lid was failed on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: switch to close lid was failed on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: switch to close lid was failed on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
}
|
}
|
result = false;
|
OperateDialog plsConfirmOper = null;
|
if (!launchView.isRemotingOper)
|
{
|
Application.Current.Dispatcher.Invoke(new Action(() =>
|
{
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.GripTransportResource.strPickFailWhatToDo : "The action of pick was fail! What do you want to do?");
|
plsConfirmOper.ShowDialog();
|
}));
|
}
|
else
|
{
|
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1027", 5, Properties.GripTransportResource.strPickFailWhatToDo, 2);
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.GripTransportResource.strPickFailWhatToDo : "The action of pick was fail! What do you want to do?");
|
plsConfirmOper.ShowDialog();
|
}
|
|
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
|
{
|
return ExecuteSwitchLidReTry(lattice, wells, centrifugalLabware, methodSwitchLid, isSimulator, tipsTable);
|
}
|
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
|
{
|
if (launchView.isRemotingOper)
|
{
|
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1045", 5, Properties.GripTransportResource.strPickWasStopped, 2);
|
}
|
result = false;
|
return result;
|
}
|
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
|
{
|
result = true;
|
return result;
|
}
|
return result;
|
}
|
else
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
}
|
else
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:switch to open lid was successful on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice!");
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:switch to open lid was successful on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice!");
|
}
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + slattice.lattice_num);
|
}
|
else
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:switch to closed lid was successful on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice!");
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress:switch to closed lid was successful on " + tipsTable.wellname + " of " + slattice.lattice_num + " lattice!");
|
}
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", 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 + ";");
|
}
|
result = false;
|
}
|
|
#endregion
|
|
return result;
|
}
|
#endregion
|
|
#region 开关盖重试函数
|
public bool ExecuteSwitchLidReTry(Lattice lattice,string[] wells, Labware centrifugalLabware,MethodSwitchLid methodSwitchLid,bool isSimulator,TipsTable tipsTable)
|
{
|
bool result = true;
|
ScrewTubeCapMParam screwTubeCapMParam = new ScrewTubeCapMParam();
|
screwTubeCapMParam.tubeRackNo = Convert.ToInt32(lattice.lattice_num.Substring(1)); //板位号,数字部分
|
screwTubeCapMParam.tubeCol = Convert.ToInt32(wells[0].Substring(1)); //孔所在列号,数字部分
|
screwTubeCapMParam.tubeScrewPitch = (float)centrifugalLabware.well_helical_distance;//螺纹螺距
|
screwTubeCapMParam.tubeDiameter = (float)centrifugalLabware.well_mouth_out_radius * 2; //离心管主管外径
|
|
screwTubeCapMParam.tubeRow = 0;
|
|
screwTubeCapMParam.capDiameter = (float)centrifugalLabware.lid_out_radius * 2;
|
screwTubeCapMParam.capExpandDistance = (float)centrifugalLabware.upgripper_spread;
|
screwTubeCapMParam.capPushDistance = (float)centrifugalLabware.upgripper_squeeze;
|
screwTubeCapMParam.capPushForce = (float)centrifugalLabware.upgripper_power;
|
screwTubeCapMParam.capScrewAngle = new float[] { (float)methodSwitchLid.numOfCircle * 360 };
|
screwTubeCapMParam.capScrewSpeed = (float)methodSwitchLid.switchSpeed;
|
screwTubeCapMParam.capScrewDistance = new float[] { (float)centrifugalLabware.well_helical_distance * (float)Math.Ceiling(methodSwitchLid.numOfCircle) };
|
screwTubeCapMParam.slotNo = 1;
|
screwTubeCapMParam.basezAxisVal = 0;
|
|
//下夹爪
|
screwTubeCapMParam.x2AxisVal = 0;
|
screwTubeCapMParam.y2AxisVal = 0;
|
screwTubeCapMParam.tubePushDistance = (float)centrifugalLabware.downgripper_squeeze;
|
screwTubeCapMParam.tubeExpandDistance = (float)centrifugalLabware.downgripper_spread;
|
screwTubeCapMParam.tubePushForce = (float)centrifugalLabware.downgripper_power;
|
|
//上夹爪
|
screwTubeCapMParam.xAxisVal = tipsTable.axis_b_X;
|
screwTubeCapMParam.yAxisVal = tipsTable.axis_b_Y;
|
|
//Labware centrifugalLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
|
screwTubeCapMParam.zAxisVal = tipsTable.axis_b_Z - ((float)centrifugalLabware.labware_height + 3f) + (float)centrifugalLabware.upgripper_zoffset;//孔口
|
|
|
|
launchView.SetWaitOne();//暂停
|
HxResult ret = switchLidBll.ExecuteSwitchLid(screwTubeCapMParam, methodSwitchLid.switchState, isSimulator);
|
|
if (ret.Result != ResultType.Success)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseFailed.ToString() + ret.AlarmInfo + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
}
|
}
|
else
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress: switch to open lid was failed on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress: switch to open lid was failed on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress: switch to close lid was failed on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress: switch to close lid was failed on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice! Error info:" + ret.AlarmInfo);
|
}
|
}
|
result = false;
|
OperateDialog plsConfirmOper = null;
|
if (!launchView.isRemotingOper)
|
{
|
Application.Current.Dispatcher.Invoke(new Action(() =>
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.SwitchLidResource.strSwitchOpenFailWhatToDo : "The action of switch open was fail! What do you want to do?");
|
}
|
else
|
{
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.SwitchLidResource.strSwitchCloseFailWhatToDo : "The action of switch close was fail! What do you want to do?");
|
}
|
plsConfirmOper.ShowDialog();
|
}));
|
}
|
else
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1027", 5, Properties.SwitchLidResource.strSwitchOpenFailWhatToDo, 2);
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.SwitchLidResource.strSwitchOpenFailWhatToDo : "The action of switch open was fail! What do you want to do?");
|
}
|
else
|
{
|
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1027", 5, Properties.SwitchLidResource.strSwitchCloseFailWhatToDo, 2);
|
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.SwitchLidResource.strSwitchCloseFailWhatToDo : "The action of switch close was fail! What do you want to do?");
|
}
|
plsConfirmOper.ShowDialog();
|
}
|
|
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
|
{
|
return ExecuteSwitchLidReTry(lattice, wells, centrifugalLabware, methodSwitchLid, isSimulator, tipsTable);
|
}
|
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
|
{
|
if (launchView.isRemotingOper)
|
{
|
launchView.OnError?.Invoke(launchView.remoteObjectCmd, "EC-1045", 5, Properties.SwitchLidResource.strSwitchWasStopped, 2);
|
}
|
result = false;
|
return result;
|
}
|
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
|
{
|
result = true;
|
return result;
|
}
|
return result;
|
}
|
else
|
{
|
if (methodSwitchLid.switchState == 0)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidOpenSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
}
|
else
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress:switch to open lid was successful on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice!");
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress:switch to open lid was successful on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice!");
|
}
|
}
|
else if (methodSwitchLid.switchState == 1)
|
{
|
if (strCurrentCulture.Equals("zh-CN"))
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.SwitchLidResource.strSwitchLidCloseSuccess.ToString() + " 孔 " + tipsTable.wellname + " 板位 " + lattice.lattice_num);
|
}
|
else
|
{
|
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress:switch to closed lid was successful on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice!");
|
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodSwitchLid.name + "】progress:switch to closed lid was successful on " + tipsTable.wellname + " of " + lattice.lattice_num + " lattice!");
|
}
|
}
|
}
|
|
return result;
|
}
|
#endregion
|
}
|
}
|