#pragma once #include "../stdafx.h" #include "../job/BPBinary.h" #include "../job/MetaData.h" #include "BaseCtrl.h" #include "IntelliScanState.h" #include #include #include #include "../additional/InfraredTemp/InfraredTemp.h" struct polygon { float xval, yval; }; typedef struct DataBlockInfo { BPBinary::BinDataBlock* bdb; MetaData::Part* part; MetaData::ParameterSet* ps; int order; int delayTime; bool isFinished; DataBlockInfo(BPBinary::BinDataBlock* _bdb, MetaData::Part* _part, MetaData::ParameterSet* _ps, int _order, int _delayTime) :bdb(_bdb) , part(_part) , ps(_ps) , order(_order) , delayTime(_delayTime) , isFinished(false) {} } DataBlockInfo; class OrderMap { public: int m_Order; queue m_DBS; }; class Scanner : public BaseCtrl { public: enum DebugShape { Cross = 0, Square, PointLaser, DefocusLenth, HLine, VLine, MulPoints, MulJumpPoints, Vector, RTC6Test }; public: Scanner(ScannerControlCfg* cfg); ~Scanner(); virtual void GetInfo(vector& ins) {} void AddDataBlock(BPBinary::BinDataBlock* bdb, MetaData::Part* part, MetaData::ParameterSet* ps,int _order,int _delayTime); //virtual int GetSerialNum() { return m_LaserCfg->m_Cno; } virtual void SetXyOffset(float x, float y) = 0; virtual void SetAngle(double angle) = 0; virtual void UpdateSetting() = 0; virtual void UpdateSkyWriting(bool islist) {} virtual void SetSkyWritingEnable(bool benable, bool islist) {} virtual void SetXYCorrect(double x, double y) { m_xfactor = m_kfactor*x; m_yfactor = m_kfactor*y; } virtual void SetK(double k){} double GetK() { return m_kfactor; } ScannerControlCfg* GetConfig() { return m_ScannerControlCfg; } //传 暂未 bool IsDebugEnable(); //已传 void StartDebugTest(); void StopDebugTest(); virtual bool BeginWork(); virtual bool PauseWork() { return true; } virtual void WaitFinish(); virtual void Clean(); void StartHeatingScannerTest(); void StopHeatingScannerTest(); bool IsHeatingScannerTest(); //不传 void WaitHeatingScanner(); //不传 void StartGetScanInfo(); void StopGetScanInfo(); void SetAutoUpdateScanInfo(bool isauto); void GetXYScanState(ScanStateXYSCT* scanstate, time_t &t); //已传参数 服务端参数更新或者客户端请求时传到客户端 XYSCANSTATE virtual void UpdateScannerInfo() {} //bool IsUpScanner(); void static ResetScaningLimit() { EnterCriticalSection(&m_SeqCS); m_ScaningBit.reset(); m_SeqDataUnFinishBit.reset(); m_SupportSeqDataUnFinishBit.reset(); LeaveCriticalSection(&m_SeqCS); } virtual void ResetDefocus() = 0; void SetPairScan(Scanner* sc) { m_PairScan = sc; } virtual void UpdateScanParamByCfg(ScanParamCfg* cfg) = 0; ScanStateXY& GetScanStateXY() { return m_ScanState; } virtual void CheckAlarm() {} void SetInfTemp(InfraredTemp* inf) { m_InfraredTemp = inf; } virtual bool IsScannerComAlarm() { return false; }; protected: static DWORD WINAPI DebugProc(Scanner* _this); virtual void ScanDebug() {} static DWORD WINAPI ScanProc(Scanner* _this); virtual void Scan(); virtual void ScanSeqV2(); virtual void ScanMass(); virtual unsigned int GetMemorySize() = 0; virtual void LoadList(unsigned int listid, bool iswait) = 0; virtual void EndList() = 0; virtual void ListExecute(unsigned int listid, bool iswait) = 0; virtual void AutoChangeList() = 0; virtual void WaitListFree() = 0; virtual void SetScanSpeed(double value) = 0; virtual void SetPower(double watt) = 0; virtual void SetDefocus(float value) = 0; virtual void AddVector(double startx, double starty, double endx, double endy) = 0; virtual void ListNop() = 0; virtual void JumpAbs(double x, double y) = 0; virtual void MarkAbs(double x, double y) = 0; virtual void HeatingScannerRun() {} virtual void ScannerInfoRun() {} static void GetLimitCodeV2(int ivalue); void ScanDataBlock(DataBlockInfo* Printdbi); map* GetOrderDataCountMap() { return &m_OrderDataCountMap; } static void InitMassLimitCode(); private: static DWORD WINAPI ScannerInfoProc(Scanner* _this); static DWORD WINAPI HeatingScannerProc(Scanner* _this); public: uint64_t m_JobStartTime; bool m_IsOrderSeqV2; static map m_CurrentSerio; protected: vector m_ScanData; vector m_SupportSeq; queue m_ZeroSeq; //LaserCfg* m_LaserCfg; ScannerControlCfg* m_ScannerControlCfg; RunCfg* m_RunCfg; ExtCfg* m_ExtCfg; HANDLE m_DebugThread; bool m_DebugFlag; TimePowerCompensateCfg* m_TimePowerCompensateCfg; PowerCompensateCfg* m_PowerCompensateCfg; CorrectParamCfg* m_CorrectParamCfg; SkyWritingCfg* m_SkyWritingCfg; ScanParamCfg* m_ScanParamCfg; ScanTestCfg* m_ScanTestCfg; MachineCfg* m_MachineCfg; AlarmCfgWrapper* m_AlarmCfgWrapper; IOCfg* m_ScannerIO; HANDLE m_Thread; HANDLE m_HeatingScannerThread; bool m_HeatingScannerRunFlag; unsigned int m_list_memory; unsigned int m_laser_control; double m_output_vfactor; double m_kfactor; double m_xfactor; double m_yfactor; double m_zfactor; double m_workingdis; double m_Angle; double m_Radians; HANDLE m_InfoThread; bool m_InfoRunFlag; bool m_IsAutoInfo; CRITICAL_SECTION m_ScannerInfoCS; time_t m_ScanStateUpdateTime; ScanStateXY m_ScanState; double m_XOffsetAssist; double m_YOffsetAssist; map m_OrderDataCountMap; map m_OrderMap; map m_ScanParamCfgMap; //unordered_set m_OrderSeq; bool m_IsLeftScan; Scanner* m_PairScan; InfraredTemp* m_InfraredTemp; static bitset<128> m_ScaningBit; static CRITICAL_SECTION m_SeqCS; static map> m_LimitMap; static map> m_HorizontalSeqRightFirst; static map> m_HorizontalSeqLeftFirst; static bitset<16> m_SeqDataUnFinishBit; //振镜数码 static bitset<16> m_SupportSeqDataUnFinishBit; //振镜数目 static map m_MassHorizontalSeq; static int m_SeqCount; };