📄 evtdb.cpp
字号:
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 + -