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

📄 fdcsdata.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
字号:
// FdcsData.cpp : implementation file
//

#include "stdafx.h"
#include "FdcsData.h"
#include "host32.h"
#include "Global.h"
#include "DataType.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;  //面向瓦面
#endif

/////////////////////////////////////////////////////////////////////////////
// CFdcsData
short	poll[100],localNo=2,NetCard_Num=3;
short	Station=2;	//1:锅炉;2:汽机;0:工程师站
short   sendNum=0;

IMPLEMENT_DYNCREATE(CFdcsData, CWinThread)

CFdcsData::CFdcsData()
{
}

CFdcsData::~CFdcsData()
{
}

BOOL CFdcsData::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CFdcsData::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CFdcsData, CWinThread)
	//{{AFX_MSG_MAP(CFdcsData)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFdcsData message handlers
void CFdcsData::Fdcs_Init(void)
{
   OpenFdcsPort();
   short i,error;
   short initadnum=0;
   short init_k, h[32];
   
   GetCardSetInfo();
   init_k=0x100;
   for(i=0;i<100;i++) poll[i]=0;
   //if( localNo!=0 )
   {
      for(i=0;i<31;i++) h[i]=0;
      for(i=0;i<NetCard_Num;i++) h[i]=1;
   }

   for(i=0;i<3;i++){
     IdcbInt(localNo,h,&poll[1],init_k,&error);
     if(!error) break;
   }
   if(error)
	   AfxMessageBox("网络初始化错误!",MB_OK,0);
}


short CFdcsData::Fdcs_Coll(short add)
{
   short i,ch_num,ch1=1,stream=0,error;
	
	if(poll[add]==9)  ch_num = A120_NUM;
	if(poll[add]==42) ch_num = A415_NUM;
	
	for(i=0;i<2;i++){
		IdcbNum(add,stream,ch1,ch_num,&anaVal[1],&state[1],&fdcstime[0][0],&error);
		if(error==0) break;
	}

	if(error<0){                 /*  置质量坏标志                */
	    for(i=1;i<=ch_num;i++) state[i]=-1;
	}	

   return( error );
}

short CFdcsData::Fdcs_AnaOut(short add)  //
{
    short i,ch1=1,error;
	short stream=0;
	i=6;
	IdcbNum(add,stream,ch1,i,&anaVal[1],&state[1],&fdcstime[0][0],&error);
    return( error );
}

short CFdcsData::Fdcs_RdSt(short add)
{
   short error;
   short i,num_n,ch;

   if(poll[add]==25)					num_n=30;
   if(poll[add]==24)					num_n=6;
   if((poll[add]==23)||(poll[add]==22)) num_n=20;
   ch=1;
   short stream=3;
   
   for(i=0;i<2;i++){
	   idcb_es(add,stream,ch,num_n,&swVal[1],&fdcstime[1][0],&error);
	   if(error==0) break;
	}

   return( error );
}

short CFdcsData::Fdcs_RdEvent(short add)
{
   short error;
   short i,num_n,ch;

   ch=1;
   short stream=0;
   num_n=1;

   for(i=0;i<2;i++){
	   IdcbEs(add,stream,ch,num_n,&swVal[1],&fdcstime[1][0],&error);
	   if(error==0) break;
	}

   stream=2;
   for(i=0;i<2;i++){
	   IdcbClr(add,stream,num_n,&error);
	   if(error==0) break;
	}	
   return( error );
}
short CFdcsData::Fdcs_figout(short add,short ch,bool st)
{
   short error;
   short num_n;
   float aa[10];
   char  cc[20];
  
 
    num_n=0;
	if(st)
	    sprintf(cc,"ON%02d",ch);	
	else
	    sprintf(cc,"OF%02d",ch);	
	IdcbTx(add,cc,num_n,aa,&error);
	
    return( error );
}

void	CFdcsData::Fdcs_Add(short add)
{
	IdcbAdd(add);
}

void  CFdcsData::Fdcs_NetInit(void)
{
   short i,error;
   short initadnum=0;
   short init_k,init_ad, hh[32];
   short init_p[100];
   
	IdcbAdd(0x1a0);
    
   init_k =0x100;
   init_ad=2;
   for(i=0;i<100;i++) init_p[i]=0;
   for(i=0;i<32;i++) hh[i]=0;
   hh[0]=1; hh[1]=1;

   for(i=0;i<3;i++){
     IdcbInt(init_ad,hh,&init_p[1],init_k,&error);
     if(!error) break;
   }
   if(error)
   {
	   AfxMessageBox("通讯网络初始化错误!",MB_OK,0);
   }

	IdcbAdd(0x1c0);
}

void CFdcsData::NetSend()		//
{  	 
	 
 
 
  
}


void	CFdcsData::initpoint(void)
{
	 
} 


void	CFdcsData::Read_Computer(void)
{
//   FILE *stream;
//   stream = fopen( ".\\table\\cardInfo.txt", "r+" );
//   fscanf( stream, "%hd %hd",&localNo,&NetCard_Num);
//   fclose(stream);
}

void CFdcsData::Def_Initpoint(short *Loc_DataBlock_Modified)
{   

  	short pi,i,k,nType;
    //char cdisp[80];
	Anapstruct  *pWork,*pWork1,*wk;
	Anapstruct  *ctrptr[MAX_ADNUM];
	char workstr[60],errinf[100];
	float  intpara[64];
	short    intparanum,ad_adr,err;
	float  a,b;	//y=ax+b
	//  a=(工艺信号上量程T2-下量程T1)/((原始信号上量程S2-下量程S1)*转换电阻值R)
        //  b=(S2*T1-S1*T2)/(S2-S1)

	char  zerobuf[512];
	for(i=0;i<512;i++)	zerobuf[i]=0;

	pWork1 = new Anapstruct[(MAX_ADNUM+1)*(MAX_CHNUM+1)];
	for(i=0;i<=MAX_ADNUM;i++)
	  ctrptr[i]=pWork1+i*(MAX_CHNUM+1);
	pWork = pWork1;
	for(i=0;i<(MAX_ADNUM+1)*(MAX_CHNUM+1);i++){
		pWork = pWork1+i;
		memcpy(pWork,zerobuf,sizeof(Anapstruct));
	}

	DataBlock	attr;
	//attr	= new DataBlock;

   FILE *stream;
   stream = fopen( ".\\table\\Analogdoc.txt", "r+" );
   while(fscanf( stream, "%hd %hd %s",&attr.WP_TypeIndex,&attr.WP_Number,&attr.WP_Code[0])!=EOF){
 		fscanf( stream, "%s %hd %hd",&attr.WP_Name[0],&attr.WP_OriginalIndex,&attr.Occupied_FdcsNo); 
 		fscanf( stream, "%hd %hd %f",&attr.Occupied_ChannelNo,&attr.Alert_Switch,&attr.PjtSignal_downLimit); 
		fscanf( stream, "%f %s %f",&attr.PjtSignal_upLimit,&attr.PjSignal_unit[0],&attr.Alert_downLimit); 
		fscanf( stream, "%f %f %f",&attr.Alert_upLimit,&attr.OrgnSignal_downLimit,&attr.OrgnSignal_upLimit); 
		fscanf( stream, "%s %hd %hd",&attr.OrgnSignal_unit[0],&attr.OrgnSignal_TypeIndex,&attr.Compensate_wayIndex); 
		fscanf( stream, "%hd %hd %hd",&attr.Compensate_Tempchange,&attr.Compensate_FdcsNo,&attr.Compensate_ChannelNo); 

		fscanf( stream, "%s %s",&attr.Switch_Off[0],&attr.Switch_On[0]); 


		if((attr.Occupied_FdcsNo<1)||(attr.Occupied_FdcsNo>MAX_ADNUM)){
//		  sprintf(cdisp,"输入前置机号%d、通道号%d错误",attr.Occupied_FdcsNo,attr.Occupied_ChannelNo);
//		  AfxMessageBox (cdisp, MB_OK,0);
		  continue;
		}
		if((attr.WP_Number>MAX_TOTAL)||(attr.WP_Number<1)) continue;


//前端模式参数库
		pWork			= ctrptr[attr.Occupied_FdcsNo]+attr.Occupied_ChannelNo;
		pWork->psNo		= attr.WP_Number;
//		strcpy(pWork->psCode, attr.WP_Code);
		pWork->iSignType= attr.OrgnSignal_TypeIndex;
		pWork->add		= attr.Occupied_FdcsNo;
		pWork->ch		= attr.Occupied_ChannelNo;
		pWork->elecTop	= attr.OrgnSignal_upLimit;
		pWork->elecBot	= attr.OrgnSignal_downLimit;
		//strcpy(pWork->elecUnit, attr.OrgnSignal_unit);
		pWork->sysBot	= attr.PjtSignal_downLimit;
		pWork->sysTop	= attr.PjtSignal_upLimit;
		//strcpy(pWork->sysUnit, attr.PjSignal_unit);
		if(attr.Alert_downLimit<attr.PjtSignal_downLimit) pWork->alrmLow = attr.PjtSignal_downLimit;
		else	pWork->alrmLow	= attr.Alert_downLimit;
		if(attr.Alert_upLimit>attr.PjtSignal_upLimit) pWork->alrmHig = attr.PjtSignal_upLimit;
		else    pWork->alrmHig	= attr.Alert_upLimit;
	}
	fclose(stream);

	short chNum=A415_NUM;
	short *Loc_DataBlock_Modified1;
	for(pi=1;pi<MAX_ADNUM;pi++){	  	 
      
	  switch(poll[pi]){
	    case 9:
		case 42:
			ad_adr=pi;
			if(poll[pi]==9) chNum=A120_NUM;
			for(i=1;i<=chNum;i++){
				// **********lxl add in 2000-4-30 begin**********
              Loc_DataBlock_Modified1=Loc_DataBlock_Modified+pi*(MAX_CHNUM+1)+i;
			  if (*Loc_DataBlock_Modified1!=1) continue;
			  //*******lxl add in 2000-4-30 end;
			  wk=ctrptr[pi]+i;

/*			  if((strcmp(wk->psCode,"A256")==0)||(strcmp(wk->psCode,"A257")==0)){
				 wk->sysTop*=wk->sysTop;
				 aps = aps1+wk->add*(MAX_CHNUM+1)+wk->ch;
				 aps->sysTop = wk->sysTop;
			  }
*/			
			  if((wk->add<=0)||(wk->add>MAX_ADNUM)||(wk->psNo==0)||(wk->ch<=0)||(wk->ch>20)){
		        sprintf(workstr,"CH%02dMO000;CO",i);
                intparanum=0;
		        IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);;
				continue;
			  }

		      switch(wk->iSignType){
			  case 0:	//电压(0-5000mV)
					sprintf(workstr,"CH%02dMO100SIBO;CO",i);
					if((wk->elecTop-wk->elecBot)<0.01){
	//				  sprintf(cdisp,"%d#前置机%d# 通道上限%7.2f 下限%7.2f 错误!",ad_adr,i,wk->electop,wk->elecbot);
	//				  AfxMessageBox(cdisp,MB_OK,0);
					  continue;
					}
					if(wk->elecTop>5120.00) wk->elecTop = 5000.00;
					if(wk->elecBot<-5120.0) wk->elecBot = 0.0;
					a=(float)(wk->sysTop-wk->sysBot)/((float)(wk->elecTop-wk->elecBot));
					b=wk->sysTop-a*wk->elecTop;

		//		    sprintf(cdisp,"electop:%7.2f bot:%7.2f",wk->electop,wk->elecbot);
		//		    AfxMessageBox(cdisp,MB_OK,0);

					intpara[0]=a;
					intpara[1]=b;
					intpara[2]=wk->alrmLow;
					intpara[3]=wk->alrmHig;
					intparanum=4;
					for(k=0;k<3;k++){
					  IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
					  if(err==0) break;
					}

					if(err){
					  //sprintf(cdisp,"%d# 前置机 %d# 通道错误!err:%d  %s",ad_adr,i,err,workstr);
					  //AfxMessageBox(cdisp,MB_OK,0);
					}
					break;
			  case 1:	//电流
					sprintf(workstr,"CH%02dMO100SIBO;CO",i);
					if((wk->elecTop-wk->elecBot)<0.01){
					  continue;
					}
					a=(float)(wk->sysTop-wk->sysBot)/((float)(wk->elecTop-wk->elecBot)*RR);
					b=wk->sysTop-a*wk->elecTop*RR;

					intpara[0]=a;
					intpara[1]=b;
					intpara[2]=wk->alrmLow;
					intpara[3]=wk->alrmHig;
					intparanum=4;
					for(k=0;k<3;k++){
					  IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
					  if(err==0) break;
					}

					if(err){
					}
				  break;
			  case 2:	//热电偶
			  case 3:
				  if(wk->iSignType == 2 )  nType = 3;
				  if(wk->iSignType == 3 )  nType = 8;
	  				sprintf(workstr,"CH%02dMO3%1d0BO;CO",i,nType);
					intpara[0]=wk->alrmLow;
					intpara[1]=wk->alrmHig;
					intparanum=2;
					IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
					if(err){
					  sprintf(errinf,"%d# 前置机 %d# 通道错误!",ad_adr,i);
//					  AfxMessageBox(errinf,MB_OK,0);
					}		
				  break;
			  case 4:	//热电阻pt100
			  case 5:
			  case 6:
			  case 7:
				  if(wk->iSignType == 4 )  nType = 1;
				  if(wk->iSignType == 5 )  nType = 2;
				  if(wk->iSignType == 6 )  nType = 4;
				  if(wk->iSignType == 7 )  nType = 7;
	  				sprintf(workstr,"CH%02dMO4%1d02BO;CO",i,nType);
//				  if(wk->iSignType == 5 ) 
//	  				sprintf(workstr,"CH%02dMO2002BO;CO",i);
					intpara[0]=wk->alrmLow;
					intpara[1]=wk->alrmHig;
					intparanum=2;
					IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
					if(err){
					  sprintf(errinf,"%d_%d# 通道错误! ",ad_adr,i);
//					  AfxMessageBox(errinf,MB_OK,0);
					}
				break;
			  default:
				  break;
			  }
			}
            intparanum=0;
		    IdcbTx(ad_adr,"SA40;CO",intparanum,&intpara[0],&err);
		    break;


	    case 22:
	    case 23:
		 ad_adr=pi;
		 for(i=1;i<=chNum;i++){
			 //****** lxl add in 2000-4-30 begin**********
            Loc_DataBlock_Modified1=Loc_DataBlock_Modified+pi*(MAX_CHNUM+1)+i;
			if (*Loc_DataBlock_Modified1!=1) continue;
			// ******lxl add in 2000-4-30 end********

		    wsprintf(workstr,"CH%02dMO732DB2;CO",i);
		    intparanum=0;
		    IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);
		    if(err){
		      //sprintf(errinf,"%d# 前置机 %d# 通道错误!",ad_adr,i);
		      //AfxMessageBox(errinf,MB_OK,0);
		    }
          }
          break;

	    default:
			sprintf(workstr,"CH%02dMO000;CO",i);
			intparanum=0;
			IdcbTx(ad_adr,&workstr[0],intparanum,&intpara[0],&err);;
          break;
          }
    }

	delete[] pWork1;  
}

void CFdcsData::Def_SendReCommand(short adr)
{
   float Data[8];
   short err;
   IdcbTx(0,"RE",0,&Data[0],&err);	  
}  

void CFdcsData::Def_InitNet()
{
   short i,error;
   short initadnum=0;
   short init_k, h[32],Loc_poll[100];
   
   init_k=0x100;
   for(i=0;i<MAX_ADNUM;i++) Loc_poll[i]=0; 
   for(i=0;i<31;i++) h[i]=0;
   for(i=0;i<NetCard_Num;i++) h[i]=1; 
   for(i=0;i<3;i++)
   {
     IdcbInt(localNo,h,&Loc_poll[1],init_k,&error);
     if(!error) break;
   }
   if (!error) for(i=0;i<MAX_ADNUM;i++) poll[i]=Loc_poll[i]; 
}

void CFdcsData::Fdcs_ReadTime(short *err, char *p)
{
   short error;
   char  Loc_Time[40];
   for(int i=0;i<3;i++)
   {
     IdcbRt(Loc_Time,&error);
     if(!error) break;
   } 
   *err=error;
   strcpy(p,Loc_Time);
}


BOOL CFdcsData::RegActivex(LPCTSTR pszDllName,LPSTR nErrorCode)
{
    //ActiveX控件的路径及文件名
	//装载ActiveX控件
    HINSTANCE hLib = LoadLibrary(pszDllName);
	if (hLib<(HINSTANCE)HINSTANCE_ERROR)
	{
        strcpy(nErrorCode,"不能载入Dll文件!");
		return FALSE;
	}
  //获取注册函数DllRegisterServer地址
	FARPROC lpDllEntryPoint;
	lpDllEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer"));
	//调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
	{
		if(FAILED((*lpDllEntryPoint)()))
		{
             strcpy(nErrorCode,"调用DllRegisterServer 失败!");			
             FreeLibrary(hLib);
             return FALSE;
		};
        strcpy(nErrorCode,"调用DllRegisterServer 成功!");		
	}
	else
	{
       strcpy(nErrorCode,"调用DllRegisterServer 失败!");
	   FreeLibrary(hLib);
	   return FALSE;
	}
	FreeLibrary(hLib);
	return TRUE;
}

BOOL  CFdcsData::UnregisterActivex(LPCTSTR pszDllName,LPSTR nErrorCode)
{
    //ActiveX控件的路径及文件名
	//装载ActiveX控件
    HINSTANCE hLib = LoadLibrary(pszDllName);
	if (hLib<(HINSTANCE)HINSTANCE_ERROR)
	{
        strcpy(nErrorCode,"不能载入Dll文件!");
		return FALSE;
	}
  //获取注册函数DllRegisterServer地址
	FARPROC lpDllEntryPoint;
	lpDllEntryPoint = GetProcAddress(hLib,_T("DllUnregisterServer"));
	//调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
	{
		if(FAILED((*lpDllEntryPoint)()))
		{
             strcpy(nErrorCode,"调用DllUnRegisterServer 失败!");			
             FreeLibrary(hLib);
             return FALSE;
		};
	}
	else
	{
       strcpy(nErrorCode,"调用DllUnRegisterServer 失败!");			
	   return FALSE;
	}
	FreeLibrary(hLib);
	return TRUE;
}

void CFdcsData::GetCardSetInfo()
{
  FILE *ftpA;
  if ((ftpA=fopen(".\\table\\NetSet.txt","r+"))==NULL)
  {
	  AfxMessageBox("open NetSet file error");
  }
  else
  {
	  fscanf(ftpA,"%hd %hd",&localNo,&NetCard_Num);
	  fclose(ftpA);
  }
}


void CFdcsData::OpenFdcsPort()
{   
	BOOL bReturn;
    OSVERSIONINFO osv;
    DWORD nProcessId;
	osv.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
	if (GetVersionEx(&osv))
	{
		switch(osv.dwPlatformId)
		{
		case VER_PLATFORM_WIN32s:  //win32 on windows3.1
			nProcessId=0;
			break;
		case VER_PLATFORM_WIN32_WINDOWS: //win32 on win98 
    		nProcessId=0;
			break;
		case VER_PLATFORM_WIN32_NT: //win32 on windows nt
	        CopyDriverFile(&bReturn);
            nProcessId=::GetCurrentProcessId();
            OpenIoPort(nProcessId,0x100,0x1CF);
			break;
		}
	}
}

⌨️ 快捷键说明

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