chenluhua1980
2026-01-14 02a406fb7e3d635dca0ef87914fee54c7fd6bd3c
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -665,6 +665,27 @@
         maxId = item->getVarialbleId();
      }
   }
   for (auto item : m_dataVariabels) {
      if (item && item->getVarialbleId() > maxId) {
         maxId = item->getVarialbleId();
      }
   }
   return maxId;
}
unsigned int CHsmsPassive::getMaxDataVariableId() const
{
   unsigned int maxId = 0;
   for (auto item : m_variabels) {
      if (item && item->getVarialbleId() > maxId) {
         maxId = item->getVarialbleId();
      }
   }
   for (auto item : m_dataVariabels) {
      if (item && item->getVarialbleId() > maxId) {
         maxId = item->getVarialbleId();
      }
   }
   return maxId;
}
@@ -897,6 +918,75 @@
   return writeVariablesToFile(filepath);
}
int CHsmsPassive::deleteDataVariable(int dvid)
{
   Lock();
   auto it = std::find_if(m_dataVariabels.begin(), m_dataVariabels.end(), [=](SERVO::CDataVariable* v) {
      return v != nullptr && v->getVarialbleId() == (unsigned int)dvid;
      });
   if (it == m_dataVariabels.end()) {
      Unlock();
      return -1;
   }
   delete *it;
   m_dataVariabels.erase(it);
   auto filepath = m_strDataVariableFilepath;
   Unlock();
   if (filepath.empty()) return -2;
   return writeDataVariablesToFile(filepath);
}
int CHsmsPassive::addDataVariable(const char* pszName, const char* pszFormat, const char* pszRemark, int& outId)
{
   if (pszName == nullptr || pszFormat == nullptr) return -1;
   std::string fmt = pszFormat;
   std::transform(fmt.begin(), fmt.end(), fmt.begin(), ::toupper);
   if (!isValidFormat(fmt)) return -2;
   Lock();
   int maxId = 0;
   for (auto v : m_dataVariabels) {
      if (v != nullptr && static_cast<int>(v->getVarialbleId()) > maxId) {
         maxId = static_cast<int>(v->getVarialbleId());
      }
   }
   outId = maxId + 1;
   SERVO::CDataVariable* pNew = new SERVO::CDataVariable(std::to_string(outId).c_str(), pszName, fmt.c_str(), pszRemark ? pszRemark : "");
   m_dataVariabels.push_back(pNew);
   auto filepath = m_strDataVariableFilepath;
   Unlock();
   if (filepath.empty()) return -3;
   return writeDataVariablesToFile(filepath);
}
int CHsmsPassive::updateDataVariable(int dvid, const char* pszName, const char* pszFormat, const char* pszRemark)
{
   if (pszName == nullptr || pszFormat == nullptr) return -1;
   std::string fmt = pszFormat;
   std::transform(fmt.begin(), fmt.end(), fmt.begin(), ::toupper);
   if (!isValidFormat(fmt)) return -2;
   Lock();
   auto it = std::find_if(m_dataVariabels.begin(), m_dataVariabels.end(), [=](SERVO::CDataVariable* v) {
      return v != nullptr && v->getVarialbleId() == (unsigned int)dvid;
      });
   if (it == m_dataVariabels.end()) {
      Unlock();
      return -4;
   }
   (*it)->setName(pszName);
   (*it)->setFormat(fmt.c_str());
   (*it)->setRemark(pszRemark ? pszRemark : "");
   auto filepath = m_strDataVariableFilepath;
   Unlock();
   if (filepath.empty()) return -3;
   return writeDataVariablesToFile(filepath);
}
int CHsmsPassive::writeVariablesToFile(const std::string& filepath)
{
   if (filepath.empty()) return -3;