📄 server1.cpp
字号:
char fn[_MAX_PATH];
_mbscpy(tmp,Curpath);
unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\CONFIG\\cari03.dat");
// char fn[60]="\\CONFIG\\cari03.dat";
if ((file=fopen(fn,"rb+"))==NULL)
{
// MessageBox(NULL,"文件打开错误!!","提示!",MB_OK);
return ;
}
fread(&adlst,sizeof(adlst),1,file);
fclose(file);
// GetLocalTime(&pdt);
// lastime[0]=pdt.wHour;
// lastime[1]=pdt.wMinute;
// lastime[2]=pdt.wSecond;
}
void Server1::Read_rj_MemData()
{
// TODO: Add your implementation code here
FILE *file;
char path[_MAX_PATH]="";
unsigned char tmp[_MAX_PATH]="";
char fn[_MAX_PATH];
_mbscpy(tmp,Curpath);
unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\MemData.rdt");
if ((file=fopen(fn,"rb+"))==NULL)
{
return;
}
fread(&staTrouble,sizeof(staTrouble),1,file); //读入分站状态@05-4-17
for(int i=0;i<4096;i++)
{
perstmb[i].localtm=0;
fread(&perstmb[i],sizeof(perstmb[0]),1,file);
}
fclose(file);
}
void Server1::Read_cari04()
{
// SYSTEMTIME pdt;
FILE *file;
char path[_MAX_PATH]="";
unsigned char tmp[_MAX_PATH]="";
char fn[_MAX_PATH];
_mbscpy(tmp,Curpath);
unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\CONFIG\\cari04.dat");
// char fn[60]="\\CONFIG\\cari03.dat";
if ((file=fopen(fn,"rb+"))==NULL)
{
// MessageBox(NULL,"文件打开错误!!","提示!",MB_OK);
return ;
}
fread(&manager,sizeof(manager),1,file);
fclose(file);
// GetLocalTime(&pdt);
// lastime[0]=pdt.wHour;
// lastime[1]=pdt.wMinute;
// lastime[2]=pdt.wSecond;
}
void Server1::Read_kckz()
{
// SYSTEMTIME pdt;
FILE *file;
char path[_MAX_PATH]="";
unsigned char tmp[_MAX_PATH]="";
char fn[_MAX_PATH];
_mbscpy(tmp,Curpath);
unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\CONFIG\\CONFIGkc.dat");
if ((file=fopen(fn,"rb+"))==NULL)
{
return ;
}
fread(&KAI_CHUSBpz,sizeof(KAI_CHUSBpz),1,file);
fclose(file);
}
void Server1::Read_File()
{
Read_Sys_Files();
int i=0;
while((Files.otherpcname[i]!=0x20)&&(i<32))
{
otherpcname[i]=Files.otherpcname[i];
i++;
}
otherpcname[i]=0;
if((Files.sysflg&1)==1)
{
Read_St_Ini();
Read_Kjsys001();
Read_Kjsys002();
Read_Kjsys003();
Read_Kjsys004();
Read_kjsys005();
Read_Kjsys006();
Read_St_Exd();
Read_St_Xinxi();
Read_Cfg0();
Read_Cfg1();
Read_Cfg2();
Read_Cfg3();
Read_Cfg4();
Read_yddd();
Read_qydd();
Read_devpt();
Read_kckz();
}
if((Files.sysflg&2)==2)
{
Read_cari01();
Read_cari02();
Read_cari03();
Read_cari04();
Read_rj_MemData();
}
}
STDMETHODIMP Server1::Alarm_mnl_db(int cdNo)
{
// TODO: Add your implementation code here
int j;
float tmp;
int AlarmNum=alarmrecord.AlarmNum;
for (j=0;j<AlarmNum;j++)
{
tmp=alarmrecord.AlarmRec[j].avgv;
if(Timedata.NowdataRec[cdNo].addr_sensor==alarmrecord.AlarmRec[j].addr_sensor)
{
if(Timedata.NowdataRec[cdNo].nowdata<alarmrecord.AlarmRec[j].minv)
{
alarmrecord.AlarmRec[j].minv=Timedata.NowdataRec[cdNo].nowdata;
}
if(Timedata.NowdataRec[cdNo].nowdata>alarmrecord.AlarmRec[j].maxv)
{
alarmrecord.AlarmRec[j].maxv=Timedata.NowdataRec[cdNo].nowdata;
}
if(Alarm_Flag[cdNo]!=Timedata.NowdataRec[cdNo].nowdata)
{
Alarm_Flag[cdNo]=Timedata.NowdataRec[cdNo].nowdata;
alarmrecord.AlarmRec[j].avgv=(tmp+Timedata.NowdataRec[cdNo].nowdata)/2;
}
break;
}
}
return S_OK;
}
/***************************人员监测***************************/
void Server1::AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW)
{
ULONG cCharacters;
DWORD dwError;
if (NULL == pszA)
{
*ppszW = NULL;
return ;
}
//分配ANSI stringByte 数量 2Byte
cCharacters = strlen(pszA)+1;
//申请内存
*ppszW = (LPOLESTR) CoTaskMemAlloc(cCharacters*2);
if ( *ppszW == NULL)
{
MessageBox(NULL,"内存溢出!","错误!",MB_OK);
return;
}
// 转换 to Unicode.
if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters,
*ppszW, cCharacters))
{
dwError = GetLastError();
CoTaskMemFree(*ppszW);
*ppszW = NULL;
}
}
void Server1::UnicodeToAnsi(LPCOLESTR pszW, LPSTR* ppszA)
{
ULONG cbAnsi, cCharacters;
DWORD dwError;
// If input is null then just return the same.
if (pszW == NULL)
{
*ppszA = NULL;
return;
}
cCharacters = wcslen(pszW)+1;
//分配ANSI stringByte 数量 2Byte
cbAnsi = cCharacters*2;
//申请内存
*ppszA = (LPSTR) CoTaskMemAlloc(cbAnsi);
if (*ppszA == NULL)
{
MessageBox(NULL,"内存溢出!","错误!",MB_OK);
return;
}
// 转换 to ANSI.
if (0 == WideCharToMultiByte(CP_ACP, 0, pszW, cCharacters, *ppszA,
cbAnsi, NULL, NULL))
{
dwError = GetLastError();
CoTaskMemFree(*ppszA);
*ppszA = NULL;
}
}
STDMETHODIMP Server1::init_yddd()
{
// TODO: Add your implementation code here
int i;
for(i=1;i<255;i++)
{
yddd_flag[i]=0;
send_flag[i]=0;
yddd_time_flag[i]=0;
}
kgch.num=0;
return S_OK;
}
short Server1::PanFZOut(byte st, byte kck) //判断该分站开出口是否有本分站测点对应,且处于断电状态
{
short i,j,k,p,ret=0;
byte fzNo=st;
byte kckh=kck;
k = Files.StKCK[(File4.info[fzNo].state_type &0xf0) >>4];
j = (File4.info[fzNo].state_type & 0x0f);
i = File4.info[fzNo].fzindex;
p = Files.st[(File4.info[fzNo].state_type &0xf0) >>4].inport;
switch(j)
{
case 0: //1~8
ret = Get_Status(0, i, k, p, kckh);
break;
case 1: //1~16
ret = Get_Status(1, i, k, p, kckh);
break;
case 2: //1~32
ret = Get_Status(2, i, k, p, kckh);
break;
case 3: //1~64
ret = Get_Status(3, i, k, p, kckh);
break;
case 4: //1~128
ret = Get_Status(4, i, k, p, kckh);
break;
}
return ret;
}
short Server1::Get_Status(short cfgn, short fzindex,short kck_type,short port_num,byte kck)
{
short i,j,BLTX,type,rule,pos,su_index,ret=0;
short px=port_num;
byte kckh=kck;
short kckh_type=kck_type;
int cd_Num=get_cd_num();
for(i=0;i<px;i++)
{
switch(cfgn)
{
case 0:
BLTX=Cfg0.cfg0[fzindex][i].sensor;
type=Cfg0.cfg0[fzindex][i].xing;
rule=Cfg0.cfg0[fzindex][i].rule;
pos=Cfg0.cfg0[fzindex][i].position;
break;
case 1:
BLTX=Cfg1.cfg1[fzindex][i].sensor;
type=Cfg1.cfg1[fzindex][i].xing;
rule=Cfg1.cfg1[fzindex][i].rule;
pos=Cfg1.cfg1[fzindex][i].position;
break;
case 2:
BLTX=Cfg2.cfg2[fzindex][i].sensor;
type=Cfg2.cfg2[fzindex][i].xing;
rule=Cfg2.cfg2[fzindex][i].rule;
pos=Cfg2.cfg2[fzindex][i].position;
break;
case 3:
BLTX=Cfg3.cfg3[fzindex][i].sensor;
type=Cfg3.cfg3[fzindex][i].xing;
rule=Cfg3.cfg3[fzindex][i].rule;
pos=Cfg3.cfg3[fzindex][i].position;
break;
case 4:
BLTX=Cfg4.cfg4[fzindex][i].sensor;
type=Cfg4.cfg4[fzindex][i].xing;
rule=Cfg4.cfg4[fzindex][i].rule;
pos=Cfg4.cfg4[fzindex][i].position;//安装位置索引
break;
}
su_index=File2.file2[BLTX].su_index; //传感器索引
switch(type)
{
case 1:
if((File2.file2[BLTX].flag & 0x1)!=0 )
{
if(kckh_type==0) //多对一 //模拟量rule低4位为开出口号
{
if((rule & 0xf)==kckh)
goto Polo;
}
else //多对多 //模拟量rule8位中某一位为开出口号
{
if((rule & (1<< kckh)) != 0)
{
Polo: for(j=0;j<cd_Num;j++)
{
if(Timedata.NowdataRec[j].addr_sensor == (pos * 50 + su_index))
{
if(Timedata.NowdataRec[j].nowdata > File2.file2[BLTX].renew) //为安全起见
{
ret = 1;
break;
}
if(Timedata.NowdataRec[j].nowdata <= -100)
{
if(Files.GuZhangDD == 0)
{
ret = 1;
break;
}
}
}
}
}
}
}
break;
case 3:
if ((File2.file2[BLTX].flag & 0x1)!= 0 )
{//2
if(kckh_type==0) //多对一 //开关量rule高4位为开出口号
{
if (((rule & 0xf0) >>4 ) == kckh)
goto Audi;
}
else //多对多 //开关量rule高4位中某一位为开出口号
{//1
if ((((rule & 0xf0) >> 4) & ( 1<< kckh)) != 0)
{
Audi: for(j=0;j<cd_Num;j++)
{
if(Timedata.NowdataRec[j].addr_sensor == (pos * 50 + su_index))
{
if(Timedata.NowdataRec[j].nowdata == File2.file2[BLTX].shutdown)
{
ret = 1;
break;
}
}
}
}
}//1
}//2
break;
}
}
return ret;
}
STDMETHODIMP Server1::yddd_Proc()
{
// TODO: Add your implementation code here
int kckzword[255],i,j,k;
int dd_fd_flag[255][16];
int cd_Num=get_cd_num();
for(i=0;i<yddds.num;i++)
{
kckzword[yddds.yddds[i].st]=kckz[yddds.yddds[i].st];
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=0;
}
for(i=0;i<yddds.num;i++)
{//1
for(j=0;j<cd_Num;j++)
{//2
if(Timedata.NowdataRec[j].addr_sensor==yddds.yddds[i].NameIndex*50+yddds.yddds[i].SensorIndex)
{//3
int fzNo=File6.file6[Timedata.NowdataRec[j].addr_sensor % 50][Timedata.NowdataRec[j].addr_sensor / 50].addr;
int state=Get_st_state(fzNo);
if(state==2) //分站不通
{
/*****2005-2-14增加*****/
for(int p=0;p<errorrecord.ErrorNum;p++)
{
if(errorrecord.ErrorRec[p].errorflag==2 && errorrecord.ErrorRec[p].addr_sensor==fzNo)
{
DATE currentdt;
SYSTEMTIME pdt;
GetLocalTime(&pdt);
currentdt=dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
if(currentdt-errorrecord.ErrorRec[p].start_time>60*0.0000115741)
{
if(Get_st_state(yddds.yddds[i].st)==0)
{//5
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=1;
yddd_flag[yddds.yddds[i].st]=1;
}//5
}
}
}
/*****2005-2-14增加*****/
/*****2005-2-14删除*****/
/*if(Get_st_state(yddds.yddds[i].st)==0)
{//5
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=1;
yddd_flag[yddds.yddds[i].st]=1;
}//5 */
/*****2005-2-14删除*****/
}
switch(File3.file3[Timedata.NowdataRec[j].addr_sensor % 50].property)
{
case 1:
if(Timedata.NowdataRec[j].nowdata>=yddds.yddds[i].offvalue) //|| (Timedata.NowdataRec[j].nowdata==-100)) //无信号 贺改 2004-12-22
{//4
if(Get_st_state(yddds.yddds[i].st)==0)
{//5
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=1;
yddd_flag[yddds.yddds[i].st]=1;
}//5
}//4
else if(Timedata.NowdataRec[j].nowdata <= -100) //无信号 贺加 2004-12-22
{
if(Get_st_state(yddds.yddds[i].st)==0)
{//5
if(Files.GuZhangDD==0) //bit0 =1时不断电,=0时断电
{
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=1;
yddd_flag[yddds.yddds[i].st]=1;
}
}//5
}
else
{//4
if(Get_st_state(yddds.yddds[i].st)==0){
if((Timedata.NowdataRec[j].nowdata<=yddds.yddds[i].onvalue) && (Timedata.NowdataRec[j].nowdata>=0))
{
if(PanFZOut(yddds.yddds[i].st, yddds.yddds[i].kckzk)==0) //贺加 2004-12-22 判断本地断电
yddd_flag[yddds.yddds[i].st]=1;
}
else
{
if(((kckz[yddds.yddds[i].st]) & (1<<yddds.yddds[i].kckzk))!=0)
{
dd_fd_flag[yddds.yddds[i].st][yddds.yddds[i].kckzk]=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -