GrpcPrint/PrintS/PLC/SignalService.h

98 lines
3.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_Scanner1CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner1CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner2CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner2CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner3CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner3CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner4CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner4CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner5CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner5CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner6CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner6CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner7CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner7CtrlComAlarm->m_IsAlarm = false;
if (m_AlarmCfgWrapper->m_Scanner8CtrlComAlarm)m_AlarmCfgWrapper->m_Scanner8CtrlComAlarm->m_IsAlarm = false;
}
void ResetWaterAlarmCheck()
{
std::unique_lock<std::shared_mutex> lock(m_Mtx);
time(&m_WaterAlarmCheckTime);
}
time_t GetWaterAlarmCheckTime()
{
time_t tt = 0;
std::shared_lock<std::shared_mutex> lock(m_Mtx);
tt = m_WaterAlarmCheckTime;
return tt;
}
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;
time_t m_WaterAlarmCheckTime;
};