using DataEntity;
using DataEntity.Share;
using DataRWDAL;
using DriverLib.Engine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using XCommon;
using XCommon.Log;
using XCore;
using XCoreBLL;
using XHandler.Controls.Run.Com;
using XHandler.View;
using XImagingXhandler.XDAL;
using DataCalcDAL;
using System.Configuration;
using HxEnum;
using XHandler.Class.DataEx;
using NPOI.SS.Formula.Eval;
using DataEntity.Rack;
using static HxEnum.OperationTypeEnum;
using System.Reflection;
using XHandler.View.MethodProperty;
using MySqlX.XDevAPI.Common;
using XImaging.Automation.Service.Interface;
using System.Windows;
using System.Collections.ObjectModel;
namespace XHandler.Controls
{
///
/// 文件转板执行
///
public class FileMoveLabwareControl
{
string strCurrentCulture = "";
WellCalc wellCalc = new WellCalc();
LatticeBll latticeBll = new LatticeBll();
FileMoveLabwareBll fileMoveLabwareBll = new FileMoveLabwareBll();
public RunWnd launchView = null;
LiquidAccuracyBll liquidAccuracyBll = new LiquidAccuracyBll();
WellCalcOfGripper wellCalcOfGripper= new WellCalcOfGripper();
GripTransportBll gripTransportBll=new GripTransportBll();
public FileMoveLabwareControl(string strCurrentCulture)
{
this.strCurrentCulture = strCurrentCulture;
}
#region 执行文件转板,返回结果字符串
///
/// 执行文件转板,返回结果字符串
///
/// 板位节点信息
/// 装载方法属性节点对象
/// z轴安全距离
/// 0:连接谁;1:仿真
///
public bool ExecuteFileMoveLabware(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 数据准备
var platformNodeList = xmlEnv.SelectNodes("platform");
MethodFileMoveLabware methodFileMoveLabware = fileMoveLabwareBll.GenerateMethodFileMoveLabwareDataByXmlNode(methodNode);
int recordAllCount = methodFileMoveLabware.transferDataTable.Rows.Count; // 文件记录总数
int recordIndex = 0; // 循环控制总的切分次数
TipsTable tipsTable = new TipsTable(); // 执行的孔数据对象
#endregion
#region 数据检查
//只有选择夹爪臂才可以执行转板
if (methodFileMoveLabware == null)
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.RunFileMoveLiquidResource.strFileMoveLiquidDataCheckError.ToString());
result = false;
return result;
}
else
{
if (methodFileMoveLabware.armText.Equals("夹爪臂"))
{
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.RunFileMoveLabwareResource.strFileMoveLabwareArmError.ToString());
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.RunFileMoveLabwareResource.strFileMoveLabwareArmError.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】selected arm of device isn't support pick board.");
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】selected arm of device isn't support pick board.");
}
result = false;
return result;
}
}
#endregion
bool shakerExecuteFinish=false;// 震荡位是否执行过
#region 数据执行
while (recordIndex < recordAllCount)
{
#region 抓板处理过程
string sourceLattice = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickLattice].ToString();
string globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, sourceLattice);
if (!string.IsNullOrEmpty(globalVariableValue))
{
sourceLattice = globalVariableValue;
}
XmlNode srcPlatformNode = ComUtility.GetXmlNodeByBoardName(xmlEnv.SelectNodes("platform"), sourceLattice);
if (srcPlatformNode == null&& !sourceLattice.Equals("P0"))
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunFileMoveLabwareResource.strFileMoveLabwareOfLatticeError.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】progress: the lattice of pick board is wrong! please check!");
}
result = false;
return result;
}
else
{
string sourceWell = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickWell].ToString();
string sourceColumn = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickColumn].ToString();
globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, sourceWell);
if (!string.IsNullOrEmpty(globalVariableValue))
{
sourceWell = globalVariableValue;
}
globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, sourceColumn);
if (!string.IsNullOrEmpty(globalVariableValue))
{
sourceColumn = globalVariableValue;
}
// 获取当前台面的夹爪坐标
List gripperCoordinates = new List();
GripperCoordinate gripperCoordinate = new GripperCoordinate();
Labware labwares = new Labware();
Lattice slattice = new Lattice();
string srcLatticeId = "0";
if (sourceColumn == "请选择" && sourceWell == "请选择")
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunFileMoveLabwareResource.strFileMoveLabwareSettingPickCol.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】progress: the column or well on picking lattice is wrong! please check!");
}
result = false;
return result;
}
else
{
Labware centrifugalLabware = new Labware();
if (sourceLattice.Equals("P0"))
{
gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), sourceLattice);
gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(sourceLattice));
string srcLabwareId = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateLabwareFromdb(gripperCoordinate.gripper_lattice_id).labware_id.ToString();//获取夹爪关联的耗材Id;
labwares = LabwareDB.GetLabware(srcLabwareId);
slattice.lattice_num = "P0";
//关联孔位的耗材对象
ObservableCollection labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwares.labware_id);
var targetWellOnLattice = labwareWellInfoList.SingleOrDefault(x => x.labware_well_name.Equals(sourceWell));
if (targetWellOnLattice != null)
{
centrifugalLabware = LabwareDB.GetLabware(targetWellOnLattice.well_labware_id);
}
}
else
{
XmlNode srcXml = srcPlatformNode.SelectSingleNode("labware[@id='" + srcPlatformNode.SelectNodes("labware").Count + "']");
string srcLabwareId = srcXml.SelectSingleNode("labware_id").InnerText;
srcLatticeId = srcPlatformNode.SelectSingleNode("lattice_id").InnerText;//被截掉"P"的板位编号名
if (srcLatticeId == "1")
{
MethodShake methodShake = new MethodShake();
methodShake.modeVal = 1;
methodShake.shakeMoveSpeed = 50;
methodShake.shakeMoveAngle = 230;
launchView.SetWaitOne();//暂停
if (!shakerExecuteFinish)
{
ret = new ShakerBll().ExecuteShake(methodShake, isSimulator);
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunShakeResource.strShakeMoveFailed.ToString() + ret.AlarmInfo);
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunShakeResource.strShakeMoveFailed.ToString() + ret.AlarmInfo);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】progress: shake was failed! Error info:" + ret.AlarmInfo);
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】progress: shake was failed! Error info:" + ret.AlarmInfo);
}
result = false;
return result;
}
shakerExecuteFinish = true;
}
}
Lattice srcLattice = null;
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
int armId = Shared.DeviceArmList.FirstOrDefault(x => x.arm_type.Equals(1)).device_arm_id;
if (tabletopTemplate == null)
{
srcLattice = LatticeDB.GetLatticeDataByIdFromdb("P" + srcLatticeId, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number);
}
else
{
srcLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb("P" + srcLatticeId, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
}
labwares = LabwareDB.GetLabware(srcLabwareId);
// 获取当前台面的板子的坐标
slattice = DataRWDAL.LatticeDB.GetLatticeDataByIdFromdb(srcLattice.lattice_id);
List dtWells = ControlCom.GenerateWellCoordinate(labwares, slattice); //板位孔坐标数据集
// 获取当前台面的夹爪坐标
gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), srcLattice.lattice_num);
gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(slattice.lattice_num));
//离心管耗材对象
if (labwares.labware_tubeshelf_type == 1)
{
//关联孔位的耗材对象
ObservableCollection labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwares.labware_id);
var targetWellOnLattice = labwareWellInfoList.SingleOrDefault(x => x.labware_well_name.Equals(sourceWell));
if (targetWellOnLattice != null)
{
centrifugalLabware = LabwareDB.GetLabware(targetWellOnLattice.well_labware_id);
}
}
else
{
centrifugalLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
}
}
//以孔位为目标抓取
if (sourceWell != "请选择")
{
//转化成夹爪板位
List gripperCoordinateForWells = wellCalcOfGripper.GetReallyWellsLabwareCoordinatesOnLattice(labwares, gripperCoordinate);
GripperCoordinateForWell gripperPickCoordinateForWell = null;
gripperPickCoordinateForWell = gripperCoordinateForWells.SingleOrDefault(t => t.lattice_num.Equals(slattice.lattice_num)
&& t.gripper_model.Equals(Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickDirect]))
&& t.wellname.Equals(sourceWell));
int pickPart = 0;
pickPart = Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickPart]);
GripTransportMParam gripTransportMParam = new GripTransportMParam();
// 判断当前的形式和角度
gripTransportMParam.xAxisVal = (float)gripperPickCoordinateForWell.lattice_X + (float)labwares.gripper_x_offset;
gripTransportMParam.yAxisVal = (float)gripperPickCoordinateForWell.lattice_Y + (float)labwares.gripper_y_offset;
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset;
#region 耗材总高度
float labwareMainHeight = 0.0f;
float heightOfBottomLabware = 0f;//要抓的那层的底部离板位的平面距离
//按设定的层次抓耗材
if (methodFileMoveLabware.transportMode == (int)GripTransportModeEnum.TransportAll)
{
if (labwares.labware_tubeshelf_type == 0)
{
if (centrifugalLabware.lid_in_radius < 10d)
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height);
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height);
}
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height);
}
}
else if (methodFileMoveLabware.transportMode == (int)GripTransportModeEnum.TransportExceptOne)//总高度要增加最底层的高度
{
var latticeDes = xmlEnv.SelectSingleNode("platform[lattice_id=" + ControlCom.GetLatticeId(Convert.ToInt32(slattice.lattice_num), false) + "]/labware[@id=1]");
Labware bottomLabware = new Labware();
if (latticeDes != null)
{
bottomLabware = LabwareDB.GetLabware(latticeDes.SelectSingleNode("labware_id").InnerText);
heightOfBottomLabware = (float)Convert.ToDouble(bottomLabware.piled_height);
}
if (labwares.labware_tubeshelf_type == 0)
{
if (centrifugalLabware.lid_in_radius < 10d)
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height) + heightOfBottomLabware;
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height) + heightOfBottomLabware;
}
}
else
{
labwareMainHeight = (float)Convert.ToDouble(labwares.labware_height) + heightOfBottomLabware;
}
}
else if (methodFileMoveLabware.transportMode == (int)GripTransportModeEnum.TransportCount)
{
XmlNodeList labwareNode = xmlEnv.SelectNodes("platform[lattice_id=" + ControlCom.GetLatticeId(Convert.ToInt32(slattice.lattice_num), false) + "]/labware");
int countOfLabware = labwareNode.Count;
int loopCount = countOfLabware - methodFileMoveLabware.transportCount + 1;
for (int i = 1; i <= loopCount; i++)
{
Labware bottomLabware = new Labware();
var latticeDes = xmlEnv.SelectSingleNode("platform[lattice_id=" + ControlCom.GetLatticeId(Convert.ToInt32(slattice.lattice_num), false) + "]/labware[@id=" + (i).ToString() + "]");
if (latticeDes != null)
{
bottomLabware = LabwareDB.GetLabware(latticeDes.SelectSingleNode("labware_id").InnerText);
heightOfBottomLabware += (float)Convert.ToDouble(bottomLabware.piled_height);
}
}
if (labwares.labware_tubeshelf_type == 0)
{
if (centrifugalLabware.lid_in_radius < 10d)
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height) + heightOfBottomLabware;
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalLabware.labware_height) + heightOfBottomLabware;
}
}
else
{
labwareMainHeight = (float)Convert.ToDouble(labwares.labware_height) + heightOfBottomLabware;
}
}
#endregion
if (pickPart == 0) //抓底部
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z - heightOfBottomLabware;
gripTransportMParam.zAxisVal = gripTransportMParam.zAxisVal - heightOfBottomLabware - 1f;
}
else if (pickPart == 1) //抓顶部
{
if (srcLatticeId == "1")
{
if (centrifugalLabware.lid_in_radius < 10d)
{
if (sourceLattice.Equals("P0"))
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset + 8f;
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset + 13f;
}
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset;
}
}
else
{
if (centrifugalLabware.lid_in_radius < 10d)
{
if (sourceLattice.Equals("P0"))
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset+12f;
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset + 0f;
}
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset - labwareMainHeight + (float)centrifugalLabware.gripper_z_offset;
}
}
}
gripTransportMParam.angleVal = (float)gripperPickCoordinateForWell.gripper_rotational;
gripTransportMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
gripTransportMParam.squeezeVal = (float)gripperPickCoordinateForWell.squeezeVal;
gripTransportMParam.spreadVal = (float)gripperPickCoordinateForWell.spreadVal;
gripTransportMParam.gripSpeed = (float)gripperPickCoordinateForWell.gripSpeed;
gripTransportMParam.gripModel = Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickDirect]);
gripTransportMParam.gripState = 1; // 请求夹爪的状态:1:向内夹紧;2:向外张开
gripTransportMParam.gripperpowerVal = (float)gripperPickCoordinateForWell.gripperpowerVal;
gripTransportMParam.objectWidth = (float)Convert.ToDouble(gripperPickCoordinateForWell.objectwidth);
//调用抓取方法
launchView.SetWaitOne();//暂停
ret = gripTransportBll.ExecuteGripTransportPick(gripTransportMParam, isSimulator);
string log = string.Empty;
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}.{5}{6} of {7}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPickError, ret.AlarmInfo, Properties.Resources.strBoardPosition, sourceWell, slattice.lattice_num);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is fail! error information:{2}.lattice:{3}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, ret.AlarmInfo, sourceWell, slattice.lattice_num);
launchView.AddLogs(log);
}
OperateDialog plsConfirmOper = null;
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();
}));
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
{
return ExecutePickAgain(methodFileMoveLabware, recordIndex, labwares, sourceWell, heightOfBottomLabware, slattice, gripTransportMParam, isSimulator);
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
{
result = false;
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
{
result = true;
return result;
}
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}{5} of {6}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPickOk, Properties.Resources.strBoardPosition, slattice.lattice_num, sourceWell);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is success! lattice:{2}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, slattice.lattice_num, sourceWell);
launchView.AddLogs(log);
}
}
}
else
//以板列为目标抓取
{
}
}
}
#endregion
#region 放板处理过程
string targetLattice = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.placeLattice].ToString();
globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, targetLattice);
if (!string.IsNullOrEmpty(globalVariableValue))
{
targetLattice = globalVariableValue;
}
XmlNode tarPlatformNode = ComUtility.GetXmlNodeByBoardName(xmlEnv.SelectNodes("platform"), targetLattice);
if (tarPlatformNode == null&&!targetLattice.Equals("P0"))
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunFileMoveLabwareResource.strFileMoveLabwareOfLatticeError.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】progress: the lattice of place board is wrong! please check!");
}
result = false;
return result;
}
else
{
List gripperCoordinates = new List();
GripperCoordinate gripperCoordinate = new GripperCoordinate();
Labware labwares = new Labware();
Lattice slattice = new Lattice();
string tarLatticeId = "0";
string targetWell = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.placeWell].ToString();
string targetColumn = methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.placeColumn].ToString();
globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, targetWell);
if (!string.IsNullOrEmpty(globalVariableValue))
{
targetWell = globalVariableValue;
}
globalVariableValue = "";
globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, targetColumn);
if (!string.IsNullOrEmpty(globalVariableValue))
{
targetColumn = globalVariableValue;
}
if (targetColumn == "请选择" && targetWell == "请选择")
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunFileMoveLabwareResource.strFileMoveLabwareSettingPlaceCol.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodFileMoveLabware.name + "】progress: the column or well on placing lattice is wrong! please check!");
}
result = false;
return result;
}
else
{
Labware centrifugalTargetLabware = new Labware();
if (targetLattice.Equals("P0"))
{
gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), targetLattice);
gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(targetLattice));
string tarLabwareId = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateLabwareFromdb(gripperCoordinate.gripper_lattice_id).labware_id.ToString();//获取夹爪关联的耗材Id;
labwares = LabwareDB.GetLabware(tarLabwareId);
slattice.lattice_num = "P0";
//关联孔位的耗材对象
ObservableCollection labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwares.labware_id);
var targetWellOnLattice = labwareWellInfoList.SingleOrDefault(x => x.labware_well_name.Equals(targetWell));
if(targetWellOnLattice!=null)
{
centrifugalTargetLabware = LabwareDB.GetLabware(targetWellOnLattice.well_labware_id);
}
}
else
{
XmlNode tarXml = tarPlatformNode.SelectSingleNode("labware[@id='" + tarPlatformNode.SelectNodes("labware").Count + "']");
string tarLabwareId = tarXml.SelectSingleNode("labware_id").InnerText;
tarLatticeId = tarPlatformNode.SelectSingleNode("lattice_id").InnerText;//被截掉"P"的板位编号名
if (tarLatticeId == "1")
{
MethodShake methodShake = new MethodShake();
methodShake.modeVal = 1;
methodShake.shakeMoveSpeed = 50;
methodShake.shakeMoveAngle = 230;
launchView.SetWaitOne();//暂停
if (!shakerExecuteFinish)
{
ret = new ShakerBll().ExecuteShake(methodShake, isSimulator);
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunShakeResource.strShakeMoveFailed.ToString() + ret.AlarmInfo);
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunShakeResource.strShakeMoveFailed.ToString() + ret.AlarmInfo);
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】progress: shake was failed! Error info:" + ret.AlarmInfo);
LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodFileMoveLabware.name + "】progress: shake was failed! Error info:" + ret.AlarmInfo);
}
result = false;
return result;
}
shakerExecuteFinish = true;
}
}
Lattice tarLattice = null;
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
int armId = Shared.DeviceArmList.FirstOrDefault(x => x.arm_type.Equals(1)).device_arm_id;
if (tabletopTemplate == null)
{
tarLattice = LatticeDB.GetLatticeDataByIdFromdb("P" + tarLatticeId, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number);
}
else
{
tarLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb("P" + tarLatticeId, Convert.ToInt32(armId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
}
labwares = LabwareDB.GetLabware(tarLabwareId);
// 获取当前台面的板子的坐标
slattice = DataRWDAL.LatticeDB.GetLatticeDataByIdFromdb(tarLattice.lattice_id);
if (labwares.labware_tubeshelf_type == 1)
{
//关联孔位的耗材对象
ObservableCollection labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwares.labware_id);
var targetWellOnLattice = labwareWellInfoList.SingleOrDefault(x => x.labware_well_name.Equals(targetWell));
if (targetWellOnLattice != null)
{
centrifugalTargetLabware = LabwareDB.GetLabware(targetWellOnLattice.well_labware_id);
}
}
else
{
//离心管耗材对象
centrifugalTargetLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
}
}
////离心管耗材对象
//Labware centrifugalTargetLabware = ControlCom.GetCentrifugalLabwer(labwares.piled_script);
//求出目标板位上的现有耗材总高度
float labwareMainHeight = 0.0f;
float heightOfBottomLabware = 0f;//要抓的那层的底部离板位的平面距离
XmlNodeList labwareNode = xmlEnv.SelectNodes("platform[lattice_id=" + slattice.lattice_num.Substring(1) + "]/labware");
int countOfLabware = labwareNode.Count;
int loopCount = countOfLabware;
for (int i = 1; i <= loopCount; i++)
{
Labware bottomLabware = new Labware();
var latticeDes = xmlEnv.SelectSingleNode("platform[lattice_id=" + slattice.lattice_num.Substring(1) + "]/labware[@id=" + (i).ToString() + "]");
if (latticeDes != null)
{
bottomLabware = LabwareDB.GetLabware(latticeDes.SelectSingleNode("labware_id").InnerText);
heightOfBottomLabware += (float)Convert.ToDouble(bottomLabware.piled_height);
}
}
if (labwares.labware_tubeshelf_type == 0)
{
if (centrifugalTargetLabware.lid_in_radius < 10d)
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalTargetLabware.labware_height);
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalTargetLabware.labware_height);
}
}
else
{
labwareMainHeight = (float)Convert.ToDouble(centrifugalTargetLabware.labware_height) + heightOfBottomLabware;
}
// 获取当前台面的夹爪坐标
gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), slattice.lattice_num);
gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(slattice.lattice_num));
//以孔位为目标放置
if (targetWell != "请选择")
{
//转化成夹爪板位
List gripperCoordinateForWells = wellCalcOfGripper.GetReallyWellsLabwareCoordinatesOnLattice(labwares, gripperCoordinate);
GripperCoordinateForWell gripperPlaceCoordinateForWell = null;
gripperPlaceCoordinateForWell = gripperCoordinateForWells.SingleOrDefault(t => t.lattice_num.Equals(slattice.lattice_num)
&& t.gripper_model.Equals(Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.placeColumn]))
&& t.wellname.Equals(targetWell));
GripTransportMParam gripTransportMParam = new GripTransportMParam();
// 判断当前的形式和角度
gripTransportMParam.xAxisVal = (float)gripperPlaceCoordinateForWell.lattice_X + (float)labwares.gripper_x_offset;
gripTransportMParam.yAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Y + (float)labwares.gripper_y_offset;
gripTransportMParam.zAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Z + (float)labwares.gripper_z_offset;
if (tarLatticeId == "1")
{
//if (centrifugalTargetLabware.lid_in_radius < 10d)
//{
gripTransportMParam.zAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Z - labwareMainHeight;
//}
}
else
{
if (centrifugalTargetLabware.lid_in_radius < 10d)
{
if (targetLattice.Equals("P0"))
{
gripTransportMParam.zAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Z - labwareMainHeight + (float)centrifugalTargetLabware.gripper_z_offset+8f;
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Z - labwareMainHeight + (float)centrifugalTargetLabware.gripper_z_offset - 10f;
}
}
else
{
gripTransportMParam.zAxisVal = (float)gripperPlaceCoordinateForWell.lattice_Z - labwareMainHeight + (float)centrifugalTargetLabware.gripper_z_offset-3f;
}
}
gripTransportMParam.angleVal = (float)gripperPlaceCoordinateForWell.gripper_rotational;
gripTransportMParam.basezAxisVal = (float)Convert.ToDouble(ConfigurationManager.AppSettings["zAxisSafeVal"]);
gripTransportMParam.squeezeVal = (float)gripperPlaceCoordinateForWell.squeezeVal;
gripTransportMParam.spreadVal = (float)gripperPlaceCoordinateForWell.spreadVal;
gripTransportMParam.gripSpeed = (float)gripperPlaceCoordinateForWell.gripSpeed;
gripTransportMParam.gripModel = Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickDirect]);
gripTransportMParam.gripState = 2; // 请求夹爪的状态:1:向内夹紧;2:向外张开
gripTransportMParam.gripperpowerVal = (float)gripperPlaceCoordinateForWell.gripperpowerVal;
gripTransportMParam.objectWidth = (float)Convert.ToDouble(gripperPlaceCoordinateForWell.objectwidth);
//调用抓取方法
launchView.SetWaitOne();//暂停
ret = gripTransportBll.ExecuteGripTransportPlace(gripTransportMParam, isSimulator);
string log = string.Empty;
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}.{5}{6} of {7}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPlacekError, ret.AlarmInfo, Properties.Resources.strBoardPosition, targetWell, slattice.lattice_num);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is fail! error information:{2}.lattice:{3}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, ret.AlarmInfo, targetWell, slattice.lattice_num);
launchView.AddLogs(log);
}
OperateDialog plsConfirmOper = null;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.GripTransportResource.strPlaceFailWhatToDo : "The action of pick was fail! What do you want to do?");
plsConfirmOper.ShowDialog();
}));
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
{
return ExecutePlaceAgain(methodFileMoveLabware, recordIndex, labwares, targetWell, heightOfBottomLabware, slattice, gripTransportMParam, isSimulator);
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
{
result = false;
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
{
result = true;
return result;
}
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}{5} of {6}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPlaceOk, Properties.Resources.strBoardPosition, slattice.lattice_num, targetWell);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is success! lattice:{2}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, slattice.lattice_num, targetWell);
launchView.AddLogs(log);
}
}
}
else
//以板列为目标抓取
{
}
}
}
#endregion
recordIndex = recordIndex + 1;
}
#endregion
return result;
}
#endregion
#region 抓板失败后循环函数
public bool ExecutePickAgain(MethodFileMoveLabware methodFileMoveLabware,int recordIndex, Labware labwares,string sourceWell,float heightOfBottomLabware, Lattice slattice, GripTransportMParam pickMParam, bool isSimulator)
{
HxResult ret = null;
bool result = true;
List gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), slattice.lattice_num);
GripperCoordinate gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(slattice.lattice_num));
//转化成夹爪板位
List gripperCoordinateForWells = wellCalcOfGripper.GetReallyWellsLabwareCoordinatesOnLattice(labwares, gripperCoordinate);
GripperCoordinateForWell gripperPickCoordinateForWell = gripperCoordinateForWells.SingleOrDefault(t => t.lattice_num.Equals(slattice.lattice_num)
&& t.gripper_model.Equals(Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickDirect]))
&& t.wellname.Equals(sourceWell));
GripTransportMParam gripTransportMParam = new GripTransportMParam();
gripTransportMParam.xAxisVal = pickMParam.xAxisVal;
gripTransportMParam.yAxisVal = pickMParam.yAxisVal;
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z - heightOfBottomLabware;
gripTransportMParam.zAxisVal = gripTransportMParam.zAxisVal - heightOfBottomLabware - 1f;
gripTransportMParam.angleVal = pickMParam.angleVal;
gripTransportMParam.basezAxisVal = pickMParam.basezAxisVal;
gripTransportMParam.squeezeVal = (float)gripperPickCoordinateForWell.squeezeVal;
gripTransportMParam.spreadVal = (float)gripperPickCoordinateForWell.spreadVal;
gripTransportMParam.gripSpeed = (float)gripperPickCoordinateForWell.gripSpeed;
gripTransportMParam.gripModel = pickMParam.gripModel;
gripTransportMParam.gripState = 1; // 请求夹爪的状态:1:向内夹紧;2:向外张开
gripTransportMParam.gripperpowerVal = (float)gripperPickCoordinateForWell.gripperpowerVal;
gripTransportMParam.objectWidth = (float)Convert.ToDouble(gripperPickCoordinateForWell.objectwidth);
//调用抓取方法
launchView.SetWaitOne();//暂停
ret = gripTransportBll.ExecuteGripTransportPick(gripTransportMParam, isSimulator);
string log = string.Empty;
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}.{5}{6} of {7}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPickError, ret.AlarmInfo, Properties.Resources.strBoardPosition, sourceWell, slattice.lattice_num);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is fail! error information:{2}.lattice:{3} well:{4}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, ret.AlarmInfo, sourceWell, slattice.lattice_num,sourceWell);
launchView.AddLogs(log);
}
OperateDialog plsConfirmOper = null;
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();
}));
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
{
return ExecutePickAgain(methodFileMoveLabware, recordIndex, labwares, sourceWell, heightOfBottomLabware, slattice, pickMParam, isSimulator);
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
{
result = false;
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
{
result = true;
return result;
}
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}{5} of {6}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPickOk, Properties.Resources.strBoardPosition,slattice.lattice_num,sourceWell);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is success! lattice:{2} well:{3}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, slattice.lattice_num, sourceWell);
launchView.AddLogs(log);
}
}
return result;
}
#endregion
#region 放板失败后循环函数
public bool ExecutePlaceAgain(MethodFileMoveLabware methodFileMoveLabware, int recordIndex, Labware labwares, string targetWell, float heightOfBottomLabware, Lattice slattice, GripTransportMParam pickMParam, bool isSimulator)
{
HxResult ret = null;
bool result = true;
List gripperCoordinates = DataRWDAL.GripperCoordinateDB.GetAGripperCoordinateFromdb(Shared.SoftwareInformation.software_information_id, Convert.ToInt32(methodFileMoveLabware.armValue), slattice.lattice_num);
GripperCoordinate gripperCoordinate = gripperCoordinates.SingleOrDefault(x => x.lattice_num.Equals(slattice.lattice_num));
//转化成夹爪板位
List gripperCoordinateForWells = wellCalcOfGripper.GetReallyWellsLabwareCoordinatesOnLattice(labwares, gripperCoordinate);
GripperCoordinateForWell gripperPickCoordinateForWell = gripperCoordinateForWells.SingleOrDefault(t => t.lattice_num.Equals(slattice.lattice_num)
&& t.gripper_model.Equals(Convert.ToInt32(methodFileMoveLabware.transferDataTable.Rows[recordIndex][methodFileMoveLabware.pickDirect]))
&& t.wellname.Equals(targetWell));
GripTransportMParam gripTransportMParam = new GripTransportMParam();
gripTransportMParam.xAxisVal = pickMParam.xAxisVal;
gripTransportMParam.yAxisVal = pickMParam.yAxisVal;
gripTransportMParam.zAxisVal = (float)gripperPickCoordinateForWell.lattice_Z - heightOfBottomLabware;
gripTransportMParam.zAxisVal = gripTransportMParam.zAxisVal - heightOfBottomLabware - 1f;
gripTransportMParam.angleVal = pickMParam.angleVal;
gripTransportMParam.basezAxisVal = pickMParam.basezAxisVal;
gripTransportMParam.squeezeVal = (float)gripperPickCoordinateForWell.squeezeVal;
gripTransportMParam.spreadVal = (float)gripperPickCoordinateForWell.spreadVal;
gripTransportMParam.gripSpeed = (float)gripperPickCoordinateForWell.gripSpeed;
gripTransportMParam.gripModel = pickMParam.gripModel;
gripTransportMParam.gripState = 1; // 请求夹爪的状态:1:向内夹紧;2:向外张开
gripTransportMParam.gripperpowerVal = (float)gripperPickCoordinateForWell.gripperpowerVal;
gripTransportMParam.objectWidth = (float)Convert.ToDouble(gripperPickCoordinateForWell.objectwidth);
//调用抓取方法
launchView.SetWaitOne();//暂停
ret = gripTransportBll.ExecuteGripTransportPick(gripTransportMParam, isSimulator);
string log = string.Empty;
if (ret.Result != ResultType.Success)
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}.{5}{6} of {7}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPlacekError, ret.AlarmInfo, Properties.Resources.strBoardPosition, targetWell, slattice.lattice_num);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is fail! error information:{2}.lattice:{3} well:{4}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, ret.AlarmInfo, targetWell, slattice.lattice_num, targetWell);
launchView.AddLogs(log);
}
OperateDialog plsConfirmOper = null;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
plsConfirmOper = new OperateDialog(strCurrentCulture.Equals("zh-CN") ? Properties.GripTransportResource.strPlaceFailWhatToDo : "The action of pick was fail! What do you want to do?");
plsConfirmOper.ShowDialog();
}));
if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Retry) // 重试
{
return ExecutePlaceAgain(methodFileMoveLabware, recordIndex, labwares, targetWell, heightOfBottomLabware, slattice, pickMParam, isSimulator);
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Cancel) // 终止
{
result = false;
return result;
}
else if (plsConfirmOper != null && plsConfirmOper.OperMark == NodeOperationTypeEnum.Continue) // 跳过
{
result = true;
return result;
}
}
else
{
if (strCurrentCulture.Equals("zh-CN"))
{
log = string.Format("【{0}】>Xhandler: 【{1}】{2}{3}{4}{5} of {6}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, Properties.MachineRunResource.strProgress, Properties.GripTransportResource.strPlaceOk, Properties.Resources.strBoardPosition, slattice.lattice_num, targetWell);
launchView.AddLogs(log);
}
else
{
log = string.Format("【{0}】>Xhandler: 【{1}】progress: the action of pick is success! lattice:{2} well:{3}", DateTime.Now.ToString("HH:mm:ss:fff"),
methodFileMoveLabware.name, slattice.lattice_num, targetWell);
launchView.AddLogs(log);
}
}
return result;
}
#endregion
}
}