2024-05-15 13:38:34 +08:00
|
|
|
|
#pragma once
|
2024-03-26 10:33:00 +08:00
|
|
|
|
#include "../stdafx.h"
|
|
|
|
|
#include "../job/BPBinary.h"
|
|
|
|
|
#include "../job/MetaData.h"
|
|
|
|
|
#include "BaseCtrl.h"
|
|
|
|
|
#include "IntelliScanState.h"
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <bitset>
|
|
|
|
|
#include <unordered_set>
|
2024-05-22 15:58:54 +08:00
|
|
|
|
#include "../additional/InfraredTemp/InfraredTemp.h"
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
|
|
|
|
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<DataBlockInfo*> m_DBS;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class Scanner : public BaseCtrl
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum DebugShape
|
|
|
|
|
{
|
|
|
|
|
Cross = 0,
|
|
|
|
|
Square,
|
|
|
|
|
PointLaser,
|
|
|
|
|
DefocusLenth,
|
|
|
|
|
HLine,
|
|
|
|
|
VLine,
|
|
|
|
|
MulPoints,
|
|
|
|
|
MulJumpPoints,
|
2024-05-22 15:58:54 +08:00
|
|
|
|
Vector,
|
|
|
|
|
RTC6Test
|
2024-03-26 10:33:00 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Scanner(ScannerControlCfg* cfg);
|
|
|
|
|
~Scanner();
|
|
|
|
|
virtual void GetInfo(vector<string>& 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; }
|
|
|
|
|
|
2024-06-05 17:02:17 +08:00
|
|
|
|
ScannerControlCfg* GetConfig() { return m_ScannerControlCfg; } //传 暂未
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
2024-06-05 17:02:17 +08:00
|
|
|
|
bool IsDebugEnable(); //已传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
void StartDebugTest();
|
|
|
|
|
void StopDebugTest();
|
|
|
|
|
|
|
|
|
|
virtual bool BeginWork();
|
|
|
|
|
virtual bool PauseWork() { return true; }
|
|
|
|
|
virtual void WaitFinish();
|
|
|
|
|
|
|
|
|
|
virtual void Clean();
|
|
|
|
|
|
|
|
|
|
void StartHeatingScannerTest();
|
|
|
|
|
void StopHeatingScannerTest();
|
2024-06-05 17:02:17 +08:00
|
|
|
|
bool IsHeatingScannerTest(); //不传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
2024-06-05 17:02:17 +08:00
|
|
|
|
void WaitHeatingScanner(); //不传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
|
|
|
|
void StartGetScanInfo();
|
|
|
|
|
void StopGetScanInfo();
|
|
|
|
|
void SetAutoUpdateScanInfo(bool isauto);
|
2024-06-05 17:02:17 +08:00
|
|
|
|
void GetXYScanState(ScanStateXYSCT* scanstate, time_t &t); //已传参数 服务端参数更新或者客户端请求时传到客户端 XYSCANSTATE
|
2024-03-26 10:33:00 +08:00
|
|
|
|
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;
|
2024-05-15 13:38:34 +08:00
|
|
|
|
|
|
|
|
|
ScanStateXY& GetScanStateXY() { return m_ScanState; }
|
|
|
|
|
|
2024-05-22 15:58:54 +08:00
|
|
|
|
virtual void CheckAlarm() {}
|
|
|
|
|
void SetInfTemp(InfraredTemp* inf) {
|
|
|
|
|
m_InfraredTemp = inf;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool IsScannerComAlarm() { return false; };
|
2024-03-26 10:33:00 +08:00
|
|
|
|
protected:
|
|
|
|
|
static DWORD WINAPI DebugProc(Scanner* _this);
|
|
|
|
|
virtual void ScanDebug() {}
|
|
|
|
|
static DWORD WINAPI ScanProc(Scanner* _this);
|
|
|
|
|
virtual void Scan();
|
|
|
|
|
virtual void ScanSeqV2();
|
2024-05-22 15:58:54 +08:00
|
|
|
|
virtual void ScanMass();
|
2024-03-26 10:33:00 +08:00
|
|
|
|
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() {}
|
2024-05-22 15:58:54 +08:00
|
|
|
|
static void GetLimitCodeV2(int ivalue);
|
2024-03-26 10:33:00 +08:00
|
|
|
|
void ScanDataBlock(DataBlockInfo* Printdbi);
|
|
|
|
|
map<int, int>* GetOrderDataCountMap() { return &m_OrderDataCountMap; }
|
2024-05-22 15:58:54 +08:00
|
|
|
|
static void InitMassLimitCode();
|
|
|
|
|
|
2024-03-26 10:33:00 +08:00
|
|
|
|
private:
|
|
|
|
|
static DWORD WINAPI ScannerInfoProc(Scanner* _this);
|
|
|
|
|
static DWORD WINAPI HeatingScannerProc(Scanner* _this);
|
|
|
|
|
public:
|
|
|
|
|
uint64_t m_JobStartTime;
|
|
|
|
|
bool m_IsOrderSeqV2;
|
|
|
|
|
static map<int, unsigned int> m_CurrentSerio;
|
|
|
|
|
protected:
|
|
|
|
|
vector<DataBlockInfo*> m_ScanData;
|
|
|
|
|
vector<DataBlockInfo*> m_SupportSeq;
|
|
|
|
|
queue<DataBlockInfo*> 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<int, int> m_OrderDataCountMap;
|
|
|
|
|
map<int, OrderMap*> m_OrderMap;
|
|
|
|
|
|
|
|
|
|
map<string, ScanParamCfg*> m_ScanParamCfgMap;
|
|
|
|
|
//unordered_set<int> m_OrderSeq;
|
|
|
|
|
|
|
|
|
|
bool m_IsLeftScan;
|
|
|
|
|
Scanner* m_PairScan;
|
2024-05-22 15:58:54 +08:00
|
|
|
|
InfraredTemp* m_InfraredTemp;
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
2024-05-22 15:58:54 +08:00
|
|
|
|
static bitset<128> m_ScaningBit;
|
2024-03-26 10:33:00 +08:00
|
|
|
|
static CRITICAL_SECTION m_SeqCS;
|
|
|
|
|
|
2024-05-22 15:58:54 +08:00
|
|
|
|
static map<int, bitset<128>> m_LimitMap;
|
|
|
|
|
static map<int, bitset<128>> m_HorizontalSeqRightFirst;
|
|
|
|
|
static map<int, bitset<128>> m_HorizontalSeqLeftFirst;
|
|
|
|
|
static bitset<16> m_SeqDataUnFinishBit; //振镜数码
|
|
|
|
|
static bitset<16> m_SupportSeqDataUnFinishBit; //振镜数目
|
|
|
|
|
|
|
|
|
|
static map<int, int> m_MassHorizontalSeq;
|
|
|
|
|
static int m_SeqCount;
|
|
|
|
|
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
|
|
|
|
};
|