From c119b8ef36718a8ca24b719cdbff86913cbca129 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 09 九月 2025 17:59:23 +0800
Subject: [PATCH] 1.Glass数据库保存,查询,分页,关键字,时间段等功能;
---
SourceCode/Bond/Servo/Model.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 100 insertions(+), 4 deletions(-)
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index 6cc7531..47ea454 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -8,6 +8,7 @@
#include "CGlassPool.h"
#include "TransferManager.h"
#include "RecipeManager.h"
+#include "GlassLogDb.h"
CModel::CModel()
@@ -88,7 +89,7 @@
::CreateDirectory(strLogDir, NULL);
CLog::GetLog()->SetOnLogCallback([&](int level, const char* pszMessage) -> void {
notifyTextAndInt(RX_CODE_LOG, pszMessage, level);
- });
+ });
CLog::GetLog()->SetAutoAppendTimeString(TRUE);
CLog::GetLog()->SetOutputTarget(OT_FILE);
CLog::GetLog()->SetLogsDir(strLogDir);
@@ -112,7 +113,7 @@
listener.onEQConstantRequest = [&](void* pFrom, std::vector<EQConstant>& eqcs) -> void {
// 在此填充常量值,目前仅是加1后返回
for (auto& item : eqcs) {
- sprintf_s(item.szValue, 256, "Test%d", item.id+1);
+ sprintf_s(item.szValue, 256, "Test%d", item.id + 1);
}
};
listener.onEQConstantSend = [&](void* pFrom, std::vector<EQConstant>& eqcs) -> void {
@@ -151,8 +152,8 @@
}
return ppids;
};
- listener.onCarrierAction = [&](void* pFrom,
- unsigned int DATAID,
+ listener.onCarrierAction = [&](void* pFrom,
+ unsigned int DATAID,
const char* pszCarrierAction,
const char* pszCarrierId,
unsigned char PTN,
@@ -174,6 +175,28 @@
strErrorTxt = "rejected - invalid state";
return CAACK_5;
LOGI("<Model>onCarrierAction %d, %s, %d, %d", DATAID, pszCarrierAction, pszCarrierId, PTN);
+ };
+ listener.onPRJobMultiCreate = [&](void* pFrom, std::vector<SERVO::CProcessJob*>& pjs) -> int {
+ for (auto p : pjs) {
+ LOGI("<Model>onPRJobMultiCreate %s %s", p->id().c_str(), p->recipeSpec().c_str());
+ }
+ int nRet = m_master.setProcessJobs(pjs);
+ auto processJobs = m_master.getProcessJobs();
+ std::vector<SERVO::CVariable> vars;
+ for (auto pj : processJobs) {
+ SERVO::CVariable var("", "PRJOBID", "A50", "PRJOBID");
+ var.setValue(pj->id().c_str());
+ vars.push_back(var);
+ }
+
+ m_hsmsPassive.setVariableValue("PJQueued", vars);
+ m_hsmsPassive.requestEventReportSend_PJ_Queued();
+ return nRet;
+ };
+ listener.onControlJobCreate = [&](void* pFrom, SERVO::CControlJob& controlJob) -> int {
+ LOGI("<Model>onControlJobCreate %s %d", controlJob.id().c_str(), controlJob.priority());
+ int nRet = m_master.setControlJob(controlJob);
+ return nRet;
};
m_hsmsPassive.setListener(listener);
m_hsmsPassive.setEquipmentModelType((LPTSTR)(LPCTSTR)strModeType);
@@ -353,9 +376,68 @@
};
masterListener.onLoadPortStatusChanged = [&] (void* pMaster, SERVO::CEquipment* pEquipment, short status, __int64 data) {
LOGE("<CModel>onLoadPortStatusChanged. status = %d", status);
+ if (status == PORT_INUSE) {
+ SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
+ if (pLoadPort != nullptr) {
+ m_hsmsPassive.setVariableValue("CarrierID", pLoadPort->getCassetteId().c_str());
+ }
+ m_hsmsPassive.requestEventReportSend_CarrierID_Readed();
+ }
+ else if (status == PORT_BLOCKED) {
+ SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
+ if (pLoadPort != nullptr) {
+ m_hsmsPassive.setVariableValue("BlockedPortId", pLoadPort->getID());
+ }
+ m_hsmsPassive.requestEventReportSend_Port_Blocked();
+ }
+ else if (status == PORT_LOAD_READY) {
+ SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
+ if (pLoadPort != nullptr) {
+ m_hsmsPassive.setVariableValue("LoadReadyPortId", pLoadPort->getID());
+ }
+ m_hsmsPassive.requestEventReportSend_Port_Load_Ready();
+ }
+ else if (status == PORT_UNLOAD_READY) {
+ SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
+ if (pLoadPort != nullptr) {
+ m_hsmsPassive.setVariableValue("UnloadReadyPortId", pLoadPort->getID());
+ }
+ m_hsmsPassive.requestEventReportSend_Port_Unload_Ready();
+ }
notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment);
};
+ masterListener.onCTRoundEnd = [&](void* pMaster, int round) {
+ m_configuration.setContinuousTransferCount(round);
+ };
+ masterListener.onCjStart = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("CJStartID", ((SERVO::CControlJob*)pj)->id().c_str());
+ m_hsmsPassive.requestEventReportSend_CJ_Start();
+ };
+ masterListener.onCjEnd = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("CJEndID", ((SERVO::CControlJob*)pj)->id().c_str());
+ m_hsmsPassive.requestEventReportSend_CJ_End();
+
+ // 结批,保存ControlJob
+ //
+ };
+ masterListener.onPjStart = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("PJStartID", ((SERVO::CProcessJob*)pj)->id().c_str());
+ m_hsmsPassive.requestEventReportSend_PJ_Start();
+ };
+ masterListener.onPjEnd = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("PJEndID", ((SERVO::CProcessJob*)pj)->id().c_str());
+ m_hsmsPassive.requestEventReportSend_PJ_End();
+ };
+ masterListener.onPanelStart = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("PanelStartID", ((SERVO::CGlass*)pj)->getID().c_str());
+ m_hsmsPassive.requestEventReportSend_Panel_Start();
+ };
+ masterListener.onPanelEnd = [&](void* pMaster, void* pj) {
+ m_hsmsPassive.setVariableValue("PanelEndID", ((SERVO::CGlass*)pj)->getID().c_str());
+ m_hsmsPassive.requestEventReportSend_Panel_End();
+ };
m_master.setListener(masterListener);
+ m_master.setContinuousTransferCount(m_configuration.getContinuousTransferCount());
// master 设置缓存文件
@@ -363,6 +445,15 @@
strMasterDataFile.Format(_T("%s\\Master.dat"), (LPTSTR)(LPCTSTR)m_strWorkDir);
m_master.setCacheFilepath((LPTSTR)(LPCTSTR)strMasterDataFile);
m_master.setCompareMapsBeforeProceeding(m_configuration.isCompareMapsBeforeProceeding());
+ m_master.setJobMode(m_configuration.isJobMode());
+
+ // 加截Job
+ strMasterDataFile.Format(_T("%s\\MasterState.dat"), (LPTSTR)(LPCTSTR)m_strWorkDir);
+ std::string strPath = std::string((LPTSTR)(LPCTSTR)strMasterDataFile);
+ if (!m_master.loadState(strPath)) {
+ LOGE("<Master>加载MasterState.dat文件失败.");
+ }
+
// 加载警告信息
AlarmManager& alarmManager = AlarmManager::getInstance();
@@ -371,6 +462,11 @@
alarmManager.readAlarmFile(szBuffer);
+ // Glass数据库
+ strLogDir.Format(_T("%s\\db\\process.db"), (LPTSTR)(LPCTSTR)m_strWorkDir);
+ std::string path((LPTSTR)(LPCTSTR)strLogDir);
+ GlassLogDb::Init(path);
+
return 0;
}
--
Gitblit v1.9.3