Entity_PACK线.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using DbCommon.BusinessCore.BaseCore;
  2. using ProjectManagementSystem.Common.Core;
  3. using ProjectManagementSystem.Common.Logger;
  4. using ProjectManagementSystem.Device.CommandCallback;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace ProjectManagementSystem.DispatchPack.Entity
  11. {
  12. public class Entity_PACK线 : EntityBase
  13. {
  14. private StationInfoManager m_stationInfoManager = new StationInfoManager();
  15. public override void CustomUpdate()
  16. {
  17. DateTime nowDateTime = DateTime.Now;
  18. var dataList = m_stationInfoManager.GetList();
  19. int stopCount = StationInfoList.Count(d => d.Online && d.AgvStausValue == (byte)EnumInfoAgvStatus.停止点);
  20. if (stopCount == StationInfoList.Count)
  21. {
  22. bool needUpdate = false;
  23. //工位AGV全部到位
  24. for (int i = 0; i < StationInfoList.Count; i++)
  25. {
  26. var info = StationInfoList[i];
  27. var data = dataList.Find(d => d.Id == info.Id);
  28. if (data == null)
  29. {
  30. continue;
  31. }
  32. if (data.CountInterval > 0
  33. && data.Command == 0)
  34. {
  35. data.Command = 10;
  36. data.CountStartTime = nowDateTime;
  37. info.Command = data.Command;
  38. info.CountStartTime = data.CountStartTime;
  39. CLog.Instance.TaskLog.WriteInfo($"放行倒计时,地标:{info.Mark},路线:{info.ReleaseRoute},AGV:{info.AgvId},{info.Name},0x{info.AgvStausValue:X2}");
  40. needUpdate = true;
  41. }
  42. }
  43. if(needUpdate)
  44. {
  45. m_stationInfoManager.UpdateCountStart(StationInfoList);
  46. }
  47. }
  48. for (int i = 0; i < StationInfoList.Count; i++)
  49. {
  50. var info = StationInfoList[i];
  51. var data = dataList.Find(d => d.Id == info.Id);
  52. if (data == null)
  53. {
  54. continue;
  55. }
  56. if (data.Command == 10)
  57. {
  58. DateTime alarmTime = data.CountStartTime.AddSeconds(data.CountInterval - data.CountAlarm);
  59. DateTime releaseTime = data.CountStartTime.AddSeconds(data.CountInterval);
  60. info.CountSec = (int)(releaseTime - nowDateTime).TotalSeconds;
  61. if (info.CountSec < 0) info.CountSec = 0;
  62. if (nowDateTime > alarmTime)
  63. {
  64. //发送放行报警信息
  65. DeviceControl.Instance.RailAgv_ReleaseAlarm(info.AgvId, info.CountSec);
  66. CLog.Instance.TaskLog.WriteInfo($"放行报警,地标:{info.Mark},路线:{info.ReleaseRoute},AGV:{info.AgvId},{info.Name},0x{info.AgvStausValue:X2}");
  67. }
  68. if (nowDateTime > releaseTime)
  69. {
  70. data.Command = 11;
  71. m_stationInfoManager.UpdateCommand(data);
  72. }
  73. }
  74. }
  75. for (int i = 0; i < StationInfoList.Count; i++)
  76. {
  77. var info = StationInfoList[i];
  78. int releaseCommand = 0;
  79. var data = dataList.Find(d => d.Id == info.Id);
  80. if (data != null)
  81. {
  82. releaseCommand = data.Command;
  83. info.Command = data.Command;
  84. }
  85. if (info.Online
  86. && !info.Traffic)
  87. {
  88. switch (releaseCommand)
  89. {
  90. case 1:
  91. case 11:
  92. if (data.HasCar
  93. && info.HasCar
  94. && (info.AgvStausValue == (byte)EnumInfoAgvStatus.停止点
  95. || info.AgvStausValue == (byte)EnumInfoAgvStatus.结束点
  96. || info.AgvStausValue == (byte)EnumInfoAgvStatus.充电中)
  97. && info.ReleaseCold)
  98. {
  99. DeviceControl.Instance.ReleaseAgvOnStop(info.Mark, info.ReleaseRoute, info.AgvId);
  100. info.LastReleaseTime = DateTime.Now.Ticks;
  101. bool commandChanged = releaseCommand != info.LastCommand;
  102. string realeseTag = releaseCommand == 11 ? "工位预约放行" : "工位放行";
  103. CLog.Instance.TaskLog.WriteInfo($"{realeseTag}{(commandChanged ? "(触发)" : "")},地标:{info.Mark},路线:{info.ReleaseRoute},AGV:{info.AgvId},{info.Name},0x{info.AgvStausValue:X2}");
  104. info.LastCommand = releaseCommand;
  105. }
  106. break;
  107. //case (int)DBControlValues.NGRelease:
  108. // if (info.HasCar)
  109. // {
  110. // DispatcherTool.ReleaseAgvOnStop(info.Mark, info.ReleaseNGRoute);
  111. // }
  112. // break;
  113. //case (int)DBControlValues.StopImmediate:
  114. // DispatcherTool.ControlAGVBy1071(info.AgvId, 1);//暂停
  115. // break;
  116. //case (int)DBControlValues.StopRelease:
  117. // DispatcherTool.ControlAGVBy1071(info.AgvId, 0);//启动
  118. // break;
  119. default:
  120. break;
  121. }
  122. }
  123. //AGV放走后,复位Command
  124. if (data.HasCar == false
  125. && (releaseCommand == 1 || releaseCommand == 11))
  126. {
  127. info.LastCommand = 0;
  128. data.Command = 0;
  129. bool result = m_stationInfoManager.UpdateCommand(data);
  130. CLog.Instance.TaskLog.WriteInfo($"放行复位,地标:{info.Mark},路线:{info.ReleaseRoute},AGV:{info.AgvId},{info.Name},0x{info.AgvStausValue:X2}");
  131. }
  132. }
  133. }
  134. }
  135. }