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

📄 common.cpp

📁 profibus dp主站于从站通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////
///
///

//2008-5-10-18
#include <windows.h>
#include "keywords.h"
#include "pb_type.h"
#include "pb_conf.h"
#include "pb_dp.h"
#include "pb_err.h"
#include "PidReg.h"
#include "Err.h"
#include "pb_if.h"
#include "PbproComm.h"
#include "common.h"

#include "stdio.h"
//////////////////////////////////
//2008-5-11
FILE *fp;
void OutputLog(char *str)
{
	fp = fopen("log.txt","at+");
    if (fp!=NULL)
	{
       fprintf(fp,"%s",str);
	}
}

char s[200];  //2008-5-11

/////////////////////////////////


///////////////////////////////////////
//2008-5-10
///////////////////////////////////////////////
  //DATA_EXCHANGE_POSITION中参数
////////////////////////////////////////////

  unsigned char   SlaveX;
  unsigned char   SlaveY;
  double            Acc;
  double            V_Current;
  double            V0;
  double            Vmax;
  double            Dt;
  double            X_Current;
  double            Y_Current;
  double            X_Pre;
  double            Y_Pre;

  double            X_Pre_double;
  double            Y_Pre_double;

  double            Y_fb_pre_double;
  double            X_fb_pre_double;

  double            dY_fb_double;
  double            dX_fb_double;

 
  long            dX_Current;
  long            dY_Current;

  long            Y_fb0;
  long            X_fb0;

  long            Y_fb_pre;
  long            X_fb_pre;

  long            dY_fb;
  long            dX_fb;


  long            X_fb;
  long            Y_fb;
  CPidReg         PidReg_X;
  CPidReg         PidReg_Y;
  UINT              TimerId;
  unsigned char    OperateFlag;



  /////////////////////////////
  ////2008-5-10
  int              DataExchangeFlag;  //2008-5-10

  // END
//////////////////////////////////////
#define MASTERPRM                       1
#define SLAVEPRM                        2
#define BUSPRM                          3
#define DATA_EXCHANGE                   4
#define DATA_EXCHANGE_POSITION          5
////////////////
///////////



///////////////////////////


unsigned int    UpdateDlgFre;       //2008-5-10

unsigned short    bShowSlave;      //2008-5-10

UINT     m_STW1;//2008-4-30
BOOL            Data_Exchange_Postion_Flag;      //2008-4-30
CPbproComm  m_PbproComm;

int ScanSlaves() 
{   
      BOOL bSlaveFlag=0;  
  //   MsgDisplayFlag=0;  //2008-4-19
   m_PbproComm.read_dp_master_default();
   if( m_PbproComm.dp_init_master_req()==PB_TRUE)	   
   {
	   m_PbproComm.read_dp_bus_default();
      if(m_PbproComm.dp_download_bus_req()==PB_TRUE)
	  { 
		  if(m_PbproComm.dp_act_param_loc_req( DP_OP_MODE_STOP)==PB_TRUE)
		  {
		       bSlaveFlag=m_PbproComm.dp_slave_scan();
		    // if(!m_PbproComm.exit_communication ( ))
			   if(m_PbproComm.exit_communication ( )==E_OK)
			 { 
					 Sleep(110);
					 OnInitApply();
				    
			if(	 m_PbproComm.fmb_set_configuration_req()==PB_TRUE&&bSlaveFlag)					 
				 {     
				   
			       return SUCCESS;
				 }
			else
			{
				return  ERROR_SET_CONFIGURATION_REQ_STOP;
			}
			 }
			 else
			 {
				return ERROR_EXIT_COMMUNICATION;
			 }
			  
		  }
		  else
		  {
			  return ERROR_ACT_PARAM_LOC_REQ;
		  }
	  }	
	  else
	  {
		  return ERROR_DOWNLOAD_BUS_REQ;
	  }
   }
  //MsgDisplayFlag=1;
   	  else
	  {
		  return ERROR_INIT_MASTER_REQ;
	  }

}



int  OnInitApply() 
{
     
      if(m_PbproComm.initialize_application()==PB_TRUE)
	  { 
		  return SUCCESS;
		 
      }
     
	  else
	  {
          return  ERROR_INIT_APPLICATION ;
	  }

}

int OnGetOffsets() 
{ 
	 
	 if(m_PbproComm.dp_io_offsets( )==PB_TRUE)
	 {
		 return SUCCESS;
	 }
	 else
	 {
		  return ERROR_OFFSET;
	 }

	  
}


int OnOfflStop() 
{  
	 
    if(m_PbproComm.dp_act_param_loc_req( DP_OP_MODE_STOP)==PB_TRUE)
	{ 
		return SUCCESS;
		
	}
	else
	{
		return ERROR_SET_CONFIGURATION_REQ_STOP;
	}
	
	
	
}
///////////////////////////////////////////////////////////////////////
int OnStopClear() 
{
	

	if(m_PbproComm.dp_act_param_loc_req(DP_OP_MODE_CLEAR)==PB_TRUE)
	{   
		return SUCCESS;
	}
	else 
	{
		return ERROR_SET_CONFIGURATION_REQ_CLEAR;
	}

	
}
//////////////////////////////////////////////////////////////////////////////////////
int OnClearOperate() 
{

    if(m_PbproComm.dp_act_param_loc_req( DP_OP_MODE_OPERATE)==PB_TRUE)
	{
		return  SUCCESS; 
	}
	else
	{
		return ERROR_SET_CONFIGURATION_REQOPERATE;
	}
		
}


int OnStopCommunication() 
{   

	        

  	    if(m_PbproComm.exit_communication()==E_OK)
		{
		  return SUCCESS;
		}
		else
		{
			return  ERROR_STOPWORK;
		}
}

void OnButtonExchange(USIGN16 funselect) 
{
	//UpdateData(TRUE);
    m_STW1=0;
    m_STW1|=funselect;
	/*if(m_switchOn.GetChecked( ))
			m_STW1|=0x0001;		
	if(m_inhibitVoltage.GetChecked( ))
		m_STW1|=0x0002;

	if(m_fastStopSw.GetChecked( ))
		m_STW1|=0x0004;

	if(m_operationEn.GetChecked( ))
		m_STW1|=0x0008;
	
	if(m_fastStopIn.GetChecked( ))
		m_STW1|=0x0010;
	if(m_Pause.GetChecked( ))
		m_STW1|=0x0020;

	if(m_resetFault.GetChecked( ))
		m_STW1|=0x0040;

	if(m_setPointEn.GetChecked( ))
		m_STW1|=0x0080;
	if(m_jogging.GetChecked( ))
		m_STW1|=0x0100;
	if(m_rezerved.GetChecked( ))
		m_STW1|=0x0200;
	if(m_PZDEn.GetChecked( ))
		m_STW1|=0x0400;
	if(m_startHome.GetChecked( ))
		m_STW1|=0x0800;
	if(m_manufactureSpec1.GetChecked( ))
		m_STW1|=0x1000;
	if(m_manufactureSpec2.GetChecked( ))
		m_STW1|=0x2000;
	
	if(m_manufactureSpec3.GetChecked( ))
		m_STW1|=0x4000;
	if(m_manufactureSpec4.GetChecked( ))
		m_STW1|=0x8000;
    	m_stw1Str.Format("%d",m_STW1);	
    UpdateData(FALSE);
	::SendMessage(MessageWnd,WM_GETDLGPRM,DATA_EXCHANGE,255);*/		
}


void OnButtonPositionControl() 
{
	//::SendMessage(MessageWnd,WM_GETDLGPRM,DATA_EXCHANGE_POSITION,0);		
	
}


BOOL SendSlavePrm(T_DP_ACTIVE_SLAVES ActiveSlave) 
{  
		   	            			  
		     if(m_PbproComm.dp_download_slave_req(ActiveSlave))		        
			 {
				 
				 
			 return TRUE;
			 }
			 
	          else
			  {
				  return FALSE;
			  }
  
}


/////////////////////////////////////////////////////////////////////
/// //2008-4-29

///////////////////////////////

int  OnSetMasterPrm(struct MasterPrm* myMasterPrm)
{
	//USIGN16 temp;
    int CurrentSlaveAdd=255;
    int j=0;
    int k=0;
    m_PbproComm.read_dp_master_default();//2008-4-29
		   
	m_PbproComm.init_master_req.master_default_address=myMasterPrm->m_masterAddressEdit;
		  
    m_PbproComm.init_master_req.master_class2=myMasterPrm->m_masterClassMode;
		   
	m_PbproComm.init_master_req.lowest_slave_address =myMasterPrm->m_lowestSlaveAddStr;
		 
    m_PbproComm.init_master_req.cyclic_data_transfer=myMasterPrm->m_cylicDataTransfer;
	
	if( m_PbproComm.dp_init_master_req()==PB_TRUE)
     {
	  return SUCCESS;
   }
   
    else
  {
	  return ERROR_INIT_MASTER_REQ;
  }
	//SendMasterPrm();

}

int OnSetSlavePrm(struct CSlavePrmSet* mySlavePrmSet)
{
	USIGN16 temp;
    int CurrentSlaveAdd=255;
    int j=0;
    int k=0;
	m_PbproComm.read_dp_slave_default (3);	 
		 
		  //j=m_PbproComm.Activeslaves.GetSize();//2008-5-9
		    //j=m_PbproComm.AtciveslavesGetSize;//2008-5-9
	        j=m_PbproComm.ActiveslavesSize;//2008-5-10
		  if(j<=0)
		  {
			 // AfxMessageBox("未检测到从站");
			 // return ;
			 
			  ;
		  }
		   temp=mySlavePrmSet->m_prmDataLength;
		  m_PbproComm.slave_para_set_ptr->prm_data.prm_data_len=SWAP16(temp);
		    temp=mySlavePrmSet->m_identNumber;
		  m_PbproComm.slave_para_set_ptr->prm_data.ident_number=SWAP16(temp);
			temp=mySlavePrmSet->m_groupIdent;
		  m_PbproComm.slave_para_set_ptr->prm_data.group_ident=(OCTET)temp;
			temp=mySlavePrmSet->m_watchDogFact1;
		  m_PbproComm.slave_para_set_ptr->prm_data.wd_fact_1=(OCTET)temp;
			temp=mySlavePrmSet->m_watchDogFact2;
		  m_PbproComm.slave_para_set_ptr->prm_data.wd_fact_2=(OCTET)temp;




			temp=mySlavePrmSet->m_configDataLength;		  
		   m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data_len=SWAP16(temp);
		  
		  temp=mySlavePrmSet->m_aatDataLength;
		  m_PbproComm.slave_para_set_ptr->aat_data.aat_data_len=SWAP16(temp);
	  
		  temp=mySlavePrmSet->m_offsetInputs;
		  
		  temp=mySlavePrmSet->m_offsetOutput;


         
	
		  m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [0]=mySlavePrmSet->Prm[0];
		  m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [1]=mySlavePrmSet->Prm[1];
		  m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [2]=mySlavePrmSet->Prm[2];
			  
		 		  
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[0]=mySlavePrmSet->Con[0];
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[1]=mySlavePrmSet->Con[1];
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[2]=mySlavePrmSet->Con[2];
		  //////////////////////////////////////////////////////////////////////////
		  ////2008-5-4
		  mySlavePrmSet->Prm[0]=0;
		  mySlavePrmSet->Prm[1]=0;
		  mySlavePrmSet->Prm[2]=0;
          m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [0]=mySlavePrmSet->Prm[0];
		  m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [1]=mySlavePrmSet->Prm[1];
		  m_PbproComm.slave_para_set_ptr->prm_data.user_prm_data [2]=mySlavePrmSet->Prm[2];
			  
		  mySlavePrmSet->Con[0]=193;	
		  mySlavePrmSet->Con[1]=200;
		  mySlavePrmSet->Con[2]=204;
		  mySlavePrmSet->Con[3]=1;
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[0]=mySlavePrmSet->Con[0];
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[1]= mySlavePrmSet->Con[1];
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[2]=mySlavePrmSet->Con[2];
		  m_PbproComm.slave_para_set_ptr->cfg_data.cfg_data[3]=mySlavePrmSet->Con[3];
		 
        
		  ///////////////////////////////////////////////
		  ///此处为判断是否按下设置slave按钮  2008-5-10
	  //if(mySlavePrmSet->m_slavePrmCheck.GetCheck())  //?2008-4-20
		//    {
			  
			   
			   k=0;	 
				  for(int i=0;i<DP_MAX_SLAVE_ADDRESS;i++)
				  { 
					   if(m_PbproComm.Activeslaves[i].ind==1)
					   {
						    m_PbproComm.Activeslaves[i].SlavePrmSet=m_PbproComm.slave_para_set_ptr;
							
							
					


					        if(SendSlavePrm(m_PbproComm.Activeslaves[i]))
							{
								k++;
			

							}

					 	  }
		  
						  
				  }			 
		  

⌨️ 快捷键说明

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