From bea6407b376a4e426f0b120bae569fba6ab867db Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期六, 08 十一月 2025 17:55:47 +0800
Subject: [PATCH] 1.CMaster.cpp 第 1644/1667/1691 行在记录 SV 曲线时通过 getGlassFromSlot(0) 取玻璃,而各设备的 initSlots() 都是从 1 开始编号(例如 CBonder.cpp (line 408)、CVacuumBake.cpp (line 415) 等)。槽位 0 永远不存在,所以 pGlass 始终是 nullptr,pGlass->addSVData(...) 的分支从未执行。结果 SERVO::CGlass::m_svDatas 里没有任何曲线数据,GlassJson::ToPrettyString 生成的 pretty 字符串也就没有 sv_datas,导出 CSV 时自然读不到曲线。 同一段代码还有一个潜在 Bug:虽然判断了 channel - 1 < bonderTypes.size(),但真正索引却用的是 bonderTypes[channel]。索引偏移会导致数据类型错位,最后一个通道甚至可能越界。即使修正了槽位,这里也需要同步改成 bonderTypes[channel - 1](另外两处 vacuumbakeTypes、coolingTypes 也一样)。
---
SourceCode/Bond/BondEq/AlarmMonitor.cpp | 68 ++++++++++-----------------------
1 files changed, 21 insertions(+), 47 deletions(-)
diff --git a/SourceCode/Bond/BondEq/AlarmMonitor.cpp b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
index 4e23b8d..de5d6e7 100644
--- a/SourceCode/Bond/BondEq/AlarmMonitor.cpp
+++ b/SourceCode/Bond/BondEq/AlarmMonitor.cpp
@@ -9,8 +9,8 @@
CAlarmMonitor::CAlarmMonitor()
{
- m_pRawData = new char[200];
- memset(m_pRawData, 0, 200);
+ m_pRawData = new char[512];
+ memset(m_pRawData, 0, 512);
}
@@ -30,11 +30,6 @@
item.second->release();
}
m_mapAlarming.clear();
-
- for (auto item : m_alarms) {
- item->release();
- }
- m_alarms.clear();
}
std::string& CAlarmMonitor::getClassName()
@@ -54,7 +49,7 @@
if (MONITOR_ID_ALARM != id) {
return;
}
-
+
// 比较有没有变化
if (compareData(m_pRawData, (const char*)pData, size)) {
return;
@@ -166,28 +161,9 @@
void CAlarmMonitor::Serialize(CArchive& ar)
{
- if (ar.IsStoring())
- {
- Lock();
- int count = (int)m_alarms.size();
- ar << count;
- for (auto item : m_alarms) {
- item->Serialize(ar);
- }
- Unlock();
+ if (ar.IsStoring()) {
}
- else
- {
- Lock();
- int count;
- ar >> count;
- for (int i = 0; i < count; i++) {
- CAlarm* pAlarm = new CAlarm();
- pAlarm->Serialize(ar);
- addAlarmToHistoryRecord(pAlarm);
- LOGE("历史警告:%s", pAlarm->toString().c_str());
- }
- Unlock();
+ else {
}
}
@@ -215,18 +191,6 @@
Unlock();
return iter->second;
-}
-
-std::list< CAlarm*>& CAlarmMonitor::getAlarmRecords()
-{
- return m_alarms;
-}
-
-void CAlarmMonitor::getAlarmRecords(std::list< CAlarm*>& list)
-{
- Lock();
- list = m_alarms;
- Unlock();
}
BOOL CAlarmMonitor::compareData(const char* pScrData, const char* pTarData, int len)
@@ -270,11 +234,21 @@
void CAlarmMonitor::addAlarmToHistoryRecord(CAlarm* pAlarm)
{
+ // 加入数据库
+ AlarmManager::getInstance().addAlarm(
+ std::to_string(pAlarm->getId()).c_str(),
+ getAlarmText(pAlarm->getId()),
+ CToolUnits::timeToString2(pAlarm->getOnTime()).c_str(),
+ CToolUnits::timeToString2(pAlarm->getOffTime()).c_str());
+}
+
+BOOL CAlarmMonitor::addAlarming(CAlarm* pAlarm)
+{
+ auto iter = m_mapAlarming.find(pAlarm->getId());
+ if (iter != m_mapAlarming.end()) return FALSE;
+
pAlarm->addRef();
- m_alarms.push_back(pAlarm);
- if (m_alarms.size() > 1000) {
- CAlarm* pTemp = m_alarms.front();
- pTemp->release();
- m_alarms.pop_front();
- }
+ m_mapAlarming[pAlarm->getId()] = pAlarm;
+
+ return TRUE;
}
\ No newline at end of file
--
Gitblit v1.9.3