C00225155-02/C00225155/MegaRobo.C00225155/MegaRobo.C00225155.ControlD.../LabxService.cs

301 lines
14 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}
}