#pragma once namespace DIOS::Dev::Detail::MachineryECOM { class DigitalTwinLogger { public: DigitalTwinLogger(); ~DigitalTwinLogger(); public: static DigitalTwinLogger *Instance(); void Initialize(const std::string &workpath); SimpleLog *&Get(); public: void ReceiveTimePoint(); void ReceiveExamMode(const std::string &examMode); void ReceiveDetectorHeight(float height); void ReceiveSID(float sid); void ReceiveMotionInitialPosition(int angleSensorValue, int heightSensorvalue); void ReceiveTomoStartPosition(int angleSensorValue,int heightSensorvalue); void ReceiveTomoExposureAnglePosition(int angleSensorValues); void ReceiveTomoExposureHeightPosition(int heightSensorValue); void ReceiveTomoSliceRotateSpeeds(int *speeds,int count); void ReceiveTomoSliceRotateSteps(int *steps, int count); void ReceiveTomoHeightSpeed(float speed); void ReceiveTomoNormalRotatePeriod(int period); void ReceiveMotionStopPosition(int angleSensorValue, int heightSensorvalue); void ReceiveTomoProjectParams(float acc,float lat,float sus,float brk); void ReceiveTomoProjectSliceParams(float *heights, int heightcount); void ReceiveTomoScanParam(int projectNumber, float scanAngle); template void Receive(const std::string &key,const T& data); void ReceiveErrorStop(); void SaveMotionRecord(); private: void Clear(); std::string FormatIntVectors(std::vector ¶ms); std::string FormatFloatVectors(std::vector ¶ms); std::string FormatLLongVectors(std::vector ¶ms); std::string FormatPairs(std::vector ¶ms, std::vector &ticks); private: static DigitalTwinLogger *m_instance; SimpleLog *m_logger; std::string m_examMode; float m_detectorHeight; float m_sid; int m_initialAngleSensorValue; int m_initialHeightSensorValue; int m_tomoStartAngleSensorValue; int m_tomoStartHeightSensorValue; std::vector m_tomoExpAngleSensorValues; std::vector m_tomoExpHeightSensorValues; std::vector m_tomoSliceRotateSpeeds; std::vector m_tomoSliceRotateSteps; std::vector m_tomoExpATimes; std::vector m_tomoExpHTimes; float m_tomoHeightSpeed; int m_motionStopAngleSensorValue; int m_motionStopHeightSensorValue; BOOL m_errorStoped; int m_tomoNormalRotatePeriod; float m_acc; float m_lat; float m_sus; float m_brk; std::vector m_tomoSliceHeights; int m_tomoProjectNumber; float m_tomoScanAngle; std::vector m_tomoTimeLine; }; }