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

📄 evtdb.cpp

📁 电力监控系统 实时告警处理程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	memset(&dtt1,0,64);
	CString str="日期和时间                                事件描述";
	memcpy(dtt1,str,str.GetLength());
    result = WriteFile( handle,dtt1,str.GetLength(),&nWrite,NULL);
}

bool evtdb::IsNeedShow(BYTE TypeID, BYTE SubtypeID)
{
	if((TypeID<0)||(TypeID>=M_EVTT)) return 0;
	if((SubtypeID<0)||(SubtypeID>=M_EVTTS)) return 0;
	char ind=IndEvtT[TypeID][SubtypeID];
	if((ind<0)||(ind>=M_EVT)) return 0;
			return m_pEvtType[ind].IfShow;
}
//设置已打印标志
void evtdb::AckPrint(int index)
{
	LSI_GetTableID("scada","event",m_Evtid);//COMMON_Node
    if ((m_pEvt1=(MEMTABLE*)LSI_GetTableAdd(m_Evtid&0xffff))==NULL)
    {
		return ;
    }
	m_pEvt=(scada_event*)m_pEvt1->data;
	if(!m_pEvt) return ;
	m_pEvt[index].IfPrint = 1;
	evt_tmp[index].IfPrint=1;
	//LSI_SetChanged(m_tmpid,cursor);
}

bool evtdb::SetColors(COLORREF *pColor, int nCounts)
{
	if(!m_pEvtType) return false;
	if(pColor == NULL)return false;


	for(int i = 0;i<nCounts;i++)
	{
		m_pEvtType[i].Color =(DWORD)pColor[i];
		LSI_SetChanged(m_EvtTid,i);
	}
	return true;
}

bool evtdb::AckAllEvent()
{
	for(int i = nEvt-1;i>0 ;i--)
	{
		evt_tmp[i].AffirmF = 1;
	}
	for(i = nEvt-1;i>0 ;i--)
	{
		if(1 ==  evt_tmp[i].AffirmF)continue;
		cursor = i;
		if(!AckEvent())return false;
	}
	return true;
}
bool  evtdb::WriteSelfEvent(BYTE  TypeID,BYTE  SubtypeID,char* Dec)
{
	scada_event evt;
	ZeroMemory(&evt,sizeof(scada_event));
	evt.TypeID = TypeID;//program
	evt.SubtypeID = SubtypeID;//exit

	memcpy(evt.Operator,g_cUseName,16);
	gethostname(evt.HostName,16);
	evt.Time = CTime::GetCurrentTime();
	evt.TabelType    =2        ;                
	memcpy(evt.InfoName,"RealEv",16)    ; 
	if(::strlen(g_cUseName)>0)
		sprintf(evt.Describe,"%s,操作:%s",Dec,g_cUseName);
	else
		sprintf(evt.Describe,"%s",Dec);
//	memcpy(evt.Describe,Dec,64);
	
//	bool b=false;
//	if(!m_bdbInitialed)
	{
//    	b = LSI_AddEventDesc(evt);	
	}
    DWORD id;
    MEMTABLE* p_t=NULL;
    LSI_GetTableID("scada","event",id);//scada_event

    if ((p_t=(MEMTABLE*)LSI_GetTableAdd(id&0xffff))==NULL)
    {
        return 0;
    }

    LSI_AddEvtRec("scada.event", &evt);

	return 1;
}
void evtdb::VoiceWarn()
{
	m_SoundBegin=0;
	m_bInVoice = 1;
	CString strTmp = "";
	for(int i = (nEvt-1);i>0;i--)
	{	
		if(EvtCmp(&evt_tmp[i],&evt0))//2006-7-15
		{
			m_bInVoice = 0;
			return;
		}
//		if(g_New)	{	
//			g_New=0;return;		}
		m_soundF=false;
	//	strTmp.Format("m_bVoice:%d",m_bVoice);
	//	AfxMessageBox(strTmp);
		if(m_bVoice)
		{
			if(evt_tmp[i].IfPlaySound == 0 )
			{
				m_typeV=IsNeedVoiceWarn(evt_tmp[i].TypeID,evt_tmp[i].SubtypeID);
			//	strTmp.Format("evt_tmp:%s(%d)",evt_tmp[i].Describe,m_typeV);
			//	AfxMessageBox(strTmp);
				if(m_typeV>=0)
				{
					m_SoundBegin++;
				}
				if( m_typeV>0 )
				{				
					if( evt_tmp[i].AffirmF==0 )
					{						
						if((g_NumC==0)||(evt_tmp[i].numS<g_NumC))
						{
							if(g_NumC>0)			AckVoiceWarn(i,1);							
							PlayVoice(i,m_typeV);
						}
						else
						{
							m_soundF=true;						
						}
					}
				}
				if((m_SoundBegin>=g_NumT)&&(g_NumT!=0))
				{
					m_soundF=true;
				}
			}
			else 
			{
				break;
			}
		}
		else
		{
			m_soundF=true;
		}
		if(m_soundF)
		{
			for(int j=i-1;j>0;j--)
			{
				if(!AckVoiceWarn(j))
				{
					i=j=0;
					break;
				}
			}
			i=0;
			break;
		}
//		if(g_New)	{	
//			g_New=0;return;		}
	//	Sleep((DWORD)(g_TimeC*1000-10));
	}
//	Sleep((DWORD)(g_TimeT*1000-10));
	m_bInVoice = 0;
}
void evtdb::PlayVoice(int i,char type)
{
	//可跟踪此函数查看播放情况
	BYTE  TypeID;					 
	BYTE  SubtypeID;
	bool mOffOrOnF = false;

	TypeID = evt_tmp[i].TypeID;
	SubtypeID = evt_tmp[i].SubtypeID;
	ZeroMemory(path1,MAX_PATH);
	ZeroMemory(path,MAX_PATH);
	ZeroMemory(path2,MAX_PATH);
	ZeroMemory(path3,MAX_PATH);
	ZeroMemory(pathopt,MAX_PATH);
	ZeroMemory(pathoptname,MAX_PATH);

	strcpy(path,m_strSoundpath);
	strcpy(pathopt,m_strSoundpath);
	strcpy(pathoptname,m_strSoundpath);

	strcat(pathopt,"operator\\operator.wav");//报“操作人”
	strcat(pathoptname,"operator\\");
	strcat(pathoptname,evt_tmp[i].Operator);
	strcat(pathoptname,".wav");//报操作人姓名;
	
	switch(TypeID)
	{
///////////////2004.5.19 张军华///////////////////////////
	case	EVT_SYS:		//	 0	//:系统日志
		strcat(path,"Opt\\");
		strcpy(path1,path);
		strcpy(path2,path);
		strcpy(path3,path);
		strcat(path1,"hostname\\");
		strcat(path1,evt_tmp[i].HostName);
		strcat(path1,".wav"); //主机名声音
		
		strcat(path2,"Procedure\\");
		strcat(path2,evt_tmp[i].InfoName); //事件产生者必须将Infoname填入进程名
		strcat(path2,".wav"); //进程名声音
		
		switch(SubtypeID)
		{
		case	EXIT:	 		//0程序退出
			strcat(path3,"exit.wav");
			mOffOrOnF = true;
			break;
		case		RUN	 :		    //1程序启动	
			strcat(path3,"run.wav");
			mOffOrOnF = true;
			break;
		case RTU:					//2厂站投入
			strcat(path3,"rtu_run.wav");
			break;
		case RTU_T:					//17厂站退出
			strcat(path3,"rtu_exit.wav");
			break;
		case CHN_S:					//5通道连接成功
			strcat(path3,"chn_run.wav");
			break;
		case CHN_F:					//13通道连接失败
			strcat(path3,"chn_exit.wav");
			break;
		case OPT:					//8控制操作
			strcat(path3,"ctrl_opt.wav");
			break;
		case SET:					//9控制设置
			strcat(path3,"ctrl_set.wav");
			break;
		case MOD:					//10修改数据
			strcat(path3,"data_mod.wav");
			break;
		case OTH:					//11其他
			strcat(path3,"other.wav");
			break;
		case CHA_S:					//14前置机切换为主备自动
			strcat(path3,"change_1.wav");
			break;
		case CHA_M:					//15前置机切换为主备手动
			strcat(path3,"change_2.wav");
			break;
		case CHA_T:					//16前置机切换为均流方式
			strcat(path3,"change_3.wav");
			break;
		case ODBC_E:					//18数据源错误
			strcat(path3,"odbc_error.wav");
			break;
		case OPTF:					//19人工操作提示
			strcat(path3,"OPT_FLAG.wav");
			break;
		default: 
			strcat(path3,"default.wav");
			break ;
			
		}
		break;
		///////////////2004.5.19 张军华///////////////////////////
		
	case	EVT_OPT:		//	 1	//:操作日志
		strcat(path,"Opt\\");
		strcpy(path1,path);
		strcpy(path2,path);
		strcpy(path3,path);
		strcat(path1,"hostname\\");
		strcat(path1,evt_tmp[i].HostName);
		strcat(path1,".wav"); //主机名声音
		
		strcat(path2,"Procedure\\");
		strcat(path2,evt_tmp[i].InfoName); //事件产生者必须将Infoname填入进程名
		strcat(path2,".wav"); //进程名声音
		
		switch(SubtypeID)
		{
		case	EXIT:	 		//0程序退出
			strcat(path3,"exit.wav");
			mOffOrOnF = true;
			break;
		case		RUN	 :		    //1程序启动	
			strcat(path3,"run.wav");
			mOffOrOnF = true;
			break;
		case RTU:					//2厂站投入
			strcat(path3,"rtu_run.wav");
			break;
		case OPE_S:					//3开启告警音效
			strcat(path3,"open_a.wav");
			break;
		case CLO_S:					//12屏蔽告警音效
			strcat(path3,"close_a.wav");
			break;
		case CHK_S:					//4确认人机界面告警音效
			strcat(path3,"chk_a.wav");
			break;
		case CHK_A:					//6确认人机界面所有闪烁及音效
			strcat(path3,"chk_aa.wav");
			break;
		case CHK_F:					//7确认人机界面本页闪烁及音效
			strcat(path3,"chk_flash.wav");
			break;
		case RTU_T:					//17厂站退出
			strcat(path3,"rtu_exit.wav");
			break;
		case CHN_S:					//5通道连接成功
			strcat(path3,"chn_run.wav");
			break;
		case CHN_F:					//13通道连接失败
			strcat(path3,"chn_exit.wav");
			break;
		case OPT:					//8控制操作
			strcat(path3,"ctrl_opt.wav");
			break;
		case SET:					//9控制设置
			strcat(path3,"ctrl_set.wav");
			break;
		case MOD:					//10修改数据
			strcat(path3,"data_mod.wav");
			break;
		case OTH:					//11其他
			strcat(path3,"other.wav");
			break;
		case CHA_S:					//14前置机切换为主备自动
			strcat(path3,"change_1.wav");
			break;
		case CHA_M:					//15前置机切换为主备手动
			strcat(path3,"change_2.wav");
			break;
		case CHA_T:					//16前置机切换为均流方式
			strcat(path3,"change_3.wav");
			break;
		case ODBC_E:					//18数据源错误
			strcat(path3,"odbc_error.wav");
			break;
		default: 
			strcat(path3,"default.wav");
			return;
		}
		break;
		
	case EVT_YC:			 	//:遥测
		strcat(path,"Yc\\");
		strcpy(path2,path);
		strcpy(path3,path);
		strcpy(path1,path2);//
		
		sprintf(temppath,"%d",evt_tmp[i].RTUNo);
		strcat(path1,temppath);
		strcat(path1,".wav");//厂
		
		strcat(path2,evt_tmp[i].InfoName);
		strcat(path2,".wav");
		mOffOrOnF = true;
		
		switch(SubtypeID) 
		{ 
			
		case    EVT_YC_ZC :        //    正常
			strcat(path3,"zc.wav");
			strcat(path,"zcdefault.wav");//没有录音文件的时候播放默认声音文件"遥测恢复正常
			break;
		case	EVT_YC_UP  :     //     上限
			strcat(path3,"up.wav");
			strcat(path,"updefault.wav"); 
			break;
			
		case	EVT_YC_DOWN	:   	 //下限
			strcat(path3,"down.wav");
			strcat(path,"downdefault.wav"); 
			break;
			
		case		EVT_YC_UUP	:	    	 //上上限
			strcat(path3,"uup.wav");
			strcat(path,"uupdefault.wav"); 
			break;
		case	EVT_YC_DDOWN:	 	 //下下限
			strcat(path3,"ddown.wav");
			strcat(path,"ddowndefault.wav"); 
			break;
		default: 
			strcat(path3,"default.wav");
			break ;
		}
		break;
		
	case EVT_YX	:	 	//:遥信
		strcat(path,"Yx\\");
		strcpy(path2,path);
		strcpy(path3,path);
		strcpy(path1,path2);//
		
		sprintf(temppath,"%d",evt_tmp[i].RTUNo);
		strcat(path1,temppath);
		strcat(path1,".wav");//厂
		
		strcat(path2,evt_tmp[i].InfoName);
		strcat(path2,".wav");
		mOffOrOnF = true;
		switch(SubtypeID)
		{
		case    OFF:			//	0		//0合-〉分	
			strcat(path3,"off.wav");
			break;
		case	ON:			//	1		1分-〉合	
			strcat(path3,"on.wav");
			break;
		case	OFF_BH:		//	2		保护复归	
			strcat(path3,"bh_off.wav");
			break;
		case	ON_BH:		//	3		保护动作	
			strcat(path3,"bh.wav");
			break;
		case	SG:			//	4		事故
			strcat(path3,"sg.wav");
			break;
		case	BYPASS:         //  5       旁路替代
			strcat(path3,"bypass.wav");
			break;	
			///////////////////zjh 2004.6.28/////////////////////////////////
		case	OFF_YB:         //  6       压板投入
			strcat(path3,"YB_ON.wav");
			break;	
		case	ON_YB:         //  7       压板退出
			strcat(path3,"YB_OFF.wav");
			break;	
			///////////////////zjh 2004.6.28/////////////////////////////////
		case	YX_ZL_OFF:         //  8       直流信号消失
			strcat(path3,"Yx_ZL_Off.wav");
			break;
		case	YX_ZL_ON:         //  9       直流信号产生
			strcat(path3,"Yx_ZL_On.wav");
			break;	
		case	LIMIT:			//  10		0变位限值或事故限值	
			strcat(path3,"limit.wav");
			break;
		case	GJ_OFF:         //  11       告警消失
			strcat(path3,"gj_off.wav");
			break;
		case	GJ_ON:         //  12       告警产生
			strcat(path3,"gj_on.wav");
			break;
		case	XIAO_OFF:         //  13       小电流接地消失
			strcat(path3,"xiao_off.wav");
			break;
		case	XIAO_ON:         //  14       小电流接地产生
			strcat(path3,"xiao_on.wav");
			break;
			///////////////////zjh 2004.6.28/////////////////////////////////
		case	YX_OTH_OFF:         //  15       其他信号消失
			strcat(path3,"Yx_Other_Off.wav");
			break;
		case	YX_OTH_ON:         //  16       其他信号产生
			strcat(path3,"Yx_Other_On.wav");
			break;
			///////////////////zjh 2004.6.28/////////////////////////////////
		default:
			strcat(path3,"default.wav");
			break ;
		}
		break;
	case EVT_SOE:	 //:SOE
		strcat(path,"Soe\\");
		strcpy(path2,path);
		strcpy(path3,path);
		strcpy(path1,path2);//
		
		sprintf(temppath,"%d",evt_tmp[i].RTUNo);
		strcat(path1,temppath);
		strcat(path1,".wav");//厂
		
		strcat(path2,evt_tmp[i].InfoName);
		strcat(path2,".wav");
		mOffOrOnF = true;
		switch(SubtypeID)
		{
		case		SOE_OFF			:	 	//0合-〉分	
			strcat(path3,"soe_off.wav");
			strcat(path,"offdefault.wav");
			break;
			
		case		SOE_ON			: 		//1分-〉合	
			strcat(path3,"soe_on.wav");
			strcat(path,"ondefault.wav");
			break;
		case		SOE_OFF_BH		: 		//2保护复归	
			strcat(path3,"soe_off_bh.wav");
			strcat(path,"off_bhdefault.wav");
			break;
		case		SOE_ON_BH		:		//3保护动作	
			strcat(path3,"soe_on_bh.wav");
			strcat(path,"on_bhdefault.wav");
			break;
			///////////////////zjh 2004.6.28/////////////////////////////////
		case	YX_ZL_OFF:         //  8       直流信号消失
			strcat(path3,"Soe_ZL_Off.wav");
			break;
		case	YX_ZL_ON:         //  9       直流信号产生
			strcat(path3,"Soe_ZL_On.wav");
			break;					
		case	GJ_OFF:         //  11       告警消失
			strcat(path3,"Soe_gj_off.wav");
			break;
		case	GJ_ON:         //  12       告警产生
			strcat(path3,"Soe_gj_on.wav");
			break;
		case	XIAO_OFF:         //  13       小电流接地消失
			strcat(path3,"Soe_xiao_off.wav");
			break;
		case	XIAO_ON:         //  14       小电流接地产生

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -