SensorEncoderCArmYiDongController.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #include "stdafx.h"
  2. #include "SensorEncoderCArmYiDongController.h"
  3. #include "DiosBoardCtrlParams.h"
  4. #include "ICommunicateEntity.h"
  5. using namespace DIOS::Dev::Detail::MachineryECOM;
  6. SensorEncoderCArmYiDongController::SensorEncoderCArmYiDongController()
  7. :m_communicate(nullptr)
  8. {
  9. }
  10. SensorEncoderCArmYiDongController::~SensorEncoderCArmYiDongController()
  11. {
  12. }
  13. std::string SensorEncoderCArmYiDongController::CLASSID()
  14. {
  15. return "DA9E644D-CB4D-4E87-BB71-86E8FC4265BA";
  16. }
  17. void SensorEncoderCArmYiDongController::Initialize(const std::string &name)
  18. {
  19. SetName(name);
  20. }
  21. void SensorEncoderCArmYiDongController::OnCommunicationEstablished(ICommunicateEntity *communicate)
  22. {
  23. m_communicate = communicate;
  24. }
  25. int SensorEncoderCArmYiDongController::GetCurrentEncoderValue()
  26. {
  27. if (/*m_communicateInterfaceID < 0 || */!m_communicate)
  28. {
  29. return INVALID_ENCODER_VALUE;
  30. }
  31. int retry = 0;
  32. CAN_PARAM param;
  33. if (MakeSensorValueReadCanPacket(&param))
  34. {
  35. while (retry++ < 5)
  36. {
  37. if (m_communicate->CAN_Ctrl(OP_READ, (CAN_ID)m_functionIds[ID_CAN], CAN_ATTR_NONE, param))
  38. {
  39. return ParseSensorValueFromCanPacket(&param);
  40. }
  41. }
  42. }
  43. return INVALID_ENCODER_VALUE;
  44. }
  45. void SensorEncoderCArmYiDongController::LoadAxisInterfaceID(int id_axis_a, int id_axis_b, int id_axis_z)
  46. {
  47. }
  48. void SensorEncoderCArmYiDongController::BindABAxis()
  49. {
  50. }
  51. void SensorEncoderCArmYiDongController::BindZAxis()
  52. {
  53. }
  54. void SensorEncoderCArmYiDongController::UnBindZAxis()
  55. {
  56. }
  57. void SensorEncoderCArmYiDongController::ActiveAutoNotifyWhenZClear(bool active)
  58. {
  59. }
  60. void SensorEncoderCArmYiDongController::ActiveExposureTrigger(int triggerID)
  61. {
  62. SEC_PARAM param;
  63. param.associate_id = (unsigned char)triggerID;
  64. m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_SET, param);
  65. }
  66. void SensorEncoderCArmYiDongController::ActiveRotateTrigger(int triggerID)
  67. {
  68. }
  69. void SensorEncoderCArmYiDongController::SetExposureTrigger(int encoderValue)
  70. {
  71. SEC_PARAM param;
  72. param.associate_value.associate_value_int = encoderValue;
  73. m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_TABLE_SET, param);
  74. }
  75. void SensorEncoderCArmYiDongController::SetRotateTrigger(int encoderValue)
  76. {
  77. }
  78. void SensorEncoderCArmYiDongController::ClearTrigger()
  79. {
  80. SEC_PARAM param;
  81. m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_TABLE_CLEAR, param);
  82. m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH2_TABLE_CLEAR, param);
  83. }
  84. bool SensorEncoderCArmYiDongController::MakeSensorValueReadCanPacket(CAN_PARAM *canParm)
  85. {
  86. canParm->can_dlc = 0x8;
  87. canParm->can_stdid = (unsigned short)m_canSequence;
  88. canParm->candata.push_back(0x40);
  89. canParm->candata.push_back(0x04);
  90. canParm->candata.push_back(0x60);
  91. canParm->candata.push_back(0x00);
  92. canParm->candata.push_back(0x00);
  93. canParm->candata.push_back(0x00);
  94. canParm->candata.push_back(0x00);
  95. canParm->candata.push_back(0x00);
  96. return true;
  97. }
  98. union _canSensorValue
  99. {
  100. int encoder_value_int;
  101. struct _stSensorValue
  102. {
  103. unsigned char encoder_lowbyte_0;
  104. unsigned char encoder_lowbyte_1;
  105. unsigned char encoder_highbyte_0;
  106. unsigned char encoder_highbyte_1;
  107. }encoder_value_byte;
  108. };
  109. int SensorEncoderCArmYiDongController::ParseSensorValueFromCanPacket(CAN_PARAM *canParm)
  110. {
  111. int ret = 0;
  112. if (canParm->candata.size() == 8
  113. && canParm->candata[1] == 0x04
  114. && canParm->candata[2] == 0x60
  115. )
  116. {
  117. _canSensorValue value;
  118. value.encoder_value_int = 0;
  119. value.encoder_value_byte.encoder_lowbyte_0 = canParm->candata[4];
  120. value.encoder_value_byte.encoder_lowbyte_1 = canParm->candata[5];
  121. value.encoder_value_byte.encoder_highbyte_0 = canParm->candata[6];
  122. value.encoder_value_byte.encoder_highbyte_1 = canParm->candata[7];
  123. ret = value.encoder_value_int;
  124. }
  125. return ret;
  126. }