AsyncBehaviorRollerAllowIn_IO.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Pms.DataLibrary.Order;
  2. using ProjectManagementSystem.Common.Config;
  3. using ProjectManagementSystem.Common.WebApi;
  4. using ProjectManagementSystem.Common.Extenions;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using ProjectManagementSystem.Common.Core;
  11. namespace ProjectManagementSystem.TaskBookEvent
  12. {
  13. public class AsyncBehaviorRollerAllowIn_IO : AsyncBehavior
  14. {
  15. public string AllowInColumnName { get; set; } = "AGV滚筒允许进入";
  16. public bool IsLogicBitsOn(int agvId, int bitIndex)
  17. {
  18. var agvData = PmsApi.GetCarrier(agvId);
  19. if (agvData == null) return false;
  20. //判断AGV滚筒是否已经转动
  21. return agvData.LogicBits.GetBitVaule(bitIndex);
  22. }
  23. public override bool CustomOperator(TaskData taskData, StepData stepInfo)
  24. {
  25. //var allowIn2 = (stepInfo.Param1 & 0x5555) > 0;
  26. //Log(taskData, stepInfo, $"允许进入 {stepInfo.Param1} {allowIn2}");
  27. //return false;
  28. var routeConfig = ExcelConfig.Instance.GetRouteConfig(stepInfo.WareHouseID);
  29. if (routeConfig == null)
  30. {
  31. Log(taskData, stepInfo, "查找库位配置信息失败");
  32. return false;
  33. }
  34. if (routeConfig.IOTransID <= 0)
  35. {
  36. Log(taskData, stepInfo, "获取库位对接盒ID失败");
  37. return false;
  38. }
  39. int id = routeConfig.IOTransID;
  40. if (!DeviceControl.Instance.Communication.InfoIODictionary.ContainsKey(id))
  41. {
  42. Log(taskData, stepInfo, $"获取库位对接盒{id},没有此盒子数据,检查盒子是否连接网络");
  43. return false;
  44. }
  45. var infoIO = DeviceControl.Instance.Communication.InfoIODictionary[id];
  46. if (!infoIO.DataValid)
  47. {
  48. Log(taskData, stepInfo, $"获取库位对接盒{id},盒子已掉线!");
  49. return false;
  50. }
  51. bool allowIn = IsLogicBitsOn(taskData.Carrier, 7);
  52. if(stepInfo.AgvBehavior == 65350
  53. && stepInfo.Param1 > 0
  54. && allowIn)
  55. {
  56. //执行的是设备->滚筒的上料任务
  57. allowIn = (stepInfo.Param1 & 0x5555) > 0;
  58. }
  59. string allowInAddr = routeConfig.LocationCode.GetLocationMember(AllowInColumnName);
  60. DeviceControl.Instance.SetOutputIO(id, allowInAddr, allowIn);
  61. System.Threading.Thread.Sleep(100);
  62. var realValue = DeviceControl.Instance.GetOutputIO(id, allowInAddr);
  63. bool result = (allowIn == (realValue.Item1 && realValue.Item2));
  64. Log(taskData, stepInfo, $"ID{id} {AllowInColumnName} {allowInAddr}={allowIn} 写入{result.ToChineseString()}");
  65. return false;
  66. }
  67. }
  68. }