GrpcPrint/PrintS/ScannerCtrl/ScannerCtrl.h
2024-04-08 13:43:56 +08:00

132 lines
3.2 KiB
C++

#pragma once
#include "../stdafx.h"
#include "BaseCtrl.h"
#include "../Purifier/BasePurifier.h"
#include "Scanner.h"
#include "../Machine/Machine.h"
#include "../PLC/MachineCtrl.h"
#include "../camera/HBDCamera.h"
//#include "../RecoatCheck/RecoatCheck.h"
#include "../Communication/ServoManager.h"
#include "ScannerPair.h"
#include "../Communication/ScannerPowerClient.h"
class RemoteClient;
class ScannerCtrl : public BaseCtrl
{
typedef ScannerCtrl thisClass;
public:
ScannerCtrl();
~ScannerCtrl();
bool Init();
bool BeginWork();
bool PauseWork();
void PauseAuto();
bool StopWork();
bool IsTestLayerEnable();
void StopRedTest();
void TestLayer();
vector<Scanner*>* GetScanners() { return &m_scan; }
JobController* GetJobController() { return m_job_controller; }
void RemoveScanner(int seq);
void SetPurifierClient(BasePurifier* purifierClient) {
m_PurifierClient = purifierClient;
}
void SetScannerPowerClient(ScannerPowerClient* spc) { m_ScannerPowerClient = spc; }
void GetInitErrorInfos(vector<string>& vec);
string GetInitErrorInfos();
bool HasInitError() { return !m_InitErrorInfos.empty(); }
void ModelScan(void);
void StopModelScan(void);
void SetMachineCtrl(MachineCtrl* machineCtrl) {
m_MachineCtrl = machineCtrl;
}
bool IsHeatingScannerEnable();
void SetCamera(HBDCamera* camera) { m_Camera = camera; }
//void SetRecoatCheck(RecoatCheck* rc) { m_RecoatCheck = rc; }
void SetServoManager(ServoManager* servoManager) { m_ServoManager = servoManager; }
void StartHeatingMotion();
void StopHeatingMotion(bool iswait);
void SetRemoteClient(RemoteClient* rc) { m_RemoteClient = rc; }
void DrawFinishReport();
private:
static DWORD WINAPI PrintProc(thisClass* _this);
static DWORD WINAPI RedPrintTestProc(thisClass* _this);
static DWORD WINAPI ModelScanProc(thisClass* _this);
static DWORD WINAPI ReleasePressureProc(thisClass* _this);
static DWORD WINAPI HeatingMotionProc(ScannerCtrl* _this);
void HeatingMotionRun();
void PrintRun();
bool ReadyPrint(bool startAfterPause);
void CtrlWhenStop();
void CtrlIoWhenExit();
void DispatchDataBlock();
void DispatchTestDataBlock();
void DispatchModelDataBlock(int partId, string scanType, float power, float speed);
public:
string m_PauseMsg;
string m_StopMsg;
vector<AlarmCfg*> m_StopAlarms;
vector<AlarmCfg*> m_PauseAlarms;
private:
vector<Scanner*> m_scan;
HANDLE m_print_thread;
HANDLE m_RedPrintTestThread;
CRITICAL_SECTION m_LayerTestCs;
BasePurifier* m_PurifierClient;
RunCfg* m_RunCfg;
MachineCfg* m_MachineCfg;
Machine* m_Machine;
IOCfgWrapper* m_IOCfgWrapper;
CoverCfg* m_CoverCfg;
PowderEstimateCfg* m_PowderEstimateCfg;
ExtCfg* m_ExtCfg;
ServoManager* m_ServoManager;
MachineCtrl* m_MachineCtrl;
AlarmCfgWrapper* m_AlarmCfgWrapper;
HANDLE m_PressureThread;
bool m_PressureCtrlFlag;
unsigned int m_DownSkinStopFlag;
bool m_IsDownSkinContinue;
HBDCamera* m_Camera;
//RecoatCheck* m_RecoatCheck;
RecoatCheckCfg* m_RecoatCheckCfg;
ScannerPowerClient* m_ScannerPowerClient;
HANDLE m_HeatingMotionThread;
bool m_HeatingMotionFlag;
RemoteClient* m_RemoteClient;
bool m_ShowFinishReport;
time_t m_LastSendFinishReportTime;
vector<BPBinary::BinDataBlock*> m_RedTestDBS;
vector<BPBinary::BinDataBlock*> m_ModeTestDBS;
};