📄 drq.cpp
字号:
#include "stdafx.h"
#include "zb.h"
VQCDRQ_DBS::VQCDRQ_DBS()
{
ClassSize = sizeof(VQCDRQ_DBS);
MaxActTimes = 10;
LockTime = 300;
DU = 0;
DQ = 0;
bLarge = FALSE;
KgRec.ReInitDataProc( DATA_TYPE_YX);
DzRec.ReInitDataProc( DATA_TYPE_YX);
BhRec.ReInitDataProc( DATA_TYPE_BH);
RejectStatRec.ReInitDataProc( DATA_TYPE_YX);
LockStatRec.ReInitDataProc( DATA_TYPE_YX);
LockKgYxRec.ReInitDataProc( DATA_TYPE_YX);
bhLockStatus = FALSE;
manActStatus = FALSE;
oldCloseOrOpenStatus = FALSE;
srand((((int)&lastActTime)*29)%379+(unsigned)time( NULL )*139 );
lastActTime = rand()%5;
kgNeedLockTime = 0;
actTotalTimes = 0;
actDayTimes = 0;
rejectTimes = 0;
manActStatus = FALSE;
lockReasonStatus = 0;
oldActTimes = 0;
}
VQCDRQ_DBS::~VQCDRQ_DBS()
{
}
VQCDRQ_DBS VQCDRQ_DBS::operator=(VQCDRQ_DBS op)
{
KgRec = op.KgRec;
DzRec = op.DzRec;
BhRec = op.BhRec;
RejectStatRec = op.RejectStatRec;
LockStatRec = op.LockStatRec;
LockKgYxRec = op.LockKgYxRec;
MaxActTimes = op.MaxActTimes;
LockTime = op.LockTime;
kgNeedLockTime = LockTime;
DU = op.DU;
DQ = op.DQ;
bLarge = op.bLarge;
srand((((int)&lastActTime)*29)%379+(unsigned)time( NULL )*139 );
lastActTime = rand()%5;
return *this;
}
BOOL VQCDRQ_DBS::CheckParam(char * alarmMsg)
{
alarmMsg[0]=0;
strcpy(alarmMsg, "结构类型不合法或无效的参数!");
if (ClassSize != sizeof(VQCDRQ_DBS)) return FALSE;
if (MaxActTimes > 100) return FALSE;
if ((LockTime > 1000)||(LockTime<0)) return FALSE;
alarmMsg[0]=0;
if ((UINT)LockTime<= pFatherMX->pGlobalDef->NextActTime){
wsprintf(alarmMsg, "开关动作后的闭锁时间设置太小!");
return FALSE;
}
if (!KgRec.CheckYxParam()){
wsprintf(alarmMsg, "开关信号设置错!");
return FALSE;
}
if (!DzRec.CheckYxParam()){
wsprintf(alarmMsg, "开关隔离设备信号设置错!");
return FALSE;
}
if (!BhRec.CheckBhParam()){
wsprintf(alarmMsg, "保护信号设置错!");
return FALSE;
}
if (!RejectStatRec.CheckYxParam()){
wsprintf(alarmMsg, "拒动信号信号设置错!");
return FALSE;
}
if (!RejectStatRec.CheckYxParam()){
wsprintf(alarmMsg, "闭锁信号设置错!");
return FALSE;
}
if (!LockKgYxRec.CheckYxParam()){
wsprintf(alarmMsg, "闭锁电容器开关遥信设置错!");
return FALSE;
}
return TRUE;
}
void VQCDRQ_DBS::EveryDayInitProc()
{
actDayTimes = 0;
}
void VQCDRQ_DBS::ClearAllManUnlockProc()
{
rejectTimes = 0;
kgNeedLockTime = 0;
BhRec.ClearBhStatus();
}
void VQCDRQ_DBS::AdjustTimeProc()
{
if (kgNeedLockTime >0) kgNeedLockTime -= pFatherMX->pGlobalDef->AdjustPeriodTime;
if (kgNeedLockTime <0) kgNeedLockTime = 0;
}
void VQCDRQ_DBS::CheckLockProc()
{
lockReasonStatus = 0;
if (BhRec.GetBhStatus()) bhLockStatus = TRUE;
else bhLockStatus = FALSE;
if ( bhLockStatus) lockReasonStatus |= LOCK_DRQ_BH;
//开关状态有变化,闭锁一段时间
if (oldCloseOrOpenStatus != KgRec.GetStatus())
{
//检查VQC动作后的闭锁时间, 正常时 <=0
if (pFatherMX->pFatherZB->adjustNeedLockTime<=0)
kgNeedLockTime = LockTime;
rejectTimes = 0;
oldCloseOrOpenStatus = KgRec.GetStatus();
}
if (kgNeedLockTime >0) lockReasonStatus |= LOCK_DRQ_NOTREADY;
if (manActStatus) lockReasonStatus |= LOCK_DRQ_MANACT;
if (rejectTimes >= 4) lockReasonStatus |= LOCK_DRQ_REJECT;
if (!DzRec.GetStatus()) lockReasonStatus |= LOCK_DRQ_NOUSE;
if (LockKgYxRec.GetStatus()) lockReasonStatus |= LOCK_DRQ_YX;
if (!(lockReasonStatus & LOCK_DRQ_NOUSE))
if (KgRec.GetStatus()) lockReasonStatus |= LOCK_DRQ_CLOSE;
else lockReasonStatus |= LOCK_DRQ_OPEN;
if (lockReasonStatus & LOCK_DRQ_OPEN) //只有为分状态才判动作次数越限
if (actDayTimes >= MaxActTimes) lockReasonStatus |= LOCK_DRQ_TIMES_OVER;
return;
}
void VQCDRQ_DBS::SetLibValueProc()
{
//设置DRQ多次拒动闭锁状况
if (lockReasonStatus & LOCK_DRQ_REJECT) RejectStatRec.SetWfStatus(TRUE);
else RejectStatRec.SetWfStatus(FALSE);
//设置DRQ调节闭锁状况
if (lockReasonStatus & 0x3fff) LockStatRec.SetWfStatus(TRUE);
else LockStatRec.SetWfStatus(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -