#include "stdafx.h" #include "SensorEncoderController.h" #include "ICommunicateEntity.h" using namespace DIOS::Dev::Detail::MachineryECOM; SensorEncoderController::SensorEncoderController() :m_communicate(nullptr), m_id_axis_a(0), m_id_axis_b(0), m_id_axis_z(0) { } SensorEncoderController::~SensorEncoderController() { } std::string SensorEncoderController::CLASSID() { return "78B76591-E8B3-4058-9353-D46D4700C6F5"; } void SensorEncoderController::Initialize(const std::string &name) { SetName(name); } void SensorEncoderController::OnCommunicationEstablished(ICommunicateEntity *communicate) { m_communicate = communicate; } int SensorEncoderController::GetCurrentEncoderValue() { if (m_communicateInterfaceID < 0 || !m_communicate) { return INVALID_ENCODER_VALUE; } int retry = 0; SEC_PARAM param; while (retry++ < 5) { if (m_communicate->SEC_Ctrl(OP_READ, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_NONE, param) >= 0) { if (param.encoder_value.encoder_value_int != 0) { return param.encoder_value.encoder_value_int; } } } return INVALID_ENCODER_VALUE; } void SensorEncoderController::LoadAxisInterfaceID(int id_axis_a, int id_axis_b, int id_axis_z) { m_id_axis_a = id_axis_a; m_id_axis_b = id_axis_b; m_id_axis_z = id_axis_z; } void SensorEncoderController::BindABAxis() { if (!m_communicate) { return; } SEC_PARAM param; param.a_axis_bind_id = (unsigned char)m_id_axis_a; param.b_axis_bind_id = (unsigned char)m_id_axis_b; m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_DELTE, param); m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_A_B_AXIS_BIND, param); } void SensorEncoderController::BindZAxis() { SEC_PARAM param; param.use_ad_assistent = 0; param.z_axis_bind_id = (unsigned char)m_id_axis_z; m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_Z_AXIS_BIND, param); } void SensorEncoderController::UnBindZAxis() { SEC_PARAM param; m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_Z_AXIS_BIND_CANCEL, param); } void SensorEncoderController::ActiveAutoNotifyWhenZClear(bool active) { SEC_PARAM param; param.z_axis_clear_notify_switch = active ? SEC_Z_NOTIFY_SW_ON : SEC_Z_NOTIFY_SW_OFF; m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_Z_AXIS_CLEAR_NOTIFY, param); } void SensorEncoderController::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 SensorEncoderController::ActiveRotateTrigger(int triggerID) { SEC_PARAM param; param.associate_id = (unsigned char)triggerID; m_communicate->SEC_Ctrl(OP_SET, (SEC_ID)m_communicateInterfaceID, SEC_ATTR_ASSOCIATE_CH2_SET, param); } void SensorEncoderController::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 SensorEncoderController::SetRotateTrigger(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_CH2_TABLE_SET, param); } void SensorEncoderController::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); }