[fix]opc_ua_server_s异常处理不当导致fes奔溃修复
This commit is contained in:
parent
cc859d1d18
commit
3cfbb53c90
@ -13,14 +13,14 @@ COpcUaDataProcThread::COpcUaDataProcThread(CFesBase *ptrCFesBase, CFesChanPtr p
|
|||||||
m_pChgDiData=NULL;
|
m_pChgDiData=NULL;
|
||||||
m_pChgAccData=NULL;
|
m_pChgAccData=NULL;
|
||||||
m_pChgMiData=NULL;
|
m_pChgMiData=NULL;
|
||||||
|
m_ptrUaServer=NULL;
|
||||||
|
|
||||||
m_ptrCFesChan = ptrCFesChan;
|
m_ptrCFesChan = ptrCFesChan;
|
||||||
m_ptrCFesBase = ptrCFesBase;
|
m_ptrCFesBase = ptrCFesBase;
|
||||||
m_ptrCurrentChan = ptrCFesChan;
|
m_ptrCurrentChan = ptrCFesChan;
|
||||||
|
|
||||||
m_ptrCFesRtu = GetRtuDataByChanData(m_ptrCFesChan);
|
m_ptrCFesRtu = GetRtuDataByChanData(m_ptrCFesChan);
|
||||||
|
m_currentRtuNamespaceIndex=0;
|
||||||
|
|
||||||
//2020-02-24 thxiao 创建时设置ThreadRun标识。
|
//2020-02-24 thxiao 创建时设置ThreadRun标识。
|
||||||
if ((m_ptrCFesChan == NULL) || (m_ptrCFesRtu == NULL))
|
if ((m_ptrCFesChan == NULL) || (m_ptrCFesRtu == NULL))
|
||||||
@ -51,7 +51,11 @@ COpcUaDataProcThread::COpcUaDataProcThread(CFesBase *ptrCFesBase, CFesChanPtr p
|
|||||||
|
|
||||||
if(found)
|
if(found)
|
||||||
{
|
{
|
||||||
initServer();
|
if(iotSuccess==initServer())
|
||||||
|
{
|
||||||
|
initNodeId();
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -70,6 +74,7 @@ COpcUaDataProcThread::~COpcUaDataProcThread()
|
|||||||
|
|
||||||
if(m_ptrUaServer)
|
if(m_ptrUaServer)
|
||||||
{
|
{
|
||||||
|
UA_Server_run_shutdown(m_ptrUaServer);
|
||||||
UA_Server_delete(m_ptrUaServer);
|
UA_Server_delete(m_ptrUaServer);
|
||||||
m_ptrUaServer=NULL;
|
m_ptrUaServer=NULL;
|
||||||
}
|
}
|
||||||
@ -86,19 +91,14 @@ int COpcUaDataProcThread::beforeExecute()
|
|||||||
void COpcUaDataProcThread::execute()
|
void COpcUaDataProcThread::execute()
|
||||||
{
|
{
|
||||||
|
|
||||||
if(m_bReady)
|
if(!m_bReady)
|
||||||
{
|
{
|
||||||
LOGTRACE("COpcUaDataProcThread ChanNo=%d not ready ,check log which has record err", m_ptrCurrentChan->m_Param.ChanNo);
|
LOGTRACE("COpcUaDataProcThread ChanNo=%d not ready ,check log which has record err", m_ptrCurrentChan->m_Param.ChanNo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!m_bServerOK)
|
if(!m_bServerOK)
|
||||||
{
|
{
|
||||||
if(iotSuccess!=initServer())
|
return;
|
||||||
{
|
|
||||||
m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuComDown);
|
|
||||||
LOGERROR("COpcUaDataProcThread ChanNo=%d initServer failed ", m_ptrCurrentChan->m_Param.ChanNo);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
UA_Server_run_iterate(m_ptrUaServer, true);
|
UA_Server_run_iterate(m_ptrUaServer, true);
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ void COpcUaDataProcThread::handleAiData()
|
|||||||
pFwAi = m_ptrCFesRtu->m_pFwAi + aiPoint;
|
pFwAi = m_ptrCFesRtu->m_pFwAi + aiPoint;
|
||||||
UA_NodeId curNodeId=m_vecAiNodeId[aiPoint];
|
UA_NodeId curNodeId=m_vecAiNodeId[aiPoint];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
fvalue = pFwAi->Value*pFwAi->Coeff + pFwAi->Base;
|
fvalue = pFwAi->Value; /**pFwAi->Coeff + pFwAi->Base; 2025.3.18已在UpdateFesAiValue 做处理*/
|
||||||
buildValue(pFwAi->ResParam1,fvalue,curValue);
|
buildValue(pFwAi->ResParam1,fvalue,curValue);
|
||||||
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
||||||
if(!UA_StatusCode_isGood(writeStatus))
|
if(!UA_StatusCode_isGood(writeStatus))
|
||||||
@ -240,7 +240,7 @@ void COpcUaDataProcThread::handleAccData()
|
|||||||
pFwAcc = m_ptrCFesRtu->m_pFwAcc + accPoint;
|
pFwAcc = m_ptrCFesRtu->m_pFwAcc + accPoint;
|
||||||
UA_NodeId curNodeId=m_vecAccNodeId[accPoint];
|
UA_NodeId curNodeId=m_vecAccNodeId[accPoint];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
fvalue = pFwAcc->Value*pFwAcc->Coeff + pFwAcc->Base;
|
fvalue = pFwAcc->Value; /**pFwAcc->Coeff + pFwAcc->Base; 2025.3.18已在UpdateFesAccValue 做处理*/
|
||||||
buildValue(pFwAcc->ResParam1,fvalue,curValue);
|
buildValue(pFwAcc->ResParam1,fvalue,curValue);
|
||||||
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
||||||
if(!UA_StatusCode_isGood(writeStatus))
|
if(!UA_StatusCode_isGood(writeStatus))
|
||||||
@ -268,7 +268,7 @@ void COpcUaDataProcThread::handleMiData()
|
|||||||
|
|
||||||
UA_NodeId curNodeId=m_vecMiNodeId[miPoint];
|
UA_NodeId curNodeId=m_vecMiNodeId[miPoint];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
fvalue = pFwMi->Value*pFwMi->Coeff + pFwMi->Base;
|
fvalue = pFwMi->Value; /**pFwMi->Coeff + pFwMi->Base;2025.3.18已在UpdateFesMiValue 做处理*/
|
||||||
buildValue(pFwMi->ResParam1,fvalue,curValue);
|
buildValue(pFwMi->ResParam1,fvalue,curValue);
|
||||||
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
||||||
if(!UA_StatusCode_isGood(writeStatus))
|
if(!UA_StatusCode_isGood(writeStatus))
|
||||||
@ -321,7 +321,7 @@ void COpcUaDataProcThread::handleChgAiData()
|
|||||||
pFwAi = m_ptrCFesRtu->m_pFwAi + pChgAi->RemoteNo;
|
pFwAi = m_ptrCFesRtu->m_pFwAi + pChgAi->RemoteNo;
|
||||||
float AiFloatValue = static_cast<float>(pChgAi->Value * pFwAi->Coeff + pFwAi->Base);
|
float AiFloatValue = static_cast<float>(pChgAi->Value * pFwAi->Coeff + pFwAi->Base);
|
||||||
int64 curNodeIdIndex=m_mapAiVecIndex[pChgAi->RemoteNo];
|
int64 curNodeIdIndex=m_mapAiVecIndex[pChgAi->RemoteNo];
|
||||||
UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex];
|
UA_NodeId curNodeId=m_vecAiNodeId[curNodeIdIndex];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
buildValue(pFwAi->ResParam1,AiFloatValue,curValue);
|
buildValue(pFwAi->ResParam1,AiFloatValue,curValue);
|
||||||
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue);
|
||||||
@ -363,7 +363,7 @@ void COpcUaDataProcThread::handleChgDiData()
|
|||||||
continue;
|
continue;
|
||||||
pFwDi = m_ptrCFesRtu->m_pFwDi+ pChgDi->RemoteNo;
|
pFwDi = m_ptrCFesRtu->m_pFwDi+ pChgDi->RemoteNo;
|
||||||
int64 curNodeIdIndex=m_mapAiVecIndex[pChgDi->RemoteNo];
|
int64 curNodeIdIndex=m_mapAiVecIndex[pChgDi->RemoteNo];
|
||||||
UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex];
|
UA_NodeId curNodeId=m_vecDiNodeId[curNodeIdIndex];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
DiValue = pChgDi->Value&0x01;
|
DiValue = pChgDi->Value&0x01;
|
||||||
buildValue(pFwDi->ResParam1,DiValue,curValue);
|
buildValue(pFwDi->ResParam1,DiValue,curValue);
|
||||||
@ -409,7 +409,7 @@ void COpcUaDataProcThread::handleChgAccData()
|
|||||||
pFwAcc = m_ptrCFesRtu->m_pFwAcc + pChgAcc->RemoteNo;
|
pFwAcc = m_ptrCFesRtu->m_pFwAcc + pChgAcc->RemoteNo;
|
||||||
|
|
||||||
float AccFloatValue = static_cast<float>(pChgAcc->Value * pFwAcc->Coeff + pFwAcc->Base);
|
float AccFloatValue = static_cast<float>(pChgAcc->Value * pFwAcc->Coeff + pFwAcc->Base);
|
||||||
int64 curNodeIdIndex=m_mapAiVecIndex[pFwAcc->RemoteNo];
|
int64 curNodeIdIndex=m_mapAccVecIndex[pFwAcc->RemoteNo];
|
||||||
UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex];
|
UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex];
|
||||||
UA_Variant curValue;
|
UA_Variant curValue;
|
||||||
buildValue(pFwAcc->ResParam1,AccFloatValue,curValue);
|
buildValue(pFwAcc->ResParam1,AccFloatValue,curValue);
|
||||||
@ -481,10 +481,9 @@ void COpcUaDataProcThread::handleChgMiData()
|
|||||||
|
|
||||||
int COpcUaDataProcThread::initServer()
|
int COpcUaDataProcThread::initServer()
|
||||||
{
|
{
|
||||||
|
|
||||||
std::string serverIp(m_ptrCFesChan->m_Param.szResParam1);
|
std::string serverIp(m_ptrCFesChan->m_Param.szResParam1);
|
||||||
int port=m_ptrCFesChan->m_Param.LocalPortNo;
|
int port=m_ptrCFesChan->m_Param.LocalPortNo;
|
||||||
|
m_bServerOK=true;
|
||||||
|
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << serverIp <<":"<< port;
|
oss << serverIp <<":"<< port;
|
||||||
@ -503,8 +502,10 @@ int COpcUaDataProcThread::initServer()
|
|||||||
{
|
{
|
||||||
m_ptrUaServer = UA_Server_new();
|
m_ptrUaServer = UA_Server_new();
|
||||||
UA_ServerConfig *config = UA_Server_getConfig(m_ptrUaServer);
|
UA_ServerConfig *config = UA_Server_getConfig(m_ptrUaServer);
|
||||||
UA_String endpointUrl = UA_STRING(const_cast<char*>(resultUrl.c_str()));
|
|
||||||
config->serverUrls=&endpointUrl;
|
UA_String *endpointUrl = (UA_String*)UA_malloc(sizeof(UA_String));
|
||||||
|
*endpointUrl = UA_String_fromChars(resultUrl.c_str());
|
||||||
|
config->serverUrls=endpointUrl;
|
||||||
|
|
||||||
UA_StatusCode retval = UA_Server_run_startup(m_ptrUaServer);
|
UA_StatusCode retval = UA_Server_run_startup(m_ptrUaServer);
|
||||||
if (retval != UA_STATUSCODE_GOOD) {
|
if (retval != UA_STATUSCODE_GOOD) {
|
||||||
@ -520,10 +521,19 @@ int COpcUaDataProcThread::initServer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
m_bServerOK=true;
|
if(m_bServerOK)
|
||||||
m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuNormal);
|
{
|
||||||
LOGINFO("COpcUaDataProcThread ChanNo=%d start UAserver %s ok", m_ptrCFesChan->m_Param.ChanNo,resultUrl.c_str());
|
m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuNormal);
|
||||||
return iotSuccess;
|
LOGINFO("COpcUaDataProcThread ChanNo=%d start UAserver %s ok", m_ptrCFesChan->m_Param.ChanNo,resultUrl.c_str());
|
||||||
|
return iotSuccess;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuComDown);
|
||||||
|
LOGERROR("COpcUaDataProcThread ChanNo=%d initServer failed ", m_ptrCurrentChan->m_Param.ChanNo);
|
||||||
|
return iotFailed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string COpcUaDataProcThread::getStatusMessage(UA_StatusCode status)
|
string COpcUaDataProcThread::getStatusMessage(UA_StatusCode status)
|
||||||
@ -537,47 +547,31 @@ string COpcUaDataProcThread::getStatusMessage(UA_StatusCode status)
|
|||||||
int COpcUaDataProcThread::buildNodeId(int nodeIdType, const string &tagStr,UA_NodeId& nodeId)
|
int COpcUaDataProcThread::buildNodeId(int nodeIdType, const string &tagStr,UA_NodeId& nodeId)
|
||||||
{
|
{
|
||||||
string strNodeId="";
|
string strNodeId="";
|
||||||
string namespaceIndex="0";
|
size_t pos = tagStr.find("]");
|
||||||
size_t pos = tagStr.find('!');
|
if (pos != std::string::npos) {
|
||||||
if(pos != std::string::npos)
|
|
||||||
{
|
|
||||||
strNodeId = tagStr.substr(pos + 1);
|
strNodeId = tagStr.substr(pos + 1);
|
||||||
std::string preStr = tagStr.substr(0, pos);
|
} else {
|
||||||
|
strNodeId=tagStr;
|
||||||
size_t pos2 = tagStr.find('[');
|
|
||||||
|
|
||||||
if(pos2!=std::string::npos)
|
|
||||||
{
|
|
||||||
namespaceIndex=preStr.substr(0, pos2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
namespaceIndex=preStr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(nodeIdType==UA_NODEIDTYPE_NUMERIC)
|
|
||||||
{
|
|
||||||
nodeId=UA_NODEID_NUMERIC(atoi(namespaceIndex.c_str()), atoi(strNodeId.c_str()));
|
|
||||||
}
|
|
||||||
else if(nodeIdType==UA_NODEIDTYPE_STRING)
|
|
||||||
{
|
|
||||||
nodeId=UA_NODEID_STRING_ALLOC(atoi(namespaceIndex.c_str()), strNodeId.c_str());
|
|
||||||
}else if(nodeIdType==UA_NODEIDTYPE_GUID)
|
|
||||||
{
|
|
||||||
nodeId=UA_NODEID_GUID(atoi(namespaceIndex.c_str()), UA_GUID(strNodeId.c_str()));
|
|
||||||
}else
|
|
||||||
{
|
|
||||||
LOGERROR("COpcUaDataProcThread ChanNo=%d get bad tagStr(%s) ,nodeIdType is not imple ", m_ptrCFesChan->m_Param.ChanNo,tagStr.c_str());
|
|
||||||
return iotFailed;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iotSuccess;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if(nodeIdType==UA_NODEIDTYPE_NUMERIC)
|
||||||
{
|
{
|
||||||
LOGERROR("COpcUaDataProcThread ChanNo=%d get bad tagStr(%s) ,due to not find (!) ", m_ptrCFesChan->m_Param.ChanNo,tagStr.c_str());
|
nodeId=UA_NODEID_NUMERIC(m_currentRtuNamespaceIndex, atoi(strNodeId.c_str()));
|
||||||
|
}
|
||||||
|
else if(nodeIdType==UA_NODEIDTYPE_STRING)
|
||||||
|
{
|
||||||
|
nodeId=UA_NODEID_STRING_ALLOC(m_currentRtuNamespaceIndex, strNodeId.c_str());
|
||||||
|
}else if(nodeIdType==UA_NODEIDTYPE_GUID)
|
||||||
|
{
|
||||||
|
nodeId=UA_NODEID_GUID(m_currentRtuNamespaceIndex, UA_GUID(strNodeId.c_str()));
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
LOGERROR("COpcUaDataProcThread ChanNo=%d get bad tagStr(%s) ,nodeIdType is not imple ", m_ptrCFesChan->m_Param.ChanNo,tagStr.c_str());
|
||||||
return iotFailed;
|
return iotFailed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return iotSuccess;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int COpcUaDataProcThread::buildValue(int dataType, double curValue, UA_Variant &value)
|
int COpcUaDataProcThread::buildValue(int dataType, double curValue, UA_Variant &value)
|
||||||
@ -746,8 +740,25 @@ void COpcUaDataProcThread::clearData()
|
|||||||
|
|
||||||
void COpcUaDataProcThread::initNodeId()
|
void COpcUaDataProcThread::initNodeId()
|
||||||
{
|
{
|
||||||
|
char strRtuNo[48];
|
||||||
|
memset(&strRtuNo[0], 0, sizeof(strRtuNo));
|
||||||
|
sprintf(strRtuNo, "IOT:RTU%d", m_ptrCFesRtu->m_Param.RtuNo);
|
||||||
|
UA_UInt16 nsIndex = UA_Server_addNamespace(m_ptrUaServer, strRtuNo);
|
||||||
|
m_currentRtuNamespaceIndex=nsIndex;
|
||||||
|
LOGINFO("opc_ua_server_s Namespace(%s)-index(%d) ", strRtuNo,nsIndex);
|
||||||
SFesFwDi *pFwDi=NULL;
|
SFesFwDi *pFwDi=NULL;
|
||||||
for (int diPoint = 0; diPoint < m_ptrCFesRtu->m_MaxDiPoints; diPoint++)
|
|
||||||
|
UA_NodeId digitalObjectId; // 保存对象节点的 ID
|
||||||
|
UA_ObjectAttributes digitalObjectAttr = UA_ObjectAttributes_default;
|
||||||
|
char DigitalName[] = "Digital";
|
||||||
|
UA_Server_addObjectNode(m_ptrUaServer, UA_NODEID_NULL,
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
|
||||||
|
UA_QUALIFIEDNAME(1,DigitalName),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
|
||||||
|
digitalObjectAttr, NULL, &digitalObjectId);
|
||||||
|
|
||||||
|
for (int diPoint = 0; diPoint < m_ptrCFesRtu->m_MaxFwDiPoints; diPoint++)
|
||||||
{
|
{
|
||||||
pFwDi = m_ptrCFesRtu->m_pFwDi + diPoint;
|
pFwDi = m_ptrCFesRtu->m_pFwDi + diPoint;
|
||||||
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
||||||
@ -759,18 +770,28 @@ void COpcUaDataProcThread::initNodeId()
|
|||||||
UA_NodeId_init(&m_vecDiNodeId[diPoint]);
|
UA_NodeId_init(&m_vecDiNodeId[diPoint]);
|
||||||
buildNodeId(pFwDi->ResParam2,pFwDi->szResParam1,m_vecDiNodeId[diPoint]);
|
buildNodeId(pFwDi->ResParam2,pFwDi->szResParam1,m_vecDiNodeId[diPoint]);
|
||||||
|
|
||||||
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwDi->PointDesc);
|
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwDi->PointDesc);
|
||||||
UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER);
|
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT);
|
||||||
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES);
|
UA_Server_addVariableNode(m_ptrUaServer, m_vecDiNodeId[diPoint], digitalObjectId,
|
||||||
UA_Server_addVariableNode(m_ptrUaServer, m_vecDiNodeId[diPoint], parentNodeId,
|
|
||||||
parentReferenceNodeId, qualifiedName,
|
parentReferenceNodeId, qualifiedName,
|
||||||
UA_NODEID_NULL, attr, NULL, NULL);
|
UA_NODEID_NULL, attr, NULL, NULL);
|
||||||
m_mapDiVecIndex[pFwDi->RemoteNo]=diPoint;
|
m_mapDiVecIndex[pFwDi->RemoteNo]=diPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UA_NodeId analogObjectId; // 保存对象节点的 ID
|
||||||
|
char AnalogName[] = "Analog";
|
||||||
|
UA_ObjectAttributes analogObjectAttr = UA_ObjectAttributes_default;
|
||||||
|
UA_Server_addObjectNode(m_ptrUaServer, UA_NODEID_NULL,
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
|
||||||
|
UA_QUALIFIEDNAME(1, AnalogName),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
|
||||||
|
analogObjectAttr, NULL, &analogObjectId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SFesFwAi *pFwAi=NULL;
|
SFesFwAi *pFwAi=NULL;
|
||||||
for (int aiPoint = 0; aiPoint < m_ptrCFesRtu->m_MaxAiPoints; aiPoint++)
|
for (int aiPoint = 0; aiPoint < m_ptrCFesRtu->m_MaxFwAiPoints; aiPoint++)
|
||||||
{
|
{
|
||||||
pFwAi = m_ptrCFesRtu->m_pFwAi + aiPoint;
|
pFwAi = m_ptrCFesRtu->m_pFwAi + aiPoint;
|
||||||
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
||||||
@ -782,19 +803,27 @@ void COpcUaDataProcThread::initNodeId()
|
|||||||
UA_NodeId_init(&m_vecAiNodeId[aiPoint]);
|
UA_NodeId_init(&m_vecAiNodeId[aiPoint]);
|
||||||
buildNodeId(pFwAi->ResParam2,pFwAi->szResParam1,m_vecAiNodeId[aiPoint]);
|
buildNodeId(pFwAi->ResParam2,pFwAi->szResParam1,m_vecAiNodeId[aiPoint]);
|
||||||
|
|
||||||
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwAi->PointDesc);
|
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwAi->PointDesc);
|
||||||
UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER);
|
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT);
|
||||||
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES);
|
UA_Server_addVariableNode(m_ptrUaServer, m_vecAiNodeId[aiPoint], analogObjectId,
|
||||||
UA_Server_addVariableNode(m_ptrUaServer, m_vecAiNodeId[aiPoint], parentNodeId,
|
|
||||||
parentReferenceNodeId, qualifiedName,
|
parentReferenceNodeId, qualifiedName,
|
||||||
UA_NODEID_NULL, attr, NULL, NULL);
|
UA_NODEID_NULL, attr, NULL, NULL);
|
||||||
|
|
||||||
m_mapAiVecIndex[pFwAi->RemoteNo]=aiPoint;
|
m_mapAiVecIndex[pFwAi->RemoteNo]=aiPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UA_NodeId mixObjectId; // 保存对象节点的 ID
|
||||||
|
char MixName[] = "Mix";
|
||||||
|
UA_ObjectAttributes mixObjectAttr = UA_ObjectAttributes_default;
|
||||||
|
UA_Server_addObjectNode(m_ptrUaServer, UA_NODEID_NULL,
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
|
||||||
|
UA_QUALIFIEDNAME(1, MixName),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
|
||||||
|
mixObjectAttr, NULL, &mixObjectId);
|
||||||
|
|
||||||
SFesFwMi *pFwMi=NULL;
|
SFesFwMi *pFwMi=NULL;
|
||||||
for (int miPoint = 0; miPoint < m_ptrCFesRtu->m_MaxMiPoints; miPoint++)
|
for (int miPoint = 0; miPoint < m_ptrCFesRtu->m_MaxFwMiPoints; miPoint++)
|
||||||
{
|
{
|
||||||
pFwMi = m_ptrCFesRtu->m_pFwMi + miPoint;
|
pFwMi = m_ptrCFesRtu->m_pFwMi + miPoint;
|
||||||
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
||||||
@ -806,19 +835,28 @@ void COpcUaDataProcThread::initNodeId()
|
|||||||
UA_NodeId_init(&m_vecMiNodeId[miPoint]);
|
UA_NodeId_init(&m_vecMiNodeId[miPoint]);
|
||||||
buildNodeId(pFwMi->ResParam2,pFwMi->szResParam1,m_vecMiNodeId[miPoint]);
|
buildNodeId(pFwMi->ResParam2,pFwMi->szResParam1,m_vecMiNodeId[miPoint]);
|
||||||
|
|
||||||
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwMi->PointDesc);
|
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwMi->PointDesc);
|
||||||
UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER);
|
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT);
|
||||||
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES);
|
UA_Server_addVariableNode(m_ptrUaServer, m_vecMiNodeId[miPoint], mixObjectId,
|
||||||
UA_Server_addVariableNode(m_ptrUaServer, m_vecMiNodeId[miPoint], parentNodeId,
|
|
||||||
parentReferenceNodeId, qualifiedName,
|
parentReferenceNodeId, qualifiedName,
|
||||||
UA_NODEID_NULL, attr, NULL, NULL);
|
UA_NODEID_NULL, attr, NULL, NULL);
|
||||||
|
|
||||||
m_mapMiVecIndex[pFwMi->RemoteNo]=miPoint;
|
m_mapMiVecIndex[pFwMi->RemoteNo]=miPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UA_NodeId accObjectId; // 保存对象节点的 ID
|
||||||
|
UA_ObjectAttributes accObjectAttr = UA_ObjectAttributes_default;
|
||||||
|
char AccName[] = "Acc";
|
||||||
|
UA_Server_addObjectNode(m_ptrUaServer, UA_NODEID_NULL,
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
|
||||||
|
UA_QUALIFIEDNAME(1, AccName),
|
||||||
|
UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
|
||||||
|
accObjectAttr, NULL, &accObjectId);
|
||||||
|
|
||||||
|
|
||||||
SFesFwAcc *pFwAcc=NULL;
|
SFesFwAcc *pFwAcc=NULL;
|
||||||
for (int accPoint = 0; accPoint < m_ptrCFesRtu->m_MaxAccPoints; accPoint++)
|
for (int accPoint = 0; accPoint < m_ptrCFesRtu->m_MaxFwAccPoints; accPoint++)
|
||||||
{
|
{
|
||||||
pFwAcc = m_ptrCFesRtu->m_pFwAcc + accPoint;
|
pFwAcc = m_ptrCFesRtu->m_pFwAcc + accPoint;
|
||||||
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
UA_VariableAttributes attr = UA_VariableAttributes_default;
|
||||||
@ -830,10 +868,9 @@ void COpcUaDataProcThread::initNodeId()
|
|||||||
UA_NodeId_init(&m_vecAccNodeId[accPoint]);
|
UA_NodeId_init(&m_vecAccNodeId[accPoint]);
|
||||||
buildNodeId(pFwAcc->ResParam2,pFwAcc->szResParam1,m_vecAccNodeId[accPoint]);
|
buildNodeId(pFwAcc->ResParam2,pFwAcc->szResParam1,m_vecAccNodeId[accPoint]);
|
||||||
|
|
||||||
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwAcc->PointDesc);
|
UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwAcc->PointDesc);
|
||||||
UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER);
|
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT);
|
||||||
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES);
|
UA_Server_addVariableNode(m_ptrUaServer, m_vecAccNodeId[accPoint], accObjectId,
|
||||||
UA_Server_addVariableNode(m_ptrUaServer, m_vecAccNodeId[accPoint], parentNodeId,
|
|
||||||
parentReferenceNodeId, qualifiedName,
|
parentReferenceNodeId, qualifiedName,
|
||||||
UA_NODEID_NULL, attr, NULL, NULL);
|
UA_NODEID_NULL, attr, NULL, NULL);
|
||||||
|
|
||||||
@ -847,3 +884,5 @@ void COpcUaDataProcThread::initNodeId()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ private:
|
|||||||
boost::container::map<int64,int64> m_mapAiVecIndex;
|
boost::container::map<int64,int64> m_mapAiVecIndex;
|
||||||
boost::container::map<int64,int64> m_mapMiVecIndex;
|
boost::container::map<int64,int64> m_mapMiVecIndex;
|
||||||
boost::container::map<int64,int64> m_mapAccVecIndex;
|
boost::container::map<int64,int64> m_mapAccVecIndex;
|
||||||
|
int64 m_currentRtuNamespaceIndex;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void ForwardData();
|
void ForwardData();
|
||||||
@ -90,5 +90,7 @@ private:
|
|||||||
|
|
||||||
void initNodeId();
|
void initNodeId();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
typedef boost::shared_ptr<COpcUaDataProcThread> COpcUaDataProcThreadPtr;
|
typedef boost::shared_ptr<COpcUaDataProcThread> COpcUaDataProcThreadPtr;
|
||||||
|
|||||||
@ -209,7 +209,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
m_ProtocolId = m_ptrCFesBase->GetProtocolID((char*)"opc_ua_server_s");
|
m_ProtocolId = m_ptrCFesBase->GetProtocolID((char*)"opc_ua_server_s");
|
||||||
if (m_ProtocolId == -1)
|
if (m_ProtocolId == -1)
|
||||||
{
|
{
|
||||||
LOGDEBUG("ReadConfigParam ProtoclID error");
|
LOGERROR("ReadConfigParam ProtoclID error");
|
||||||
return iotFailed;
|
return iotFailed;
|
||||||
}
|
}
|
||||||
LOGINFO("opc_ua_server_s ProtoclID=%d", m_ProtocolId);
|
LOGINFO("opc_ua_server_s ProtoclID=%d", m_ProtocolId);
|
||||||
@ -219,7 +219,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
LOGDEBUG("opc_ua_server_s load opc_ua_server_s.xml error");
|
LOGDEBUG("opc_ua_server_s load opc_ua_server_s.xml error");
|
||||||
return iotSuccess;
|
return iotSuccess;
|
||||||
}
|
}
|
||||||
LOGDEBUG("opc_ua_server_s load opc_ua_server_s.xml ok");
|
LOGINFO("opc_ua_server_s load opc_ua_server_s.xml ok");
|
||||||
|
|
||||||
for (i = 0; i < m_ptrCFesBase->m_vectCFesChanPtr.size(); i++)
|
for (i = 0; i < m_ptrCFesBase->m_vectCFesChanPtr.size(); i++)
|
||||||
{
|
{
|
||||||
@ -239,7 +239,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
items = 0;
|
items = 0;
|
||||||
|
|
||||||
|
|
||||||
param.pwd = "pwd";
|
param.pwd = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "pwd", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "pwd", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
@ -247,7 +247,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
items++;
|
items++;
|
||||||
}
|
}
|
||||||
|
|
||||||
param.userName = "userName";
|
param.userName = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "userName", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "userName", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
@ -257,7 +257,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
param.securityPolicy = "securityPolicy";
|
param.securityPolicy = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "securityPolicy", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "securityPolicy", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
@ -265,7 +265,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
items++;
|
items++;
|
||||||
}
|
}
|
||||||
|
|
||||||
param.messageSecurityMode = "messageSecurityMode";
|
param.messageSecurityMode = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "messageSecurityMode", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "messageSecurityMode", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
@ -273,7 +273,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
items++;
|
items++;
|
||||||
}
|
}
|
||||||
|
|
||||||
param.certificateFilePath = "certificateFilePath";
|
param.certificateFilePath = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "certificateFilePath", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "certificateFilePath", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
@ -282,7 +282,7 @@ int COPCUA::ReadConfigParam()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
param.privateKeyPath = "privateKeyPath";
|
param.privateKeyPath = "";
|
||||||
strvalue.clear();
|
strvalue.clear();
|
||||||
if (config.getStringValue(strRtuNo, "privateKeyPath", strvalue) == iotSuccess)
|
if (config.getStringValue(strRtuNo, "privateKeyPath", strvalue) == iotSuccess)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user