using Common.Models;
using CommunityToolkit.Mvvm.Messaging;
using MegaRobo.Entities;
using MegaRobo.Logger;
using Newtonsoft.Json.Linq;
using Nito.AsyncEx;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Automation.Text;
using System.Windows.Data;
namespace MegaRobo.C00225155.AppServer.ExecuteWorks
{
///
/// 这里主要写检测工站的和PLC通讯的函数
///
public partial class StationService_ReactionProcessing : StationServiceBase
{
//#region PLC点位写/读
/////
///// 旋转平台---等待信号的锁
/////
//private static readonly AsyncLock _lockWaitSignal_Rotater = new AsyncLock();
//private static readonly AsyncLock _lockWaitSignal_SixAxis = new AsyncLock();
//private static readonly AsyncLock _lockWaitSignal_XYZ = new AsyncLock();
//private static readonly AsyncLock _lockWaitSignal_XZ = new AsyncLock();
//private static readonly AsyncLock _lockWaitSignal_Upload = new AsyncLock();
//private static readonly AsyncLock _lockWaitSignal_Dnload = new AsyncLock();
//private static readonly AsyncLock _lockDetect_Electricty = new AsyncLock();
//private static readonly AsyncLock _lockDetect_Acid = new AsyncLock();
//private static readonly AsyncLock _lockDetect_Moisture = new AsyncLock();
//private static readonly AsyncLock _lockSixAxisDoAction = new AsyncLock();
//public async Task ReadScannedValueAsync_Upload(ushort address)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// return this.ModbusClient.Command.ReadValue(address);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站读取PLC信号异常",
// Content = $"ReadUpload读取 {address} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"ReadScannedValueAsync_Upload读取 {address} 时发生错误: {ex.Message}");
// }
// return 0;
//}
//public async Task ReadScannedValueAsync_Dnload(ushort address)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// return this.ModbusClient.Command.ReadValue(address);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站读取PLC信号异常",
// Content = $"ReadDnload读取 {address} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"ReadScannedValueAsync_Dnload读取 {address} 时发生错误: {ex.Message}");
// }
// return 0;
//}
//public async Task ReadScannedValueAsync_SixAxis(ushort address)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// return this.ModbusClient.Command.ReadValue(address);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站读取PLC信号异常",
// Content = $"ReadSixAxis读取 {address} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"ReadScannedValueAsync_SixAxis读取 {address} 时发生错误: {ex.Message}");
// }
// return 0;
//}
//public async Task ReadScannedValueAsync_XYZ(ushort address)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// return this.ModbusClient.Command.ReadValue(address);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站读取PLC信号异常",
// Content = $"ReadXYZ读取 {address} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"ReadScannedValueAsync_XYZ读取 {address} 时发生错误: {ex.Message}");
// }
// return 0;
//}
//public async Task ReadScannedValueAsync_XZ(ushort address)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// return this.ModbusClient.Command.ReadValue(address);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站读取PLC信号异常",
// Content = $"ReadXZ读取 {address} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"ReadScannedValueAsync_XZ读取 {address} 时发生错误: {ex.Message}");
// }
// return 0;
//}
//public async Task WriteCommandAsync_Upload(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// while (await ReadScannedValueAsync_Upload(address) != value)
// {
// this.ModbusClient.Command.WriteValue(address, value);
// await Task.Delay(30);
// }
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteUpload写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_Upload写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WriteCommandAsync_Dnload(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// while (await ReadScannedValueAsync_Dnload(address) != value)
// {
// this.ModbusClient.Command.WriteValue(address, value);
// await Task.Delay(30);
// }
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteDnload写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_Dnload写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WriteCommandAsync_Six(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteSix写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_Six写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WriteCommandAsync_SixAxis(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// while (await ReadScannedValueAsync_SixAxis(address) != value)
// {
// this.ModbusClient.Command.WriteValue(address, value);
// await Task.Delay(30);
// }
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteSixAxis写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_SixAxis写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WriteCommandAsync_XYZ(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// while (await ReadScannedValueAsync_XYZ(address) != value)
// {
// this.ModbusClient.Command.WriteValue(address, value);
// await Task.Delay(30);
// }
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteXYZ写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_XYZ写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WriteCommandAsync_XZ(ushort address, ushort value)
//{
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// try
// {
// this.ModbusClient.Command.WriteValue(address, value);
// //await Task.Delay(30);
// while (await ReadScannedValueAsync_XZ(address) != value)
// {
// this.ModbusClient.Command.WriteValue(address, value);
// await Task.Delay(30);
// }
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站写入PLC信号异常",
// Content = $"WriteXZ写入 {address}值{value} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WriteCommandAsync_XZ写入 {address}值{value} 时发生错误: {ex.Message}");
// return;
// }
//}
//public async Task WaitForActionFinishAsync_Upload(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockWaitSignal_Upload.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForUpload等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_Upload等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_DnLoad(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockWaitSignal_Dnload.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForDnLoad等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_DnLoad等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_SixAxis(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockWaitSignal_SixAxis.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForSixAxis等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_SixAxis等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_Electricty(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockDetect_Electricty.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForElectricty等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_Electricty等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_Acid(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockDetect_Acid.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForAcid等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_Acid等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_Moisture(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockDetect_Moisture.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_SixAxis(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForMoisture等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_Moisture等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_XYZ(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockWaitSignal_XYZ.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_XYZ(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForXYZ等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_XYZ等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//public async Task WaitForActionFinishAsync_XZ(ushort point, ushort waitValue, CancellationToken cancellationToken)
//{
// using (await _lockWaitSignal_XZ.LockAsync(cancellationToken))
// {
// try
// {
// ushort result = 0;
// do
// {
// appConfigService.StationPropList[1].ManualResetEvent.WaitOne(); //暂停标志
// result = await ReadScannedValueAsync_XZ(point);
// await Task.Delay(100, cancellationToken);
// } while (result != waitValue && !cancellationToken.IsCancellationRequested);
// }
// catch (Exception ex)
// {
// WeakReferenceMessenger.Default.Send(new ConfirmMessage()
// {
// Header = $"检测站等待PLC信号异常",
// Content = $"WaitForXZ等待{point}是否是{waitValue} 时发生错误: {ex.Message}",
// OkButtonContent = "继续",
// CancelButtonContent = "取消",
// });
// this.Logger.LogError($"WaitForActionFinishAsync_XZ等待{point}是否是{waitValue} 时发生错误: {ex.Message}");
// return;
// }
// }
//}
//#endregion
private async Task RefreshReactBottleState(int boxId, int posId, SampleBottleStateEnum state)
{
//if (workService.ProjectPro.ReactBottleBoxList.FirstOrDefault(f => f.BoxId == boxId) != null)
//{
// SampleBottleBoxModel reactBottleBoxModel = workService.ProjectPro.ReactBottleBoxList.FirstOrDefault(f => f.BoxId == boxId);
// if (reactBottleBoxModel.ReactBottleList.FirstOrDefault(f => f.PosId_InBox - 1 == posId) != null)
// {
// reactBottleBoxModel.ReactBottleList.FirstOrDefault(f => f.PosId_InBox - 1 == posId).ReactBoxState = state;
// }
//}
////更新界面显示结果
//SampleBottleModel bottleModel = null;
//bottleModel = workService.ProjectPro.ReactBottleBoxListByOrder[boxId - 1].ReactBottleList.FirstOrDefault(f => f.PosId_InBox - 1 == posId);
//if (state == ReactBottleStateEnum.Detecting)
//{
// if (!OngoingDetectResultList.Any(f => f.BoxId == bottleModel.BoxId && f.BottleId == bottleModel.PosId_InBox))
// {
// ReactBottleResult_Show result = new ReactBottleResult_Show
// {
// Guid = bottleModel.reactBottleResult.Guid,
// BoxId = bottleModel.reactBottleResult.BoxId,
// BottleId = bottleModel.reactBottleResult.BottleId,
// SampleName = bottleModel.reactBottleResult.SampleName,
// bDetectFinish = false
// };
// OngoingDetectResultList.Add(result);
// UpdateResultEvent?.Invoke(this, OngoingDetectResultList);
// }
//}
//else if (state == ReactBottleStateEnum.FinishDetect)
//{
// if (OngoingDetectResultList.Any(f => f.BoxId == bottleModel.BoxId && f.BottleId == bottleModel.PosId_InBox))
// {
// ReactBottleResult_Show result = OngoingDetectResultList.FirstOrDefault(f => f.BoxId == bottleModel.BoxId && f.BottleId == bottleModel.PosId_InBox && f.Guid == bottleModel.reactBottleResult.Guid);
// if (result != null)
// {
// result.bDetectFinish = true;
// //OngoingDetectResultList.Add(result);
// UpdateResultEvent?.Invoke(this, OngoingDetectResultList);
// }
// }
//}
await Task.Delay(1);
}
}
}