123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #pragma once
- #include "IMotionModel.h"
- namespace DIOS::Dev::Detail::MachineryECOM
- {
- const int TOMO_HEIGHT_SLICE_MAX = 256;
- enum
- {
- DET_HIGHT_NORMAL,
- DET_HIGHT_TOOHIGH,
- DET_HIGHT_TOOLOW,
- };
- class TomoMotionStageArgs;
- class ITubeAngleController;
- class ITubeHeightController;
- class ISensorADController;
- class ISensorEncoderController;
- class IExposureController;
- class IOutputController;
- class TomoMotionModel : public IMotionModel
- {
- public:
- TomoMotionModel();
- ~TomoMotionModel();
- public:
- virtual void ChangeStage(const std::string &stageName) override;
- virtual std::string GetStageName() override;
- virtual IMotionStageArgs *GetStageArgs() override;
- public:
- virtual void Initialize(IMachineryManager *machineryManager, IPositionManager *coordinates) override;
- virtual void LoadMachineryParams(ResDataObject ¶ms) override;
- virtual void LoadModelParams(ResDataObject ¶ms) override;
- virtual void SetTechnicalParams(ResDataObject ¶ms) override;
- virtual void OnFeedbackMotionParams(ResDataObject ¶ms) override;
- virtual BOOL GetMotionParams(ResDataObject ¶ms) override;
- virtual void SwitchScanningComponents(int nSwitch) override;
- virtual void SwitchWorkstation(string ws) override;
- private:
- void OnMotionStage(const std::string &stageName);
- void MotionStageClearParams();
- void MotionStageCalculateParams();
- void MotionStageSetTomoMotionSlice();
- void MotionStageMovetoEndPos();
- void MotionStageMovetoStartPos();
- void MotionStageErrorStop();
- void MotionStageErrorRecover();
- void MotionStageCenterAdjust();
- void AlignTubeHeightToDetector();
- void RotateTubeToHorizontal();
- void StopMotion();
- void MoveTubeHeightToTomoStartPosiotn();
- void RotateTubeAngleToTomoStartPostion();
- BOOL GetTomoRotateDirection();
- int JudgeDirectionInTubeHeightAxis(float current,float target);
- int JudgeDirectionInTubeAngleAxis(float current,float target);
- void MoveTubeHeight(int direction,float offset,float spd = 0.0f);
- void RotateTubeAngle(int direction, float offset);
- void UpdateDigitalTwinTomoSliceParams();
- void FixHeightStartPosition(float speed);
- void OnMotionStageMove2SID(string ws);
- int JudgeDirectionInTubeHorizontalAxis(float current, float target);
- void MoveTubeHorizontal(int direction, float offset, float spd = 0.0f);
- void DoMotionStageSetTomoMotionSlice(ISensorEncoderController* pEncoder, string encoderControllerName);
- void DoMotionStageMovetoEndPosHeight();
- void DoMotionStageMovetoEndPosHorizontal();
- void DoMotionStageMovetoStartPosHeight();
- void DoMotionStageMovetoStartPosHorizontal();
- void MoveTubeHorizontalToTomoStartPosiotn();
- int IsTomoMotionDetectorPosCorrect(float fDetectorCurPos, string scanangle);
- private:
- std::string m_StageName;
- TomoMotionStageArgs *m_stageArgs;
- IPositionManager *m_coordinates;
- IMachineryManager *m_machineryManager;
- ITubeAngleController *m_motorTubeAngle;
- ITubeHeightController *m_motorTubeHeight;
- ISensorADController *m_adDetectorHeight;
- ISensorEncoderController *m_encoderTubeAngle;
- ISensorEncoderController *m_encoderTubeHeight;
- IExposureController *m_exposure;
- ITubeHeightController* m_motorTubeHorizontal;
- ISensorADController* m_adTubeHorizontal;
- ISensorEncoderController* m_encoderTubeHorizontal;
- IOutputController* m_tubeLineMotionSwitch;
- float *m_heightSlices;
- int *m_anglePeriods;
- int *m_angleSteps;
- float m_warmAngle;
- float m_anglePerSlice;
- int m_angleSliceCount;
- int m_heightSliceCount;
- float m_heightStartPosition;
- float m_angleStartPosition;
- float m_fps;
- ResDataObject m_MachineryParams;
- ResDataObject m_ModelParams;
- ResDataObject m_TechnicalParams;
- std::vector<int> m_FeedbackTubeHeightEncoders;
- std::vector<int> m_FeedbackTubeAngleEncoders;
- };
- }
|