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

📄 server1.cpp

📁 DCOM 上位机和嵌入式系统通信
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		Val=Cfg3.cfg3[File4.info[fzNo].fzindex][PortNo].sensor;
		break;
	case 4:
		Val=Cfg4.cfg4[File4.info[fzNo].fzindex][PortNo].sensor;
		break;
	}
     return Val;
}

void Server1::cd_err_dj(int cdNo)
{
	// TODO: Add your implementation code here
	int m;
	int ErrNum=errorrecord.ErrorNum;
	//判测点故障及报警
   	for(m=0;m<ErrNum;m++)
	{
		if(errorrecord.ErrorRec[m].errorflag==1)
		{
			if(errorrecord.ErrorRec[m].addr_sensor==Timedata.NowdataRec[cdNo].addr_sensor)
		  		break;
		}
	}
   	if(m==ErrNum)
	{
		ErrNum=ErrNum+1;
   		errorrecord.ErrorNum=ErrNum;
		errorrecord.ErrorRec[ErrNum-1].fz_cd_num=cdNo;
   		errorrecord.ErrorRec[ErrNum-1].addr_sensor=Timedata.NowdataRec[cdNo].addr_sensor;
   		errorrecord.ErrorRec[ErrNum-1].errorflag=1;
		SYSTEMTIME start_time;
   		GetLocalTime(&start_time);   // address of system time structure
        errorrecord.ErrorRec[ErrNum-1].start_time=dateCal(start_time.wYear,start_time.wMonth,start_time.wDay,start_time.wHour,start_time.wMinute,start_time.wSecond);
   		if (Timedata.NowdataRec[cdNo].nowdata==-100)
   			errorrecord.ErrorRec[ErrNum-1].error_type=1;
   		if (Timedata.NowdataRec[cdNo].nowdata==-200)
    		errorrecord.ErrorRec[ErrNum-1].error_type=2;
   		if (Timedata.NowdataRec[cdNo].nowdata==-300)
    		errorrecord.ErrorRec[ErrNum-1].error_type=3;
		alarm_old_dj(cdNo);
	}
}

STDMETHODIMP Server1::cd_errold_dj(int cdNo)
{
	// TODO: Add your implementation code here
	int i,j;
	int ErrNum=errorrecord.ErrorNum;
	int ErrOldNum=erroroldrecord.ErrorCun;
    for (j=0;j<ErrNum;j++)
	{
   		if (errorrecord.ErrorRec[j].errorflag==1)
		{
         /*****************解除测点故障******************/
     		if (errorrecord.ErrorRec[j].addr_sensor==Timedata.NowdataRec[cdNo].addr_sensor)
			{
				SYSTEMTIME end_time;
	     		GetLocalTime(&end_time);   // address of system time structure
		
	     		DATE dt2=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
     			DATE dt1=errorrecord.ErrorRec[j].start_time;
                if(dt1!=dt2){
		   			ErrOldNum=ErrOldNum+1;
		   			erroroldrecord.ErrorCun=ErrOldNum;
		   			erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=1;                         
		   			erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=dt1;
		    		erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=Timedata.NowdataRec[cdNo].addr_sensor;
	       			erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt2;
					erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=errorrecord.ErrorRec[j].error_type;
				}
				/*************从实时测点故障中移去******************/
				if(j==ErrNum-1)
				{
					ErrNum=ErrNum-1;
					errorrecord.ErrorNum=ErrNum;
				}
				else
				{
					for(i=j+1;i<ErrNum;i++)
					{
     			   		errorrecord.ErrorRec[i-1]=errorrecord.ErrorRec[i];
					}
					ErrNum=ErrNum-1;
					errorrecord.ErrorNum=ErrNum;
				}
			    
			}
		}
	}
	return S_OK;
}

STDMETHODIMP Server1::Get_kaijutu_tab(int kaitu_No,int *addr_sensor,int * timenow,long *kjt0,long *kjt1,long *kjt2,long *kjt3)
{
	// TODO: Add your implementation code here
	*addr_sensor=ktp.kaijutu[kaitu_No].addr_sensor;
	*timenow=ktp.kaijutu[kaitu_No].timenow;
	*kjt0=ktp.kaijutu[kaitu_No].kjt[0];
	*kjt1=ktp.kaijutu[kaitu_No].kjt[1];
	*kjt2=ktp.kaijutu[kaitu_No].kjt[2];
	*kjt3=ktp.kaijutu[kaitu_No].kjt[3];
	return S_OK;
}

STDMETHODIMP Server1::Get_Alar(int alarNo,int *addr_sensor,float *maxv,float *minv,float *avgv,DATE *start_time, DATE *end_time)
{
	// TODO: Add your implementation code here
	*addr_sensor=alarmoldrecord.AlarmOldRec[alarNo].addr_sensor;
	*maxv=alarmoldrecord.AlarmOldRec[alarNo].maxv;
	*minv=alarmoldrecord.AlarmOldRec[alarNo].minv;
	*avgv=alarmoldrecord.AlarmOldRec[alarNo].avgv;
	*start_time=alarmoldrecord.AlarmOldRec[alarNo].start_time;
	*end_time=alarmoldrecord.AlarmOldRec[alarNo].end_time;
	return S_OK;
}

STDMETHODIMP Server1::Set_Alar_Num(int Num)
{
	// TODO: Add your implementation code here
	alarmoldrecord.AlarmCun=Num;
	return S_OK;
}


STDMETHODIMP Server1::Set_Err_Num(int Num)
{
	// TODO: Add your implementation code here
	erroroldrecord.ErrorCun=Num;
	return S_OK;
}

STDMETHODIMP Server1::Get_Err(int errNo,int *addr_sensor,BYTE *errorflag,BYTE *error_type,DATE *start_time, DATE *end_time)
{
	// TODO: Add your implementation code here
	*addr_sensor=erroroldrecord.ErroroldRec[errNo].addr_sensor;
	*errorflag=erroroldrecord.ErroroldRec[errNo].errorflag;
	*error_type=erroroldrecord.ErroroldRec[errNo].error_type;
	*start_time=erroroldrecord.ErroroldRec[errNo].start_time;
	*end_time=erroroldrecord.ErroroldRec[errNo].end_time;
	return S_OK;
}

STDMETHODIMP Server1::Get_Alar_Num(int *AlarNum)
{
	// TODO: Add your implementation code here
    *AlarNum=alarmoldrecord.AlarmCun;
	return S_OK;
}

STDMETHODIMP Server1::Get_Err_Num(int *ErrNum)
{
	// TODO: Add your implementation code here
    *ErrNum=erroroldrecord.ErrorCun;
	return S_OK;
}

STDMETHODIMP Server1::Get_NowData_Num(int *Num)
{
	// TODO: Add your implementation code here
	*Num=Timedata.DataNum;
	return S_OK;
}

STDMETHODIMP Server1::Get_Kaijutu_Num(int *Num)
{
	// TODO: Add your implementation code here
    *Num=ktp.numb;
	return S_OK;
}

int Server1::if_leapyear(int year)
{
	int leap_year;
	if(year % 4==0)
	{
		if(year%100==0)
		{
			if(year%400==0)
				leap_year=1;
			else
				leap_year=0;
		}
		else leap_year=1;
	}
	else
		leap_year=0;
	return leap_year;
}
DATE Server1::dateCal(int year,int month,int day,int hour,int minute,int second)
{
	int i;
	DATE tmpdate=0;
	for(i=1900;i<year;i++)
	{
		if (if_leapyear(i)==1)
			tmpdate+=366;
		else
			tmpdate+=365;
	}
	tmpdate+=1;
	tmpdate+=day;
	for(i=1;i<month;i++)
	{
		if((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10))
			tmpdate+=31;
		else if(i==2) 
		{
			if(if_leapyear(year)==1)
			    tmpdate+=29;
			else
				tmpdate+=28;
		}
		else
			tmpdate+=30;
	}
	tmpdate+=(double)hour/24;
    tmpdate+=(double)minute/(24*60);
	tmpdate+=(double)second/(24*60*60);
	return tmpdate;
}

void Server1::fz_err_dj(int stNo)
{
	// TODO: Add your implementation code here
    int i,j;
	int ErrNum=errorrecord.ErrorNum;
	for (j=0;j<ErrNum;j++)
	{
		if (errorrecord.ErrorRec[j].errorflag==2)
		{
			if (errorrecord.ErrorRec[j].addr_sensor==stNo)
        		break;
		}
	}
/***********************登记分站故障********************/
	if (j==ErrNum)
	{
		ErrNum=ErrNum+1;
		errorrecord.ErrorNum=ErrNum;
		errorrecord.ErrorRec[ErrNum-1].fz_cd_num=stNo;
		errorrecord.ErrorRec[ErrNum-1].errorflag=2;
		errorrecord.ErrorRec[ErrNum-1].error_type=0;
		SYSTEMTIME start_time;
    	GetLocalTime(&start_time);   // address of system time structure
	  	errorrecord.ErrorRec[ErrNum-1].start_time=dateCal(start_time.wYear,start_time.wMonth,start_time.wDay,start_time.wHour,start_time.wMinute,start_time.wSecond);
		errorrecord.ErrorRec[ErrNum-1].addr_sensor = stNo;
	}
    int Num1=alarmrecord.AlarmNum;
	int Num2=alarmoldrecord.AlarmCun;
	for(i=0;i<Num1;i++)			//解除报警
	{
		int index=alarmrecord.AlarmRec[i].addr_sensor/50;
		int sensor=alarmrecord.AlarmRec[i].addr_sensor%50;
		if(File6.file6[sensor][index].addr==stNo)
		{
			Num2+=1;
            alarmoldrecord.AlarmCun=Num2;
			alarmoldrecord.AlarmOldRec[Num2-1].addr_sensor=alarmrecord.AlarmRec[i].addr_sensor;
			alarmoldrecord.AlarmOldRec[Num2-1].start_time=alarmrecord.AlarmRec[i].start_time;
			SYSTEMTIME end_time;
			GetLocalTime(&end_time);   // address of system time structure
			alarmoldrecord.AlarmOldRec[Num2-1].end_time=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
			alarmoldrecord.AlarmOldRec[Num2-1].avgv=alarmrecord.AlarmRec[i].avgv;
			alarmoldrecord.AlarmOldRec[Num2-1].maxv=alarmrecord.AlarmRec[i].maxv;
			alarmoldrecord.AlarmOldRec[Num2-1].minv=alarmrecord.AlarmRec[i].minv;
    		if(i==Num1-1)
			{
				Num1-=1;
	      		alarmrecord.AlarmNum=Num1;
			}
			else
			{
				for(j=i+1;j<Num1;j++)
				{
	     			alarmrecord.AlarmRec[j-1]=alarmrecord.AlarmRec[j];
				}
	    		Num1-=1;
	      		alarmrecord.AlarmNum=Num1;
			}
            break;
		}
	}

}

STDMETHODIMP Server1::fz_errold_dj(int stNo)
{
	// TODO: Add your implementation code here
	int j,k;
	int ErrNum=errorrecord.ErrorNum;
	int ErrOldNum=erroroldrecord.ErrorCun;
	for (j=0;j<ErrNum;j++)
	{
		if (errorrecord.ErrorRec[j].errorflag==2)
		{
        /*****************解除分站故障*************************/
			if (errorrecord.ErrorRec[j].addr_sensor==stNo)
			{
				SYSTEMTIME end_time;
	     		GetLocalTime(&end_time);   // address of system time structure
		
	     		DATE dt2=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
     			DATE dt1=errorrecord.ErrorRec[j].start_time;
                if(dt1!=dt2){
		    		ErrOldNum=ErrOldNum+1;
					erroroldrecord.ErrorCun=ErrOldNum;
					erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=2;                         
					erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=errorrecord.ErrorRec[j].start_time;
					erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=errorrecord.ErrorRec[j].error_type;
					erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=stNo;

					erroroldrecord.ErroroldRec[ErrOldNum-1].val=errorrecord.ErrorRec[j].val;
					_mbscpy(erroroldrecord.ErroroldRec[ErrOldNum-1].name,errorrecord.ErrorRec[j].name);
					_mbscpy(erroroldrecord.ErroroldRec[ErrOldNum-1].describe,errorrecord.ErrorRec[j].describe);
	    			erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt2;
				}
							/*************从实时分站故障中移去******************/
				if(j==ErrNum-1)
				{
					ErrNum=ErrNum-1;
					errorrecord.ErrorNum=ErrNum;
				}
				else
				{
					for(k=j+1;k<ErrNum;k++)
					{
			    		errorrecord.ErrorRec[k-1]=errorrecord.ErrorRec[k];
					}
					ErrNum=ErrNum-1;
                    errorrecord.ErrorNum=ErrNum;
				}
				
			}
		}
	}
	return S_OK;
}

int Server1::Get_st_state(int stNo)
{
	return (stinfo.stinfo[stNo]);
}

STDMETHODIMP Server1::Get_station_state(int stNo, int *state)
{
	// TODO: Add your implementation code here
    *state=Get_st_state(stNo);
	return S_OK;
}

int Server1::get_cd_num()
{
	return (Timedata.DataNum);
}

STDMETHODIMP Server1::Get_Error_Num(int *Num)
{
	// TODO: Add your implementation code here
	int i,status,cd_num;
	int Num1=alarmrecord.AlarmNum;
	int Num2=alarmoldrecord.AlarmCun;
    int stNo=0;
	for(i=0;i<Num1;i++)			// 分站休眠解除报警
	{
		int index=alarmrecord.AlarmRec[i].addr_sensor/50;
		int sensor=alarmrecord.AlarmRec[i].addr_sensor%50;
		stNo=File6.file6[sensor][index].addr;
	//	if(File6.file6[sensor][index].addr==stNo)
		if((File4.flag[stNo]&0x80)!=0)
		{
			Num2+=1;
            alarmoldrecord.AlarmCun=Num2;
			alarmoldrecord.AlarmOldRec[Num2-1].addr_sensor=alarmrecord.AlarmRec[i].addr_sensor;
			alarmoldrecord.AlarmOldRec[Num2-1].start_time=alarmrecord.AlarmRec[i].start_time;
			SYSTEMTIME end_time;
			GetLocalTime(&end_time);   // address of system time structure
			alarmoldrecord.AlarmOldRec[Num2-1].end_time=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
			alarmoldrecord.AlarmOldRec[Num2-1].avgv=alarmrecord.AlarmRec[i].avgv;
			alarmoldrecord.AlarmOldRec[Num2-1].maxv=alarmrecord.AlarmRec[i].maxv;
			alarmoldrecord.AlarmOldRec[Num2-1].minv=alarmrecord.AlarmRec[i].minv;
    		if(i==Num1-1)
			{
				Num1-=1;
	      		alarmrecord.AlarmNum=Num1;
			}
			else
			{
				for(int j=i+1;j<Num1;j++)//修改
				{
	     			alarmrecord.AlarmRec[j-1]=alarmrecord.AlarmRec[j];
				}
	    		Num1-=1;
	      		alarmrecord.AlarmNum=Num1;
			}
            break;
		}
	}

	for(i=1;i<255;i++)
	{
		status=Get_st_state(i);
		if(status==2)
			fz_err_dj(i);
	}
    cd_num=get_cd_num();
	
	for (i=0; i<cd_num; i++)
	{
		status=get_cd_state(i);
		if(status==1)                         //模拟量
		   cd_err_dj(i);
	}

    *Num=errorrecord.ErrorNum;
	return S_OK;
}

STDMETHODIMP Server1::Get_Error(int gz_No, int *Err_Flag,int *fz_cd_No)
{
	// TODO: Add your implementation code here
	*Err_Flag=errorrecord.ErrorRec[gz_No].errorflag;
	*fz_cd_No=errorrecord.ErrorRec[gz_No].fz_cd_num;
	return S_OK;
}

int Server1::get_cd_state(int cdNo)
{
	int Bltx;
	int Ret;
	int fz,port;     //分站号及端口号
	Bltx = Get_Bltx(File6.file6[Timedata.NowdataRec[cdNo].addr_sensor % 50][Timedata.NowdataRec[cdNo].addr_sensor / 50].addr, File6.file6[Timedata.NowdataRec[cdNo].addr_sensor % 50][Timedata.NowdataRec[cdNo].addr_sensor / 50].port);
	switch (File3.file3[Timedata.NowdataRec[cdNo].addr_sensor % 50].property)
	{
		case 1:                          //模拟量
			if((Timedata.NowdataRec[cdNo].nowdata==-100) || (Timedata.NowdataRec[cdNo].nowdata==-200) || (Timedata.NowdataRec[cdNo].nowdata==-300))
				Ret=1;
			else
			{
				if((File2.file2[Bltx].flag & 0x06) !=0)
				{
					if((File2.file2[Bltx].flag & 0x06) ==6) //处理上下报警
					{
						if((Timedata.NowdataRec[cdNo].nowdata >=File2.file2[Bltx].up_alarm) ||
							(Timedata.NowdataRec[cdNo].nowdata <=File2.file2[Bltx].down_alarm))
							Ret=2;
						else 
						{
							Ret=0;
							if((Timedata.NowdataRec[cdNo].nowdata <File2.file2[Bltx].up_remove_alarm) ||
								(Timedata.NowdataRec[cdNo].nowdata >File2.file2[Bltx].down_remove_alarm) )
								Ret=5;
						}
							
					}else{
		    			if((File2.file2[Bltx].flag & 0x02) !=0) //上限报警
						{
				    		if(Timedata.NowdataRec[cdNo].nowdata >=File2.file2[Bltx].up_alarm)
				    			Ret=2;
							else{
								Ret=0;
							    if(Timedata.NowdataRec[cdNo].nowdata <File2.file2[Bltx].up_remove_alarm)
								   Ret=5;
							}
						}else if((File2.file2[Bltx].flag & 0x04) !=0)//下限报警
						{
				    		if(Timedata.NowdataRec[cdNo].nowdata <=File2.file2[Bltx].down_alarm)
								Ret=2;
							else{
								Ret=0;
								if(Timedata.NowdataRec[cdNo].nowdata >File2.file2[Bltx].down_remove_alarm)
									Ret=5;
							}
						}
					}
				}else if(scanflg)  Ret=6;
			}
			break;
		case 2:
			break;
		case 0x11:// 导出模拟量
			int i;
			int k;
			
			for(i=0;i<devpoint.count;i++)
			{
				k=devpoint.dv[i].position*50+File2.file2[devpoint.dv[i].sensor].su_index;

⌨️ 快捷键说明

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