?? acph.c
字號(hào):
#include <windows.h>
#include <wchar.h>
#include <rtapi.h>
#include "ACPH_H.H"
/*
#include "windows.h"
#include "stdio.h"
#include "rtapi.h"
#include <math.h>
#include <string.h>
*/
//A參數(shù)函數(shù)
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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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;
sem_post(&ipc_handles.ACPH_BUSY);
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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
if(ulAttribute&0x40000){ //參數(shù)為變長(zhǎng)度
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;
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{
// 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;
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_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;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
if(ulAttribute&0x40000){ //參數(shù)為變長(zhǎng)度
pusData = (USHORT *) ulData;
ph_ptr->rd_wrt=PAR_SCHREIBEN;
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=HMI_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->ident_nbr=ulIDN;
ph_ptr->element=7;
ph_ptr->bSinglePara=TRUE;
ph_ptr->size=sizeof(ulData);
ph_ptr->ldata=ulData;
ph_ptr->NCsvch_HMIsvch=HMI_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;
}
//Y參數(shù)函數(shù)
USHORT CRead_Y_Name(USHORT usParaNum,char* pchName)
{
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=0x40000;
ulIDN|=usParaNum;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_Y_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=0x40000;
ulIDN|=usParaNum;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_Y_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=0x40000;
ulIDN|=usParaNum;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_Y_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=0x40000;
ulIDN|=usParaNum;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_Y_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=0x40000;
ulIDN|=usParaNum;
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
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;
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_Y_Parameter(USHORT usParaNum, ULONG* pulData)
{
//#define LIST_CONTAINER(_Index) (pbBaseAdress+_Index*0x10000+0x00200000)
ULONG ulIDN,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;
ulIDN=0x40000;
ulIDN|=usParaNum;
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){ //參數(shù)為變長(zhǎng)度
ph_ptr->rd_wrt=PAR_LESEN;
ph_ptr->drv_nbr=0;
ph_ptr->ident_nbr=ulIDN;
ph_ptr->element=7;
ph_ptr->bSinglePara=FALSE;
ph_ptr->NCsvch_HMIsvch=NC_SVCH;//采用NC通道
sem_post(&ipc_handles.ACPH_FLAG);//進(jìn)入acph線程調(diào)用Request_ReadDriveParameter
sem_wait(&ipc_handles.ACPH_READY);//等待acph線程Response_ReadDriveParameter返回SVCH_FINISHED并退出acph線程
/* 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->drv_nbr=0;
ph_ptr->ident_nbr=ulIDN;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -