using BiosenSocketService.Runtime;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using NPOI.SS.Formula.Functions;
|
using Sodao.FastSocket.Server.Messaging;
|
using System;
|
using System.Collections.Generic;
|
using System.Configuration;
|
using System.Data;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using XHandler.Class;
|
using XImaging.Automation.Service;
|
using XImaging.Automation.Service.Interface;
|
using static System.Net.Mime.MediaTypeNames;
|
using System.Xml;
|
using XHandler.View;
|
using XCore;
|
using XHandler.Controls;
|
using XImagingXhandler.XDAL;
|
using System.Reflection;
|
using System.Xaml;
|
using XCommon.Log;
|
using XHandler.Controls.Run.Com;
|
using DataRWDAL;
|
using DataEntity.Share;
|
using DataEntity;
|
using System.Windows.Controls;
|
using XImaging.Automation.Service.Instruction;
|
|
namespace XHandler.Runtime
|
{
|
class DeviceSimulator:ISimulator, IRuntime
|
{
|
public ErrorHandleDelegate errorHandle { get; set; }
|
public ErrorHandleDelegate abortHandle { get; set; }
|
public FinishHandleDelegate finishHandle { get; set; }
|
|
public string ErrorState { get; set; }
|
public RuntimeState State { get; set; }
|
public int TroubleShoot { get; set; }
|
|
RuntimeMsgBLL runtimeMsgBLL = new RuntimeMsgBLL();
|
|
|
/// <summary>
|
/// 设置挑菌参数
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public JObject Method_PhotoParam(Object obj)
|
{
|
State = RuntimeState.OnBusy;
|
JObject result = new JObject();
|
|
try
|
{
|
string path = ConfigurationManager.AppSettings.Get("choiceFilePath");
|
if (File.Exists(path))
|
{
|
File.Delete(path);
|
}
|
|
JObject Obj = obj as JObject;
|
|
string strParams = Obj["parameters"].ToString();
|
JObject objParam = JObject.Parse(strParams);
|
|
string experiment_id = objParam["experiment_id"].ToString();
|
string barcode = objParam["barcode"].ToString();
|
string bacterias = objParam["bacterias"].ToString();
|
string shape = objParam["shape"].ToString();
|
string edge = objParam["edge"].ToString();
|
string color = objParam["color"].ToString();
|
string min_diameterSize = objParam["min_diameterSize"].ToString();
|
string max_diameterSize = objParam["max_diameterSize"].ToString();
|
string proximity = objParam["proximity"].ToString();
|
string choice_mode = objParam["choice_mode"].ToString();
|
string choice_distance_mode = objParam["choice_distance_mode"].ToString();
|
string choice_distance_value = objParam["choice_distance_value"].ToString();
|
string choice_xAxis_offsite = objParam["choice_xAxis_offsite"].ToString();
|
string choice_yAxis_offsite = objParam["choice_yAxis_offsite"].ToString();
|
string coating_bottom_distance = objParam["coating_bottom_distance"].ToString();
|
string coating_xAxis_offsite = objParam["coating_xAxis_offsite"].ToString();
|
string coating_yAxis_offsite = objParam["coating_yAxis_offsite"].ToString();
|
string coating_mode = objParam["coating_mode"].ToString();
|
|
DataTable dtResult=GenerateDataTableByChoiceParams(objParam);
|
|
bool bRet = ExcelAndCsvHelper.WriteDataTableToExcelFile(dtResult, path);
|
LoggerHelper.InfoLog("write file=" + path + ", return=" + bRet.ToString());
|
|
result = JObject.Parse("{method_status:2}");
|
|
State = RuntimeState.OnIdle;
|
}
|
catch(Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", ex);
|
}
|
return result;
|
}
|
|
public DataTable GenerateDataTableByChoiceParams(JObject objParam)
|
{
|
//构建datatable
|
DataTable dataResult = new DataTable();
|
DataColumn dc = new DataColumn();
|
dc.ColumnName = "中文名";
|
dataResult.Columns.Add(dc);
|
|
dc = new DataColumn();
|
dc.ColumnName = "属性名";
|
dataResult.Columns.Add(dc);
|
|
dc = new DataColumn();
|
dc.ColumnName = "属性值";
|
dataResult.Columns.Add(dc);
|
|
DataRow dr = dataResult.NewRow();
|
dr["中文名"] = "实验ID";
|
dr["属性名"] = "experiment_id";
|
dr["属性值"]= objParam["experiment_id"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "皿的二维码信息";
|
dr["属性名"] = "barcode";
|
dr["属性值"] = objParam["barcode"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "菌名称";
|
dr["属性名"] = "bacterias";
|
dr["属性值"] = objParam["bacterias"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "形状";
|
dr["属性名"] = "shape";
|
dr["属性值"] = objParam["shape"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "边缘";
|
dr["属性名"] = "edge";
|
dr["属性值"] = objParam["edge"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "颜色";
|
dr["属性名"] = "color";
|
dr["属性值"] = objParam["color"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "最小直径";
|
dr["属性名"] = "min_diameterSize";
|
dr["属性值"] = objParam["min_diameterSize"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "最大直径";
|
dr["属性名"] = "max_diameterSize";
|
dr["属性值"] = objParam["max_diameterSize"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "临近度";
|
dr["属性名"] = "proximity";
|
dr["属性值"] = objParam["proximity"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "挑菌模式";
|
dr["属性名"] = "choice_mode";
|
dr["属性值"] = objParam["choice_mode"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "挑菌距离底部或菌类形";
|
dr["属性名"] = "choice_distance_mode";
|
dr["属性值"] = objParam["choice_distance_mode"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "挑菌距离底部或菌类距离";
|
dr["属性名"] = "choice_distance_value";
|
dr["属性值"] = objParam["choice_distance_value"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "挑菌时x轴偏移量";
|
dr["属性名"] = "choice_xAxis_offsite";
|
dr["属性值"] = objParam["choice_xAxis_offsite"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "挑菌时y轴偏移量";
|
dr["属性名"] = "choice_yAxis_offsite";
|
dr["属性值"] = objParam["choice_yAxis_offsite"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "涂布距离底部距离";
|
dr["属性名"] = "coating_bottom_distance";
|
dr["属性值"] = objParam["coating_bottom_distance"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "涂布时x轴偏移量";
|
dr["属性名"] = "coating_xAxis_offsite";
|
dr["属性值"] = objParam["coating_xAxis_offsite"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "涂布时y轴偏移量";
|
dr["属性名"] = "coating_yAxis_offsite";
|
dr["属性值"] = objParam["coating_yAxis_offsite"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "涂布方式";
|
dr["属性名"] = "coating_mode";
|
dr["属性值"] = objParam["coating_mode"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "涂布速度";
|
dr["属性名"] = "coating_speed";
|
dr["属性值"] = objParam["coating_speed"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "模型类型";
|
dr["属性名"] = "model_type";
|
dr["属性值"] = objParam["model_type"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "合并识别";
|
dr["属性名"] = "merge_masks";
|
dr["属性值"] = objParam["merge_masks"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "降采样率";
|
dr["属性名"] = "ds_ratio";
|
dr["属性值"] = objParam["ds_ratio"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "平均直径";
|
dr["属性名"] = "mean_diam";
|
dr["属性值"] = objParam["mean_diam"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "到边缘距离";
|
dr["属性名"] = "dist_to_edge";
|
dr["属性值"] = objParam["dist_to_edge"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "菌标记颜色";
|
dr["属性名"] = "mark_color";
|
dr["属性值"] = objParam["mark_color"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "菌标记序号";
|
dr["属性名"] = "draw_label";
|
dr["属性值"] = objParam["draw_label"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "菌标记字体大小";
|
dr["属性名"] = "fontsize";
|
dr["属性值"] = objParam["fontsize"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "顶部背光亮度";
|
dr["属性名"] = "top_light";
|
dr["属性值"] = objParam["top_light"].ToString();
|
dataResult.Rows.Add(dr);
|
|
dr = dataResult.NewRow();
|
dr["中文名"] = "底部背光亮度";
|
dr["属性名"] = "bottom_light";
|
dr["属性值"] = objParam["bottom_light"].ToString();
|
dataResult.Rows.Add(dr);
|
|
return dataResult;
|
}
|
|
/// <summary>
|
/// 设置涂布数据
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public JObject Method_RunDataParam(Object obj)
|
{
|
JObject result = new JObject();
|
|
try
|
{
|
|
State = RuntimeState.OnBusy;
|
|
|
|
DataTable dt = new DataTable();
|
dt.Columns.Add("来源板", typeof(string));
|
dt.Columns.Add("来源板码", typeof(string));
|
dt.Columns.Add("来源孔", typeof(string));
|
dt.Columns.Add("目标板", typeof(string));
|
dt.Columns.Add("目标板码", typeof(string));
|
dt.Columns.Add("目标孔", typeof(string));
|
dt.Columns.Add("移液体积", typeof(string));
|
dt.Columns.Add("是否更换吸头", typeof(string));
|
|
JObject Obj = obj as JObject;
|
string objstr = Obj["parameters"].ToString();
|
//objstr = objstr.Replace("\\","");
|
Dictionary<string, object> strdata = JsonConvert.DeserializeObject<Dictionary<string, object>>(objstr);
|
|
List<SetCoatingData_param> strdata1 = JsonConvert.DeserializeObject<List<SetCoatingData_param>>(strdata["Method_Coatingfile_Param"].ToString());
|
//JObject jObjAll = JObject.Parse(strdata["Method_Coatingfile_Param"].ToString());
|
//string objstr1 = jObjAll["Method_Coatingfile_Param"].ToString();
|
|
//JArray jary = (JArray)Obj["parameters"]["Method_Coatingfile_Param"];
|
foreach (SetCoatingData_param sd in strdata1)
|
{
|
DataRow dr = dt.NewRow();
|
int i = 0;
|
dr["来源板"] = sd.SourcePlateID.ToString();
|
dr["来源板码"] = sd.SourcePlateBarcode.ToString();
|
dr["来源孔"] = sd.SourcePlateWell.ToString();
|
|
dr["目标板"] = sd.TargetPlateID.ToString();
|
dr["目标板码"] = sd.TargetPlateBarcode.ToString();
|
dr["目标孔"] = sd.TargetPlateWell.ToString();
|
dr["移液体积"] = sd.Volume.ToString();
|
dr["是否更换吸头"] = sd.changetips.ToString();
|
dt.Rows.Add(dr);
|
}
|
string filePath = strdata["PickAndCoatTable"].ToString();
|
|
string file = filePath;
|
|
string path = file.Substring(0, file.LastIndexOf('\\'));
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
LoggerHelper.InfoLog("creat directory: " + path);
|
}
|
ExcelAndCsvHelper.WriteDataTableToCSV(dt, file);
|
bool bRet = true;
|
LoggerHelper.InfoLog("write file=" + file + ", return=" + bRet.ToString());
|
//if (File.Exists(profile.Data_file))
|
//{
|
// File.Delete(profile.Data_file);
|
// BiosenLogger.Debug("delete file: " + profile.Data_file);
|
//}
|
//File.Copy(file, profile.Data_file, true);
|
//BiosenLogger.Debug("copy file: " + profile.Data_file);
|
|
if (!bRet)
|
{
|
State = RuntimeState.OnError;
|
result = JObject.Parse("{method_status:3}");
|
throw new Exception("Execute was failed!");
|
}
|
else if (bRet)
|
{
|
State = RuntimeState.OnIdle;
|
result = JObject.Parse("{method_status:2}");
|
}
|
|
State = RuntimeState.OnIdle;
|
}
|
catch (Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", ex);
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 运行方法
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public JObject Method_Run(Object obj)
|
{
|
State = RuntimeState.OnBusy;
|
JObject result = new JObject();
|
try
|
{
|
JObject job = obj as JObject;
|
string strParam = string.Empty;
|
string methodFileName = string.Empty;
|
strParam = job["parameters"].ToString();
|
|
JObject jobParms = JObject.Parse(strParam);
|
methodFileName = jobParms["FlowName"].ToString();
|
|
string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString();
|
string fullName = shortDir + "\\" + methodFileName + ".xmed";
|
if (File.Exists(fullName))
|
{
|
XmlDocument xmlDocument = new XmlDocument();
|
//XmlDocument
|
xmlDocument.Load(fullName);
|
|
App.Current.Dispatcher.Invoke(new Action(() =>
|
{
|
RunWnd runWnd = new RunWnd();
|
//runWnd.OnError += (p1, p2, p3,p4,p5) => { this.errorHandle(p1, p2, p3,p4,p5); };
|
runWnd.xmlDocument = xmlDocument;
|
runWnd.isRemotingOper = true;
|
runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false;
|
|
TaskFactory taskFactory = new TaskFactory();
|
int iresult = runWnd.LoadLabwareOnRunningRemote();
|
|
if (iresult == 0)
|
{
|
State = RuntimeState.OnError;
|
result = JObject.Parse("{method_status:3}");
|
throw new Exception("Execute was failed!");
|
}
|
else if (iresult == 1)
|
{
|
State = RuntimeState.OnIdle;
|
string j = JsonConvert.SerializeObject(runWnd.dataTableTotal);
|
|
result = JObject.Parse("{data:" + j + "}");
|
}
|
else if (iresult == 2)
|
{
|
State = RuntimeState.OnIdle;
|
result = JObject.Parse("{method_status:4}");
|
}
|
}));
|
}
|
else
|
{
|
//弹出窗口提示所执行的方法不存在
|
}
|
|
State = RuntimeState.OnIdle;
|
}
|
catch (Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", ex);
|
State = RuntimeState.OnError;
|
throw new Exception() { };
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 运行抓板方法,抓耗材命令
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public JObject Method_Move(Object obj)
|
{
|
State = RuntimeState.OnBusy;
|
JObject result = new JObject();
|
try
|
{
|
JObject job = obj as JObject;
|
string strParam = string.Empty;
|
string methodFileName = string.Empty;
|
string strSrouceLatticeName = string.Empty;
|
string strTargetLatticeName = string.Empty;
|
int iGripperLabwarePos = 1;
|
int iGripperLatticeDriector = 1;
|
strParam = job["parameters"].ToString();
|
|
JObject jobParms = JObject.Parse(strParam);
|
strSrouceLatticeName = jobParms["SrcPosition"].ToString();
|
strTargetLatticeName = jobParms["TarPosition"].ToString();
|
iGripperLatticeDriector = Convert.ToInt32(jobParms["Griperpos"].ToString());
|
iGripperLabwarePos = Convert.ToInt32(jobParms["IsOpenlid"].ToString());
|
methodFileName = jobParms["FlowName"].ToString();
|
|
|
string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString();
|
string fullName = shortDir + "\\" + methodFileName + ".xmed";
|
if (File.Exists(fullName))
|
{
|
XmlDocument xmlDocument = new XmlDocument();
|
//XmlDocument
|
xmlDocument.Load(fullName);
|
xmlDocument = UpdateGripMoveParamByxml(xmlDocument, jobParms);
|
App.Current.Dispatcher.Invoke(new Action(() =>
|
{
|
RunWnd runWnd = new RunWnd();
|
runWnd.xmlDocument = xmlDocument;
|
runWnd.isRemotingOper = true;
|
runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false;
|
|
TaskFactory taskFactory = new TaskFactory();
|
int iresult = runWnd.LoadLabwareOnRunningRemote();
|
|
if (iresult == 0)
|
{
|
State = RuntimeState.OnError;
|
result = JObject.Parse("{method_status:3}");
|
}
|
else if (iresult == 1)
|
{
|
State = RuntimeState.OnError;
|
result = JObject.Parse("{method_status:2}");
|
}
|
else if (iresult == 2)
|
{
|
State = RuntimeState.OnError;
|
result = JObject.Parse("{method_status:4}");
|
}
|
}));
|
|
}
|
else
|
{
|
//弹出窗口提示所执行的方法不存在
|
}
|
|
State = RuntimeState.OnIdle;
|
}
|
catch(Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", ex);
|
}
|
return result;
|
}
|
|
public XmlDocument UpdateGripMoveParamByxml(XmlDocument xmlDocument,JObject jobParms)
|
{
|
XmlDocument xmlResult = new XmlDocument();
|
MethodListBll methodListBll = new MethodListBll();
|
XmlNodeList xmlNodeMethodList = xmlDocument.SelectNodes("root/method[@id>=3]");
|
|
//清空方法列表
|
for (int n = 0; n < xmlNodeMethodList.Count; n++)
|
{
|
|
string MethodName = xmlNodeMethodList[n].SelectSingleNode("name").InnerText;
|
|
string id = xmlNodeMethodList[n].Attributes["id"].Value.ToString();
|
|
int iNum = methodListBll.getNumByMethodName(MethodName);
|
|
switch (iNum)
|
{
|
case (int)MethodNameEnum.griptransport:
|
if (xmlNodeMethodList[n].SelectSingleNode("status").InnerText == "enable")
|
{
|
//xmlNodeMethodList[n].SelectSingleNode("sourceLattice/value").InnerText = jobParms["SrcPosition"].ToString();
|
xmlNodeMethodList[n].SelectSingleNode("sourceLattice/text").InnerText = jobParms["SrcPosition"].ToString();
|
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
|
Lattice srcLattice = null;
|
if (tabletopTemplate == null)
|
{
|
srcLattice = LatticeDB.GetLatticeDataByIdFromdb(jobParms["SrcPosition"].ToString(), Shared.ChanelArmId, Shared.SoftwareInformation.software_device_number);
|
}
|
else
|
{
|
srcLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(jobParms["SrcPosition"].ToString(), Convert.ToInt32(Shared.ChanelArmId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
|
}
|
xmlNodeMethodList[n].SelectSingleNode("sourceLattice/value").InnerText = srcLattice.lattice_id;
|
xmlNodeMethodList[n].SelectSingleNode("sourceLattice/type").InnerText = "2";
|
//xmlNodeMethodList[n].SelectSingleNode("destinationLattice/value").InnerText = jobParms["TarPosition"].ToString();
|
xmlNodeMethodList[n].SelectSingleNode("destinationLattice/text").InnerText = jobParms["TarPosition"].ToString();
|
Lattice desLattice = null;
|
if (tabletopTemplate == null)
|
{
|
desLattice = LatticeDB.GetLatticeDataByIdFromdb(jobParms["TarPosition"].ToString(), Shared.ChanelArmId, Shared.SoftwareInformation.software_device_number);
|
}
|
else
|
{
|
desLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(jobParms["SrcPosition"].ToString(), Convert.ToInt32(Shared.ChanelArmId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid);
|
}
|
xmlNodeMethodList[n].SelectSingleNode("destinationLattice/value").InnerText = desLattice.lattice_id;
|
xmlNodeMethodList[n].SelectSingleNode("destinationLattice/type").InnerText = "2";
|
|
if (jobParms["SrcGriperpos"].ToString()=="1")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位右侧";
|
}
|
else if (jobParms["SrcGriperpos"].ToString() == "2")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位左侧";
|
}
|
else if (jobParms["SrcGriperpos"].ToString() == "3")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位上侧";
|
}
|
else
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位下侧";
|
}
|
xmlNodeMethodList[n].SelectSingleNode("gripModel/value").InnerText = jobParms["SrcGriperpos"].ToString();
|
|
if (jobParms["TarGriperpos"].ToString() == "1")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位右侧";
|
}
|
else if (jobParms["TarGriperpos"].ToString() == "2")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位左侧";
|
}
|
else if (jobParms["TarGriperpos"].ToString() == "3")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位上侧";
|
}
|
else
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位下侧";
|
}
|
xmlNodeMethodList[n].SelectSingleNode("gripModelSet/value").InnerText = jobParms["TarGriperpos"].ToString();
|
|
|
if (jobParms["Boardpos"].ToString()=="1")
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelPos/text").InnerText = "底部";
|
}
|
else
|
{
|
xmlNodeMethodList[n].SelectSingleNode("gripModelPos/text").InnerText = "顶部";
|
}
|
xmlNodeMethodList[n].SelectSingleNode("gripModelPos/value").InnerText = jobParms["Boardpos"].ToString();
|
|
//if (jobParms["TargetType"].ToString() == "1")
|
//{
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "圆形皿";
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "1";
|
//}
|
//else if (jobParms["TargetType"].ToString() == "3")
|
//{
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "短底耗材";
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "3";
|
//}
|
//else
|
//{
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "正常耗材";
|
// xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "2";
|
//}
|
xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "耗材";
|
xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = jobParms["BoardId"].ToString();
|
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
return xmlDocument;
|
}
|
|
/// <summary>
|
/// 拍照
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public JObject Method_TakePhoto(Object obj)
|
{
|
State = RuntimeState.OnBusy;
|
JObject result = new JObject();
|
try
|
{
|
|
|
JObject job = obj as JObject;
|
//string strParam = string.Empty;
|
//string methodFileName = string.Empty;
|
//string strSrouceLatticeName = string.Empty;
|
//string strTargetLatticeName = string.Empty;
|
//int iGripperLabwarePos = 1;
|
//int iGripperLatticeDriector = 1;
|
//strParam = job["parameters"].ToString();
|
|
//JObject jobParms = JObject.Parse(strParam);
|
//strSrouceLatticeName = jobParms["SrcPosition"].ToString();
|
//strTargetLatticeName = jobParms["TarPosition"].ToString();
|
//iGripperLatticeDriector = Convert.ToInt32(jobParms["Griperpos"].ToString());
|
//iGripperLabwarePos = Convert.ToInt32(jobParms["IsOpenlid"].ToString());
|
//methodFileName = jobParms["FlowName"].ToString();
|
|
//string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString();
|
//string fullName = AppDomain.CurrentDomain.BaseDirectory + shortDir + "\\" + methodFileName + ".xmed";
|
//if (File.Exists(fullName))
|
//{
|
// XmlDocument xmlDocument = new XmlDocument();
|
// //XmlDocument
|
// xmlDocument.Load(fullName);
|
|
// xmlDocument = UpdateGripMoveParamByxml(xmlDocument, jobParms);
|
// App.Current.Dispatcher.Invoke(new Action(async () =>
|
// {
|
// RunWnd runWnd = new RunWnd();
|
// runWnd.xmlDocument = xmlDocument;
|
// runWnd.isRemotingOper = true;
|
// runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false;
|
// await Task.Factory.StartNew(() => runWnd.LoadLabwareOnRunning(), runWnd._cancelSource.Token);
|
// }));
|
// result = JObject.Parse("{method_status:2}");
|
//}
|
//else
|
//{
|
// //弹出窗口提示所执行的方法不存在
|
//}
|
result = JObject.Parse("{method_status:2}");
|
|
State = RuntimeState.OnIdle;
|
}
|
catch (Exception ex)
|
{
|
LoggerHelper.ErrorLog("ERROR:", ex);
|
}
|
return result;
|
}
|
|
|
public void RunTest(Object obj)
|
{
|
State = RuntimeState.OnBusy;
|
JObject result = new JObject();
|
|
JObject Obj = obj as JObject;
|
|
|
State = RuntimeState.OnIdle;
|
}
|
|
|
#region 接口中的3个方法
|
public void ReplyAbort()
|
{
|
|
}
|
public void ReplyRetry()
|
{
|
|
}
|
public void ReplyIgnore()
|
{
|
|
}
|
#endregion
|
|
public void Dispose(string methodName)
|
{
|
if (errorHandle == null)
|
return;
|
var list = errorHandle.GetInvocationList();
|
foreach (Delegate del in list)
|
{
|
TaskInstruction taskInstruction = del.Target as TaskInstruction;
|
if (taskInstruction.InsName == methodName)
|
{
|
object delObj = del.GetType().GetProperty("Method").GetValue(del, null);
|
string funcName = (string)delObj.GetType().GetProperty("Name").GetValue(delObj, null);
|
Console.WriteLine(funcName);
|
errorHandle -= del as ErrorHandleDelegate;
|
}
|
}
|
}
|
}
|
}
|