301 lines
14 KiB
C#
301 lines
14 KiB
C#
using CommunityToolkit.Mvvm.Messaging;
|
||
using CsvHelper;
|
||
using CsvHelper.Configuration;
|
||
using Dm;
|
||
using MegaRobo.Entities;
|
||
using ServiceReference1;
|
||
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using System.Globalization;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Runtime.CompilerServices;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using Task = System.Threading.Tasks.Task;
|
||
|
||
namespace MegaRobo.C00225155.ControlDevices
|
||
{
|
||
public class LabxService
|
||
{
|
||
public Guid abortWaitingHeadTaskId = new Guid();
|
||
public BasicSystemIntegrationServiceClient _serviceClient;
|
||
public List<Instrument> Instruments { get; set; }
|
||
public Dictionary<Guid, Instrument> CurTaskID { get; set; }
|
||
public LabxService()
|
||
{
|
||
_serviceClient = new BasicSystemIntegrationServiceClient();
|
||
}
|
||
public async Task<List<Instrument>> GetInstruments(string instrumentName)
|
||
{
|
||
try
|
||
{
|
||
var instrument = await _serviceClient.GetThisInstrumentsByNameAsync(instrumentName);
|
||
return instrument.ToList();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
WeakReferenceMessenger.Default.Send(new ConfirmMessage()
|
||
{
|
||
Header = $"labx获取设备发生异常\r\n请联系供应商!!",
|
||
Content = $"{ex.ToString()}",
|
||
OkButtonContent = "继续",
|
||
CancelButtonContent = "取消",
|
||
});
|
||
return null;
|
||
}
|
||
}
|
||
|
||
public async void CreateNewTask(string methodName, string taskName)
|
||
{
|
||
//Get the method based on method user ID
|
||
Method method = await _serviceClient.GetThisMethodByUserDefinedIdAsync(methodName);
|
||
var taskId = _serviceClient.CreateTaskAsync(
|
||
method.BusinessId, taskName, false, new TaskParameterSet());
|
||
}
|
||
|
||
public async Task<TaskResultSet> CreateAndStartNewTaskMove(string methodName, string taskName, int holeNum, Instrument instrument)
|
||
{
|
||
Method method = await _serviceClient.GetThisMethodByUserDefinedIdAsync(methodName);
|
||
var methodparameter = await _serviceClient.GetMethodMetaDataAsync(method.BusinessId);
|
||
TaskParameterSet taskParameterSet = new TaskParameterSet();
|
||
IntegerTypeMethodParameter parameter = new IntegerTypeMethodParameter();
|
||
parameter.MethodFunctionName = methodparameter.MethodParameters[0].MethodFunctionName;
|
||
parameter.MethodFunctionPropertyName = methodparameter.MethodParameters[0].MethodFunctionPropertyName;
|
||
parameter.Value = holeNum;
|
||
taskParameterSet.GlobalMethodParameters = new MethodParameter[1];
|
||
taskParameterSet.GlobalMethodParameters[0] = parameter;
|
||
|
||
Guid taskId = await _serviceClient.CreateTaskAsync(method.BusinessId, taskName, false, taskParameterSet);
|
||
await _serviceClient.StartTaskAsync(taskId, instrument.InstrumentId);
|
||
//CurTaskID.Add( taskId, instrument );
|
||
TaskState taskState;
|
||
do
|
||
{
|
||
taskState = await _serviceClient.GetTaskStateAsync(taskId);
|
||
if (taskState.State != TaskStateType.Aborted && taskState.State != TaskStateType.Completed)
|
||
{
|
||
await Task.Delay(1000);
|
||
}
|
||
} while (taskState.State != TaskStateType.Completed && taskState.State != TaskStateType.Aborted);
|
||
if (taskState.State == TaskStateType.Completed)
|
||
{
|
||
var result = await _serviceClient.GetTaskResultsAsync(taskId);
|
||
//CurTaskID.Remove(taskId);
|
||
//var RE= result.Samples[0].Results[0].Scalar.ValueMember;
|
||
return result;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 等待放置加样头
|
||
/// </summary>
|
||
/// <param name="instrument"></param>
|
||
/// <param name="methodName"></param>
|
||
/// <param name="taskName"></param>
|
||
/// <param name="defaultvalue"></param>
|
||
/// <returns></returns>
|
||
public async Task<TaskResultSet> StartWaitingForHead(Instrument instrument, string methodName = "Dosing Head", string taskName = "Dosing Head", decimal defaultvalue = 0)
|
||
{
|
||
try
|
||
{
|
||
Method method = await _serviceClient.GetThisMethodByUserDefinedIdAsync(methodName);
|
||
var methodparameter = await _serviceClient.GetMethodMetaDataAsync(method.BusinessId);
|
||
|
||
TaskParameterSet taskParameterSet = new TaskParameterSet
|
||
{
|
||
GlobalMethodParameters = new MethodParameter[4]
|
||
{
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Number1",MethodFunctionPropertyName = "DefaultValue",Value = defaultvalue},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "TargetWeight",Value = 5000m}, //单位是mg
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingUpperTolerance",Value = 1m},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingLowerTolerance",Value = 1m}
|
||
},
|
||
};
|
||
|
||
Guid taskId = await _serviceClient.CreateTaskAsync(method.BusinessId, taskName, false, taskParameterSet);
|
||
abortWaitingHeadTaskId = taskId;
|
||
await _serviceClient.StartTaskAsync(taskId, instrument.InstrumentId);
|
||
TaskState taskState;
|
||
do
|
||
{
|
||
taskState = await _serviceClient.GetTaskStateAsync(taskId);
|
||
if (taskState.State != TaskStateType.Running)
|
||
{
|
||
await Task.Delay(2000);
|
||
}
|
||
} while (taskState.State != TaskStateType.Running);
|
||
|
||
return null;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
WeakReferenceMessenger.Default.Send(new ConfirmMessage()
|
||
{
|
||
Header = $"梅特勒粉末研磨模块异常",
|
||
Content = $"{ex.ToString()}",
|
||
OkButtonContent = "继续",
|
||
CancelButtonContent = "取消",
|
||
});
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 停止等待加样头
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task AbortWaitingForHead()
|
||
{
|
||
await _serviceClient.AbortTaskAsync(abortWaitingHeadTaskId);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 梅特勒粉末天平模块步骤
|
||
/// </summary>
|
||
/// <param name="instrument"></param>
|
||
/// <param name="methodName"></param>
|
||
/// <param name="taskName"></param>
|
||
/// <param name="defaultvalue"></param>
|
||
/// <param name="targetweight">目标重量,单位mg</param>
|
||
/// <param name="upT"></param>
|
||
/// <param name="dnT"></param>
|
||
/// <returns></returns>
|
||
public async Task<double> MTPowderModuleControlStep(Instrument instrument, string methodName, string taskName, decimal defaultvalue = 0, decimal targetweight = 0, decimal upT = 0, decimal dnT = 0)
|
||
{
|
||
double addResult = 0;
|
||
try
|
||
{
|
||
|
||
Method method = await _serviceClient.GetThisMethodByUserDefinedIdAsync(methodName);
|
||
var methodparameter = await _serviceClient.GetMethodMetaDataAsync(method.BusinessId);
|
||
//defaultvalue= 0 关门 =1开门 =2置零 =3去皮 =4 开始加样 =5 粉末头复位
|
||
TaskParameterSet taskParameterSet = new TaskParameterSet
|
||
{
|
||
GlobalMethodParameters = new MethodParameter[4]
|
||
{
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Number1",MethodFunctionPropertyName = "DefaultValue",Value = defaultvalue},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "TargetWeight",Value = targetweight}, //单位是mg
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingUpperTolerance",Value = upT},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingLowerTolerance",Value = dnT}
|
||
},
|
||
};
|
||
|
||
Guid taskId = await _serviceClient.CreateTaskAsync(method.BusinessId, taskName, false, taskParameterSet);
|
||
await _serviceClient.StartTaskAsync(taskId, instrument.InstrumentId);
|
||
TaskState taskState;
|
||
do
|
||
{
|
||
taskState = await _serviceClient.GetTaskStateAsync(taskId);
|
||
if (taskState.State != TaskStateType.Aborted && taskState.State != TaskStateType.Completed)
|
||
{
|
||
await Task.Delay(2000);
|
||
}
|
||
} while (taskState.State != TaskStateType.Completed && taskState.State != TaskStateType.Aborted);
|
||
if (defaultvalue == 4 && taskState.State == TaskStateType.Completed)
|
||
{
|
||
var result = await _serviceClient.GetTaskResultsAsync(taskId);
|
||
//CurTaskID.Remove(taskId);
|
||
decimal RE = result.TaskResults[1].Scalar.ValueMember;
|
||
addResult = (double)RE;
|
||
return addResult;
|
||
}
|
||
return addResult;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
WeakReferenceMessenger.Default.Send(new ConfirmMessage()
|
||
{
|
||
Header = $"梅特勒粉末研磨模块异常",
|
||
Content = $"{ex.ToString()}",
|
||
OkButtonContent = "继续",
|
||
CancelButtonContent = "取消",
|
||
});
|
||
return addResult;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 加粉控制
|
||
/// </summary>
|
||
/// <param name="instrument"></param>
|
||
/// <param name="methodName"></param>
|
||
/// <param name="taskName"></param>
|
||
/// <param name="defaultValue"></param>
|
||
/// <param name="height"></param>
|
||
/// <param name="targetweight"></param>
|
||
/// <param name="upT"></param>
|
||
/// <param name="dnT"></param>
|
||
/// <returns></returns>
|
||
public async Task<double> MTPowderModuleAddPowder(Instrument instrument, string methodName, string taskName, decimal defaultValue, decimal height = 140.8m, decimal targetweight = 0, decimal upT = 0, decimal dnT = 0)
|
||
{
|
||
double addResult = 0;
|
||
try
|
||
{
|
||
|
||
Method method = await _serviceClient.GetThisMethodByUserDefinedIdAsync(methodName);
|
||
var methodparameter = await _serviceClient.GetMethodMetaDataAsync(method.BusinessId);
|
||
//defaultvalue= 0 关门 =1开门 =2置零 =3去皮 =4 开始加样 =5 粉末头复位
|
||
TaskParameterSet taskParameterSet = new TaskParameterSet
|
||
{
|
||
GlobalMethodParameters = new MethodParameter[4]
|
||
{
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosingsettings1",MethodFunctionPropertyName = "AbsoluteDosingPositionSpan",Value = height},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "TargetWeight",Value = targetweight}, //单位是mg
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingUpperTolerance",Value = upT},
|
||
new DecimalTypeMethodParameter{MethodFunctionName = "Dosing1",MethodFunctionPropertyName = "DosingLowerTolerance",Value = dnT}
|
||
},
|
||
};
|
||
|
||
Guid taskId = await _serviceClient.CreateTaskAsync(method.BusinessId, taskName, false, taskParameterSet);
|
||
await _serviceClient.StartTaskAsync(taskId, instrument.InstrumentId);
|
||
TaskState taskState;
|
||
do
|
||
{
|
||
taskState = await _serviceClient.GetTaskStateAsync(taskId);
|
||
if (taskState.State != TaskStateType.Aborted && taskState.State != TaskStateType.Completed)
|
||
{
|
||
await Task.Delay(2000);
|
||
}
|
||
} while (taskState.State != TaskStateType.Completed && taskState.State != TaskStateType.Aborted);
|
||
if (defaultValue == 4 && taskState.State == TaskStateType.Completed)
|
||
{
|
||
var result = await _serviceClient.GetTaskResultsAsync(taskId);
|
||
try
|
||
{
|
||
//CurTaskID.Remove(taskId);
|
||
decimal RE = result.TaskResults[0].Scalar.ValueMember;
|
||
addResult = (double)RE;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//MessageBox.Show($"加粉异常-{ex.Message}");
|
||
addResult = 0;
|
||
}
|
||
|
||
return addResult;
|
||
}
|
||
return addResult;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
WeakReferenceMessenger.Default.Send(new ConfirmMessage()
|
||
{
|
||
Header = $"梅特勒粉末研磨模块异常",
|
||
Content = $"{ex.ToString()}",
|
||
OkButtonContent = "继续",
|
||
CancelButtonContent = "取消",
|
||
});
|
||
return addResult;
|
||
}
|
||
}
|
||
}
|
||
} |