From 3cfbb53c901c3548bd26a516a0b68d8cef3ee2fa Mon Sep 17 00:00:00 2001 From: liang-ys Date: Tue, 14 Apr 2026 18:08:57 +0800 Subject: [PATCH] =?UTF-8?q?[fix]opc=5Fua=5Fserver=5Fs=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=8D=E5=BD=93=E5=AF=BC=E8=87=B4fes?= =?UTF-8?q?=E5=A5=94=E6=BA=83=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opc_ua_server_s/DataProcThread.cpp | 199 +++++++++++------- .../protocol/opc_ua_server_s/DataProcThread.h | 4 +- .../fes/protocol/opc_ua_server_s/OPCUA.cpp | 16 +- 3 files changed, 130 insertions(+), 89 deletions(-) diff --git a/product/src/fes/protocol/opc_ua_server_s/DataProcThread.cpp b/product/src/fes/protocol/opc_ua_server_s/DataProcThread.cpp index 5d31b3b7..62038ddf 100644 --- a/product/src/fes/protocol/opc_ua_server_s/DataProcThread.cpp +++ b/product/src/fes/protocol/opc_ua_server_s/DataProcThread.cpp @@ -13,14 +13,14 @@ COpcUaDataProcThread::COpcUaDataProcThread(CFesBase *ptrCFesBase, CFesChanPtr p m_pChgDiData=NULL; m_pChgAccData=NULL; m_pChgMiData=NULL; - + m_ptrUaServer=NULL; m_ptrCFesChan = ptrCFesChan; m_ptrCFesBase = ptrCFesBase; m_ptrCurrentChan = ptrCFesChan; m_ptrCFesRtu = GetRtuDataByChanData(m_ptrCFesChan); - + m_currentRtuNamespaceIndex=0; //2020-02-24 thxiao 创建时设置ThreadRun标识。 if ((m_ptrCFesChan == NULL) || (m_ptrCFesRtu == NULL)) @@ -51,7 +51,11 @@ COpcUaDataProcThread::COpcUaDataProcThread(CFesBase *ptrCFesBase, CFesChanPtr p if(found) { - initServer(); + if(iotSuccess==initServer()) + { + initNodeId(); + }; + } else { @@ -70,6 +74,7 @@ COpcUaDataProcThread::~COpcUaDataProcThread() if(m_ptrUaServer) { + UA_Server_run_shutdown(m_ptrUaServer); UA_Server_delete(m_ptrUaServer); m_ptrUaServer=NULL; } @@ -86,19 +91,14 @@ int COpcUaDataProcThread::beforeExecute() 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); return; } if(!m_bServerOK) { - if(iotSuccess!=initServer()) - { - m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuComDown); - LOGERROR("COpcUaDataProcThread ChanNo=%d initServer failed ", m_ptrCurrentChan->m_Param.ChanNo); - return; - } + return; } UA_Server_run_iterate(m_ptrUaServer, true); @@ -213,7 +213,7 @@ void COpcUaDataProcThread::handleAiData() pFwAi = m_ptrCFesRtu->m_pFwAi + aiPoint; UA_NodeId curNodeId=m_vecAiNodeId[aiPoint]; 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); UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue); if(!UA_StatusCode_isGood(writeStatus)) @@ -240,7 +240,7 @@ void COpcUaDataProcThread::handleAccData() pFwAcc = m_ptrCFesRtu->m_pFwAcc + accPoint; UA_NodeId curNodeId=m_vecAccNodeId[accPoint]; 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); UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue); if(!UA_StatusCode_isGood(writeStatus)) @@ -268,7 +268,7 @@ void COpcUaDataProcThread::handleMiData() UA_NodeId curNodeId=m_vecMiNodeId[miPoint]; 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); UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue); if(!UA_StatusCode_isGood(writeStatus)) @@ -321,7 +321,7 @@ void COpcUaDataProcThread::handleChgAiData() pFwAi = m_ptrCFesRtu->m_pFwAi + pChgAi->RemoteNo; float AiFloatValue = static_cast(pChgAi->Value * pFwAi->Coeff + pFwAi->Base); int64 curNodeIdIndex=m_mapAiVecIndex[pChgAi->RemoteNo]; - UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex]; + UA_NodeId curNodeId=m_vecAiNodeId[curNodeIdIndex]; UA_Variant curValue; buildValue(pFwAi->ResParam1,AiFloatValue,curValue); UA_StatusCode writeStatus=UA_Server_writeValue(m_ptrUaServer, curNodeId, curValue); @@ -363,7 +363,7 @@ void COpcUaDataProcThread::handleChgDiData() continue; pFwDi = m_ptrCFesRtu->m_pFwDi+ pChgDi->RemoteNo; int64 curNodeIdIndex=m_mapAiVecIndex[pChgDi->RemoteNo]; - UA_NodeId curNodeId=m_vecMiNodeId[curNodeIdIndex]; + UA_NodeId curNodeId=m_vecDiNodeId[curNodeIdIndex]; UA_Variant curValue; DiValue = pChgDi->Value&0x01; buildValue(pFwDi->ResParam1,DiValue,curValue); @@ -409,7 +409,7 @@ void COpcUaDataProcThread::handleChgAccData() pFwAcc = m_ptrCFesRtu->m_pFwAcc + pChgAcc->RemoteNo; float AccFloatValue = static_cast(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_Variant curValue; buildValue(pFwAcc->ResParam1,AccFloatValue,curValue); @@ -481,10 +481,9 @@ void COpcUaDataProcThread::handleChgMiData() int COpcUaDataProcThread::initServer() { - std::string serverIp(m_ptrCFesChan->m_Param.szResParam1); int port=m_ptrCFesChan->m_Param.LocalPortNo; - + m_bServerOK=true; std::ostringstream oss; oss << serverIp <<":"<< port; @@ -503,8 +502,10 @@ int COpcUaDataProcThread::initServer() { m_ptrUaServer = UA_Server_new(); UA_ServerConfig *config = UA_Server_getConfig(m_ptrUaServer); - UA_String endpointUrl = UA_STRING(const_cast(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); if (retval != UA_STATUSCODE_GOOD) { @@ -520,10 +521,19 @@ int COpcUaDataProcThread::initServer() } - m_bServerOK=true; - m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuNormal); - LOGINFO("COpcUaDataProcThread ChanNo=%d start UAserver %s ok", m_ptrCFesChan->m_Param.ChanNo,resultUrl.c_str()); - return iotSuccess; + if(m_bServerOK) + { + m_ptrCFesRtu->WriteRtuSatus(CN_FesRtuNormal); + 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) @@ -537,47 +547,31 @@ string COpcUaDataProcThread::getStatusMessage(UA_StatusCode status) int COpcUaDataProcThread::buildNodeId(int nodeIdType, const string &tagStr,UA_NodeId& nodeId) { string strNodeId=""; - string namespaceIndex="0"; - size_t pos = tagStr.find('!'); - if(pos != std::string::npos) - { + size_t pos = tagStr.find("]"); + if (pos != std::string::npos) { strNodeId = tagStr.substr(pos + 1); - std::string preStr = tagStr.substr(0, pos); - - 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 { + strNodeId=tagStr; } - 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 iotSuccess; + } int COpcUaDataProcThread::buildValue(int dataType, double curValue, UA_Variant &value) @@ -746,8 +740,25 @@ void COpcUaDataProcThread::clearData() 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; - 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; UA_VariableAttributes attr = UA_VariableAttributes_default; @@ -759,18 +770,28 @@ void COpcUaDataProcThread::initNodeId() UA_NodeId_init(&m_vecDiNodeId[diPoint]); buildNodeId(pFwDi->ResParam2,pFwDi->szResParam1,m_vecDiNodeId[diPoint]); - UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwDi->PointDesc); - UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER); - UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES); - UA_Server_addVariableNode(m_ptrUaServer, m_vecDiNodeId[diPoint], parentNodeId, + UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwDi->PointDesc); + UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT); + UA_Server_addVariableNode(m_ptrUaServer, m_vecDiNodeId[diPoint], digitalObjectId, parentReferenceNodeId, qualifiedName, UA_NODEID_NULL, attr, NULL, NULL); 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; - 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; UA_VariableAttributes attr = UA_VariableAttributes_default; @@ -782,19 +803,27 @@ void COpcUaDataProcThread::initNodeId() UA_NodeId_init(&m_vecAiNodeId[aiPoint]); buildNodeId(pFwAi->ResParam2,pFwAi->szResParam1,m_vecAiNodeId[aiPoint]); - UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwAi->PointDesc); - UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER); - UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES); - UA_Server_addVariableNode(m_ptrUaServer, m_vecAiNodeId[aiPoint], parentNodeId, + UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwAi->PointDesc); + UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT); + UA_Server_addVariableNode(m_ptrUaServer, m_vecAiNodeId[aiPoint], analogObjectId, parentReferenceNodeId, qualifiedName, UA_NODEID_NULL, attr, NULL, NULL); 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; - 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; UA_VariableAttributes attr = UA_VariableAttributes_default; @@ -806,19 +835,28 @@ void COpcUaDataProcThread::initNodeId() UA_NodeId_init(&m_vecMiNodeId[miPoint]); buildNodeId(pFwMi->ResParam2,pFwMi->szResParam1,m_vecMiNodeId[miPoint]); - UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwMi->PointDesc); - UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER); - UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES); - UA_Server_addVariableNode(m_ptrUaServer, m_vecMiNodeId[miPoint], parentNodeId, + UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwMi->PointDesc); + UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT); + UA_Server_addVariableNode(m_ptrUaServer, m_vecMiNodeId[miPoint], mixObjectId, parentReferenceNodeId, qualifiedName, UA_NODEID_NULL, attr, NULL, NULL); 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; - 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; UA_VariableAttributes attr = UA_VariableAttributes_default; @@ -830,10 +868,9 @@ void COpcUaDataProcThread::initNodeId() UA_NodeId_init(&m_vecAccNodeId[accPoint]); buildNodeId(pFwAcc->ResParam2,pFwAcc->szResParam1,m_vecAccNodeId[accPoint]); - UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, pFwAcc->PointDesc); - UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_OBJECTSFOLDER); - UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES); - UA_Server_addVariableNode(m_ptrUaServer, m_vecAccNodeId[accPoint], parentNodeId, + UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(nsIndex, pFwAcc->PointDesc); + UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0,UA_NS0ID_HASCOMPONENT); + UA_Server_addVariableNode(m_ptrUaServer, m_vecAccNodeId[accPoint], accObjectId, parentReferenceNodeId, qualifiedName, UA_NODEID_NULL, attr, NULL, NULL); @@ -847,3 +884,5 @@ void COpcUaDataProcThread::initNodeId() } + + diff --git a/product/src/fes/protocol/opc_ua_server_s/DataProcThread.h b/product/src/fes/protocol/opc_ua_server_s/DataProcThread.h index ad295ece..cee999f6 100644 --- a/product/src/fes/protocol/opc_ua_server_s/DataProcThread.h +++ b/product/src/fes/protocol/opc_ua_server_s/DataProcThread.h @@ -51,7 +51,7 @@ private: boost::container::map m_mapAiVecIndex; boost::container::map m_mapMiVecIndex; boost::container::map m_mapAccVecIndex; - + int64 m_currentRtuNamespaceIndex; private: void ForwardData(); @@ -90,5 +90,7 @@ private: void initNodeId(); + + }; typedef boost::shared_ptr COpcUaDataProcThreadPtr; diff --git a/product/src/fes/protocol/opc_ua_server_s/OPCUA.cpp b/product/src/fes/protocol/opc_ua_server_s/OPCUA.cpp index 1df983d0..4472246e 100644 --- a/product/src/fes/protocol/opc_ua_server_s/OPCUA.cpp +++ b/product/src/fes/protocol/opc_ua_server_s/OPCUA.cpp @@ -209,7 +209,7 @@ int COPCUA::ReadConfigParam() m_ProtocolId = m_ptrCFesBase->GetProtocolID((char*)"opc_ua_server_s"); if (m_ProtocolId == -1) { - LOGDEBUG("ReadConfigParam ProtoclID error"); + LOGERROR("ReadConfigParam ProtoclID error"); return iotFailed; } 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"); 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++) { @@ -239,7 +239,7 @@ int COPCUA::ReadConfigParam() items = 0; - param.pwd = "pwd"; + param.pwd = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "pwd", strvalue) == iotSuccess) { @@ -247,7 +247,7 @@ int COPCUA::ReadConfigParam() items++; } - param.userName = "userName"; + param.userName = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "userName", strvalue) == iotSuccess) { @@ -257,7 +257,7 @@ int COPCUA::ReadConfigParam() - param.securityPolicy = "securityPolicy"; + param.securityPolicy = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "securityPolicy", strvalue) == iotSuccess) { @@ -265,7 +265,7 @@ int COPCUA::ReadConfigParam() items++; } - param.messageSecurityMode = "messageSecurityMode"; + param.messageSecurityMode = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "messageSecurityMode", strvalue) == iotSuccess) { @@ -273,7 +273,7 @@ int COPCUA::ReadConfigParam() items++; } - param.certificateFilePath = "certificateFilePath"; + param.certificateFilePath = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "certificateFilePath", strvalue) == iotSuccess) { @@ -282,7 +282,7 @@ int COPCUA::ReadConfigParam() } - param.privateKeyPath = "privateKeyPath"; + param.privateKeyPath = ""; strvalue.clear(); if (config.getStringValue(strRtuNo, "privateKeyPath", strvalue) == iotSuccess) {