GrpcPrint/PrintS/PLC/SignalService.h
2024-03-25 13:22:32 +08:00

77 lines
2.3 KiB
C++

#pragma once
#include "../config/bean/AlarmCfg.h"
#include "CoreCommunication.h"
#include <thread>
#include "../config/bean/RunCfg.h"
#include "../config/bean/ExtCfg.h"
#include "../config/bean/PowderEstimateCfg.h"
class SignalService
{
public:
void RunService();
static SignalService& GetInstance();
void SetCoreCommuniction(CoreCommunication* coreCommunication);
AlarmCfg* JudgeStopAlarm();
AlarmCfg* JudgePauseAlarm();
void JudgeStopAlarm(vector<AlarmCfg*>& vecs);
void JudgePauseAlarm(vector<AlarmCfg*>& vecs);
void JudgeAutoPauseAlarm(vector<AlarmCfg*>& vecs);
string JudgeWarns(vector<AlarmCfg*>& vecs);
bool CheckAlarmAfterDeoxygen();
bool CheckAlarmBeforeDeoxygen();
void GetSignalState(SignalState& ss);
//void SetSignalStateCtrl(SignalStateWrapper* signalStateCtrl);
string GetWarnAlarmInfo();
//void StartCylinderDeoxygen() {
// m_SignalStateCtrl->m_MoldDeoxygenTriger->SetValue(true);
//}
void SetPurifierIsConnect(bool isAlarm);
void SetAlarm(AlarmCfg* cfg,bool isAlarm) {
if (!cfg)return;
std::unique_lock<std::shared_mutex> lock(m_Mtx);
cfg->m_IsAlarm = isAlarm;
}
void SetPrintAirRenewalTrigger(bool en)
{
//m_SignalStateCtrl->m_PrintAirRenewalTrigger->SetValue(en);
}
void ResetRelateCoverAlarm() {
std::unique_lock<std::shared_mutex> lock(m_Mtx);
if(m_AlarmCfgWrapper->m_LayerLinearPosAlarm)m_AlarmCfgWrapper->m_LayerLinearPosAlarm->m_IsAlarm = false;
if(m_AlarmCfgWrapper->m_RecoatCheckAlarm)m_AlarmCfgWrapper->m_RecoatCheckAlarm->m_IsAlarm = false;
if(m_AlarmCfgWrapper->m_MoldServoPosWarn)m_AlarmCfgWrapper->m_MoldServoPosWarn->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_PrintLinnearAccDevAlarm)m_AlarmCfgWrapper->m_PrintLinnearAccDevAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_ScannerCtrlComAlarm)m_AlarmCfgWrapper->m_ScannerCtrlComAlarm->m_IsAlarm = false;
}
private:
SignalService();
~SignalService();
SignalService(const SignalService& other) {}
//void CheckProc();
private:
AlarmCfgWrapper* m_AlarmCfgWrapper;
IOCfgWrapper* m_IOCfgWrapper;
CoreCommunication* m_CoreCommunication;
//SignalStateWrapper* m_SignalStateCtrl;
std::shared_mutex m_Mtx;
std::thread m_CheckThread;
bool m_RunFlag;
SignalState m_SignalState;
RunCfg* m_RunCfg;
ExtCfg* m_ExtCfg;
PowderEstimateCfg* m_PowderEstimateCfg;
bool m_LastPLCKeepAlive;
int m_CycleTick;
};