123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- #include "stdafx.h"
- #include "CArmMachineryManager.h"
- #include "CArmComponentNameDef.h"
- #include "IMechnicalComponentFactory.h"
- #include "ServoDriveManager.h"
- #include "ICircularController.h"
- #include "ISwingController.h"
- #include "IExposureController.h"
- #include "ICollimatorController.h"
- #include "ISensorEncoderController.h"
- #include "..\\ServoDriveNameDef.h"
- #include "ConfigurerMotion.h"
- #include "ICommunicateEntity.h"
- #include "ILandmarkController.h"
- #include "FluoroSwitchController.h"
- using namespace DIOS::Dev::Detail::MachineryECOM;
- CArmMachineryManager *CArmMachineryManager::m_instance = nullptr;
- CArmMachineryManager::CArmMachineryManager()
- :m_communicate(nullptr),
- m_mechnicalFactory(nullptr),
- m_cirular(nullptr),
- m_swing(nullptr),
- m_exposure(nullptr),
- m_collimator(nullptr),
- m_encoderCircular(nullptr),
- m_encoderSwing(nullptr),
- m_landmark(nullptr),
- m_fluoroSwitch(nullptr)
- {
- }
- CArmMachineryManager::~CArmMachineryManager()
- {
- }
- CArmMachineryManager *CArmMachineryManager::Instance()
- {
- if (m_instance == nullptr)
- {
- m_instance = new CArmMachineryManager();
- }
- return m_instance;
- }
- void CArmMachineryManager::Initialize(IMechnicalComponentFactory *factory)
- {
- m_mechnicalFactory = factory;
- CreateComponents();
- DistributeServoDrive();
- m_swing->AttachCommunicateID(IOInterfaceMapper::ID_TUBE_ANGLE_PULSE);
- m_cirular->AttachCommunicateID(IOInterfaceMapper::ID_TUBE_HEIGHT_PULSE);
- m_encoderSwing->AttachCommunicateID(IOInterfaceMapper::ID_TUBE_ANGLE_ENCODER);
- m_encoderCircular->AttachCommunicateID(IOInterfaceMapper::ID_TUBE_HEIGHT_ENCODER);
- m_exposure->AttachCommunicateID(IOInterfaceMapper::ID_EXPOSURE_TRIGGER);
- m_collimator->AttachCommunicateID(IOInterfaceMapper::ID_CAN);
- m_fluoroSwitch->AttachCommunicateID(IOInterfaceMapper::ID_FLUORO_SWITCH_OUT);
- m_encoderSwing->LoadAxisInterfaceID(
- IOInterfaceMapper::ID_TUBE_ANGLE_ENCODER_AXIS_A,
- IOInterfaceMapper::ID_TUBE_ANGLE_ENCODER_AXIS_B,
- IOInterfaceMapper::ID_TUBE_ANGLE_ENCODER_AXIS_Z);
- m_encoderCircular->LoadAxisInterfaceID(
- IOInterfaceMapper::ID_TUBE_HEIGHT_ENCODER_AXIS_A,
- IOInterfaceMapper::ID_TUBE_HEIGHT_ENCODER_AXIS_B,
- IOInterfaceMapper::ID_TUBE_HEIGHT_ENCODER_AXIS_Z
- );
- LoadSwingCommunicateInterfaceIDs();
- LoadCircularCommunicateInterfaceIDs();
- LoadSwingEncoderCommunicateInterfaceIDs();
- LoadCircularEncoderCommunicateInterfaceIDs();
- LoadExposureCommunicateInterfaceIDs();
- LoadLandmarkCommunicateInterfaceIDs();
- LoadOutputSignalInterfaceIDs();
- }
- void CArmMachineryManager::OnCommunicationEstablished(ICommunicateEntity *communicate)
- {
- m_communicate = communicate;
- if(gcommLog) gcommLog->Info("[CArmMachineryManager][OnCommunicationEstablished]");
- SetFilterTimeOnComponents();
- SetupAutouploadOnComponents();
- SetupPFSTrigger();
- m_cirular->OnCommunicationEstablished(m_communicate);
- m_swing->OnCommunicationEstablished(m_communicate);
- m_encoderCircular->OnCommunicationEstablished(m_communicate);
- m_encoderCircular->BindABAxis();
- m_encoderSwing->OnCommunicationEstablished(m_communicate);
- m_encoderSwing->BindABAxis();
- m_exposure->OnCommunicationEstablished(m_communicate);
- m_collimator->OnCommunicationEstablished(m_communicate);
- m_landmark->OnCommunicationEstablished(m_communicate);
- m_fluoroSwitch->OnCommunicationEstablished(m_communicate);
- auto pulseonecircletubeAngle = ConfigurerMotion::GetPulseInOneCircleOfTubeAngleMotor();
- m_swing->SetPulseOneCircle((unsigned short)pulseonecircletubeAngle);
- auto pulseonecircletubeHeight = ConfigurerMotion::GetPulseInOneCircleOfTubeHeightMotor();
- m_cirular->SetPulseOneCircle((unsigned short)pulseonecircletubeHeight);
- auto dutyCycleoftubeangle = ConfigurerMotion::GetPulseDutyCycleOfTubeAngleMoror();
- m_swing->SetPulseDutyCycle(dutyCycleoftubeangle);
- auto dutyCycleoftubeHeight = ConfigurerMotion::GetPulseDutyCycleOfTubeHeightMotor();
- m_cirular->SetPulseDutyCycle(dutyCycleoftubeHeight);
- }
- void *CArmMachineryManager::Resove(const std::string &name)
- {
- if (name == CONTROLLER_CARM_TUBE_CIRCULAR)
- {
- return m_cirular;
- }
- else if (name == CONTROLLER_CARM_TUBE_SWING)
- {
- return m_swing;
- }
- else if (name == CONTROLLER_CARM_TUBE_CIRCULAR_ENCODER)
- {
- return m_encoderCircular;
- }
- else if (name == CONTROLLER_CARM_TUBE_SWING_ENCODER)
- {
- return m_encoderSwing;
- }
- else if (name == CONTROLLER_EXPOSURE)
- {
- return m_exposure;
- }
- else if (name == CONTROLLER_COLLIMATOR)
- {
- return m_collimator;
- }
- else if (name == CONTROLLER_LANDMARK)
- {
- return m_landmark;
- }
- else if (name == CONTROLLER_FLUOROSWITCH)
- {
- return m_fluoroSwitch;
- }
- else
- {
- return nullptr;
- }
-
- }
- void CArmMachineryManager::CreateComponents()
- {
- m_cirular = (ICircularController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_CARM_TUBECIRCULAR, CONTROLLER_CARM_TUBE_CIRCULAR);
- m_swing = (ISwingController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_CARM_TUBESWING, CONTROLLER_CARM_TUBE_SWING);
- m_encoderCircular = (ISensorEncoderController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_ENCODER, CONTROLLER_CARM_TUBE_CIRCULAR_ENCODER);
- m_encoderSwing = (ISensorEncoderController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_ENCODER, CONTROLLER_CARM_TUBE_SWING_ENCODER);
- m_exposure = (IExposureController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_EXPOSURE, CONTROLLER_EXPOSURE);
- m_collimator = (ICollimatorController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_COLLIMATOR, CONTROLLER_COLLIMATOR);
- m_landmark = (ILandmarkController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_LANDMARK, CONTROLLER_LANDMARK);
- m_fluoroSwitch = (IOutputController*)m_mechnicalFactory->CreateController(COMPONENT_CONTROLLER_FLUOROSWITCH, CONTROLLER_FLUOROSWITCH);
- }
- void CArmMachineryManager::DistributeServoDrive()
- {
- auto servoDriveTubeCircular = ServoDriveManager::Instance()->Resove(SERVO_DRIVE_TUBE_CIRCULAR);
- if (servoDriveTubeCircular != nullptr)
- {
- m_cirular->AttachServoDrive(servoDriveTubeCircular);
- }
- auto servodriveTubeSwing = ServoDriveManager::Instance()->Resove(SERVO_DRIVE_TUBE_SWING);
- if (servodriveTubeSwing != nullptr)
- {
- m_swing->AttachServoDrive(servodriveTubeSwing);
- }
- }
- void CArmMachineryManager::LoadSwingCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_RS232] = IOInterfaceMapper::ID_RS232;
- interfaceIDs[ID_CAN] = IOInterfaceMapper::ID_CAN;
- interfaceIDs[ID_TUBE_ANGLE_DIRECTION] = IOInterfaceMapper::ID_TUBE_ANGLE_DIRECTION;
- interfaceIDs[ID_TUBE_ANGLE_PULSE] = IOInterfaceMapper::ID_TUBE_ANGLE_PULSE;
- interfaceIDs[ID_TUBE_ANGLE_SERVO_ON] = IOInterfaceMapper::ID_TUBE_ANGLE_SERVO_ON;
- m_swing->LoadCommunicationInterfaceIDs(interfaceIDs);
- }
- void CArmMachineryManager::LoadCircularCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_RS232] = IOInterfaceMapper::ID_RS232;
- interfaceIDs[ID_CAN] = IOInterfaceMapper::ID_CAN;
- interfaceIDs[ID_TUBE_HEIGHT_DIRECTION] = IOInterfaceMapper::ID_TUBE_HEIGHT_DIRECTION;
- interfaceIDs[ID_TUBE_HEIGHT_PULSE] = IOInterfaceMapper::ID_TUBE_HEIGHT_PULSE;
- interfaceIDs[ID_TUBE_HEIGHT_SERVO_ON] = IOInterfaceMapper::ID_TUBE_HEIGHT_SERVO_ON;
- m_cirular->LoadCommunicationInterfaceIDs(interfaceIDs);
- }
- void CArmMachineryManager::LoadSwingEncoderCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_TUBE_ANGLE_ENCODER] = IOInterfaceMapper::ID_TUBE_ANGLE_ENCODER;
- interfaceIDs[ID_CAN] = IOInterfaceMapper::ID_CAN;
- m_encoderSwing->LoadCommunicationInterfaceIDs(interfaceIDs);
- m_encoderSwing->DistributeCanSequence(IOInterfaceMapper::ID_CAN_STDID_TUBE_SWING_ENCODER);
- }
- void CArmMachineryManager::LoadCircularEncoderCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_TUBE_HEIGHT_ENCODER] = IOInterfaceMapper::ID_TUBE_HEIGHT_ENCODER;
- interfaceIDs[ID_CAN] = IOInterfaceMapper::ID_CAN;
- m_encoderCircular->LoadCommunicationInterfaceIDs(interfaceIDs);
- m_encoderCircular->DistributeCanSequence(IOInterfaceMapper::ID_CAN_STDID_TUBE_CIRCULAR_ENCODER);
- }
- void CArmMachineryManager::LoadExposureCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_XRAYON_NOTIFY] = IOInterfaceMapper::ID_XRAYON_NOTIFY;
- m_exposure->LoadCommunicationInterfaceIDs(interfaceIDs);
- }
- void CArmMachineryManager::LoadLandmarkCommunicateInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_TUBE_ANGLE_LOW_LIMIT] = IOInterfaceMapper::ID_TUBE_ANGLE_LOW_LIMIT;
- interfaceIDs[ID_TUBE_ANGLE_HIGH_LIMIT] = IOInterfaceMapper::ID_TUBE_ANGLE_HIGH_LIMIT;
- interfaceIDs[ID_TUBE_HEIGHT_LOW_LIMIT] = IOInterfaceMapper::ID_TUBE_HEIGHT_LOW_LIMIT;
- interfaceIDs[ID_TUBE_HEIGHT_HIGH_LIMIT] = IOInterfaceMapper::ID_TUBE_HEIGHT_HIGH_LIMIT;
- m_landmark->LoadCommunicationInterfaceIDs(interfaceIDs);
- }
- void CArmMachineryManager::LoadOutputSignalInterfaceIDs()
- {
- std::map<string, int> interfaceIDs;
- interfaceIDs[ID_FLUORO_SWITCH_OUT] = IOInterfaceMapper::ID_FLUORO_SWITCH_OUT;
- m_fluoroSwitch->LoadCommunicationInterfaceIDs(interfaceIDs);
- }
- void CArmMachineryManager::SetFilterTimeOnComponents()
- {
- auto hswfiltertime = ConfigurerMotion::GetFilterTimeHandSwitchDISignal();
- auto lswfiltertime = ConfigurerMotion::GetFilterTimeLimitSwitchDISignal();
- GPIO_DI_PARAM param;
- param.autoupload_switch = (unsigned char)GAUTO_DI_UPLOAD_ON;
- param.input_mode = (unsigned char)GIM_DIGITAL;
- param.filter_time = (unsigned char)hswfiltertime;
- if (IOInterfaceMapper::ID_SYSTEM_RESET > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_SYSTEM_RESET_SWING > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET_SWING, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET_SWING, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_SYSTEM_RESET_CIRCULAR > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET_CIRCULAR, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_SYSTEM_RESET_CIRCULAR, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_1 > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_1, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_1, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_2 > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_2, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_CONTROLLER_DIRECTION_2, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_1 > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_1, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_1, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_2 > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_2, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_CONTROLLER_DIRECTION_2, DI_ATTR_SET_MODE, param);
- }
- if (IOInterfaceMapper::ID_CARM_SCANNING_SWITCH > 0)
- {
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_CARM_SCANNING_SWITCH, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_CARM_SCANNING_SWITCH, DI_ATTR_SET_MODE, param);
- }
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_HAND_SWITCH_GEAR_FIRST, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_HAND_SWITCH_GEAR_FIRST, DI_ATTR_SET_MODE, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_HAND_SWITCH_GEAR_SECOND, DI_ATTR_SET_AUTO_UPLOAD, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_HAND_SWITCH_GEAR_SECOND, DI_ATTR_SET_MODE, param);
- param.filter_time = (unsigned char)lswfiltertime;
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_HIGH_LIMIT, DI_ATTR_SET_MODE, param);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_HIGH_LIMIT, DI_ATTR_SET_MODE, param);
- }
- void CArmMachineryManager::SetupAutouploadOnComponents()
- {
- GPIO_DI_PARAM diparam;
- diparam.autoupload_switch = (unsigned char)GAUTO_DI_UPLOAD_ON;
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_LOW_LIMIT, DI_ATTR_SET_AUTO_UPLOAD, diparam);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_ANGLE_HIGH_LIMIT, DI_ATTR_SET_AUTO_UPLOAD, diparam);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_XRAYON_NOTIFY, DI_ATTR_SET_AUTO_UPLOAD, diparam);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_HIGH_LIMIT, DI_ATTR_SET_AUTO_UPLOAD, diparam);
- m_communicate->GPIO_DI_Ctrl(OP_SET, (GPIO_DI_ID)IOInterfaceMapper::ID_TUBE_HEIGHT_LOW_LIMIT, DI_ATTR_SET_AUTO_UPLOAD, diparam);
- }
- void CArmMachineryManager::SetupPFSTrigger()
- {
- GPIO_DO_PARAM params;
- params.output_mode = GOM_PWM;
- params.peroid.pwmperiod_short = 20002;
- params.effective.pwmperiod_short = 20000;
- params.pwm_step.pwmstep_int = 1;
- m_communicate->GPIO_DO_Ctrl(OP_SET, (GPIO_DO_ID)IOInterfaceMapper::ID_EXPOSURE_TRIGGER,
- DO_ATTR_SET_MODE, params);
- m_communicate->GPIO_DO_Ctrl(OP_SET, (GPIO_DO_ID)IOInterfaceMapper::ID_EXPOSURE_TRIGGER,
- DO_ATTR_SET_PWM_PARAM_TABLE, params);
- }
|