📄 acph.c
字号:
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=usDriveAddr;
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_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);
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 (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;
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->drv_nbr=usDriveAddr;
ph_ptr->ident_nbr=ulIDN;
ph_ptr->element=7;
ph_ptr->bSinglePara=TRUE;
ph_ptr->NCsvch_HMIsvch=NC_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_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;
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){ //参数为变长度
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;
bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
}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;
bret = RtReleaseSemaphore( ACPH_FLAG, 1, 0);
ret = RtWaitForSingleObject( ACPH_READY, INFINITE );
}
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;
}
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 */
bRet = RtCloseHandle( hIPCNames );
*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);
/* Ab hier wird die IPC-Namensliste nicht mehr gebraucht */
bRet = RtCloseHandle( hIPCNames );
*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;
hIPCNames = RtOpenSharedMemory( SHM_MAP_READ,
0,
"IPC_NAMES",
(void **)&pSMemNames);
acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE,
0,
pSMemNames->ACPH_CNL,
(void **)&syst_ptr);
SYST_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_BUSY );
SYST_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_FLAG );
SYST_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_READY );
bret = RtCloseHandle( hIPCNames );
ret = RtWaitForSingleObject( SYST_BUSY, INFINITE );
syst_ptr->SYST_TYPE = CLEAR_ERROR;
bret = RtReleaseSemaphore( SYST_FLAG, 1, 0);
ret = RtWaitForSingleObject( SYST_READY, INFINITE );
bret = RtCloseHandle( acSHMhdl );
/* Ab dieser Stelle ist das Shared-Memory wieder frei */
bret = RtReleaseSemaphore( SYST_BUSY, 1, 0);
bret = RtCloseHandle(SYST_FLAG);
bret = RtCloseHandle(SYST_BUSY);
bret = RtCloseHandle(SYST_READY);
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;
hIPCNames = RtOpenSharedMemory( SHM_MAP_READ,
0,
"IPC_NAMES",
(void **)&pSMemNames);
acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE,
0,
pSMemNames->SYST_CNL,
(void **)&syst_ptr);
SYST_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_BUSY );
SYST_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_FLAG );
SYST_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_READY );
bret = RtCloseHandle( hIPCNames );
ret = RtWaitForSingleObject( SYST_BUSY, INFINITE );
syst_ptr->SYST_TYPE = CHANGE_PHASE;
syst_ptr->usData = usNewPhase;
bret = RtReleaseSemaphore( SYST_FLAG, 1, 0);
ret = RtWaitForSingleObject( SYST_READY, INFINITE );
bret = RtCloseHandle( acSHMhdl );
/* Ab dieser Stelle ist das Shared-Memory wieder frei */
bret = RtReleaseSemaphore( SYST_BUSY, 1, 0);
bret = RtCloseHandle(SYST_FLAG);
bret = RtCloseHandle(SYST_BUSY);
bret = RtCloseHandle(SYST_READY);
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;
hIPCNames = RtOpenSharedMemory( SHM_MAP_READ,
0,
"IPC_NAMES",
(void **)&pSMemNames);
acSHMhdl = RtOpenSharedMemory( SHM_MAP_WRITE,
0,
pSMemNames->SYST_CNL,
(void **)&syst_ptr);
SYST_BUSY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_BUSY );
SYST_FLAG = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_FLAG );
SYST_READY = RtOpenSemaphore(SEMAPHORE_ALL_ACCESS, 0, pSMemNames->SYST_READY );
bret = RtCloseHandle( hIPCNames );
ret = RtWaitForSingleObject( SYST_BUSY, INFINITE );
syst_ptr->SYST_TYPE = SAVE_SYSTEM_PARA;
bret = RtReleaseSemaphore( SYST_FLAG, 1, 0);
ret = RtWaitForSingleObject( SYST_READY, INFINITE );
bret = RtCloseHandle( acSHMhdl );
/* Ab dieser Stelle ist das Shared-Memory wieder frei */
bret = RtReleaseSemaphore( SYST_BUSY, 1, 0);
bret = RtCloseHandle(SYST_FLAG);
bret = RtCloseHandle(SYST_BUSY);
bret = RtCloseHandle(SYST_READY);
return (OK);
}
ULONG ClearAllErrors( void )
{
SHORT ret;
BOOL bret;
SYST_t *syst_ptr; /* Uebergabestruktur ersc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -