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

📄 acph.c

📁 SERCOSII卡驱动,通过该驱动程序可以在windowXp与RTX环境下运行自己编写的数控软件实现对数控设备的驱动。
💻 C
📖 第 1 页 / 共 5 页
字号:
#include <windows.h>
#include <wchar.h>
#include <rtapi.h>
#include "..\include\SoftSercansdefs.h"
/*
#include "windows.h"
#include "stdio.h"
#include "rtapi.h"
#include <math.h>
#include <string.h>
*/

//A参数函数
USHORT CRead_A_Name(USHORT	usParaNum,char*	pchName)
{
	ULONG ulIDN,ulLength=0;
//////
	SHORT ret,i;      
	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=0x10000;
	ulIDN|=usParaNum;
/*	usFail=Request_ReadDriveParameter(0, ulIDN, 2,FALSE);
	if (usFail != SVCH_OK)
		return usFail;
	Sleep(WAIT_TIME);
	usFail=Response_ReaDriveParameter(0, &ulData,(USHORT*)(&ulLength));
	if (usFail != SVCH_FINISHED){
		if( usFail == SVCH_ERROR)
			return (USHORT)ulData;
		return usFail;
	}
//	Sleep(1000);
	RtPrintf("ulLength=0x%08x\n",ulLength);//why
	memcpy(pchName,(pbBaseAdress+0x200000)+(ulData+4),ulLength);*/
  hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
  acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	

    ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	


  bret = RtCloseHandle( hIPCNames );
  ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

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

  bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
 
  ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
    /* 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;
    bret = RtCloseHandle( acSHMhdl );
    /* Ab dieser Stelle ist das Shared-Memory wieder frei */
    bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	

	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);

	return ret; 
}

USHORT CRead_A_Attribute(USHORT	usParaNum,ULONG* pulAttribute)
{
	ULONG ulIDN,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;

	
	ulIDN=0x10000;
	ulIDN|=usParaNum;
  hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
  acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
    ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
  bret = RtCloseHandle( hIPCNames );
  ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

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

  bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
 
  ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
	* pulAttribute = ph_ptr->ldata;
	ret = ph_ptr->ret;
    bret = RtCloseHandle( acSHMhdl );
  bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	
	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);

	return ret;
}

USHORT CRead_A_Unit(USHORT	usParaNum,char*	pchUnit)
{
	ULONG ulIDN,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;
	
	ulIDN=0x10000;
	ulIDN|=usParaNum;
  hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
  acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
     ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
 bret = RtCloseHandle( hIPCNames );
  ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

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

  bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
 
  ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
    /* Daten in den Userspeicher */
    ulLength = (USHORT)ph_ptr->vdata[0];
    memcpy( pchUnit, &(ph_ptr->vdata[2]),ulLength);
	ret = ph_ptr->ret;
    bret = RtCloseHandle( acSHMhdl );
    /* Ab dieser Stelle ist das Shared-Memory wieder frei */
    bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	
	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);

	return ret; 

}

USHORT CRead_A_Minimum(USHORT usParaNum,ULONG* pulMinimum)
{
	ULONG ulIDN,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;
	
	ulIDN=0x10000;
	ulIDN|=usParaNum;
  hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
  acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
     ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
 bret = RtCloseHandle( hIPCNames );
  ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

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

  bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
 
  ret = RtWaitForSingleObject( ACPH_READY, INFINITE );

	* pulMinimum = ph_ptr->ldata;
	ret = ph_ptr->ret;
    bret = RtCloseHandle( acSHMhdl );
   bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	
	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);
	return ret;
}

USHORT CRead_A_Maximum(USHORT	usParaNum,ULONG* pulMaximum)
{
	ULONG ulIDN,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;
	
	ulIDN=0x10000;
	ulIDN|=usParaNum;
  hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
  acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
      ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
bret = RtCloseHandle( hIPCNames );
  ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

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

  bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
 
  ret = RtWaitForSingleObject( ACPH_READY, INFINITE );

	* pulMaximum = ph_ptr->ldata;
	ret = ph_ptr->ret;
    bret = RtCloseHandle( acSHMhdl );
   bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	
	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);
	return ret;
}

USHORT CRead_A_Parameter(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;	
	ulIDN|=0x10000;
	ulIDN|=usParaNum;

	usFail = CRead_A_Attribute(usParaNum,&ulAttribute);
	if (usFail != 0)
		return usFail;
	 hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
	 acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
    ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
	 bret = RtCloseHandle( hIPCNames );
	 ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );
	if(ulAttribute&0x40000){ //参数为变长度
		ph_ptr->rd_wrt=PAR_LESEN;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=FALSE;
		ph_ptr->NCsvch_HMIsvch=HMI_SVCH;

		bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);

		ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
		/* 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{
//		RtPrintf("CRead_Y_Parameter not list\n");
		ph_ptr->rd_wrt=PAR_LESEN;
		ph_ptr->ident_nbr=ulIDN;
		ph_ptr->element=7;
		ph_ptr->bSinglePara=TRUE;
		ph_ptr->NCsvch_HMIsvch=HMI_SVCH;

		bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);

		ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
		* pulData = ph_ptr->ldata;

	}
		ret = ph_ptr->ret;
	    bret = RtCloseHandle( acSHMhdl );
	  bret = RtReleaseSemaphore( ACPH_BUSY, 1, 0);	
	bret = RtCloseHandle(ACPH_FLAG);
	bret = RtCloseHandle(ACPH_BUSY);
	bret = RtCloseHandle(ACPH_READY);
		return ret;

}
USHORT CWrite_A_Parameter(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;	
	ulIDN|=0x10000;
	ulIDN|=usParaNum;

	usFail = CRead_A_Attribute(usParaNum,&ulAttribute);
	if (usFail != 0)
		return usFail;
	 hIPCNames = RtOpenSharedMemory( SHM_MAP_READ, 
                                  0, 
	                 							  "IPC_NAMES", 
							                    (void **)&pSMemNames);
	 acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE, 
	                             0, 
								 pSMemNames->ACPH_CNL,
								 (void **)&ph_ptr);	
    ACPH_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_BUSY );	
    ACPH_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_FLAG );	
    ACPH_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->ACPH_READY );	
	 bret = RtCloseHandle( hIPCNames );
	 ret = RtWaitForSingleObject( ACPH_BUSY, INFINITE );

⌨️ 快捷键说明

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