📄 acph.c
字号:
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_P_Unit(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr,char* pchUnit)
{
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=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_P_Minimum(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr,ULONG* pulMinimum)
{
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=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_P_Maximum(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr,ULONG* pulMaximum)
{
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=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_P_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;
ULONG ulTemp;
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|=0x8000;
ulTemp=0x00000000;
ulTemp|=usDriveAddr;
ulTemp<<=24;
ulIDN|=ulTemp;
ulTemp=0x00000000;
ulTemp|=usParaSet;
ulTemp<<=12;
ulIDN|=ulTemp;
ulIDN|=usParaNum;
usFail = CRead_P_Attribute(usParaSet,usParaNum,usDriveAddr,&ulAttribute);
ph_ptr=ipc_handles.ACPH_CNL;
sem_wait(&ipc_handles.ACPH_BUSY);
if (usFail != 0)
return usFail;
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{
// RtPrintf("CRead_Y_Parameter not list\n");
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_P_Parameter(USHORT usParaSet,USHORT usParaNum,USHORT usDriveAddr, ULONG ulData)
{
ULONG ulIDN=0,ulLength=0,ulAttribute;
USHORT usFail,*pusData;
ULONG ulErrorMessage;
ULONG ulTemp;
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|=0x8000;
ulTemp=0x00000000;
ulTemp|=usDriveAddr;
ulTemp<<=24;
ulIDN|=ulTemp;
ulTemp=0x00000000;
ulTemp|=usParaSet;
ulTemp<<=12;
ulIDN|=ulTemp;
ulIDN|=usParaNum;
usFail = CRead_P_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;
}
ULONG init_lifecounter(HANDLE * synch)
{
HANDLE hTmp;
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames;
BOOL bRet;
/* Shared-Memory fuer die IPC-Namen oeffnen */
hIPCNames = RtOpenSharedMemory( SHM_MAP_READ,
0,
"IPC_NAMES",
(void **)&pSMemNames);
hTmp = RtOpenSemaphore( SEMAPHORE_ALL_ACCESS,
FALSE,
pSMemNames->SOFT_SYNC);
/* Ab hier wird die IPC-Namensliste nicht mehr gebraucht */
*synch = hTmp;
return( OK );
}
ULONG trigger_lifecounter( HANDLE Synch)
{
BOOL bret;
bret = RtReleaseSemaphore( Synch, 1, 0);
return(OK);
}/* End of function life_counter() */
ULONG synch_cycle_data( HANDLE synch )
{
DWORD dwRet;
dwRet = RtWaitForSingleObject( synch, INFINITE);
if( dwRet == WAIT_FAILED )
{
dwRet = GetLastError();
return( NOT_OK );
}
return( OK );
}/* End of synch_cycle_data() */
ULONG init_synch(HANDLE * synch)
{
HANDLE hTmp;
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames;
BOOL bRet;
/* Shared-Memory fuer die IPC-Namen oeffnen */
hIPCNames = RtOpenSharedMemory( SHM_MAP_READ,
0,
"IPC_NAMES",
(void **)&pSMemNames);
hTmp = RtOpenSemaphore( SEMAPHORE_ALL_ACCESS,
FALSE,
pSMemNames->REAL_CNL);
*synch = hTmp;
return( OK );
}
ULONG ClearError( void )
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = CLEAR_ERROR;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG ChangePhase( USHORT usNewPhase )
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = CHANGE_PHASE;
syst_ptr->usData = usNewPhase;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG SaveSystemParameter(void)
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = SAVE_SYSTEM_PARA;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG ClearAllErrors( void )
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = CLEAR_ALL_ERRORS;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG SetLifecounterDif(USHORT usDifNum)
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = SET_LIFECOUNTER_DIF;
syst_ptr->usData = usDifNum;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG GetPhase( USHORT *usActPhase)
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = GET_PHASE;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
*usActPhase = syst_ptr->usData;
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG GetDiagMessage( char *pDiagMessage)
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur erschaffen */
HANDLE acSHMhdl; /* Handle fuer das Shared-Memory */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
HANDLE hIPCNames,SYST_BUSY,SYST_FLAG,SYST_READY;
syst_ptr=ipc_handles.SYST_CNL;
sem_wait(&ipc_handles.SYST_BUSY );
syst_ptr->SYST_TYPE = GET_DIAG_MESSAGE;
sem_post(&ipc_handles.SYST_FLAG );
sem_wait(&ipc_handles.SYST_READY );
memcpy(pDiagMessage, syst_ptr->chData,64);
sem_post(&ipc_handles.SYST_BUSY );
return (OK);
}
ULONG open_mdt_channel( T_CYC_DATA** spCylMdtData)
{
*spCylMdtData = ipc_handles.CYCLE_DATA_MDT;
return(OK);
}/* End of open_mdt_channel() */
ULONG close_mdt_channel()
{
return( OK );
}
ULONG close_at_channel()
{
return( OK );
}
ULONG open_at_channel( T_CYC_DATA** spCylAtData)
{
*spCylAtData = ipc_handles.CYCLE_DATA_AT;
return(OK);
}/* End of open_at_channel() */
ULONG TerminateSercans()
{
sem_post(&ipc_handles.TERMINATE_FLAG);
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -