using DataEntity.Rack; using DataRWDAL; using DriverLib.Engine; using HxEnum; using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Xml; using XCoreBLL.Resource; using XImagingXhandler.XDAL; namespace XCore { public class GripTransportBll { #region 获取抓板方向 /// /// 获取抓板方向 /// /// /// public List GenerateGripTransportModel(string softwareDevicNumber) { List gripTransportModels= new List(); GripTransportModel gripTransportModel = null; gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = EnumManagement.GetEnumValue(GripperModelEnum.Right).ToString(); gripTransportModel.model_name = "夹爪轴心在板位右侧"; gripTransportModels.Add(gripTransportModel); gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = EnumManagement.GetEnumValue(GripperModelEnum.Left).ToString(); gripTransportModel.model_name = "夹爪轴心在板位左侧"; gripTransportModels.Add(gripTransportModel); gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = EnumManagement.GetEnumValue(GripperModelEnum.Up).ToString(); ; gripTransportModel.model_name = "夹爪轴心在板位上侧"; gripTransportModels.Add(gripTransportModel); gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = EnumManagement.GetEnumValue(GripperModelEnum.Down).ToString(); ; gripTransportModel.model_name = "夹爪轴心在板位下侧"; gripTransportModels.Add(gripTransportModel); return gripTransportModels; } #endregion #region 构建抓板时的模式位置数据 public List GetGripTransportModelPoss() { List gripTransportModels = new List(); GripTransportModel gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = "1"; gripTransportModel.model_name = "底部"; gripTransportModels.Add(gripTransportModel); gripTransportModel = new GripTransportModel(); gripTransportModel.model_id = "2"; gripTransportModel.model_name = "顶部"; gripTransportModels.Add(gripTransportModel); return gripTransportModels; } #endregion string strCurrentCulture = ""; public GripTransportBll() { strCurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; } /// /// 生成抓板转移方法的xml节点属性对象 /// /// 抓板转移方法的xml节点 /// 抓板转移方法的xml节点属性对象 public MethodGripTransport GenerateMethodGripTransport(XmlNode xmlNode) { MethodGripTransport methodGripTransport = new MethodGripTransport(); methodGripTransport.isrun = xmlNode.SelectSingleNode("isrun").InnerText; methodGripTransport.status = xmlNode.SelectSingleNode("status").InnerText; methodGripTransport.name = xmlNode.SelectSingleNode("name").InnerText; methodGripTransport.strIndex = xmlNode.SelectSingleNode("strIndex").InnerText; methodGripTransport.label = xmlNode.SelectSingleNode("label").InnerText; methodGripTransport.armText = xmlNode.SelectSingleNode("arm/text").InnerText; methodGripTransport.armValue = xmlNode.SelectSingleNode("arm/value").InnerText; #region 来源点位 methodGripTransport.srcPositionText = xmlNode.SelectSingleNode("sourceLattice/text").InnerText; methodGripTransport.srcPositionValue = xmlNode.SelectSingleNode("sourceLattice/value").InnerText; methodGripTransport.srcPositionType = Convert.ToInt32(xmlNode.SelectSingleNode("sourceLattice/type").InnerText); #endregion #region 目标点位 methodGripTransport.desPositionText = xmlNode.SelectSingleNode("destinationLattice/text").InnerText; methodGripTransport.desPositionValue = xmlNode.SelectSingleNode("destinationLattice/value").InnerText; methodGripTransport.desPositionType = Convert.ToInt32(xmlNode.SelectSingleNode("destinationLattice/type").InnerText); #endregion methodGripTransport.gripModelText = xmlNode.SelectSingleNode("gripModel/text").InnerText; methodGripTransport.gripModelValue = Convert.ToInt32(xmlNode.SelectSingleNode("gripModel/value").InnerText); methodGripTransport.gripModelSetText = xmlNode.SelectSingleNode("gripModelSet/text").InnerText; methodGripTransport.gripModelSetValue = Convert.ToInt32(xmlNode.SelectSingleNode("gripModelSet/value").InnerText); methodGripTransport.gripPickLabwareText = xmlNode.SelectSingleNode("gripPickObject/text").InnerText; methodGripTransport.gripPickLabwareValue = xmlNode.SelectSingleNode("gripPickObject/value").InnerText; methodGripTransport.pickPosMode = xmlNode.SelectSingleNode("pickPosMode")!=null? Convert.ToInt32(xmlNode.SelectSingleNode("pickPosMode").InnerText):0; methodGripTransport.pickPosValue = xmlNode.SelectSingleNode("pickPosValue") != null ? xmlNode.SelectSingleNode("pickPosValue").InnerText : "0"; methodGripTransport.gripPlaceLabwareText = xmlNode.SelectSingleNode("gripPlaceObject/text").InnerText; methodGripTransport.gripPlaceLabwareValue = xmlNode.SelectSingleNode("gripPlaceObject/value").InnerText; methodGripTransport.gripModelPosText = xmlNode.SelectSingleNode("gripModelPos/text").InnerText; methodGripTransport.gripModelPosValue = Convert.ToInt32(xmlNode.SelectSingleNode("gripModelPos/value").InnerText); methodGripTransport.placePosMode = xmlNode.SelectSingleNode("placePosMode") != null ? Convert.ToInt32(xmlNode.SelectSingleNode("placePosMode").InnerText) : 0; methodGripTransport.placePosValue = xmlNode.SelectSingleNode("placePosValue") != null ? xmlNode.SelectSingleNode("placePosValue").InnerText : "0"; methodGripTransport.transportMode= Convert.ToInt32(xmlNode.SelectSingleNode("transportMode").InnerText); methodGripTransport.transportCount = Convert.ToInt32(xmlNode.SelectSingleNode("transportCount").InnerText); return methodGripTransport; } #region 检查所有属性设置是否满足要求 /// /// 检查所有属性设置是否满足要求 /// /// 抓板转移属性对象 /// 检查所有属性设置是否满足要求 public MethodPropertyInfo CheckProperty(MethodGripTransport methodGripTransport) { MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo(); if (strCurrentCulture == "zh-CN") { methodPropertyInfo.property_tips_info = GripTransportResourceCHS.tipsInfo.ToString(); if (methodGripTransport.armText == null || methodGripTransport.armText == "") { methodPropertyInfo.property_name_info = GripTransportResourceCHS.armText.ToString(); } if (methodGripTransport.srcPositionText == null || methodGripTransport.srcPositionText == "") { methodPropertyInfo.property_name_info = GripTransportResourceCHS.sourceLatticeText.ToString(); } if (methodGripTransport.desPositionText == null || methodGripTransport.desPositionText == "") { methodPropertyInfo.property_name_info = GripTransportResourceCHS.destinationLatticeText.ToString(); } } else if (strCurrentCulture == "en-US") { methodPropertyInfo.property_tips_info = GripTransportResourceENU.tipsInfo.ToString(); if (methodGripTransport.armText == null || methodGripTransport.armText == "") { methodPropertyInfo.property_name_info = GripTransportResourceENU.armText.ToString(); } if (methodGripTransport.srcPositionText == null || methodGripTransport.srcPositionText == "") { methodPropertyInfo.property_name_info = GripTransportResourceENU.sourceLatticeText.ToString(); } if (methodGripTransport.desPositionText == null || methodGripTransport.desPositionText == "") { methodPropertyInfo.property_name_info = GripTransportResourceENU.destinationLatticeText.ToString(); } } return methodPropertyInfo; } #endregion #region 判断当前板位左右是否有障碍耗材 /// /// 判断当前板位左右是否有障碍耗材 /// /// 当前板位数据节点xml /// 夹爪方法属性参数xml节点对象 /// 当前设备号 /// 夹爪指尖与夹爪横梁之间距离高度 /// 是否来源板位;1是;2目标板 /// 0:没有障碍,夹爪正常位抓取;1:较小编号台面有障碍;3:较大编号台面有障碍;2;前后两个都有障碍 public int IsExistObstacle(XmlNode latticesNode, XmlNode methodNode, string software_device_number, float fGripperBaseHeight, int isSourceLattice) { int iResult = 0; string strSrcLatticeid = ""; if (isSourceLattice == 1) { strSrcLatticeid = methodNode.SelectSingleNode("sourceLattice/value").InnerText;//来源板 }else if(isSourceLattice==2) { strSrcLatticeid = methodNode.SelectSingleNode("destinationLattice/value").InnerText;//来源板 } ArrayList arrayList = GetFourDirectionLatticeId(Convert.ToInt32(strSrcLatticeid), software_device_number); for (int i = 0; i < arrayList.Count; i++) { var latticeXn = latticesNode.SelectSingleNode("platform[lattice_id=" + arrayList[i] + "]"); string strlabwareId = ""; if (latticeXn != null) { strlabwareId = latticeXn.SelectSingleNode("labware_id").InnerText;//板位上放的耗材Id //数据库读取耗材个总高度 //判断耗材的高度是否在夹爪的安全抓取范围 //夹爪正向耗材是在范围;夹爪纵向耗材是在范围;两者都在安全范围;两者都不在安全范围; ObservableCollection labwares = LabwareDB.GetLabware(1, strlabwareId); if (labwares.Count == 0) { labwares = LabwareDB.GetLabware(0, strlabwareId); } if (labwares.Count >= 1) { if (labwares[0].labware_height >= fGripperBaseHeight) { if (arrayList.Count == 1 && ((int)arrayList[i] < Convert.ToInt32(strSrcLatticeid))) { iResult = 1; } else if (arrayList.Count == 1 &&((int)arrayList[i] > Convert.ToInt32(strSrcLatticeid))) { iResult = 3; } else { iResult++; } } } } else { } } return iResult; } #endregion #region 根据当前板位Id,获取其四周的板位Id /// /// 根据当前板位Id,获取其四周的板位Id /// /// 当前板位id /// 当前设备号 /// public ArrayList GetFourDirectionLatticeId(int currentLatticeId, string software_device_number) { ArrayList arrayList= new ArrayList(); Lattice lattice = LatticeDB.GetLatticeDataByIdFromdb(currentLatticeId.ToString()); int currentLatticeIndex = Convert.ToInt32(lattice.lattice_num.Substring(1, lattice.lattice_num.Length - 1)); return arrayList; } #endregion #region 执行抓板,返回结果字符串 /// /// 执行放板,返回结果字符串 /// /// 抓板动作参数实体 /// 0:连接设备;1:虚拟运行 /// 结果实体对象 public HxResult ExecuteGripTransportPick(GripTransportMParam gripTransportMParam, bool isSimulator = false) { HxResult ret = new HxResult(); if (!isSimulator) { ret = MethodAction.Instance.Pick(gripTransportMParam); } else { System.Threading.Thread.Sleep(1000); ret.Result = ResultType.Success; //ret.AlarmInfo = "空测试"; } return ret; } #endregion #region 执行放板,返回结果字符串 /// /// 执行放板,返回结果字符串 /// /// 放板动作参数实体 /// 0:连接设备;1:虚拟运行 /// 结果实体对象 public HxResult ExecuteGripTransportPlace(GripTransportMParam gripTransportMParam, bool isSimulator=false) { HxResult ret = new HxResult(); if (!isSimulator) { ret = MethodAction.Instance.Place(gripTransportMParam); } else { System.Threading.Thread.Sleep(1000); ret.Result = ResultType.Success; } return ret; } #endregion } }