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

📄 server2.cpp

📁 DCOM 上位机和嵌入式系统通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
           case 64:
			   for(k=4;k<Translate[0].bufsize-1;k++)
                  Translate[0].buf[k]=Translate[0].buf[k+1];
			   Translate[0].bufsize--;
			   for(k=4;k<9;k++)
				   buf[k]=buf[k+1];
			   n=ct/8;
			   break;
		   case 128:
			   for(k=14;k<Translate[0].bufsize-1;k++)
                  Translate[0].buf[k]=Translate[0].buf[k+1];
			   Translate[0].bufsize--;
			   for(k=9;k<Translate[0].bufsize-1;k++)
                  Translate[0].buf[k]=Translate[0].buf[k+1];
			   Translate[0].bufsize--;
			   for(k=4;k<Translate[0].bufsize-1;k++)
                  Translate[0].buf[k]=Translate[0].buf[k+1];
			   Translate[0].bufsize--;
			   for(k=14;k<19;k++)
				   buf[k]=buf[k+1];
			   for(k=9;k<19;k++)
				   buf[k]=buf[k+1];
			   for(k=4;k<19;k++)
				   buf[k]=buf[k+1];
			   n=ct/8;
			   break;
		   }
		   mlct=0;
		   for(k=0;k<n;k++)
		   {
              bt=buf[k];
			  for(j=0;j<8;j++)
			  {
                 if((bt>>j)&1)
					 mlct++;
			  }
		   }
		   for(k=0;k<n;k++)
		   {
              bt=Translate[0].buf[k];
			  for(j=0;(j<8)&&(j<ct);j++)
			  {
                 if((bt>>j)&1)
					 vl.iVal=1;
				 else
					 vl.iVal=0;
				 stations[0].vl[m]=vl;
				 m++;
			  }
		   }
		   mlct+=k;
		 //  for(k=k;k<(2*mlct-2);k++)
		   for(k=k;k<Translate[0].bufsize-2;k++)
		   {
			   vl.iVal=Translate[0].buf[k+1]*256+Translate[0].buf[k];
               stations[0].vl[m]=vl;
			   k++;
			   m++;
		   }
		   if(k<Translate[0].bufsize)
		   {
			   stations[0].kz=0*256+Translate[0].buf[k];   //he modi 2005-4-15   增加分站复位次数
			   reset_num[stations[0].stno]=Translate[0].buf[k+1];
               if (reset_num[stations[0].stno]>0)
			   {
					SYSTEMTIME now_time;
	     			GetLocalTime(&now_time);   // address of system time structure
			
	     			DATE dt1=dateCal(now_time.wYear,now_time.wMonth,now_time.wDay,now_time.wHour,now_time.wMinute,now_time.wSecond);
		    		ErrOldNum=ErrOldNum+1;
					erroroldrecord.ErrorCun=ErrOldNum;
					erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=3;                         
					erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=dt1;
					erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=reset_num[stations[0].stno];
					erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=stations[0].stno;
	    			erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt1;
			   }

	//		   stations[0].kz=Translate[0].buf[k+1]*256+Translate[0].buf[k];    //he modi 2005-4-15
		   }
		   stations[0].flag=1;
		   Translate[0].flag=0;
		}
		break;
	default:
		break;
	}
	return S_OK;
}



 STDMETHODIMP Server2::iftransflag(int i,int *rb)
{
	// TODO: Add your implementation code here
	*rb=0;
    if((Translate[i].flag)&&(File4.flag[Translate[i].stno]!=4))
	  *rb=1;
	
	return S_OK;
}
STDMETHODIMP Server2::setflag(int i)
{
	// TODO: Add your implementation code here
    Translate[i].flag=0;
    if(stations[i].flag) counter1++;
	stations[i].flag=1;
	return S_OK;
}

STDMETHODIMP Server2::ifprocess(int *rb)
{
	// TODO: Add your implementation code here
	*rb=0;
    if((recvbuf[6]==0)&&(Translate[0].flag))  
		*rb=1;
	return S_OK;
}

STDMETHODIMP Server2::ifconv(int i,int *rb)
{
	// TODO: Add your implementation code here
	*rb=0;
    if(stations[i].flag) *rb=1;
	return S_OK;
}





STDMETHODIMP Server2::ifrjst(int *rb)
{
	// TODO: Add your implementation code here
//   int i;
    *rb=0;
	if(ordbuf[1]==0) *rb=3;
	if((File4.flag[ordbuf[0]]&0xc0)==0)
	{
	  if((File4.flag[ordbuf[0]]&04)!=0)
	  {
		if(ordbuf[1]==0) 
		  *rb=1;
		else
		  *rb=2;
	  }
	}

	return S_OK;
}

STDMETHODIMP Server2::setre7ord()
{
	// TODO: Add your implementation code here
	ordbuf[1]=7;
	return S_OK;
}

LPWSTR Server2::wszFromSTR(LPCTSTR szSTR)
{
 #ifdef _UNICODE
  return (LPWSTR)szSTR;
 #else
  gwszTemp[0] = '\0';
  if(szSTR == NULL) return gwszTemp;

  MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
                      szSTR, -1,
                      gwszTemp, MAX_PATH);
  
  return gwszTemp;
 #endif
}

void Server2::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 Server2::remote_read_File()
{
   DWORD dwR;
   char    clsidString[_MAX_PATH];
   char    path[_MAX_PATH];
   UUID   clsid;
   HRESULT hr;
   HKEY hCLSID;
//   short rb;
   Irjremote *gpIrmt;
   Server1::unsigned_To_signed(otherpcname,path);


    HKEY hk = HKEY_CLASSES_ROOT;
    dwR = RegConnectRegistry (path, HKEY_CLASSES_ROOT, &hk);
    //dwR = RegConnectRegistry ("\\\\cari_soft", HKEY_CLASSES_ROOT, &hk);
    dwR = RegOpenKey(hk, "comserver.rjremote.1", &hCLSID );
	RegCloseKey(hk);
    if( dwR != ERROR_SUCCESS )
        return ;
    LONG size=260;
    dwR = RegQueryValue(hCLSID, "CLSID", clsidString, &size );
    if( dwR != ERROR_SUCCESS )
      return ;
    hr = CLSIDFromString( wszFromSTR(clsidString), &clsid );
  if( FAILED(hr))
      return ;
  COSERVERINFO si;
  MULTI_QI  qi;
/* Caution  COSERVERINFO struct is different in VC++ 4.0 and VC++ 5.0*/
    si.pAuthInfo = NULL;
	LPOLESTR swName;
	AnsiToUnicode(path,&swName);
    si.pwszName = swName;
    si.dwReserved1 = 0;
    si.dwReserved2 = 0;

    qi.pIID = &IID_Irjremote;
    qi.pItf = NULL;
    qi.hr = 0;

    hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_REMOTE_SERVER, &si, 1, &qi);
	switch(hr)
	{
	case CO_S_NOTALLINTERFACES:
		break;
	case E_NOINTERFACE:
		break;
	case S_OK:
		break;
	case E_INVALIDARG:
		break;
	}
    if (FAILED(hr))
    {
      //szMsg.Format(_T("CoCreateInstanceEx for %s : \n"),
       //             szServerName);
      //CCrack::ShowErrorMessage(szMsg, hr);
      return ;
    }
    if (FAILED(qi.hr))
    {
      //szMsg.Format(_T("Failed to connect to server %s : \n"),
      //              szServerName);
      //CCrack::ShowErrorMessage(szMsg, hr);
      return ;
    } 
    gpIrmt = (Irjremote*) qi.pItf;
    gpIrmt->freshconfg();
	gpIrmt->Release();
	gpIrmt=NULL;

}
void Server2::getremoteinfo()
{
   DWORD dwR;
   char    clsidString[_MAX_PATH];
   char    path[_MAX_PATH];
   UUID   clsid;
   HRESULT hr;
   HKEY hCLSID;
//   short rb;
   int i;
   Irjremote *gpIrmt;
   Server1::unsigned_To_signed(otherpcname,path);


    HKEY hk = HKEY_CLASSES_ROOT;
    dwR = RegConnectRegistry (path, HKEY_CLASSES_ROOT, &hk);
    //dwR = RegConnectRegistry ("\\\\cari_soft", HKEY_CLASSES_ROOT, &hk);
    dwR = RegOpenKey(hk, "comserver.rjremote", &hCLSID );
    //dwR = RegOpenKey(hk, "CIMPLICITY.HMI.OPCServer", &hCLSID );
	RegCloseKey(hk);
    if( dwR != ERROR_SUCCESS )
        return ;
    LONG size=260;
    dwR = RegQueryValue(hCLSID, "CLSID", clsidString, &size );
    if( dwR != ERROR_SUCCESS )
      return ;
    hr = CLSIDFromString( wszFromSTR(clsidString), &clsid );
  if( FAILED(hr))
      return ;
  COSERVERINFO si;
  MULTI_QI  qi;
/* Caution  COSERVERINFO struct is different in VC++ 4.0 and VC++ 5.0*/
    si.pAuthInfo = NULL;
	LPOLESTR swName;
	AnsiToUnicode(path,&swName);
    si.pwszName = swName;
    si.dwReserved1 = 0;
    si.dwReserved2 = 0;

    qi.pIID = &IID_Irjremote;
    qi.pItf = NULL;
    qi.hr = 0;

    hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_REMOTE_SERVER, &si, 1, &qi);
	switch(hr)
	{
	case CO_S_NOTALLINTERFACES:
		break;
	case E_NOINTERFACE:
		break;
	case S_OK:
		break;
	case E_INVALIDARG:
		break;
	}
    if (FAILED(hr))
    {
      //szMsg.Format(_T("CoCreateInstanceEx for %s : \n"),
       //             szServerName);
      //CCrack::ShowErrorMessage(szMsg, hr);
      return ;
    }
    if (FAILED(qi.hr))
    {
      //szMsg.Format(_T("Failed to connect to server %s : \n"),
      //              szServerName);
      //CCrack::ShowErrorMessage(szMsg, hr);
      return ;
    } 
    gpIrmt = (Irjremote*) qi.pItf;
    gpIrmt->getrmt_ct(&rj_ct,&almct);
	if(rj_ct>0)
	{
		short rfid[1000];
		double dt[1000];
		short rno[1000];
		short addr[1000];
		short wno[1000];
		gpIrmt->getrmtrace(rfid,wno,dt,rno,addr);
		for(i=0;i<rj_ct;i++)
		{
			trclst[i].personID=rfid[i];
            trclst[i].dt=dt[i];
			trclst[i].reno=rno[i];   //修改
			trclst[i].addrno=addr[i];
			trclst[i].workno=wno[i];
		}
	}	
//	almct=act;
	if(almct>0)
	{
		short rfid[1000];
		double dt[1000];
		short rno[1000];
		short addr[1000];
		short wno[1000];

		gpIrmt->getrtmalm(rfid,wno,dt,rno,addr);
		for(i=0;i<almct;i++)
		{
			almtjb[i].personID=rfid[i];
            almtjb[i].dt=dt[i];
			almtjb[i].workno=wno[i];  //修改
			almtjb[i].reno=rno[i];
			almtjb[i].addrno=addr[i];
		}
	}
	short adrn[4096];
	double loctm[4096];
	double entm[4096];
	double extm[4096];
	short dwrn[4096];
	short uprn[4096];
	short lastrn[4096];
	short tag[4096];
	gpIrmt->getrmtlocal(adrn,loctm,entm,extm,dwrn,uprn,lastrn,tag);
	for(i=0;i<4096;i++)
	{
		perstmb[i].addrno=adrn[i];
        perstmb[i].localtm=loctm[i];
		perstmb[i].entrytm=entm[i];
		perstmb[i].exittm=extm[i];
		perstmb[i].dw_rno=dwrn[i];
		perstmb[i].up_rno=uprn[i];
		perstmb[i].lastreno=lastrn[i];
		perstmb[i].tag=tag[i];
	}
	short wno[500];
	short rfd[500];
	double dwtm[500];
	double uptm[500];
	short dwr[500];
	short upr[500];
	short tg[500];
	gpIrmt->getuptj(&upct,wno,rfd,dwtm,uptm,dwr,upr,tg);
	for(i=0;i<upct;i++)
	{
		  uptjb[i].workno=wno[i];
		  uptjb[i].personID=rfd[i];
		  uptjb[i].downdtm=dwtm[i];
		  uptjb[i].updtm=uptm[i];
		  uptjb[i].dw_rno=dwr[i];
		  uptjb[i].up_rno=upr[i];
		  uptjb[i].tag=tg[i];
	}
	gpIrmt->Release();
	gpIrmt=NULL;
    for(i=0;i<rj_ct;i++)
	   setdname(trclst[i].workno,trclst[i].name,trclst[i].depart);
    for(i=0;i<almct;i++)
	   setdname(almtjb[i].workno,almtjb[i].name,almtjb[i].depart);
    for(i=0;i<upct;i++)
	   setdname(uptjb[i].workno,uptjb[i].name,uptjb[i].depart);

//	almb.count=act;
//	for(i=0;i<act;i++)
//		almb.alm[i]=atrc[i];

 
}
/////////////////////////////////////////////////////////////////////////////
// Copcinteface




/*STDMETHODIMP Copcinteface::setOPCdata(short stno, short dwCount, VARIANT *pvdt)
{
	// TODO: Add your implementation code here
  int i;
    stations[1].stno=stno;
	for(i=0;i<dwCount;i++)
	   stations[1].vl[i]=pvdt[i];
	stations[1].kz=0;
	stations[1].flag=1;

	return S_OK;
}*/

STDMETHODIMP Copcinteface::setOPCdata(short stno, int dwCount,VARIANT *vdt)
//STDMETHODIMP Copcinteface::setOPCdata(short stno, int dwCount,int *vdt)
{
	// TODO: Add your implementation code here
  int i;
    stations[1].stno=stno;
	for(i=0;i<dwCount;i++)
	{
	   stations[1].vl[i]=vdt[i];
	}
	stations[1].kz=0;
	stations[1].flag=1;

	return S_OK;
}



STDMETHODIMP Copcinteface::getOPCdt(short stno, short ct)
{
	// TODO: Add your implementation code here

	return S_OK;
}



STDMETHODIMP Server2::sethotuse(short hot)
{
	// TODO: Add your implementation code here
    switch(hot)
	{
	case 0:
		comsertype=0;
		break;
	case 1:
		comsertype=1;
		break;
	}
	return S_OK;
}

STDMETHODIMP Server2::clearFlg()
{
	// TODO: Add your implementation code here
    tranflg=0;
	return S_OK;
}

STDMETHODIMP Server2::getrjdata()
{
	// TODO: Add your implementation code here
	Server1::Read_File();
    for(int i=0;i<rtinfo.count;i++)
	   File4.flag[rtinfo.st[i].stno]=4;
    fz_ini_req=1;
	scanflg=true;
    getremoteinfo();
	return S_OK;
}



STDMETHODIMP Server2::init()
{
	// TODO: Add your implementation code here
   int i;

   for(i=0;i<rtinfo.count;i++)
	   File4.flag[rtinfo.st[i].stno]=4;
   return S_OK;
}

bool Server2::setdname(short wno,unsigned char name[16],unsigned char depart[16])
{
  int i=0;
  int j;

    while((i<prst.count)&&(wno!=prst.pl[i].workno))
		i++;
	if(i<prst.count)
	{
       for(j=0;j<16;j++)
	     name[j]=prst.pl[i].name[j];
	   name[15]=0;
	   for(j=0;j<16;j++)
		 depart[j]=prst.pl[i].depart[j];
	   depart[15]=0;
	   return 1;
	}
   return 0; 
}

STDMETHODIMP Server2::getotherName(char *name)
{
	// TODO: Add your implementation code here
	for(int i=0;i<32;i++)
		name[i]=Files.otherpcname[i];
	name[i]=0;
	return S_OK;
}

bool Server2::setEventRecord(int no, int vl1, int vl2)
{
  int i,j;
  DATE current;
  SYSTEMTIME pdt;
  char evtname[16]="";
  Evtitem evtarr;
  FILE *file;
  char path[_MAX_PATH]="";
  unsigned char tmp[_MAX_PATH]="";
  char fn[_MAX_PATH];
  GetLocalTime(&pdt);
	 current=dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
     evtarr.number=no;
     evtarr.recordtime=current;
     evtarr.vl1=vl1;
     evtarr.vl2=vl2;

    switch(no)
	{
	case 1:
		 strcpy(evtname,"异地控制");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 2:
		 strcpy(evtname,"手动控制");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 3:
		 strcpy(evtname,"KJ95配置更新");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 4:
		 strcpy(evtname,"系统启动");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 5:
		 strcpy(evtname,"分站初始化");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 6:
		 strcpy(evtname,"定点巡检");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 7:
		 strcpy(evtname,"撤消定点");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 8:
		 strcpy(evtname,"人员档案更新");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 9:
		 strcpy(evtname,"修改人员信息");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 10:
		 strcpy(evtname,"删除人员信息");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 11:
		 strcpy(evtname,"KJ69系统更新");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 12:
		 strcpy(evtname,"修改区域配置");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 13:
		 strcpy(evtname,"删除区域配置");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 14:
		 strcpy(evtname,"修改探头配置");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	case 15:
		 strcpy(evtname,"删除探头配置");
		 Server1::signed_To_unsigned(evtname,evtarr.Evtname);
		break;
	}
	if (strlen(evtname)<sizeof(evtarr.Evtname))
		evtarr.Evtname[strlen(evtname)]=0;
	_mbscpy(tmp,Curpath);
	Server1::unsigned_To_signed(tmp,path);
    strcpy(fn,path);
    strcat(fn,"\\SYSEVENTS.DAT");
	if ((file=fopen(fn,"a+"))==NULL)
		return 0 ;
	fwrite(&evtarr,sizeof(evtarr),1,file);
	fclose(file);
  return 1;
}


⌨️ 快捷键说明

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