WCSRunJobs.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Quartz;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using WCS.Data;
  6. using WCS.PLC;
  7. using WCS.PLC.Model.Equipment;
  8. using WCS.Workflow;
  9. namespace WCS.Service.Quartz
  10. {
  11. //原子操作
  12. [DisallowConcurrentExecution]
  13. public class WCSRunJobs : IJob
  14. {
  15. public Task Execute(IJobExecutionContext context)
  16. {
  17. ThreadHelper.TaskThread(WCSWorkflow.RefreshData);
  18. ThreadHelper.TaskThread(WCSWorkflow.UpdateTaskCurAddress);
  19. ThreadHelper.TaskThread(WCSWorkflow.UpdateExceptionTask);
  20. //查询最新日志
  21. ThreadHelper.TaskThread(WCSWorkflow.RefreshLogData);
  22. //更新任务进程
  23. ThreadHelper.TaskThread(BaseWorkflow.PutTaskStep);
  24. //上传LED设备异常任务
  25. ThreadHelper.TaskThread(BaseWorkflow.UpLoadExcToWMS);
  26. //上传设PLC备信息
  27. ThreadHelper.TaskThread(BaseWorkflow.PutDevInfoToWMS);
  28. //更新PLC最后完成时间和各个设备任务数量
  29. ThreadHelper.TaskThread(BaseWorkflow.UpdateUnexecuteTask);
  30. //执行WCS逻辑
  31. WCS_PLCList.ExecuteWcs_Workflow();
  32. //执行Agv逻辑
  33. ThreadHelper.TaskThread(AgvWorkflow.AgvRun);
  34. ThreadHelper.TaskThread(AgvWorkflow.AgvUpdateStatus);
  35. ThreadHelper.TaskThread(WriteDataToLog);
  36. return Task.FromResult(string.Empty);
  37. }
  38. private static int _writeDataToLog = 0;
  39. public void WriteDataToLog()
  40. {
  41. if (Interlocked.Exchange(ref _writeDataToLog, 1) == 0)
  42. {
  43. Thread.Sleep(1000);
  44. var list = new List<EQUIPMENTINFO>();
  45. foreach (var item in Current.PlcSet)
  46. {
  47. foreach (var equipmentInfo in item.WCS_EquipmentInfoSet)
  48. {
  49. list.Add(new EQUIPMENTINFO()
  50. {
  51. EQU_NO = equipmentInfo.Equ_No,
  52. EQU_PLCNAME = equipmentInfo.Equ_PlcName,
  53. //EQU_BARCODE = equipmentInfo.EQU_BARCODE,
  54. EQU_ALARAMSMSG = equipmentInfo.Equ_AlaramsMsg,
  55. EQU_NOTES = equipmentInfo.Equ_Notes,
  56. EQU_CONVSIGNALJSON =
  57. (equipmentInfo.Equ_Type == EquipmentType.conveyor.ToString()) ? equipmentInfo.EquSignal_Conv.ToJson() :
  58. (equipmentInfo.Equ_Type == EquipmentType.srm.ToString()) ? equipmentInfo.EquSignal_Srm.ToJson() : equipmentInfo.EquSignal_Rgv.ToJson(),
  59. EQU_BARCODE = equipmentInfo.EquSignal_Conv == null ? "" : equipmentInfo.EquSignal_Conv.BarCodeStr
  60. });
  61. }
  62. }
  63. Log4netHelper.Logger_ProductLog.InfoFormat(list.ToJson());
  64. Interlocked.Exchange(ref _writeDataToLog, 0);
  65. }
  66. }
  67. }
  68. public class EQUIPMENTINFO
  69. {
  70. /// <summary>
  71. /// 设备名称
  72. /// </summary>
  73. public string EQU_NO { get; set; }
  74. /// <summary>
  75. /// PLC名称
  76. /// </summary>
  77. public string EQU_PLCNAME { get; set; }
  78. /// <summary>
  79. /// 读取到的条码
  80. /// </summary>
  81. public string EQU_BARCODE { get; set; }
  82. /// <summary>
  83. /// 报警信息
  84. /// </summary>
  85. public string EQU_ALARAMSMSG { get; set; }
  86. public string EQU_NOTES { get; set; }
  87. /// <summary>
  88. /// 设备信号集合
  89. /// </summary>
  90. public string EQU_CONVSIGNALJSON { get; set; }
  91. }
  92. }