📄 getdi_setdo.c
字号:
#include "Utility.h"
/*!
***************************************************************************
* \brief
* get DI or set DO
* \param tServerInfo
[in] server info
* \param *ptDIDOStatus
[in/out] DI/DO status to get/set
* \param bGetDI
[in] true means get DI
* \param *ptDIDONumber
[out] the DI and DO number of server
* \return
* \retval -2 the index of DO to be set is larger than server's capabilities
* \retval S_OK get DI or set DO success
**************************************************************************/
int GetDI_SetDO(TSERVER_INFO tServerInfo, DIDOSTATUS *ptDIDOStatus, BOOL bGetDI, TDIDONumber *ptDIDONumber)
{
HANDLE hSrvUtl;
HANDLE hDevice;
char lpszModelName[64];
SCODE scRet;
TSrvDepResource_ServerInfo srvInfo;
int iCnt;
scRet = ServerUtlInit(&hSrvUtl, &hDevice, lpszModelName, tServerInfo);
if (scRet != S_OK)
return scRet;
scRet = SrvDepResource_GetParamForServer(lpszModelName, &srvInfo);
if (scRet != S_OK)
{
ServerUtlRelease(&hSrvUtl, &hDevice);
return scRet;
}
ptDIDONumber->iDINumber = srvInfo.dwDiNum;
ptDIDONumber->iDONumber = srvInfo.dwDoNum;
// get DI from server
if (bGetDI)
{
scRet = ServerUtl_GetDIStatus(hDevice, &ptDIDOStatus[0], &ptDIDOStatus[1], &ptDIDOStatus[2], &ptDIDOStatus[3], FALSE);
if (scRet != S_OK)
{
ServerUtlRelease(&hSrvUtl, &hDevice);
return scRet;
}
}
else
{
if (ptDIDOStatus != NULL)
{
for (iCnt = 0; iCnt < 4; iCnt++)
{
if (iCnt >= srvInfo.dwDoNum && ptDIDOStatus[iCnt] != DIDO_NONE)
{
ServerUtlRelease(&hSrvUtl, &hDevice);
return -2;
}
}
scRet = ServerUtl_SetDOLevel(hDevice, ptDIDOStatus[0], ptDIDOStatus[1], FALSE);
if (scRet != S_OK)
{
ServerUtlRelease(&hSrvUtl, &hDevice);
return scRet;
}
}
}
ServerUtlRelease(&hSrvUtl, &hDevice);
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -