using DriverLib.Engine; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using XCommon; using XCoreBLL.Resource; using XImagingXhandler.XDAL; namespace XCore { public class DispenseBll { string strCurrentCulture = ""; public DispenseBll() { strCurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; } public MethodDispense GenerateMethodDispenseDataByXmlNode(XmlNode xmlNode) { MethodDispense methodDispense = new MethodDispense(); methodDispense.isrun = xmlNode.SelectSingleNode("isrun").InnerText; methodDispense.status = xmlNode.SelectSingleNode("status").InnerText; methodDispense.name = xmlNode.SelectSingleNode("name").InnerText; methodDispense.label = xmlNode.SelectSingleNode("label").InnerText; methodDispense.strIndex = xmlNode.SelectSingleNode("strIndex").InnerText; methodDispense.labwareText = xmlNode.SelectSingleNode("labware/text").InnerText; methodDispense.labwareValue = xmlNode.SelectSingleNode("labware/value").InnerText; methodDispense.positionText = xmlNode.SelectSingleNode("position/text").InnerText; methodDispense.positionValue = xmlNode.SelectSingleNode("position/value").InnerText; methodDispense.armText = xmlNode.SelectSingleNode("arm/text").InnerText; methodDispense.armValue = xmlNode.SelectSingleNode("arm/value").InnerText; methodDispense.headType = xmlNode.SelectSingleNode("headType").InnerText; //methodDispense.labwaretipText = xmlNode.SelectSingleNode("labwaretip/text").InnerText; //methodDispense.labwaretipValue = xmlNode.SelectSingleNode("labwaretip/value").InnerText; string strchs = xmlNode.SelectSingleNode("channels").InnerText; methodDispense.channels = ComUtility.GetChannelsFromXml(strchs); methodDispense.wellarray = xmlNode.SelectSingleNode("wellarray").InnerText; methodDispense.enableSingleWellvolume = xmlNode.SelectSingleNode("enableSingleWellvolume").InnerText.ToLower() == "true" ? true : false; XmlNodeList xnList = xmlNode.SelectNodes("SingleWellvolume"); List list = new List(); foreach (XmlNode xn in xnList) { DropdownName dropdownName = new DropdownName(); dropdownName.dropdown_id = xn.SelectSingleNode("channel").InnerText; dropdownName.dropdown_name = xn.SelectSingleNode("value").InnerText; list.Add(dropdownName); } methodDispense.singlewellvolume = list; methodDispense.wellvolume = Convert.ToDouble(xmlNode.SelectSingleNode("wellvolume").InnerText); methodDispense.isNull = xmlNode.SelectSingleNode("isNull").InnerText.ToLower() == "true" ? true : false; methodDispense.liquididText = xmlNode.SelectSingleNode("liquidid/text").InnerText; methodDispense.liquididValue = xmlNode.SelectSingleNode("liquidid/value").InnerText; methodDispense.liquidrangeidText = xmlNode.SelectSingleNode("liquidrangeid/text").InnerText; methodDispense.liquidrangeidValue = xmlNode.SelectSingleNode("liquidrangeid/value").InnerText; methodDispense.liquidpidText = xmlNode.SelectSingleNode("liquidpid/text").InnerText; methodDispense.liquidpidValue = xmlNode.SelectSingleNode("liquidpid/value").InnerText; methodDispense.bMix = xmlNode.SelectSingleNode("enableMix").InnerText.ToLower() == "true" ? true : false; methodDispense.bMultiMix = xmlNode.SelectSingleNode("enableMultiMix").InnerText.ToLower() == "true" ? true : false; methodDispense.mixvolume = Convert.ToDouble(xmlNode.SelectSingleNode("mixvolume").InnerText); methodDispense.mixcount = Convert.ToInt32(xmlNode.SelectSingleNode("mixcount").InnerText); methodDispense.mixAspiratePositionText = xmlNode.SelectSingleNode("mixAspiratePosition/text").InnerText; methodDispense.mixAspiratePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixAspiratePosition/value").InnerText); methodDispense.mixAspirateDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateDistance").InnerText); methodDispense.mixAspirateSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateSpeed").InnerText); methodDispense.mixDispensePositionText = xmlNode.SelectSingleNode("mixDispensePosition/text").InnerText; methodDispense.mixDispensePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixDispensePosition/value").InnerText); methodDispense.mixDispenseDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseDistance").InnerText); methodDispense.mixDispenseSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseSpeed").InnerText); methodDispense.enableLiquidSensor = xmlNode.SelectSingleNode("enableLiquidSensor").InnerText.ToLower() == "true" ? true : false; methodDispense.liquidSensorCount = Convert.ToInt32(xmlNode.SelectSingleNode("liquidSensorCount").InnerText); methodDispense.liquidSensorDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorDistance").InnerText); methodDispense.liquidSensorEndDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorEndDistance").InnerText); methodDispense.liquidSensorSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorSpeed").InnerText); methodDispense.liquidSensorRadio = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorRadio").InnerText); methodDispense.liquidSensorDisIdText = xmlNode.SelectSingleNode("liquidSensorDisId/text").InnerText; methodDispense.liquidSensorDisIdValue = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorDisId/value").InnerText); methodDispense.enableLiquidFollow = xmlNode.SelectSingleNode("enableLiquidFollow").InnerText.ToLower() == "true" ? true : false; methodDispense.liquidFollowType = Convert.ToInt32(xmlNode.SelectSingleNode("liquidFollowType/value").InnerText); methodDispense.liquidFollowTypeName = xmlNode.SelectSingleNode("liquidFollowType/text").InnerText; methodDispense.liquidFollowSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowSpeed").InnerText); methodDispense.liquidFollowDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowDistance").InnerText); methodDispense.liquidFollowArea = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowArea").InnerText); methodDispense.enableMixFollow = xmlNode.SelectSingleNode("enableMixFollow").InnerText.ToLower() == "true" ? true : false; methodDispense.enableSensorBlock = xmlNode.SelectSingleNode("enableSensorBlock").InnerText.ToLower() == "true" ? true : false; //methodDispense. = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorBlockDistance").InnerText); methodDispense.dispenseBlockDisIdText = xmlNode.SelectSingleNode("dispenseBlockDisId/text").InnerText; methodDispense.dispenseBlockDisIdValue = Convert.ToInt32(xmlNode.SelectSingleNode("dispenseBlockDisId/value").InnerText); return methodDispense; } #region 检查所有属性设置是否满足要求 /// /// 检查所有属性设置是否满足要求 /// /// 吸液属性对象 /// 检查所有属性设置是否满足要求 public MethodPropertyInfo CheckProperty(MethodDispense methodDispense) { MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo(); if (strCurrentCulture == "zh-CN") { methodPropertyInfo.property_tips_info = DispenseResourceCHS.tipsInfo.ToString(); if (methodDispense.labwareValue == null || methodDispense.labwaretipValue == "") { methodPropertyInfo.property_name_info = DispenseResourceCHS.labwareText.ToString(); } if (methodDispense.positionValue == null || methodDispense.positionValue == "") { methodPropertyInfo.property_name_info = DispenseResourceCHS.positionText.ToString(); } if (methodDispense.armValue == null || methodDispense.armValue == "") { methodPropertyInfo.property_name_info = DispenseResourceCHS.armText.ToString(); } else { if (methodDispense.armText == "arm1") { if (DispenseResourceCHS.wellarray.Contains(",")) { methodPropertyInfo.property_name_info = DispenseResourceCHS.armWithSingleChannel.ToString(); methodPropertyInfo.property_tips_info = DispenseResourceCHS.errorInfo.ToString(); } } else if (methodDispense.armText == "arm2") { if (!DispenseResourceCHS.wellarray.Contains(",")) { methodPropertyInfo.property_name_info = DispenseResourceCHS.armWithSingleChannel.ToString(); methodPropertyInfo.property_tips_info = DispenseResourceCHS.errorInfo.ToString(); } } } if (methodDispense.wellarray == null || methodDispense.wellarray == "") { methodPropertyInfo.property_name_info = DispenseResourceCHS.wellarray.ToString(); } //if (methodDispense.mixcount != null || methodDispense.mixcount != "") //{ // if (methodDispense.mixvolume == null || methodDispense.mixvolume == "") // { // methodPropertyInfo.property_name_info = DispenseResourceCHS.mixvolume.ToString(); // } //} //if (methodDispense.wellvolume == null || methodDispense.wellvolume == "") //{ // methodPropertyInfo.property_name_info = DispenseResourceCHS.wellvolume.ToString(); //} if (methodDispense.liquididValue == null || methodDispense.liquididValue == "") { methodPropertyInfo.property_name_info = DispenseResourceCHS.liquididText.ToString(); } } else if (strCurrentCulture == "en-US") { methodPropertyInfo.property_tips_info = DispenseResourceENU.tipsInfo.ToString(); if (methodDispense.labwareValue == null || methodDispense.labwaretipValue == "") { methodPropertyInfo.property_name_info = DispenseResourceENU.labwareText.ToString(); } if (methodDispense.positionValue == null || methodDispense.positionValue == "") { methodPropertyInfo.property_name_info = DispenseResourceENU.positionText.ToString(); } if (methodDispense.armValue == null || methodDispense.armValue == "") { methodPropertyInfo.property_name_info = DispenseResourceENU.armText.ToString(); } else { if (methodDispense.armText == "arm1") { if (DispenseResourceENU.wellarray.Contains(",")) { methodPropertyInfo.property_name_info = DispenseResourceENU.armWithSingleChannel.ToString(); methodPropertyInfo.property_tips_info = DispenseResourceENU.errorInfo.ToString(); } } else if (methodDispense.armText == "arm2") { if (!DispenseResourceENU.wellarray.Contains(",")) { methodPropertyInfo.property_name_info = DispenseResourceENU.armWithSingleChannel.ToString(); methodPropertyInfo.property_tips_info = DispenseResourceENU.errorInfo.ToString(); } } } if (methodDispense.wellarray == null || methodDispense.wellarray == "") { methodPropertyInfo.property_name_info = DispenseResourceENU.wellarray.ToString(); } //if (methodDispense.mixcount != null || methodDispense.mixcount != "") //{ // if (methodDispense.mixvolume == null || methodDispense.mixvolume == "") // { // methodPropertyInfo.property_name_info = DispenseResourceENU.mixvolume.ToString(); // } //} //if (methodDispense.wellvolume == null || methodDispense.wellvolume == "") //{ // methodPropertyInfo.property_name_info = DispenseResourceENU.wellvolume.ToString(); //} if (methodDispense.liquididValue == null || methodDispense.liquididValue == "") { methodPropertyInfo.property_name_info = DispenseResourceENU.liquididText.ToString(); } } return methodPropertyInfo; } #endregion #region 执行排液,返回结果字符串 /// /// 执行排液,返回结果字符串 /// /// 排液的参数对象 /// /// 结果实体对象 public HxResult ExecuteDispense(DispenseMParam dispenseMParam, bool isSimulator = false) { HxResult ret = new HxResult(); if (!isSimulator) { ret = MethodAction.Instance.Dispense(dispenseMParam); } else { CommonBll.DoSimulateDelay(); ret.Result = ResultType.Success; } return ret; } public HxResult ExecuteDispense(DispenseMParamSH dispenseMParam, bool isSimulator = false) { HxResult ret = new HxResult(); if (!isSimulator) { ret = MethodAction.Instance.Dispense(dispenseMParam); } else { CommonBll.DoSimulateDelay(); ret.Result = ResultType.Success; } return ret; } #endregion } }