From 517c0e8eba29ff41afbbc0abb0f913914b37e4e1 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期二, 27 一月 2026 10:59:09 +0800
Subject: [PATCH] 1.SlotMap Mismatch 事件
---
SourceCode/Bond/Servo/Servo.cpp | 219 ++++++++++++++++++++++++++++++++++--------------------
1 files changed, 139 insertions(+), 80 deletions(-)
diff --git a/SourceCode/Bond/Servo/Servo.cpp b/SourceCode/Bond/Servo/Servo.cpp
index c3d5bce..c46246e 100644
--- a/SourceCode/Bond/Servo/Servo.cpp
+++ b/SourceCode/Bond/Servo/Servo.cpp
@@ -1,5 +1,5 @@
-
-// Servo.cpp : 定义应用程序的类行为。
+锘�
+// Servo.cpp : 瀹氫箟搴旂敤绋嬪簭鐨勭被琛屼负銆�
//
#include "stdafx.h"
@@ -7,15 +7,22 @@
#include "ServoDlg.h"
#include "ServoGraph.h"
#include "AlarmManager.h"
-#include "SECSRuntimeManager.h"
-#include "ProductionLogManager.h"
+#include "TransferManager.h"
+#include "SystemLogManager.h"
+#include "UserManager.h"
+#include "RecipeManager.h"
#include "VerticalLine.h"
+#include "HorizontalLine.h"
#include "EqsGraphWnd.h"
#include "MapPosWnd.h"
#include "HmTab.h"
+#include "CControlJobManagerDlg.h"
+#include "ToolUnits.h"
+#include "CUserManager2.h"
+#include "AccordionWnd.h"
-// 声明全局变量,用于管理 GDI+ 初始化
+// 澹版槑鍏ㄥ眬鍙橀噺锛岀敤浜庣鐞� GDI+ 鍒濆鍖�
ULONG_PTR g_diplusToken;
GdiplusStartupInput g_diplusStartupInput;
@@ -31,34 +38,36 @@
END_MESSAGE_MAP()
-// CServoApp 构造
+// CServoApp 鏋勯��
CServoApp::CServoApp()
{
- // 支持重新启动管理器
+ // 鏀寔閲嶆柊鍚姩绠$悊鍣�
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
- // TODO: 在此处添加构造代码,
- // 将所有重要的初始化放置在 InitInstance 中
+ // TODO: 鍦ㄦ澶勬坊鍔犳瀯閫犱唬鐮侊紝
+ // 灏嗘墍鏈夐噸瑕佺殑鍒濆鍖栨斁缃湪 InitInstance 涓�
+ m_nVersionNumber = 8;
+ m_strVersionName = _T("1.0.08");
}
-// 唯一的一个 CServoApp 对象
+// 鍞竴鐨勪竴涓� CServoApp 瀵硅薄
CServoApp theApp;
-// CServoApp 初始化
+// CServoApp 鍒濆鍖�
BOOL CServoApp::InitInstance()
{
- // 如果一个运行在 Windows XP 上的应用程序清单指定要
- // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
- //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
+ // TODO: 璋冪敤 AfxInitRichEdit2() 浠ュ垵濮嬪寲 richedit2 搴撱�俓n" // 濡傛灉涓�涓繍琛屽湪 Windows XP 涓婄殑搴旂敤绋嬪簭娓呭崟鎸囧畾瑕�
+ // 浣跨敤 ComCtl32.dll 鐗堟湰 6 鎴栨洿楂樼増鏈潵鍚敤鍙鍖栨柟寮忥紝
+ //鍒欓渶瑕� InitCommonControlsEx()銆� 鍚﹀垯锛屽皢鏃犳硶鍒涘缓绐楀彛銆�
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
- // 将它设置为包括所有要在应用程序中使用的
- // 公共控件类。
+ // 灏嗗畠璁剧疆涓哄寘鎷墍鏈夎鍦ㄥ簲鐢ㄧ▼搴忎腑浣跨敤鐨�
+ // 鍏叡鎺т欢绫汇��
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
@@ -67,24 +76,24 @@
AfxEnableControlContainer();
- // 创建 shell 管理器,以防对话框包含
- // 任何 shell 树视图控件或 shell 列表视图控件。
+ // 鍒涘缓 shell 绠$悊鍣紝浠ラ槻瀵硅瘽妗嗗寘鍚�
+ // 浠讳綍 shell 鏍戣鍥炬帶浠舵垨 shell 鍒楄〃瑙嗗浘鎺т欢銆�
CShellManager *pShellManager = new CShellManager;
- // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
+ // 婵�娲烩�淲indows Native鈥濊瑙夌鐞嗗櫒锛屼互渚垮湪 MFC 鎺т欢涓惎鐢ㄤ富棰�
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
- // 标准初始化
- // 如果未使用这些功能并希望减小
- // 最终可执行文件的大小,则应移除下列
- // 不需要的特定初始化例程
- // 更改用于存储设置的注册表项
- // TODO: 应适当修改该字符串,
- // 例如修改为公司或组织名
- SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
+ // 鏍囧噯鍒濆鍖�
+ // 濡傛灉鏈娇鐢ㄨ繖浜涘姛鑳藉苟甯屾湜鍑忓皬
+ // 鏈�缁堝彲鎵ц鏂囦欢鐨勫ぇ灏忥紝鍒欏簲绉婚櫎涓嬪垪
+ // 涓嶉渶瑕佺殑鐗瑰畾鍒濆鍖栦緥绋�
+ // 鏇存敼鐢ㄤ簬瀛樺偍璁剧疆鐨勬敞鍐岃〃椤�
+ // TODO: 搴旈�傚綋淇敼璇ュ瓧绗︿覆锛�
+ // 渚嬪淇敼涓哄叕鍙告垨缁勭粐鍚�
+ SetRegistryKey(_T("搴旂敤绋嬪簭鍚戝鐢熸垚鐨勬湰鍦板簲鐢ㄧ▼搴�"));
- // 本程序文件目录
+ // 鏈▼搴忔枃浠剁洰褰�
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFilename[_MAX_FNAME], sAppFilename[_MAX_FNAME];
@@ -96,67 +105,105 @@
m_model.setWorkDir((LPTSTR)(LPCTSTR)m_strAppDir);
- // 注册控件
+ // 鐢ㄦ埛鏁版嵁搴撶鐞�
+ CString strDir = m_strAppDir + _T("\\DB");
+ CUserManager2::getInstance().init((LPTSTR)(LPCTSTR)strDir);
+
+
+ // 娉ㄥ唽鎺т欢
CServoGraph::RegisterWndClass();
CVerticalLine::RegisterWndClass();
+ CHorizontalLine::RegisterWndClass();
CEqsGraphWnd::RegisterWndClass();
CMapPosWnd::RegisterWndClass();
CHmTab::RegisterWndClass();
+ CAccordionWnd::RegisterWndClass();
- // 初始化Rx库
+ // 鍒濆鍖朢x搴�
RX_Init();
HSMS_Initialize();
- // 初始化 GDI+
+ // 鍒濆鍖� GDI+
InitGDIPlus();
- // 初始化报警管理器
+ // 鍒濆鍖� MFC RichEdit 鎺т欢
+ AfxInitRichEdit2();
+
+
+ // 鍒濆鍖栨姤璀︾鐞嗗櫒
try {
if (!AlarmManager::getInstance().initAlarmTable()) {
- AfxMessageBox("初始化报警管理器失败!");
+ AfxMessageBox("鍒濆鍖栨姤璀︾鐞嗗櫒澶辫触锛�");
return FALSE;
}
}
catch (const std::exception& ex) {
CString errorMsg;
- errorMsg.Format(_T("初始化报警管理器失败:%s"), CString(ex.what()));
+ errorMsg.Format(_T("鍒濆鍖栨姤璀︾鐞嗗櫒澶辫触锛�%s"), CString(ex.what()));
AfxMessageBox(errorMsg, MB_ICONERROR);
return FALSE;
}
- AlarmManager::getInstance().insertMockData();
+ // 鍒濆鍖栨惉杩愯褰曠鐞嗗簱
+ try {
+ if (!TransferManager::getInstance().initTransferTable()) {
+ AfxMessageBox("鍒濆鍖栨惉杩愯褰曠鐞嗗簱璁剧疆澶辫触锛�");
+ return FALSE;
+ }
+ }
+ catch (const std::exception& ex) {
+ CString errorMsg;
+ errorMsg.Format(_T("鍒濆鍖栨惉杩愯褰曠鐞嗗簱璁剧疆澶辫触锛�%s"), CString(ex.what()));
+ AfxMessageBox(errorMsg, MB_ICONERROR);
+ return FALSE;
+ }
- // 初始化生产履历管理器
- //try {
- // if (!ProductionLogManager::getInstance().initProductionTable()) {
- // AfxMessageBox("初始化生产履历管理器失败!");
- // return FALSE;
- // }
- //}
- //catch (const std::exception& ex) {
- // CString errorMsg;
- // errorMsg.Format(_T("初始化生产履历管理器失败:%s"), CString(ex.what()));
- // AfxMessageBox(errorMsg, MB_ICONERROR);
- // return FALSE;
- //}
+ // 鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱
+ try {
+ if (!SystemLogManager::getInstance().initSystemLogTable()) {
+ AfxMessageBox("鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱澶辫触锛�");
+ return FALSE;
+ }
+ }
+ catch (const std::exception& ex) {
+ CString errorMsg;
+ errorMsg.Format(_T("鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
+ AfxMessageBox(errorMsg, MB_ICONERROR);
+ return FALSE;
+ }
+ // 鍒濆鍖栫敤鎴风鐞嗗簱
+ try {
+ UserManager& userManager = UserManager::getInstance();
+#if !defined(_DEBUG)
+ userManager.initializeIdleDetection(AfxGetMainWnd()->m_hWnd);
+ SetTimer(1, 60000, nullptr);
+#endif
+ userManager.loadSession();
+ }
+ catch (const std::exception& ex) {
+ CString errorMsg;
+ errorMsg.Format(_T("鍒濆鍖栫敤鎴风鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
+ AfxMessageBox(errorMsg, MB_ICONERROR);
+ return FALSE;
+ }
- // 初始化SECS运行设置管理库
- //try {
- // if (!SECSRuntimeManager::getInstance().initRuntimeSetting()) {
- // AfxMessageBox("初始化SECS运行设置失败!");
- // return FALSE;
- // }
- //}
- //catch (const std::exception& ex) {
- // CString errorMsg;
- // errorMsg.Format(_T("初始化SECS运行设置失败:%s"), CString(ex.what()));
- // AfxMessageBox(errorMsg, MB_ICONERROR);
- // return FALSE;
- //}
+ // 鍒濆鍖栭厤鏂圭鐞嗗簱
+ try {
+ if (!RecipeManager::getInstance().initRecipeTable()) {
+ AfxMessageBox("鍒濆鍖栭厤鏂圭鐞嗗簱澶辫触锛�");
+ return FALSE;
+ }
+ }
+ catch (const std::exception& ex) {
+ CString errorMsg;
+ errorMsg.Format(_T("鍒濆鍖栭厤鏂圭鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
+ AfxMessageBox(errorMsg, MB_ICONERROR);
+ return FALSE;
+ }
CServoDlg dlg;
@@ -164,62 +211,74 @@
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
- // TODO: 在此放置处理何时用
- // “确定”来关闭对话框的代码
+ // TODO: 鍦ㄦ鏀剧疆澶勭悊浣曟椂鐢�
+ // 鈥滅‘瀹氣�濇潵鍏抽棴瀵硅瘽妗嗙殑浠g爜
}
else if (nResponse == IDCANCEL)
{
- // TODO: 在此放置处理何时用
- // “取消”来关闭对话框的代码
+ // TODO: 鍦ㄦ鏀剧疆澶勭悊浣曟椂鐢�
+ // 鈥滃彇娑堚�濇潵鍏抽棴瀵硅瘽妗嗙殑浠g爜
}
else if (nResponse == -1)
{
- TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
- TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
+ TRACE(traceAppMsg, 0, "璀﹀憡: 瀵硅瘽妗嗗垱寤哄け璐ワ紝搴旂敤绋嬪簭灏嗘剰澶栫粓姝€�俓n");
+ TRACE(traceAppMsg, 0, "璀﹀憡: 濡傛灉鎮ㄥ湪瀵硅瘽妗嗕笂浣跨敤 MFC 鎺т欢锛屽垯鏃犳硶 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS銆俓n");
}
- // 删除上面创建的 shell 管理器。
+ // 鍒犻櫎涓婇潰鍒涘缓鐨� shell 绠$悊鍣ㄣ��
if (pShellManager != NULL)
{
delete pShellManager;
}
- // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
- // 而不是启动应用程序的消息泵。
+ // 鐢变簬瀵硅瘽妗嗗凡鍏抽棴锛屾墍浠ュ皢杩斿洖 FALSE 浠ヤ究閫�鍑哄簲鐢ㄧ▼搴忥紝
+ // 鑰屼笉鏄惎鍔ㄥ簲鐢ㄧ▼搴忕殑娑堟伅娉点��
return FALSE;
}
int CServoApp::ExitInstance()
{
+ CControlJobManagerDlg::FreeState();
m_model.term();
HSMS_Term();
RX_Term();
+ UX_Shutdown();
- // 清理 GDI+
+ // 娓呯悊 GDI+
TermGDIPlus();
- // 销毁报警表
+ // 閿�姣佹姤璀﹁〃
AlarmManager::getInstance().termAlarmTable();
- // 销毁生产表
- ProductionLogManager::getInstance().termProductionTable();
+ // 閿�姣佹惉杩愯褰曠鐞嗗簱
+ TransferManager::getInstance().termTransferTable();
- // 销毁SECS运行设置管理库
- SECSRuntimeManager::getInstance().termRuntimeSetting();
+ // 閿�姣佽繍琛屾棩蹇�
+ SystemLogManager::getInstance().termSystemLogTable();
+
+ // 閿�姣佺敤鎴疯〃
+#if !defined(_DEBUG)
+// 娓呴櫎 UserManager 鐨勬棤鎿嶄綔妫�娴�
+ UserManager::getInstance().terminateIdleDetection();
+ KillTimer(1);
+#endif
+
+ // 閿�姣侀厤鏂硅〃
+ RecipeManager::getInstance().termRecipeTable();
return CWinApp::ExitInstance();
}
-// 初始化 GDI+
+// 鍒濆鍖� GDI+
void CServoApp::InitGDIPlus()
{
- // 初始化 GDI+ 图形库
+ // 鍒濆鍖� GDI+ 鍥惧舰搴�
GdiplusStartup(&g_diplusToken, &g_diplusStartupInput, NULL);
}
-// 清理 GDI+
+// 娓呯悊 GDI+
void CServoApp::TermGDIPlus()
{
- // 清理 GDI+ 图形库
+ // 娓呯悊 GDI+ 鍥惧舰搴�
GdiplusShutdown(g_diplusToken);
}
\ No newline at end of file
--
Gitblit v1.9.3