| | |
| | | using System.Linq; |
| | | using System.Net.WebSockets; |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using AutoMapper; |
| | | using HslCommunication.WebSocket; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; |
| | | using Quartz; |
| | | using SqlSugar; |
| | | using StackExchange.Profiling.Internal; |
| | | using WIDESEA_ISerialPortRepository; |
| | | using WIDESEA_SerialPortRepository; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_DTO.SerialPort; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_TaskInfoService; |
| | | using WIDESEAWCS_Tasks.SerialPort; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | |
| | | private readonly IPutakeRepository _putakeRepository; |
| | | private readonly IProcessRepository _processRepository; |
| | | private readonly ITorqueOpRepository _orqueOpRepository; |
| | | private WebSocketServer _webSocketContext; |
| | | |
| | | public SerialPortJob(IPutakeRepository putakeRepository, IProcessRepository processRepository, ITorqueOpRepository torqueOpRepository, WebSocketServer webSocketContext) |
| | | private WebSocketServer _webSocketContext; |
| | | private readonly IProcessServer _processServer; |
| | | private readonly IPutakeServer _putakeServer; |
| | | |
| | | public SerialPortJob(IPutakeServer putakeServer,IProcessServer processServer, IPutakeRepository putakeRepository, IProcessRepository processRepository, ITorqueOpRepository torqueOpRepository, WebSocketServer webSocketContext) |
| | | { |
| | | _putakeRepository = putakeRepository; |
| | | _processRepository = processRepository; |
| | | _orqueOpRepository = torqueOpRepository; |
| | | _webSocketContext = webSocketContext; |
| | | _processServer = processServer; |
| | | _putakeServer = putakeServer; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | |
| | | string group = item.DeviceProDataBlock; |
| | | if (group == "çµæ°") |
| | | { |
| | | //æ¥çæ¥éª¤ |
| | | var com = item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (5 * 1000).ToString().PadLeft(7, '0'))+"\r"; |
| | | serialPortDevice.Communicator.Write(com+"\r"); |
| | | //æå¼ä¸²å£æ¶å
è®¾å¼ |
| | | //è·åå½åä»»å¡å· //IPutakeServeréé¢çå¾
æ§è¡çç¬¬ä¸æ¡ä»»å¡ï¼ |
| | | var take = _putakeRepository.QueryData(x => x.Grouptype == group) |
| | | .OrderBy(x=>x.Dispatchtime) |
| | | .FirstOrDefault(); |
| | | var takeid = take?.Njtakeid;//æ¿å°ä»»å¡å· |
| | | |
| | | //è°ç¨Getcircuitæ¿å°å½åæ¥éª¤ |
| | | var process = _processServer.Getcircuit(group,takeid); |
| | | |
| | | if (process != null && process.Status) |
| | | { |
| | | var list = JsonConvert.SerializeObject(process.Data); |
| | | var data = JsonConvert.DeserializeObject<ProcessData>(list); |
| | | |
| | | if (data?.proNow != null) |
| | | { |
| | | |
| | | int setpNum = data.proNow.SetpNum; |
| | | int sum = data.proNow.TorqueSum; |
| | | double torqueone = data.proNow.TorqueOne; |
| | | int onequantity = data.proNow.TorqueOneQuantity; |
| | | int towquantity = data.proNow.TorqueTwoQuantity; |
| | | double torquetwo = data.proNow.TorqueTwo; |
| | | |
| | | //夿op表ä¸è¿ä¸ªå¼æ¯å¦æè¯¥æ¡ä»»å¡çæ°æ® |
| | | var op = _orqueOpRepository.QueryData(x => x.TakeId == takeid && x.GroupOp == group&&x.ProcessSte== setpNum); |
| | | if (op.Any())//夿æ¯å¦ææ°æ® |
| | | { |
| | | //æ¾å°äºå°±è¦å¯¹æ¯ç°å¨opè¡¨ä¸æå¤å°æ¡ï¼æ¯å¦åå·¥èºè¡¨ä¸çç®æ ä¸è´ |
| | | var oponecount=op.Count(x=>x.TorqueSize== torqueone);//第ä¸ä¸ªæçæ°é |
| | | var optowcount = op.Count(x => x.TorqueSize == torquetwo);//第äºä¸ªæçæ°é |
| | | sum=oponecount+optowcount; |
| | | //第ä¸ç§ï¼ç¬¬ä¸ä¸ªæå弿²¡ææå® |
| | | if (oponecount< onequantity&& torqueone!=0) |
| | | { |
| | | //è®¾å¼ |
| | | //var com = item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue |
| | | // .Replace("[setNum]", (torqueone * 1000).ToString().PadLeft(7, '0')) + "\r"; |
| | | var com = item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue |
| | | .Replace("[setNum]", Math.Round(torqueone * 1000).ToString().PadLeft(7, '0')) + "\r"; |
| | | //æ ¼å¼åææ´æ° |
| | | |
| | | serialPortDevice.Communicator.Write(com); |
| | | } |
| | | //第äºç§ï¼ç¬¬ä¸ä¸ªå¼æå®äºï¼ç¬¬äºä¸ªæ²¡ææå® |
| | | if (oponecount==onequantity&& optowcount < towquantity&& torquetwo!=0) |
| | | { |
| | | //è®¾å¼ |
| | | var com = item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue |
| | | .Replace("[setNum]", Math.Round(torquetwo * 1000).ToString().PadLeft(7, '0')) + "\r"; |
| | | serialPortDevice.Communicator.Write(com); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | item.DeviceProParamName = CommandType.Set.ToString(); |
| | |
| | | { |
| | | item.DeviceProParamName = CommandType.Get.ToString(); |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | else if (item.DeviceProParamName == CommandType.Get.ToString()) |
| | |
| | | //03æå |
| | | if (deviceProtocolDetail != null && receiveData.Contains(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue)) |
| | | { |
| | | |
| | | //æè¿æ¡æ°æ®æå
¥opè¡¨ä¸ |
| | | string group = item.DeviceProDataBlock; // è®¾å¤æå±ç»å« |
| | | string devicecode = item.DeviceChildCode;//设å¤ç¼å· |
| | | string torqueValue = ExtractTorqueValue(receiveData); |
| | | |
| | | if (group == "çµæ°") |
| | | { |
| | | #region |
| | | var take = _putakeRepository.QueryData(x => x.Grouptype == group) |
| | | .OrderBy(x => x.Dispatchtime) |
| | | .FirstOrDefault(); |
| | | var takeid = take?.Njtakeid;//æ¿å°ä»»å¡å· |
| | | |
| | | //è°ç¨Getcircuitæ¿å°å½åæ¥éª¤ |
| | | var process = _processServer.Getcircuit(group, takeid); |
| | | |
| | | if (process != null && process.Status) |
| | | { |
| | | var list = JsonConvert.SerializeObject(process.Data); |
| | | var dataz = JsonConvert.DeserializeObject<ProcessData>(list); |
| | | |
| | | if (dataz?.proNow != null) |
| | | { |
| | | |
| | | int setpNum = dataz.proNow.SetpNum; |
| | | int sum = dataz.proNow.TorqueSum; |
| | | double torqueone = dataz.proNow.TorqueOne; |
| | | int onequantity = dataz.proNow.TorqueOneQuantity; |
| | | int towquantity = dataz.proNow.TorqueTwoQuantity; |
| | | double torquetwo = dataz.proNow.TorqueTwo; |
| | | Dt_TorqueOp Addop = new Dt_TorqueOp() |
| | | { |
| | | DeviceCode = devicecode, |
| | | TakeId = takeid, |
| | | GroupOp = group, |
| | | ProcessSte = setpNum, |
| | | TorqueSize = float.TryParse(torqueValue, out float torque) ? torque : 0.0f, // è¿éè¿è¡å符串å°floatçè½¬æ¢ |
| | | CreateDate = DateTime.Now, |
| | | |
| | | }; |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | item.DeviceProParamName = CommandType.Set.ToString(); |
| | | } |
| | | else if (item.DeviceProParamName == CommandType.Get.ToString()) |
| | | { |
| | | //DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandResult) && x.ProtocolDetailType == nameof(CommandResult.GetError)); |
| | | //if (deviceProtocolDetail != null && receiveData.Contains(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue)) |
| | | //{ |
| | | // item.DeviceProParamName = CommandType.Set.ToString(); |
| | | |
| | | |
| | | |
| | | //} |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å°0004000转为4.0 |
| | | /// 0004500转为4.5 |
| | | /// </summary> |
| | | /// <param name="data"></param> |
| | | /// <returns></returns> |
| | | private string ExtractTorqueValue(string data) |
| | | { |
| | | Match match = Regex.Match(data, @"\b0*(\d{1,4})000\b"); |
| | | return match.Success ? (double.Parse(match.Groups[1].Value) / 10.0).ToString("0.0") : "0.0"; |
| | | } |
| | | |
| | | |
| | | |
| | | } |