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

📄 server1.cpp

📁 DCOM 上位机和嵌入式系统通信
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	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 + -