123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include "stdafx.h"
- #include "SensorEncoderCArmYiDongController.h"
- #include "DiosBoardCtrlParams.h"
- #include "ICommunicateEntity.h"
- using namespace DIOS::Dev::Detail::MachineryECOM;
- SensorEncoderCArmYiDongController::SensorEncoderCArmYiDongController()
- :m_communicate(nullptr)
- {
- }
- SensorEncoderCArmYiDongController::~SensorEncoderCArmYiDongController()
- {
- }
- std::string SensorEncoderCArmYiDongController::CLASSID()
- {
- return "DA9E644D-CB4D-4E87-BB71-86E8FC4265BA";
- }
- void SensorEncoderCArmYiDongController::Initialize(const std::string &name)
- {
- SetName(name);
- }
- void SensorEncoderCArmYiDongController::OnCommunicationEstablished(ICommunicateEntity *communicate)
- {
- m_communicate = communicate;
- }
- int SensorEncoderCArmYiDongController::GetCurrentEncoderValue()
- {
- if (/*m_communicateInterfaceID < 0 || */!m_communicate)
- {
- return INVALID_ENCODER_VALUE;
- }
- int retry = 0;
- CAN_PARAM param;
- if (MakeSensorValueReadCanPacket(¶m))
- {
- while (retry++ < 5)
- {
- if (m_communicate->CAN_Ctrl(OP_READ, (CAN_ID)m_functionIds[ID_CAN], CAN_ATTR_NONE, param))
- {
- return ParseSensorValueFromCanPacket(¶m);
- }
- }
- }
- return INVALID_ENCODER_VALUE;
- }
- void SensorEncoderCArmYiDongController::LoadAxisInterfaceID(int id_axis_a, int id_axis_b, int id_axis_z)
- {
- }
- void SensorEncoderCArmYiDongController::BindABAxis()
- {
- }
- void SensorEncoderCArmYiDongController::BindZAxis()
- {
- }
- void SensorEncoderCArmYiDongController::UnBindZAxis()
- {
- }
- void SensorEncoderCArmYiDongController::ActiveAutoNotifyWhenZClear(bool active)
- {
- }
- void SensorEncoderCArmYiDongController::ActiveExposureTrigger(int triggerID)
- {
- SEC_PARAM param;
- param.associate_id = (unsigned char)triggerID;
- m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_SET, param);
- }
- void SensorEncoderCArmYiDongController::ActiveRotateTrigger(int triggerID)
- {
- }
- void SensorEncoderCArmYiDongController::SetExposureTrigger(int encoderValue)
- {
- SEC_PARAM param;
- param.associate_value.associate_value_int = encoderValue;
- m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_TABLE_SET, param);
- }
- void SensorEncoderCArmYiDongController::SetRotateTrigger(int encoderValue)
- {
- }
- void SensorEncoderCArmYiDongController::ClearTrigger()
- {
- SEC_PARAM param;
- m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH1_TABLE_CLEAR, param);
- m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH2_TABLE_CLEAR, param);
- }
- bool SensorEncoderCArmYiDongController::MakeSensorValueReadCanPacket(CAN_PARAM *canParm)
- {
- canParm->can_dlc = 0x8;
- canParm->can_stdid = (unsigned short)m_canSequence;
- canParm->candata.push_back(0x40);
- canParm->candata.push_back(0x04);
- canParm->candata.push_back(0x60);
- canParm->candata.push_back(0x00);
- canParm->candata.push_back(0x00);
- canParm->candata.push_back(0x00);
- canParm->candata.push_back(0x00);
- canParm->candata.push_back(0x00);
- return true;
- }
- union _canSensorValue
- {
- int encoder_value_int;
- struct _stSensorValue
- {
- unsigned char encoder_lowbyte_0;
- unsigned char encoder_lowbyte_1;
- unsigned char encoder_highbyte_0;
- unsigned char encoder_highbyte_1;
- }encoder_value_byte;
- };
- int SensorEncoderCArmYiDongController::ParseSensorValueFromCanPacket(CAN_PARAM *canParm)
- {
- int ret = 0;
- if (canParm->candata.size() == 8
- && canParm->candata[1] == 0x04
- && canParm->candata[2] == 0x60
- )
- {
- _canSensorValue value;
- value.encoder_value_int = 0;
- value.encoder_value_byte.encoder_lowbyte_0 = canParm->candata[4];
- value.encoder_value_byte.encoder_lowbyte_1 = canParm->candata[5];
- value.encoder_value_byte.encoder_highbyte_0 = canParm->candata[6];
- value.encoder_value_byte.encoder_highbyte_1 = canParm->candata[7];
- ret = value.encoder_value_int;
- }
- return ret;
- }
|