obs.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * obs.c
  3. *
  4. * Created on: 2019��6��20��
  5. * Author: Eric
  6. */
  7. #include "obs.h"
  8. #include "stdint.h"
  9. #include "env.h"
  10. #define DBG_SECTION_NAME "obs"
  11. #define DBG_LEVEL DBG_INFO
  12. #include <rtdbg.h>
  13. uint8_t _getObsStatus_BF(void);
  14. CheckObs_Fn_t ObsGetStatus;
  15. uint8_t TrayObsNearF = 0;
  16. uint8_t TrayObsNearB = 0;
  17. uint8_t ObsInit(void) {
  18. ObsGetStatus = _getObsStatus_BF;
  19. return True;
  20. }
  21. uint8_t _getObsStatus_BF(void)
  22. {
  23. //LogNoRepeatVar
  24. //;
  25. if(S.Status == STATUS_REMOTE_MANUAL){
  26. return OBS_STATUS_NULL;
  27. }
  28. switch(S.Direction){
  29. case DIRECTION_FORWARD:
  30. //避障停止
  31. if((S.LiftStatus == LIFT_STATUS_TOP && CARGO_IS_IN_FORWARD_STOP) || !I.OBS4In1){
  32. LOG_I("OBS_FORWARD");
  33. return OBS_STATUS_NEAR;
  34. }
  35. //托盘减速
  36. if(S.LiftStatus == LIFT_STATUS_TOP && (!I.OBS3In2 || !I.OBS4In2) && S.CargoStatus == CARGO_STATUS_CENTER){
  37. TrayObsNearF = OBS_STATUS_FAR;
  38. }
  39. //避障减速
  40. if(TrayObsNearF == OBS_STATUS_FAR || !I.OBS3In1){
  41. LOG_D("OBS_FORWARD_LowSpeed");
  42. return OBS_STATUS_FAR;
  43. }
  44. break;
  45. case DIRECTION_BACKWARD:
  46. //避障停止
  47. if((S.LiftStatus == LIFT_STATUS_TOP && CARGO_IS_IN_BACKWARD_STOP) || !I.OBS2In1){
  48. LOG_I("OBS_BACKWARD");
  49. // return OBS_STATUS_NEAR;
  50. //专为唐山修改,2排11列与3排11列不起作用
  51. if(S.Point != Set.TsjPoint && S.Point != (Set.TsjPoint - 1000)) //非提升机码
  52. {
  53. return OBS_STATUS_NEAR;
  54. }
  55. }
  56. //托盘减速
  57. if(S.LiftStatus == LIFT_STATUS_TOP && (!I.OBS1In2 || !I.OBS2In2) && S.CargoStatus == CARGO_STATUS_CENTER){
  58. TrayObsNearB = OBS_STATUS_FAR;
  59. }
  60. //避障减速
  61. if(TrayObsNearB == OBS_STATUS_FAR || !I.OBS1In1){
  62. LOG_D("OBS_BACKWARD_LowSpeed");
  63. return OBS_STATUS_FAR;
  64. }
  65. break;
  66. case DIRECTION_LEFT:
  67. //避障停止
  68. if(!I.OBS4In3){
  69. LOG_I("OBS_LEFT");
  70. return OBS_STATUS_NEAR;
  71. }
  72. //避障减速
  73. if(!I.OBS2In3){
  74. LOG_D("OBS_LEFT_LowSpeed");
  75. return OBS_STATUS_FAR;
  76. }
  77. break;
  78. case DIRECTION_RIGHT:
  79. // 避障停止
  80. if(!I.OBS3In3){
  81. LOG_I("OBS_RIGHT");
  82. return OBS_STATUS_NEAR;
  83. }
  84. //避障减速
  85. if(!I.OBS1In3){
  86. LOG_D("OBS_RIGHT_LowSpeed");
  87. return OBS_STATUS_FAR;
  88. }
  89. break;
  90. default:
  91. TrayObsNearF = OBS_STATUS_NEAR;
  92. TrayObsNearB = OBS_STATUS_NEAR;
  93. }
  94. return OBS_STATUS_NULL;
  95. }