#region MyRegion #region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using AutoMapper; using HslCommunication; using Microsoft.AspNetCore.Server.HttpSys; using Newtonsoft.Json; using Quartz; using SqlSugar; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_Tasks.ConveyorLineJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonConveyorLine_AfterJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; private readonly IMapper _mapper; public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; _taskRepository = taskRepository; } public Task Execute(IJobExecutionContext context) { try { CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { List childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); //List tasks = new List(); foreach (string childDeviceCode in childDeviceCodes) { ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer(childDeviceCode); if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = ""; DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString()); if (deviceProtocolDetails != null) { MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); if (method != null) { method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode }); } } } //Task.WaitAll(tasks.ToArray()); } } catch (Exception ex) { Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } finally { //WriteDebug("CommonConveyorLineJob", "test"); //Console.Out.WriteLine(DateTime.Now); } return Task.CompletedTask; } /// /// 输送线请求入库 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 /// 线体当前bool读取偏移地址 public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode); if (taskNew == null) { string barcode = command.ConveyorLineBarcode.TrimEnd(); if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); if (task != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; taskCommand.ResponState = 1; taskCommand.ConveyorLineTaskNum = task.TaskNum; taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress); conveyorLine.SendCommand(taskCommand, childDeviceCode); //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); _taskService.UpdateTaskStatusToNext(task); } } } var inTask = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode); if (inTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map(inTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; taskCommand.ResponState = 1; conveyorLine.SendCommand(taskCommand, childDeviceCode); _taskService.UpdateTaskStatusToNext(inTask); } } /// /// 输送线请求入库下一地址 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { //if(command) Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); if (newTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map(newTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; conveyorLine.SendCommand(taskCommand, childDeviceCode); } } } /// /// 输送线入库完成 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 /// 线体当前bool读取偏移地址 public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) { //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); Console.Out.WriteLine(content.Serialize()); } } /// /// 输送线请求出信息 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); if (task != null) { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); _taskService.UpdateTaskStatusToNext(task); } } /// /// 输送线请求出库下一地址 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); if (newTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map(newTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; conveyorLine.SendCommand(taskCommand, childDeviceCode); } } } /// /// 输送线出库完成 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); Console.Out.WriteLine(content.Serialize()); } } /// /// 输送线交互完成 /// /// 输送线实例对象 /// 子设备编号 /// 线体当前bool读取偏移地址 /// 值 public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) { DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); string[] x = devicePro.DeviceProAddress.Split('.'); x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); string DeviceProAddress = string.Join(".", x); conveyorLine.Communicator.Write(DeviceProAddress, value); } } } #endregion #region MyRegion //using AutoMapper; //using HslCommunication; //using Newtonsoft.Json; //using Quartz; //using SqlSugar; //using System.Reflection; //using WIDESEAWCS_Common.TaskEnum; //using WIDESEAWCS_Core; //using WIDESEAWCS_Core.Helper; //using WIDESEAWCS_DTO.TaskInfo; //using WIDESEAWCS_ITaskInfoRepository; //using WIDESEAWCS_ITaskInfoService; //using WIDESEAWCS_Model.Models; //using WIDESEAWCS_QuartzJob; //using WIDESEAWCS_QuartzJob.DeviceBase; //using WIDESEAWCS_QuartzJob.DTO; //using WIDESEAWCS_QuartzJob.Service; //using WIDESEAWCS_Tasks.ConveyorLineJob; //namespace WIDESEAWCS_Tasks //{ // [DisallowConcurrentExecution] // public class CommonConveyorLine_AfterJob : JobBase, IJob // { // private readonly List _deviceCodes1 = new List() { "1063", "1061", "1060" }; // private readonly List _deviceCodes2 = new List() { "1067", "1069", "1068" }; // private readonly string[] HCTrayCode = { "1012", "1013" }; // private readonly ITaskService _taskService; // private readonly ITaskRepository _taskRepository; // private readonly ITaskExecuteDetailService _taskExecuteDetailService; // private readonly IRouterService _routerService; // private readonly IMapper _mapper; // public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository) // { // _taskService = taskService; // _taskExecuteDetailService = taskExecuteDetailService; // _routerService = routerService; // _mapper = mapper; // _taskRepository = taskRepository; // } // public Task Execute(IJobExecutionContext context) // { // try // { // CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams"); // if (conveyorLine != null) // { // List childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); // List tasks = new List(); // foreach (string childDeviceCode in childDeviceCodes) // { // //Task task = Task.Run(() => // //{ // ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer(childDeviceCode); // if (command != null) // { // var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray(); // List? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal)).ToList(); // if (deviceProtocolDetails != null) // { // foreach (var item in deviceProtocolDetails) // { // var outDeviceCodes = _routerService.QueryOutDeviceCodes(conveyorLine.DeviceCode); // if (structs[item.ProtocalDetailValue.ObjToInt()] == true) // { // MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); // if (method != null) // { // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() }); // } // } // else // { // //DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); // //string[] x = devicePro.DeviceProAddress.Split('.'); // //x[x.Length - 1] = (item.ProtocalDetailValue.ObjToInt() + 1).ToString(); // //string DeviceProAddress = string.Join(".", x); // //var writeRead = conveyorLine.Communicator.Read(DeviceProAddress); // //if (writeRead) // //{ // // ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false); // //} // } // } // } // } // //}); // //tasks.Add(task); // } // Task.WaitAll(tasks.ToArray()); // } // } // catch (Exception ex) // { // Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); // } // finally // { // //WriteDebug("CommonConveyorLineJob", "test"); // //Console.Out.WriteLine(DateTime.Now); // } // return Task.CompletedTask; // } // /// // /// 输送线请求入库 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // /// 线体当前bool读取偏移地址 // public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue) // { // var taskNew = _taskService.QueryCraneConveyorLineTask(command.Barcode.ObjToInt(), childDeviceCode); // var Taskout = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (Taskout != null) // { // // 空托盘任务 // if (Taskout.TaskType == (int)TaskOutboundTypeEnum.OutTray) // { // if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // if (command.Barcode == "") // { // taskCommand.TargetAddress = 1092; // } // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) // { // if (command.Barcode == "") // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // taskCommand.TargetAddress = 1092; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // } // } // else if (Taskout.TaskType == (int)TaskOutboundTypeEnum.Outbound) // { // if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // if (command.Barcode == "") // { // //todo 没有明确异常口,送到目标巷道的NG口 // //taskCommand.TargetAddress = 1092; // } // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) // { // if (command.Barcode == "") // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // // todo 送到目标巷道的NG口 // taskCommand.TargetAddress = 1092; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else // { // // todo 调用WMS任务完成接口 // var x = new { taskNum = Taskout.TaskNum }; // var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result; // WebResponseContent content = JsonConvert.DeserializeObject(result); // if (content.Status) // { // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // } // } // } // } // if (taskNew == null) // { // if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status) // { // Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (task != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(task); // } // } // } // } // // // /// // /// 空托盘回流 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // /// 读取的第一个位置 // public void EmptyTrayReturn(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index) // { // var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.OutTray); // if (tasks.Count <= index) // { // WMSTaskDTO taskDTO = new WMSTaskDTO() // { // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), // Grade = 1, // PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"), // RoadWay = "CHSC01", // SourceAddress = "001-001-001", // TargetAddress = childDeviceCode, // TaskState = (int)TaskOutStatusEnum.OutNew, // Id = 0, // TaskType = (int)TaskOutboundTypeEnum.OutTray // }; // #region 真实数据 // // TODO: 调用接口获取下一个地址 // //RequestTaskDto request = new RequestTaskDto() // //{ // // Position = sourceAddress, // // PalletCode = palletCode, // //}; // //// 发送请求并等待响应 // //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result; // //// 反序列化响应内容 // //WebResponseContent content = JsonConvert.DeserializeObject(result); // //// 检查状态并返回 // ////if (!content.Status) // //// return content; // //// 反序列化任务数据 // //WMSTaskDTO task = JsonConvert.DeserializeObject(content.Data.ToString()); // #endregion // var content = _taskService.ReceiveWMSTask(new List { taskDTO }); // if (content.Status) // { // Console.WriteLine("空托盘呼叫成功"); // } // } // } // ///// // ///// 陈化出库 // ///// // ///// 输送线实例对象 // ///// 读取的请求信息 // ///// 子设备编号 // ///// 线体当前bool读取偏移地址 // //public void ChuanhuaOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index) // //{ // // var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.Outbound); // // if (tasks.Count <= index) // // { // // WMSTaskDTO taskDTO = new WMSTaskDTO() // // { // // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), // // Grade = 1, // // PalletCode = DateTime.Now.ToString("MMddHHmmss"), // // RoadWay = "CHSC01", // // SourceAddress = "001-001-001", // // TargetAddress = childDeviceCode, // // TaskState = (int)TaskOutStatusEnum.OutNew, // // Id = 0, // // TaskType = (int)TaskOutboundTypeEnum.Outbound, // // }; // // var content = _taskService.ReceiveWMSTask(new List { taskDTO }); // // if (content.Status) // // { // // Console.WriteLine("出库呼叫成功"); // // } // // } // // else // // { // // Dt_Task task = tasks[index]; // // if (task != null) // // { // // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); // // taskCommand.InteractiveSignal = command.InteractiveSignal; // // conveyorLine.SendCommand(taskCommand, childDeviceCode); // // } // // } // //} // /// // /// 输送线请求入库下一地址 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); // if (newTask != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(newTask); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // } // } // } // /// // /// 输送线入库完成 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // /// 线体当前bool读取偏移地址 // public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) // { // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // Console.Out.WriteLine(content.Serialize()); // } // } // /// // /// 输送线请求出信息 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (task != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // _taskService.UpdateTaskStatusToNext(task); // } // } // /// // /// 输送线请求出库下一地址 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); // if (newTask != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(newTask); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // } // } // } // /// // /// 输送线出库完成 // /// // /// 输送线实例对象 // /// 读取的请求信息 // /// 子设备编号 // public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // Console.Out.WriteLine(content.Serialize()); // } // } // /// // /// 输送线交互完成 // /// // /// 输送线实例对象 // /// 子设备编号 // /// 线体当前bool读取偏移地址 // /// 值 // public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) // { // DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); // string[] x = devicePro.DeviceProAddress.Split('.'); // x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); // string DeviceProAddress = string.Join(".", x); // conveyorLine.Communicator.Write(DeviceProAddress, value); // } // } //} #endregion