| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Drawing.Imaging; |
| | | using System.IO.Ports; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using Quartz; |
| | | using SqlSugar; |
| | | using StackExchange.Profiling.Internal; |
| | | using WIDESEA_ISerialPortRepository; |
| | | using WIDESEA_SerialPortRepository; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | using WIDESEAWCS_Tasks.ConveyorLineJob; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | public class SerialPortJob : JobBase, IJob |
| | | [DisallowConcurrentExecution] |
| | | public class SerialPortJob : JobBase, IJob, IDisposable |
| | | { |
| | | public void Dispose() |
| | | { |
| | | GC.SuppressFinalize(this); |
| | | } |
| | | |
| | | public enum CommandType |
| | | { |
| | | None = 0, |
| | | Get = 1, |
| | | Set = 2, |
| | | Get = 1,//åä¿¡å· |
| | | Set = 2,//è®¾å¼ |
| | | } |
| | | private SerialPort serialPort; |
| | | private CommandType commandType = CommandType.None; |
| | | private string commandGet = "";//è¯»å¼ |
| | | private string commandSet = "";//è®¾å¼ |
| | | private string setOK = ""; |
| | | private string getOK = ""; |
| | | |
| | | public enum CommandResult |
| | | { |
| | | SetOK = 0,//parseok |
| | | GetOK = 1,//03 |
| | | GetError = 2,//04 |
| | | } |
| | | private readonly IPutakeRepository _putakeRepository; |
| | | private readonly IProcessRepository _processRepository; |
| | | private readonly ITorqueOpRepository _orqueOpRepository; |
| | | public SerialPortJob(IPutakeRepository putakeRepository, IProcessRepository processRepository, ITorqueOpRepository torqueOpRepository) |
| | | { |
| | | _putakeRepository = putakeRepository; |
| | | _processRepository = processRepository; |
| | | _orqueOpRepository = torqueOpRepository; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | try |
| | | { |
| | | if (serialPort == null) { serialPort = new SerialPort("COM1"); serialPort.DataReceived += SerialPort_DataReceived;} |
| | | if (!serialPort.IsOpen) |
| | | SerialPortDevice serialPortDevice = (SerialPortDevice)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | if (serialPortDevice != null) |
| | | { |
| | | serialPort.Open(); |
| | | List<DeviceProDTO> deviceProDTOs = serialPortDevice.DeviceProDTOs; |
| | | foreach (var item in deviceProDTOs) |
| | | { |
| | | if (item.DeviceProParamName != CommandType.Get.ToString() && item.DeviceProParamName != CommandType.Set.ToString()) |
| | | { |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandType) && x.ProtocolDetailType == nameof(CommandType.Set)); |
| | | if (deviceProtocolDetail != null) |
| | | { |
| | | |
| | | serialPort.Write(commandSet);//æå¼ä¸²å£æ¶å
è®¾å¼ |
| | | commandType = CommandType.Set; |
| | | //å
æ¥ç¶æåç»ï¼ææ¶é´éåº |
| | | string group = item.DeviceProDataBlock; |
| | | |
| | | |
| | | //è¿é夿ç»å«ä¸ä¸ªçæ¯é£ä¸ªï¼å°±æ¥é£ä¸ªå·¥èºè¡¨çå¼ |
| | | if (group == "çµæ°") |
| | | { |
| | | |
| | | // å
çDt_TorqueOpè¡¨ï¼æ¥è¯¢å°ç°å¨è¿æ¡æ°æ®çä»»å¡å·åæ¥éª¤ |
| | | var take = _putakeRepository.QueryData(x => x.Pustatus == 2 && x.Grouptype == group).OrderBy(x => x.Dispatchtime).First(); |
| | | if (take==null) |
| | | { |
| | | //çäºç©ºå°±å |
| | | } |
| | | |
| | | //æ¥å°æè¯¥æ¡æ°æ®äº |
| | | var process = _processRepository.QueryData(x => x.CraftType == group).OrderBy(x => x.SetpNum).First(); |
| | | |
| | | |
| | | |
| | | float torqueone = process.TorqueOne;//读å°å¼äº |
| | | float torquetow = process.TorqueTwo; |
| | | if (torqueone != 0) |
| | | { |
| | | serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (torqueone * 1000).ToString().PadLeft(7, '0')) + "\r"); |
| | | //è¿éç»å®è®¾å®å¼å°± æ¥åå¨å¼è¡¨ è¿ä¸ªæ°æ®æ¯å¦æ»¡è¶³äºï¼æ»¡è¶³äºå°±è¿è¡ä¸ä¸ä¸ªå¼ï¼ä¸æ»¡è¶³å°±ä¸åä¸ç´ç»å¼ |
| | | var num= _orqueOpRepository.QueryData(x => x.TakeId == take.Njtakeid && x.GroupOp == group && x.TorqueSize == torqueone).Count(); |
| | | if (num!= process.TorqueOneQuantity) |
| | | { |
| | | |
| | | } |
| | | |
| | | } |
| | | if (torquetow != 0) |
| | | { |
| | | serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (torquetow * 1000).ToString().PadLeft(7, '0')) + "\r"); |
| | | } |
| | | |
| | | // // 计ç®å½åæ¥éª¤æéç Torque æ»æ° |
| | | int requiredTorqueCount = process.TorqueOneQuantity + process.TorqueTwoQuantity; |
| | | |
| | | // æ¥è¯¢å½åæ¥éª¤ç TorqueOp è®°å½ï¼å¹é
ProcessSteåç»ï¼æ£æ¥æ¯å¦è¾¾å°è¦æ± |
| | | int torqueCount = _orqueOpRepository.QueryData(x => x.ProcessSte == process.SetpNum && x.GroupOp == group).Count(); |
| | | |
| | | if (torqueCount < requiredTorqueCount) |
| | | { |
| | | // 妿æ°é䏿»¡è¶³ï¼åæ¢è¯»å |
| | | |
| | | break; |
| | | } |
| | | #region |
| | | |
| | | // //å
çå·¥èºè¡¨ä¸æ¥éª¤ä¸ä¸è¦æç弿å¤å°ä¸ª 忥çDt_TorqueOpè¡¨ä¸æ¯å¦æè¯¥ä»»å¡å·idåæ¥éª¤æ»æ°æ¯å¦æ»¡è¶³å·¥èºè¡¨ |
| | | // // æ¥è¯¢ææå·¥èºæ°æ®ï¼æç
§æ¥éª¤å· SetpNum éå¢æåº |
| | | // var processList = _processRepository.QueryData(x => x.CraftType == group) |
| | | // .OrderBy(x => x.SetpNum) |
| | | // .ToList(); |
| | | |
| | | // foreach (var process in processList) |
| | | // { |
| | | // float torqueone = process.TorqueOne;//读å°å¼äº |
| | | // float torquetow = process.TorqueTwo; |
| | | // if (torqueone!=0) |
| | | // { |
| | | // serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (torqueone * 1000).ToString().PadLeft(7, '0')) + "\r"); |
| | | // } |
| | | // if (torquetow != 0) |
| | | // { |
| | | // serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (torquetow * 1000).ToString().PadLeft(7, '0')) + "\r"); |
| | | // } |
| | | |
| | | // // 计ç®å½åæ¥éª¤æéç Torque æ»æ° |
| | | // int requiredTorqueCount = process.TorqueOneQuantity + process.TorqueTwoQuantity; |
| | | |
| | | // // æ¥è¯¢å½åæ¥éª¤ç TorqueOp è®°å½ï¼å¹é
ProcessSteåç»ï¼æ£æ¥æ¯å¦è¾¾å°è¦æ± |
| | | // int torqueCount = _orqueOpRepository.QueryData(x => x.ProcessSte == process.SetpNum&& x.GroupOp== group).Count(); |
| | | |
| | | // if (torqueCount < requiredTorqueCount) |
| | | // { |
| | | // // 妿æ°é䏿»¡è¶³ï¼åæ¢è¯»å |
| | | |
| | | // break; |
| | | // } |
| | | // //符åè¦æ±ï¼ç»§ç»è¯»åä¸ä¸æ¥ |
| | | |
| | | } |
| | | |
| | | //} |
| | | //if (group == "æºæ¢°") |
| | | //{ |
| | | |
| | | //} |
| | | //if (group == "å°æ²") |
| | | //{ |
| | | |
| | | //} |
| | | #endregion |
| | | |
| | | |
| | | serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue.Replace("[setNum]", (5 * 1000).ToString().PadLeft(7, '0')) + "\r"); |
| | | //æå¼ä¸²å£æ¶å
è®¾å¼ |
| | | item.DeviceProParamName = CommandType.Set.ToString(); |
| | | } |
| | | } |
| | | |
| | | if (CommandType.Get.ToString() == item.DeviceProParamName) |
| | | { |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandType) && x.ProtocolDetailType == nameof(CommandType.Get)); |
| | | //åé设å¤å· |
| | | if (deviceProtocolDetail != null) |
| | | { |
| | | serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue, "\r");//æå¼ä¸²å£æ¶å
è®¾å¼ |
| | | } |
| | | } |
| | | else if (CommandType.Set.ToString() == item.DeviceProParamName) |
| | | { |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandType) && x.ProtocolDetailType == nameof(CommandType.Set)); |
| | | //è®¾å¼ |
| | | if (deviceProtocolDetail != null) |
| | | { |
| | | serialPortDevice.Communicator.Write(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue, "\r");//æå¼ä¸²å£æ¶å
è®¾å¼ |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (serialPortDevice.Communicator.Buffers.Count > 0) |
| | | { |
| | | string? receiveData = serialPortDevice.Communicator.ToString(Encoding.Default); |
| | | if (!string.IsNullOrEmpty(receiveData)) |
| | | { |
| | | Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + receiveData); |
| | | |
| | | if (item.DeviceProParamName == CommandType.Set.ToString()) |
| | | { |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandResult) && x.ProtocolDetailType == nameof(CommandResult.SetOK)); |
| | | //parseok |
| | | if (deviceProtocolDetail != null && receiveData.Contains(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue)) |
| | | { |
| | | item.DeviceProParamName = CommandType.Get.ToString(); |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | else if (item.DeviceProParamName == CommandType.Get.ToString()) |
| | | { |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = serialPortDevice.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CommandResult) && x.ProtocolDetailType == nameof(CommandResult.GetOK)); |
| | | //03æå |
| | | |
| | | if (deviceProtocolDetail != null && receiveData.Contains(item.DeviceChildCode + deviceProtocolDetail.ProtocalDetailValue)) |
| | | { |
| | | ////è¿éæåä¹åï¼è¦åå¨å°çDt_TorqueOpï¼åä»»å¡å·ï¼ç»ï¼å¼ï¼ |
| | | //string group = ""; |
| | | //if (group == "çµæ°") |
| | | //{ |
| | | // var putake = _putakeRepository.QueryData(x => x.Pustatus == 2 && x.Grouptype == group).OrderByDescending(x => x.Dispatchtime).FirstOrDefault();//æ¯æ¬¡é½æ¿ææ©ç飿¡ |
| | | // var punjid = putake.ID; |
| | | // var Nj = new Dt_TorqueOp() |
| | | // { |
| | | // TakeId = putake.Njtakeid, |
| | | // GroupOp = group, |
| | | // //ProcessSte= processList |
| | | // TorqueSize = receiveData |
| | | |
| | | // }; |
| | | // _orqueOpRepository.AddData(Nj); |
| | | |
| | | //} |
| | | //if (group == "æºæ¢°") |
| | | //{ |
| | | |
| | | //} |
| | | //if (group == "å°æ²") |
| | | |
| | | |
| | | 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(); |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | switch (commandType) |
| | | { |
| | | case CommandType.Get: |
| | | serialPort.Write(commandGet); |
| | | break; |
| | | case CommandType.Set: |
| | | serialPort.Write(commandSet); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) { } return Task.CompletedTask; |
| | | } |
| | | private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) |
| | | { |
| | | byte[] buffers = new byte[1024]; |
| | | while (serialPort.BytesToRead > 0) |
| | | catch (Exception ex) |
| | | { |
| | | serialPort.Read(buffers, 0, serialPort.BytesToRead > buffers.Length ? buffers.Length : serialPort.BytesToRead); |
| | | string data = Encoding.Default.GetString(buffers); |
| | | if (data.Contains(setOK) && commandType == CommandType.Set) |
| | | { |
| | | commandType = CommandType.Get; |
| | | } |
| | | else if (data.Contains(getOK) && commandType == CommandType.Get) |
| | | { |
| | | commandType = CommandType.Set; |
| | | } |
| | | WriteError("CommonConveyorLineJob", "test", ex); |
| | | } |
| | | WriteDebug("CommonConveyorLineJob", "test"); |
| | | return Task.CompletedTask; |
| | | } |
| | | } |
| | | } |