#pragma once #include "module.h" #include "EnumPropertieType.h" #include "PlatformXY.h" #include "WorkCmdInvoker.h" typedef pair TypePosError;//(first 是平台理论坐标,second 是误差值) class CGratingRuler :public CModule { public: CGratingRuler(void); ~CGratingRuler(void); virtual CMFCPropertyGridProperty *CreatGridProperty(); virtual MODULE GetModuleType(){return _GRATING_RULER_PROP;}; virtual void ExportPar(ofstream *pFile); bool ReadGratingRuler(Dbxy &pt); bool SetOriginCoord(); bool GetCurCoord(Dbxy &pt); bool PlatformOriginCalibration(CPlatformXY &PlatformXY); bool MeasurePlatfromError(DbRect rect,CPlatformXY &PlatformXY); private: bool IsUsed(){return m_bUseGratingRuler;};//是否使用光栅尺 bool AnalysisRulerRet(char *str,Dbxy &pt); bool AnalysisSymbol(BYTE byte,bool &bIsNegativeX,bool &bIsNegativeY); bool AnalysisXYState(BYTE byte); double AnalysisCoord(BYTE byte1,BYTE byte2,BYTE byte3,BYTE byte4); void GetTwoNum(BYTE byte,double &high,double &low); bool MeasureMotorError(CPlatformXY &PlatformXY,X_OR_Y xy,double Start,double End,vector &ErrorTable); void ExportErrorTable(ofstream *pFile,vector &ErrorTable); private: bool m_bIni;//光栅尺是否初始化 Dbxy m_OriginCoord;//平台设定原点时光栅尺的度数坐标(实际坐标都以这个基准来计算) //要保存的参数-------------------------------------- bool m_bUseGratingRuler;//是否使用光栅尺 int m_CommPort;//串口编号 double m_OriginCalibrationError;//原点校准误差(mm)(平台回原点时误差大于这个值需要补偿脉冲) int m_MaxCalibrationTimes;//最大校准次数,避免死循环 double m_MeasureErrorGap;//校准平台误差的间隔(单位: mm) double m_MaxOriginError;/*回原点时平台原点和光栅尺原点最大允许的误差(mm)(大于这个误差时报错,可能是手动修改了数显表的值,避免硬件损坏)*/ //误差补偿表----------------------------------------- vector m_ErrorTableX;//X 轴误差补偿表 vector m_ErrorTableY;//X 轴误差补偿表 }; extern CGratingRuler *gGratingRuler;