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

📄 common.cpp

📁 profibus dp主站于从站通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			  if(k>0&&k==j)
			  {
				 
				  return SUCCESS;
				 
			  }
			  else
			  {
				  return ERROR_SET_SLAVEPRM;
		}
		

}
int OnSetBusPrm(struct CBusPrm*  myBusPrm)
{
	
	USIGN16 temp;
    int CurrentSlaveAdd=255;
    int j=0;
    int k=0;
	 m_PbproComm.read_dp_master_default();     //2008-4-29
	
		  temp=myBusPrm->m_dataCtlTime;
		  m_PbproComm.bus_para_set_ptr->data_control_time  =SWAP16(temp) ;
		  temp=myBusPrm->m_MaxTsdr;
		  m_PbproComm.bus_para_set_ptr->max_tsdr =SWAP16(temp);
		  
		  temp=myBusPrm->m_minSlaveInterval;
			  m_PbproComm.bus_para_set_ptr->min_slave_interval=SWAP16(temp);
		  temp=myBusPrm->m_pullTimeOut;
		  m_PbproComm.bus_para_set_ptr->poll_timeout=SWAP16(temp) ;
		  
	       m_PbproComm.bus_para_set_ptr->baud_rate=myBusPrm->m_baudRate;
		 
		   if(m_PbproComm.dp_download_bus_req()==PB_TRUE)
		 {
	        return SUCCESS;
		 } 
         else
		 {
	         return ERROR_DOWNLOAD_BUS_REQ;
		 }
		
		  //SendBusPrm();
}
void OnDataexchang(struct CDataSdRcv* myDataExch, UINT slavenumber)
{
	USIGN16 temp;
    int CurrentSlaveAdd=255;
    int j=0;
    int k=0;
	       

	     
		 /* temp=(unsigned short)*pParam;   //此处需要重新考虑

		    if(temp<DP_MAX_SLAVE_ADDRESS)
		    bShowSlave=temp;
			if(temp==255)*/   //此书输入的应该是相应从站的地址 拟进行如下编写
		    
		    //temp=slavenumber;
		  //if(temp<DP_MAX_SLAVE_ADDRESS)
			 bShowSlave=slavenumber;
			//if(temp>0)  //
			//{
			

		          temp=myDataExch->m_PKE_OUT;

                  m_PbproComm.Output_data[bShowSlave][0]=temp>>8;
				  temp<<=8;
                  temp>>=8;
                  m_PbproComm.Output_data[bShowSlave][1]=temp;
				  

				  temp=myDataExch->m_IND_OUT;
				 m_PbproComm.Output_data[bShowSlave][2]=temp>>8;
				  temp<<=8;
                  temp>>=8;
				   m_PbproComm.Output_data[bShowSlave][3]=temp;
                	             
				 
				 

				  temp=myDataExch->m_PWE>>16;
				  
                  m_PbproComm.Output_data[bShowSlave][4]=temp>>8;
				  temp<<=8;
                  temp>>=8;
                  m_PbproComm.Output_data[bShowSlave][5]=temp;

				  temp=myDataExch->m_PWE;

				  
                  m_PbproComm.Output_data[bShowSlave][6]=temp>>8;
				  temp<<=8;
                  temp>>=8;
                  m_PbproComm.Output_data[bShowSlave][7]=temp;

				  

			     
				 
				  temp=myDataExch->m_STW1;
				  m_PbproComm.Output_data[bShowSlave][8]=temp>>8;
				  temp<<=8;
                  temp>>=8;
				  m_PbproComm.Output_data[bShowSlave][9]=temp;

				  
				 

				  temp=myDataExch->m_NSOOL_B>>16;
				  
                  m_PbproComm.Output_data[bShowSlave][10]=temp>>8;
				  temp<<=8;
                  temp>>=8;
                  m_PbproComm.Output_data[bShowSlave][11]=temp;
				  
				  temp=myDataExch->m_NSOOL_B;				  
				  
                  m_PbproComm.Output_data[bShowSlave][12]=temp>>8;
				  temp<<=8;
                  temp>>=8;
                  m_PbproComm.Output_data[bShowSlave][13]=temp;

                   
                  temp=myDataExch->m_STW2;
				  m_PbproComm.Output_data[bShowSlave][14]=temp>>8;
				  temp<<=8;
                  temp>>=8;
				  m_PbproComm.Output_data[bShowSlave][15]=temp;

                  temp=myDataExch->m_G1_STW;
				  m_PbproComm.Output_data[bShowSlave][16]=temp>>8;
				  temp<<=8;
                  temp>>=8;
				  m_PbproComm.Output_data[bShowSlave][17]=temp;
				  
			
		//	}
/////////////////////////////////////////////////////
//2008-5-23
				  if(myDataExch->m_STW2==0)
				  {
					  Data_Exchange_Postion_Flag=0;
				  }
				  else
				  {
					  Data_Exchange_Postion_Flag=1;
				  }

///////////////////////////////////////////////////////////////
//2008-5-20
				  DataExchangeFlag=1;  //2008-5-20
				

               OnDataHandle(myDataExch,slavenumber);  //2008-5-23
		       // OnDataOperate(myDataExch,slavenumber);


		 /* 
		  if(!TimerId)
		  {
			
			  TimerId=SetMultimediaTimer(TIMER_SET_VALUE,1);
		      DataExchangeFlag=1;
		  }*/

}
void OnGetPositionPrm(struct CDataSdRcv* myDataExch, UINT slavenumber)
{
	USIGN16 temp;
	//////////////////////////////
	//2008-5-11
    SlaveY=slavenumber;      
    SlaveX=slavenumber;
	//////////////////////////////////
    int CurrentSlaveAdd=255;
    int j=0;
    int k=0;
			if( Data_Exchange_Postion_Flag==0)
                     Data_Exchange_Postion_Flag=1;
			               V0=500;
			               Vmax=6000;
			               V_Current=V0;
			               Acc=2;
			               Dt=TIMER_SET_VALUE;

						   X_Current=X_Pre=0;
						   Y_Current=Y_Pre=0;
						  
						   dX_Current=0;
						   dY_Current=0;
						   
						   Y_fb_pre=0;
						   Y_Current=Y_Pre=1310720;
						   PidReg_Y.e_k=1310720;
						   
						   X_Current=X_Pre=1310720;
						   PidReg_X.e_k=1310720;
						   
						   m_PbproComm.Output_data[SlaveY][10]=0;
						   m_PbproComm.Output_data[SlaveY][11]=0;
						   m_PbproComm.Output_data[SlaveY][12]=0;
						   m_PbproComm.Output_data[SlaveY][13]=0;
						   

						   Y_fb0=m_PbproComm.Input_data[SlaveY][18];								 
						   Y_fb0<<=8;
						   Y_fb0+=m_PbproComm.Input_data[SlaveY][19];
						   Y_fb0<<=8;
						   Y_fb0+=m_PbproComm.Input_data[SlaveY][20];
						   Y_fb0<<=8;
						   Y_fb0+=m_PbproComm.Input_data[SlaveY][21];

                              Y_fb=Y_fb_pre=Y_fb0;
							  Y_Pre_double=Y_fb0;
							  Y_fb_pre_double=0;
							  dY_fb_double=0;
/////////////////////////////////////////////////////////////////////////////////////////////////
							   m_PbproComm.Output_data[SlaveX][10]=0;
							   m_PbproComm.Output_data[SlaveX][11]=0;
							   m_PbproComm.Output_data[SlaveX][12]=0;
							   m_PbproComm.Output_data[SlaveX][13]=0;
							   
							   
							   X_fb0=m_PbproComm.Input_data[SlaveX][18];								 
							   X_fb0<<=8;
							   X_fb0+=m_PbproComm.Input_data[SlaveX][19];
							   X_fb0<<=8;
							   X_fb0+=m_PbproComm.Input_data[SlaveX][20];
							   X_fb0<<=8;
							   X_fb0+=m_PbproComm.Input_data[SlaveX][21];

							   X_fb=X_fb_pre=X_fb0;
							   X_Pre_double=X_fb0;
							   X_fb_pre_double=0;
							   dX_fb_double=0;

						  /* if(!TimerId)
						   {
							   
							   TimerId=SetMultimediaTimer(TIMER_SET_VALUE,1);
							   DataExchangeFlag=1;
						   }*/


}

/////////////////////////////////////////////////////////////////////////
/////////2008-5-10
/*void KillMultimediaTimer(UINT m_TimerID)
{
	   timeKillEvent(m_TimerID);
	   
}

*/
//void OnMultimediaTimer(WPARAM wParam,	LPARAM lParam)//使用多媒体定时器
void OnDataHandle(struct CDataSdRcv* myDataExch,UINT slavenumber)
                            
{
	///////2008-5-10
    bShowSlave=slavenumber;

/////////////////////////////////////////
	//2008-5-20
	SlaveX=slavenumber;
    SlaveY=slavenumber;
	///////////////////////
	long Y_Speed=0;
	long X_Speed=0;

	UINT temp;
	//myDataExch.UpdateData(TRUE);

	if(Data_Exchange_Postion_Flag)
	{
///////////////////////////////////////////////////////
//2008-5-23
		OnGetPositionPrm(myDataExch,7);
	
//////////////////////////////PID ///////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
///////////////////////////////   PID Y  ////////////////////////////////
/////////////////////////////////////////////////////////////////////////
		
  
	  

		Y_fb=m_PbproComm.Input_data[SlaveY][18];	 //编码器位置信息 							 
	    Y_fb<<=8;
		Y_fb+=m_PbproComm.Input_data[SlaveY][19];
		Y_fb<<=8;
		Y_fb+=m_PbproComm.Input_data[SlaveY][20];
		Y_fb<<=8;
		Y_fb+=m_PbproComm.Input_data[SlaveY][21];

	       dY_Current=Y_Current;
		   dY_fb=Y_fb-Y_fb_pre;

		  PidReg_Y.PidReg(dY_Current,dY_fb,1);

          Y_fb_pre=Y_fb;
//////////////////////////////输出速度值//////////////////////////
		  Y_Speed=PidReg_Y.out;

          //Y_Speed=PidReg_Y.out=pcspeed;                 //      2008-3-21

		  
		  temp=Y_Speed>>16;
		  
		  m_PbproComm.Output_data[SlaveY][10]=temp>>8;
		  temp<<=8;
		  temp>>=8;
		  m_PbproComm.Output_data[SlaveY][11]=temp;
		  
		  temp=Y_Speed;				  
		  
		  m_PbproComm.Output_data[SlaveY][12]=temp>>8;
		  temp<<=8;
		  temp>>=8;
		  m_PbproComm.Output_data[SlaveY][13]=temp;

/////////////////////////////////////////////////////////////////////////
///////////////////////////////   PID X  ////////////////////////////////
/////////////////////////////////////////////////////////////////////////
	    X_fb=m_PbproComm.Input_data[SlaveX][18];								 
	    X_fb<<=8;
		X_fb+=m_PbproComm.Input_data[SlaveX][19];
		X_fb<<=8;
		X_fb+=m_PbproComm.Input_data[SlaveX][20];
		X_fb<<=8;
		X_fb+=m_PbproComm.Input_data[SlaveX][21];

	       dX_Current=X_Current;
		   dX_fb=X_fb-X_fb_pre;

	

		 PidReg_X.PidReg(dX_Current,dX_fb,1);

          X_fb_pre=X_fb;
//////////////////////////////输出速度值//////////////////////////
		  //X_Speed=PidReg_X.out=pcspeed;                             //2008-3-21
		  
		  X_Speed=PidReg_X.out;

		 Y_Speed=dY_Current/Dt;
          
		  
		  temp=X_Speed>>16;
		  
		  m_PbproComm.Output_data[SlaveX][10]=temp>>8;   //速度输出 
		  temp<<=8;
		  temp>>=8;
		  m_PbproComm.Output_data[SlaveX][11]=temp;
		  
		  temp=X_Speed;				  
		  
		  m_PbproComm.Output_data[SlaveX][12]=temp>>8;
		  temp<<=8;
		  temp>>=8;
		  m_PbproComm.Output_data[SlaveX][13]=temp;



	}
////////////////////////////////////////////////////////////////////	
 
   		
     if(DataExchangeFlag==1)
       //if(m_PbproComm.dp_data_exchange( slavenumber)!=E_OK)//2008-5-21
        if(m_PbproComm.dp_data_exchange( )!=E_OK)
	   {
		 ;
		 
	   }
	   else 
	   { // UpdateDlgFre++;     //2008-5-20
	     // if(UpdateDlgFre>200)       //2008-5-20
      for(UpdateDlgFre=0;UpdateDlgFre<10;UpdateDlgFre++)


		  {
		         //UpdateDlgFre=0;
                 myDataExch->m_PKE_INPUT=m_PbproComm.Input_data[bShowSlave][0];  //PKE
				  myDataExch->m_PKE_INPUT<<=8;
                  myDataExch->m_PKE_INPUT+=m_PbproComm.Input_data[bShowSlave][1];

                    
				  myDataExch->m_INT_INPUT=m_PbproComm.Input_data[bShowSlave][2];  // INT
				  myDataExch->m_INT_INPUT<<=8;
				  myDataExch->m_INT_INPUT+=m_PbproComm.Input_data[bShowSlave][3];
				 
				
			  
				  
	              myDataExch->m_PWE_INPUT=m_PbproComm.Input_data[bShowSlave][4];  //PWE
                  myDataExch->m_PWE_INPUT<<=8;
				  myDataExch->m_PWE_INPUT+=m_PbproComm.Input_data[bShowSlave][5];				 
				  myDataExch->m_PWE_INPUT<<=8;
				  myDataExch->m_PWE_INPUT+=m_PbproComm.Input_data[bShowSlave][6];
				  myDataExch->m_PWE_INPUT<<=8;
				  myDataExch->m_PWE_INPUT+=m_PbproComm.Input_data[bShowSlave][7];
				 


				 myDataExch->m_ZSW1=m_PbproComm.Input_data[bShowSlave][8];          //ZSW!
				 myDataExch->m_ZSW1<<=8;
				 myDataExch->m_ZSW1+=m_PbproComm.Input_data[bShowSlave][9];
				

			  
				 myDataExch->m_NIST_B=m_PbproComm.Input_data[bShowSlave][10];		//	NIST_B	 
				 myDataExch->m_NIST_B<<=8;
				 myDataExch->m_NIST_B+=m_PbproComm.Input_data[bShowSlave][11];
				 myDataExch->m_NIST_B<<=8;
				 myDataExch->m_NIST_B+=m_PbproComm.Input_data[bShowSlave][12];
				 myDataExch->m_NIST_B<<=8;
				 myDataExch->m_NIST_B+=m_PbproComm.Input_data[bShowSlave][13];


				 
				
                 myDataExch->m_ZSW2=m_PbproComm.Input_data[bShowSlave][14];     //ZSW2
				 myDataExch->m_ZSW2<<=8;
				 myDataExch->m_ZSW2+=m_PbproComm.Input_data[bShowSlave][15];


				 
				 myDataExch->m_G1_ZSW=m_PbproComm.Input_data[bShowSlave][16];		//G1_ZSW		
				 myDataExch->m_G1_ZSW<<=8;
				 myDataExch->m_G1_ZSW+=m_PbproComm.Input_data[bShowSlave][17];


				 
				 myDataExch->m_G1_XIST1=m_PbproComm.Input_data[bShowSlave][18];		//	G1_XIST1					 
				 myDataExch->m_G1_XIST1<<=8;
				 myDataExch->m_G1_XIST1+=m_PbproComm.Input_data[bShowSlave][19];
				 myDataExch->m_G1_XIST1<<=8;
				 myDataExch->m_G1_XIST1+=m_PbproComm.Input_data[bShowSlave][20];
				 myDataExch->m_G1_XIST1<<=8;
				 myDataExch->m_G1_XIST1+=m_PbproComm.Input_data[bShowSlave][21];
				 
				 
				 myDataExch->m_G1_XIST2=m_PbproComm.Input_data[bShowSlave][22];      //G1_XIST2
                 myDataExch->m_G1_XIST2<<=8;
				 myDataExch->m_G1_XIST2+=m_PbproComm.Input_data[bShowSlave][23];
				 myDataExch->m_G1_XIST2<<=8;
				 myDataExch->m_G1_XIST2+=m_PbproComm.Input_data[bShowSlave][24];
				 myDataExch->m_G1_XIST2<<=8;
				 myDataExch->m_G1_XIST2+=m_PbproComm.Input_data[bShowSlave][25];
				 
				 //myDataExch.ChangeZSW1(myDataExch->m_ZSW1);
				// myDataExchg.UpdateData(FALSE);
		  }
	   }
	   
}
/*
UINT SetMultimediaTimer(UINT uDelay,UINT uResolution ) 
{     UINT TimerId1;

	  TimerId1=timeSetEvent(uDelay, uResolution,
		(LPTIMECALLBACK) MultimediaTimerProc,
		(DWORD)this,TIME_PERIODIC);
	  return TimerId1;
}
*/

⌨️ 快捷键说明

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