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

📄 acph.c

📁 SERCOSII卡在 linux下的驱动。数控系统开发人员可以在此基础上
💻 C
📖 第 1 页 / 共 3 页
字号:
		ph_ptr->element=7;
		ph_ptr->bSinglePara=TRUE;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
		* pulData = ph_ptr->ldata;

	}
		ret = ph_ptr->ret;
	  sem_post(&ipc_handles.ACPH_BUSY);	
		return ret;
}

USHORT CWrite_Y_Parameter(USHORT usParaNum, ULONG ulData)
{
	ULONG ulIDN,ulLength=0,ulAttribute;
	USHORT usFail,*pusData;
	ULONG ulErrorMessage;
	SHORT ret;      
	ULONG  error;
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	ulIDN=0x40000;//0x10000;
	ulIDN|=usParaNum;
/*	if(bList)
	{
		pusData = (USHORT *) ulData;
		ulLength = pusData[0]+4;
		usFail = Request_WriteDriveParameter(0,ulIDN,7,ulData,(USHORT)ulLength,FALSE);
		if (usFail != SVCH_OK)
			return usFail;
		Sleep(WAIT_TIME);
		usFail=Response_WriteDriveParameter (0, &ulErrorMessage);
		if (usFail != SVCH_FINISHED){
			if( usFail == SVCH_ERROR)
				return (USHORT)ulErrorMessage;
			return usFail;
		}
		return usFail;
	}else{
		usFail = Request_WriteDriveParameter(0,ulIDN,7,ulData,sizeof(ulData),TRUE);
		if (usFail != SVCH_OK)
			return usFail;
		Sleep(WAIT_TIME);
		usFail=Response_WriteDriveParameter (0, &ulErrorMessage);
		if (usFail != SVCH_FINISHED){
			if( usFail == SVCH_ERROR)
				return (USHORT)ulErrorMessage;
			return usFail;
		}
		return usFail;
	}*/
	usFail = CRead_Y_Attribute(usParaNum,&ulAttribute);
	if (usFail != 0)
		return usFail;
	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);

	if(ulAttribute&0x40000){ //参数为变长度
		pusData = (USHORT *) ulData;
		ph_ptr->rd_wrt=PAR_SCHREIBEN;
		ph_ptr->drv_nbr=0;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=FALSE;
		ph_ptr->size=pusData[0]+4;
		ph_ptr->ldata=ulData;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;
	 /* Daten in den Handlerspeicher */
		memcpy( (void*)ph_ptr->vdata,(void*)(ulData),pusData[0]+4);
		RtPrintf("CWrite_Y_Parameter ph_ptr->vdata[0]=%d\n",ph_ptr->vdata[0]);
		sem_post(&ipc_handles.ACPH_FLAG);
		sem_wait(&ipc_handles.ACPH_READY);
	}else{
//		RtPrintf("CRead_Y_Parameter not list\n");
		ph_ptr->rd_wrt=PAR_SCHREIBEN;
		ph_ptr->drv_nbr=0;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=TRUE;
		ph_ptr->size=sizeof(ulData);
		ph_ptr->ldata=ulData;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
	}
		ret = ph_ptr->ret;
	  sem_post(&ipc_handles.ACPH_BUSY);	
	return ret;
}
//S参数函数
 USHORT CRead_S_Name(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,char*	pchName)
{
	ULONG ulIDN=0,ulLength=0;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	
	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=2;
  ph_ptr->bSinglePara=FALSE;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);
    /* Daten in den Userspeicher */
    ulLength = (USHORT)ph_ptr->vdata[0];
	memset(pchName,NULL,61);
    memcpy( pchName, &(ph_ptr->vdata[2]),ulLength);
	ret = ph_ptr->ret;
    /* Ab dieser Stelle ist das Shared-Memory wieder frei */
    sem_post(&ipc_handles.ACPH_BUSY);	

	return ret; 
}

USHORT CRead_S_Attribute(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,ULONG* pulAttribute)
{
	ULONG ulIDN=0,ulLength=0;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;
	
	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=3;
  ph_ptr->bSinglePara=TRUE;
	ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);
	* pulAttribute = ph_ptr->ldata;
	ret = ph_ptr->ret;
  sem_post(&ipc_handles.ACPH_BUSY);	

	return ret;
}

USHORT CRead_S_Unit(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,char*	pchUnit)
{
	ULONG ulIDN=0,ulLength=0;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;
	
	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=4;
  ph_ptr->bSinglePara=FALSE;
	ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);
    /* Daten in den Userspeicher */
    ulLength = (USHORT)ph_ptr->vdata[0];
    memcpy( pchUnit, &(ph_ptr->vdata[2]),ulLength);
	ret = ph_ptr->ret;
    /* Ab dieser Stelle ist das Shared-Memory wieder frei */
    sem_post(&ipc_handles.ACPH_BUSY);	

	return ret; 

}

USHORT CRead_S_Minimum(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,ULONG* pulMinimum)
{
	ULONG ulIDN=0,ulLength=0;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;
	
	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=5;
  ph_ptr->bSinglePara=TRUE;
	ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);

	* pulMinimum = ph_ptr->ldata;
	ret = ph_ptr->ret;
   sem_post(&ipc_handles.ACPH_BUSY);	
	return ret;

}

USHORT CRead_S_Maximum(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,ULONG* pulMaximum)
{
	ULONG ulIDN=0,ulLength=0;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;
	
	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=6;
  ph_ptr->bSinglePara=TRUE;
	ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);

	* pulMaximum = ph_ptr->ldata;
	ret = ph_ptr->ret;
   sem_post(&ipc_handles.ACPH_BUSY);	
	return ret;

}


USHORT CRead_S_Parameter(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr, ULONG* pulData)
{
//#define LIST_CONTAINER(_Index)  (pbBaseAdress+_Index*0x10000+0x00200000)
	ULONG ulIDN=0,ulData,ulLength=0;
	USHORT usFail;
	ULONG ulAttribute;
//	char * pListParameterDataRd;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	usFail = CRead_S_Attribute(usParaSet,usParaNum,usDriveAddr,&ulAttribute);
	if (usFail != 0)
		return usFail;
	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);

	if(ulAttribute&0x40000){ //参数为变长度
		ph_ptr->rd_wrt=PAR_LESEN;
		ph_ptr->drv_nbr=usDriveAddr;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=FALSE;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
		/* Daten in den Userspeicher */
		ulLength = (USHORT)ph_ptr->vdata[0];
		*pulData=(ULONG)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,ulLength+4);
		memcpy((void*)*pulData,&(ph_ptr->vdata[0]),ulLength+4);
	}else{
		ph_ptr->rd_wrt=PAR_LESEN;
		ph_ptr->drv_nbr=usDriveAddr;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=TRUE;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
		* pulData = ph_ptr->ldata;

	}
		ret = ph_ptr->ret;
	  sem_post(&ipc_handles.ACPH_BUSY);	
		return ret;
}

USHORT CWrite_S_Parameter(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr, ULONG ulData)
{
	ULONG ulIDN=0,ulLength=0,ulAttribute;
	USHORT usFail,*pusData;
	ULONG ulErrorMessage;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	ULONG ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	usFail = CRead_S_Attribute(usParaSet,usParaNum,usDriveAddr,&ulAttribute);
	if (usFail != 0)
		return usFail;
	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);

	if(ulAttribute&0x40000){ //参数为变长度
		pusData = (USHORT *) ulData;
		ph_ptr->rd_wrt=PAR_SCHREIBEN;
		ph_ptr->drv_nbr=usDriveAddr;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=FALSE;
		ph_ptr->size=pusData[0]+4;
		ph_ptr->ldata=ulData;
	 /* Daten in den Handlerspeicher */
		memcpy( (void*)ph_ptr->vdata,(void*)(ulData),pusData[0]+4);
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
	}else{
//		RtPrintf("CRead_Y_Parameter not list\n");
		ph_ptr->rd_wrt=PAR_SCHREIBEN;
		ph_ptr->drv_nbr=usDriveAddr;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=TRUE;
		ph_ptr->size=sizeof(ulData);
		ph_ptr->ldata=ulData;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

		sem_post(&ipc_handles.ACPH_FLAG);

		sem_wait(&ipc_handles.ACPH_READY);
	}
		ret = ph_ptr->ret;
	  sem_post(&ipc_handles.ACPH_BUSY);	
	return ret;
}
//P参数函数
 USHORT CRead_P_Name(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,char*	pchName)
{
	ULONG ulIDN=0,ulLength=0;
	ULONG ulTemp;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	ulIDN|=0x8000;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);

  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;
  ph_ptr->element=2;
  ph_ptr->bSinglePara=FALSE;
		ph_ptr->NCsvch_HMIsvch=NC_SVCH;

  sem_post(&ipc_handles.ACPH_FLAG);
 
  sem_wait(&ipc_handles.ACPH_READY);
    /* Daten in den Userspeicher */
    ulLength = (USHORT)ph_ptr->vdata[0];
	memset(pchName,NULL,61);
    memcpy( pchName, &(ph_ptr->vdata[2]),ulLength);
	ret = ph_ptr->ret;
    /* Ab dieser Stelle ist das Shared-Memory wieder frei */
    sem_post(&ipc_handles.ACPH_BUSY);	

	return ret; 
}

USHORT CRead_P_Attribute(USHORT usParaSet,USHORT	usParaNum,USHORT usDriveAddr,ULONG* pulAttribute)
{
	ULONG ulIDN=0,ulLength=0;
	ULONG ulTemp;
	SHORT ret;      
	BOOL   bret;
	SERC_ARGS_t *ph_ptr;                  /* Uebergabestruktur erschaffen     */
	HANDLE acSHMhdl;                      /* Handle fuer das Shared-Memory */
	T_IPC_NAMES *pSMemNames;              /* Namensliste aller named objects */
	HANDLE hIPCNames,ACPH_BUSY,ACPH_FLAG,ACPH_READY;

	ulIDN|=0x8000;
	ulTemp=0x00000000;
	ulTemp|=usDriveAddr;
	ulTemp<<=24;
	ulIDN|=ulTemp;
	ulTemp=0x00000000;
	ulTemp|=usParaSet;
	ulTemp<<=12;
	ulIDN|=ulTemp;
	ulIDN|=usParaNum;

	ph_ptr=ipc_handles.ACPH_CNL;
	sem_wait(&ipc_handles.ACPH_BUSY);


  ph_ptr->rd_wrt=PAR_LESEN;
  ph_ptr->drv_nbr=usDriveAddr;
  ph_ptr->ident_nbr=ulIDN;

⌨️ 快捷键说明

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