⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drq.cpp

📁 电力系统无功自动补偿的操作系统程序
💻 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 + -