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();
///
/// 设置挑菌参数
///
///
///
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;
}
///
/// 设置涂布数据
///
///
///
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 strdata = JsonConvert.DeserializeObject>(objstr);
List strdata1 = JsonConvert.DeserializeObject>(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;
}
///
/// 运行方法
///
///
///
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;
}
///
/// 运行抓板方法,抓耗材命令
///
///
///
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;
}
///
/// 拍照
///
///
///
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;
}
}
}
}
}