diff --git a/.vs/marking_gui.slnx/FileContentIndex/b2cdd851-fde6-4ff7-8960-15b7403933fa.vsidx b/.vs/marking_gui.slnx/FileContentIndex/0eaf846b-d4b9-4caf-a370-de061ce0320c.vsidx
similarity index 100%
rename from .vs/marking_gui.slnx/FileContentIndex/b2cdd851-fde6-4ff7-8960-15b7403933fa.vsidx
rename to .vs/marking_gui.slnx/FileContentIndex/0eaf846b-d4b9-4caf-a370-de061ce0320c.vsidx
diff --git a/.vs/marking_gui.slnx/FileContentIndex/b9adc68c-0602-473b-92e8-cab09444cfae.vsidx b/.vs/marking_gui.slnx/FileContentIndex/5aec86f5-6062-4241-89fe-a2d7cacc7094.vsidx
similarity index 100%
rename from .vs/marking_gui.slnx/FileContentIndex/b9adc68c-0602-473b-92e8-cab09444cfae.vsidx
rename to .vs/marking_gui.slnx/FileContentIndex/5aec86f5-6062-4241-89fe-a2d7cacc7094.vsidx
diff --git a/.vs/marking_gui.slnx/FileContentIndex/a26e37eb-5b6f-417f-8426-dfd11cf0e629.vsidx b/.vs/marking_gui.slnx/FileContentIndex/a26e37eb-5b6f-417f-8426-dfd11cf0e629.vsidx
new file mode 100644
index 0000000..f298f97
Binary files /dev/null and b/.vs/marking_gui.slnx/FileContentIndex/a26e37eb-5b6f-417f-8426-dfd11cf0e629.vsidx differ
diff --git a/.vs/marking_gui.slnx/FileContentIndex/dbd6c12d-68ab-4590-b0c7-f0747a0fdc95.vsidx b/.vs/marking_gui.slnx/FileContentIndex/dbd6c12d-68ab-4590-b0c7-f0747a0fdc95.vsidx
deleted file mode 100644
index 9278940..0000000
Binary files a/.vs/marking_gui.slnx/FileContentIndex/dbd6c12d-68ab-4590-b0c7-f0747a0fdc95.vsidx and /dev/null differ
diff --git a/.vs/marking_gui.slnx/FileContentIndex/e996ace7-7fba-4157-879f-74d3faae8720.vsidx b/.vs/marking_gui.slnx/FileContentIndex/e996ace7-7fba-4157-879f-74d3faae8720.vsidx
deleted file mode 100644
index c403b3f..0000000
Binary files a/.vs/marking_gui.slnx/FileContentIndex/e996ace7-7fba-4157-879f-74d3faae8720.vsidx and /dev/null differ
diff --git a/.vs/marking_gui.slnx/FileContentIndex/e9aaf3b7-f547-4846-9bb0-c8cac36ad7c4.vsidx b/.vs/marking_gui.slnx/FileContentIndex/e9aaf3b7-f547-4846-9bb0-c8cac36ad7c4.vsidx
new file mode 100644
index 0000000..ec4dd9a
Binary files /dev/null and b/.vs/marking_gui.slnx/FileContentIndex/e9aaf3b7-f547-4846-9bb0-c8cac36ad7c4.vsidx differ
diff --git a/.vs/marking_gui.slnx/v18/.suo b/.vs/marking_gui.slnx/v18/.suo
index f632b7a..656e907 100644
Binary files a/.vs/marking_gui.slnx/v18/.suo and b/.vs/marking_gui.slnx/v18/.suo differ
diff --git a/.vs/marking_gui.slnx/v18/DocumentLayout.backup.json b/.vs/marking_gui.slnx/v18/DocumentLayout.backup.json
index eb0aec2..159f9eb 100644
--- a/.vs/marking_gui.slnx/v18/DocumentLayout.backup.json
+++ b/.vs/marking_gui.slnx/v18/DocumentLayout.backup.json
@@ -1,20 +1,20 @@
{
"Version": 1,
- "WorkspaceRootPath": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\",
+ "WorkspaceRootPath": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\",
"Documents": [
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\wjddn\\desktop\\amosense\\marking_gui\\marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\computer1\\desktop\\mobi\\marking_gui\\marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
},
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\wjddn\\desktop\\amosense\\marking_gui\\marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
@@ -31,34 +31,32 @@
"$type": "Document",
"DocumentIndex": 1,
"Title": "StartupLoginWindow.xaml",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
"RelativeDocumentMoniker": "marking_gui\\StartupLoginWindow.xaml",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
"RelativeToolTip": "marking_gui\\StartupLoginWindow.xaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
- "WhenOpened": "2026-06-08T01:06:29.984Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-06-08T01:06:29.984Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "MainWindow.xaml.cs",
"DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
- "RelativeDocumentMoniker": "..\\AMO_Housing\\MainWindow.xaml.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
"ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
- "RelativeToolTip": "..\\AMO_Housing\\MainWindow.xaml.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-06-08T00:52:55.21Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-06-08T00:52:55.21Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "MainWindow.xaml",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml",
"RelativeDocumentMoniker": "marking_gui\\MainWindow.xaml",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml",
"RelativeToolTip": "marking_gui\\MainWindow.xaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2026-06-05T02:08:02.816Z",
@@ -68,9 +66,9 @@
"$type": "Document",
"DocumentIndex": 3,
"Title": "MainWindow.xaml.cs",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
"RelativeDocumentMoniker": "marking_gui\\MainWindow.xaml.cs",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
"RelativeToolTip": "marking_gui\\MainWindow.xaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "00000000-0000-0000-0000-000000000000.000000|iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADKSURBVDhP7ZMhDoNAEEX/VlStqMYwJ\u002BgFegguwB1AIsC1ZhWKE3AVkj3DojCEBIOumZqWLENoSVPZl6zYPz8/k5ldQHC\u002BWbbtyFLfjW1HDvOGbTuyMYaJiIui2AxUYd5wN92ljvB0RHe9KCLiKIqglEJZlkr6VvgdAAARMQAkScJpmm52MiNnQEQ8DMO\u002BEGPMqviag3\u002BkZ\u002BZt8Yn0HPzLN/wDfh2gtYZzbnOVzjkOgmChLd52XddcVRX6vvflGa01sixDHMef/8ReHgD\u002BXy4W5TMHAAAAAElFTkSuQmCC",
diff --git a/.vs/marking_gui.slnx/v18/DocumentLayout.json b/.vs/marking_gui.slnx/v18/DocumentLayout.json
index eb0aec2..159f9eb 100644
--- a/.vs/marking_gui.slnx/v18/DocumentLayout.json
+++ b/.vs/marking_gui.slnx/v18/DocumentLayout.json
@@ -1,20 +1,20 @@
{
"Version": 1,
- "WorkspaceRootPath": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\",
+ "WorkspaceRootPath": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\",
"Documents": [
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\wjddn\\desktop\\amosense\\marking_gui\\marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\computer1\\desktop\\mobi\\marking_gui\\marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
},
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|c:\\users\\wjddn\\desktop\\amosense\\marking_gui\\marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\startuploginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "AbsoluteMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9E96D5BE-9375-4ED3-82DE-F200F83EBC2F}|marking_gui\\marking_gui.csproj|solutionrelative:marking_gui\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
@@ -31,34 +31,32 @@
"$type": "Document",
"DocumentIndex": 1,
"Title": "StartupLoginWindow.xaml",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
"RelativeDocumentMoniker": "marking_gui\\StartupLoginWindow.xaml",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\StartupLoginWindow.xaml",
"RelativeToolTip": "marking_gui\\StartupLoginWindow.xaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
- "WhenOpened": "2026-06-08T01:06:29.984Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-06-08T01:06:29.984Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "MainWindow.xaml.cs",
"DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
- "RelativeDocumentMoniker": "..\\AMO_Housing\\MainWindow.xaml.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
"ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
- "RelativeToolTip": "..\\AMO_Housing\\MainWindow.xaml.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\wjddn\\Desktop\\amosense\\AMO_Housing\\MainWindow.xaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-06-08T00:52:55.21Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-06-08T00:52:55.21Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "MainWindow.xaml",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml",
"RelativeDocumentMoniker": "marking_gui\\MainWindow.xaml",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml",
"RelativeToolTip": "marking_gui\\MainWindow.xaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2026-06-05T02:08:02.816Z",
@@ -68,9 +66,9 @@
"$type": "Document",
"DocumentIndex": 3,
"Title": "MainWindow.xaml.cs",
- "DocumentMoniker": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
+ "DocumentMoniker": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
"RelativeDocumentMoniker": "marking_gui\\MainWindow.xaml.cs",
- "ToolTip": "C:\\Users\\wjddn\\Desktop\\amosense\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
+ "ToolTip": "C:\\Users\\COMPUTER1\\Desktop\\mobi\\marking_gui\\marking_gui\\MainWindow.xaml.cs",
"RelativeToolTip": "marking_gui\\MainWindow.xaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "00000000-0000-0000-0000-000000000000.000000|iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADKSURBVDhP7ZMhDoNAEEX/VlStqMYwJ\u002BgFegguwB1AIsC1ZhWKE3AVkj3DojCEBIOumZqWLENoSVPZl6zYPz8/k5ldQHC\u002BWbbtyFLfjW1HDvOGbTuyMYaJiIui2AxUYd5wN92ljvB0RHe9KCLiKIqglEJZlkr6VvgdAAARMQAkScJpmm52MiNnQEQ8DMO\u002BEGPMqviag3\u002BkZ\u002BZt8Yn0HPzLN/wDfh2gtYZzbnOVzjkOgmChLd52XddcVRX6vvflGa01sixDHMef/8ReHgD\u002BXy4W5TMHAAAAAElFTkSuQmCC",
diff --git a/build_log.txt b/build_log.txt
new file mode 100644
index 0000000..c31dc28
Binary files /dev/null and b/build_log.txt differ
diff --git a/marking_gui/App.xaml.cs b/marking_gui/App.xaml.cs
index 289ff5b..8231783 100644
--- a/marking_gui/App.xaml.cs
+++ b/marking_gui/App.xaml.cs
@@ -17,23 +17,8 @@ namespace marking_gui
{
base.OnStartup(e);
- // 로그인 창이 닫힐 때 앱이 자동 종료되는 것을 방지하기 위해 ExplicitShutdown으로 설정
- ShutdownMode = ShutdownMode.OnExplicitShutdown;
-
- var loginWindow = new Housing.Login.StartupLoginWindow();
- if (loginWindow.ShowDialog() == true)
- {
- var loginResult = loginWindow.Result;
- var mainWindow = new MainWindow(loginResult);
-
- // 메인 창이 닫힐 때 앱이 정상 종료되도록 기본 모드로 원복
- ShutdownMode = ShutdownMode.OnLastWindowClose;
- mainWindow.Show();
- }
- else
- {
- Shutdown();
- }
+ var mainWindow = new MainWindow();
+ mainWindow.Show();
}
}
}
diff --git a/marking_gui/MainWindow.xaml b/marking_gui/MainWindow.xaml
index 18bbfd4..7af935a 100644
--- a/marking_gui/MainWindow.xaml
+++ b/marking_gui/MainWindow.xaml
@@ -7,7 +7,8 @@
mc:Ignorable="d"
Title="양산형 테스트 기기 모니터링 시스템" Height="700" Width="900"
MinWidth="900" MinHeight="700" WindowState="Maximized"
- WindowStartupLocation="CenterScreen" Background="#F3F4F6">
+ WindowStartupLocation="CenterScreen" Background="#F3F4F6"
+ ContentRendered="Window_ContentRendered">
+
+
+
@@ -102,11 +135,13 @@
-
+
+
-
-
+
+
+
@@ -131,15 +166,8 @@
-
-
-
-
-
-
-
-
+
@@ -225,7 +253,7 @@
-
+
@@ -244,7 +272,7 @@
-
+
@@ -275,7 +303,7 @@
diff --git a/marking_gui/MainWindow.xaml.cs b/marking_gui/MainWindow.xaml.cs
index 338c44c..dcb83a2 100644
--- a/marking_gui/MainWindow.xaml.cs
+++ b/marking_gui/MainWindow.xaml.cs
@@ -19,17 +19,14 @@ namespace marking_gui
// 비즈니스 로직 및 가상 하드웨어/DB 서비스 분리
private readonly MssqlDatabaseService _database = new MssqlDatabaseService();
private readonly MockMeasurer _measurer = new MockMeasurer();
+ private readonly MemoryReaderService _memoryReader = new MemoryReaderService();
private MeasurementLimits _limits = new MeasurementLimits();
- private readonly Housing.Login.StartupLoginWindowResult _loginInfo;
+ private Housing.Login.StartupLoginWindowResult _loginInfo;
- public MainWindow() : this(new Housing.Login.StartupLoginWindowResult { Operator = "SYSTEM", Model = "DEFAULT", LineNo = "DEFAULT" })
- {
- }
-
- public MainWindow(Housing.Login.StartupLoginWindowResult loginResult)
+ public MainWindow()
{
InitializeComponent();
- _loginInfo = loginResult ?? new Housing.Login.StartupLoginWindowResult { Operator = "SYSTEM", Model = "DEFAULT", LineNo = "DEFAULT" };
+ _loginInfo = new Housing.Login.StartupLoginWindowResult { Operator = "---", Model = "---", LineNo = "---" };
InitializeTimer();
InitializeClock();
@@ -40,10 +37,13 @@ namespace marking_gui
private void DisplayLoginInfo()
{
- if (txtLoginInfo != null)
+ if (txtOperatorInfo != null)
+ {
+ txtOperatorInfo.Text = string.Format("[작업자: {0}]", _loginInfo.Operator);
+ }
+ if (txtModelLineInfo != null)
{
- txtLoginInfo.Text = string.Format("[작업자: {0} | 모델: {1} | 라인: {2}]",
- _loginInfo.Operator,
+ txtModelLineInfo.Text = string.Format("[모델: {0} | 라인: {1}]",
string.IsNullOrEmpty(_loginInfo.Model) ? "N/A" : _loginInfo.Model,
string.IsNullOrEmpty(_loginInfo.LineNo) ? "N/A" : _loginInfo.LineNo);
}
@@ -104,9 +104,9 @@ namespace marking_gui
txtPrevEol.Text = "대기";
txtPrevEol.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
- txtVoltage.Text = "---.-";
+ txtVoltage.Text = "-.--";
txtVoltage.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55));
- txtCurrent.Text = "--.-";
+ txtCurrent.Text = "-.--";
txtCurrent.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55));
txtFinalResult.Text = "대 기 중";
@@ -114,30 +114,40 @@ namespace marking_gui
borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(229, 231, 235)); // Light Gray
txtFinalSerial.Text = "S/N: ---";
- btnStart.IsEnabled = false;
+ btnStart.IsEnabled = true;
}
- // 시리얼 텍스트 박스 포커스 이벤트
- private void txtSerial_GotFocus(object sender, RoutedEventArgs e)
- {
- txtSerial.SelectAll();
- }
- // S/N 조회 버튼 클릭
- private void btnSearchSerial_Click(object sender, RoutedEventArgs e)
+
+ // 스타트 버튼 클릭
+ private void btnStart_Click(object sender, RoutedEventArgs e)
{
- string serial = txtSerial.Text.Trim().ToUpper();
+ // 새로운 검사 진행을 위해 UI 상태를 초기화
+ ResetUI();
+
+ // 1. 메모리에서 S/N 자동 획득
+ string serial = "";
+ try
+ {
+ serial = _memoryReader.ReadSerialNumber();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("메모리에서 S/N을 읽는 중 오류가 발생했습니다: " + ex.Message, "오류", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
if (string.IsNullOrEmpty(serial))
{
- MessageBox.Show("S/N을 입력해주세요.", "알림", MessageBoxButton.OK, MessageBoxImage.Warning);
+ MessageBox.Show("메모리에서 유효한 S/N을 읽지 못했습니다.", "경고", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
- ResetUI();
+ // UI에 S/N 표시
+ txtSerial.Text = serial;
txtFinalSerial.Text = "S/N: " + serial;
- // 데이터베이스 서비스 조회 호출 (예외 방어 처리)
+ // 2. DB에서 이전 결과값 확인
Product product = null;
try
{
@@ -169,15 +179,8 @@ namespace marking_gui
? new SolidColorBrush(Color.FromRgb(16, 185, 129))
: new SolidColorBrush(Color.FromRgb(239, 68, 68));
- if (product.IsPreviousStepsPassed)
- {
- txtSystemStatus.Text = "상태: 검사 가능 (이전 단계 합격)";
- txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(16, 185, 129));
-
- // 스타트 버튼 활성화
- btnStart.IsEnabled = true;
- }
- else
+ // 3. 불합격 존재 시 즉시 팝업 창 출력 및 진행 불가 표시 후 중단
+ if (!product.IsPreviousStepsPassed)
{
string failedStep = string.Empty;
if (product.HousingResult == "FAIL") failedStep = "Housing 검사";
@@ -186,45 +189,45 @@ namespace marking_gui
txtSystemStatus.Text = "상태: 진행 불가 (이전 단계 불합격)";
txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(239, 68, 68));
-
- // 스타트 버튼 비활성화
- btnStart.IsEnabled = false;
MessageBox.Show(string.Format("이전 공정 단계({0})가 불합격 상태이므로 최종 성능 검사를 시작할 수 없습니다.", failedStep), "검사 제한", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
}
- }
- else
- {
- MessageBox.Show("등록되지 않은 S/N입니다.\n테스트용 S/N(PASS1234 또는 FAIL5678)을 입력해 주세요.", "조회 실패", MessageBoxButton.OK, MessageBoxImage.Information);
- }
- }
- // 엔터 키 입력 시 조회 처리
- private void txtSerial_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
- {
- if (e.Key == System.Windows.Input.Key.Enter)
- {
- btnSearchSerial_Click(sender, e);
- }
- }
+ // 4. 모두 합격(PASS) 시 자동으로 최종 성능 검사(타이머) 진행
+ btnStart.IsEnabled = false;
+ txtSerial.IsEnabled = false;
- // 스타트 버튼 클릭
- private void btnStart_Click(object sender, RoutedEventArgs e)
- {
- btnStart.IsEnabled = false;
- btnSearchSerial.IsEnabled = false;
- txtSerial.IsEnabled = false;
+ txtSystemStatus.Text = "상태: 검사 진행 중...";
+ txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(59, 130, 246)); // Blue
+
+ txtFinalResult.Text = "측 정 중";
+ txtFinalResult.Foreground = new SolidColorBrush(Color.FromRgb(59, 130, 246));
+ borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(219, 234, 254)); // Light Blue
- txtSystemStatus.Text = "상태: 검사 진행 중...";
- txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(59, 130, 246)); // Blue
+ // 시뮬레이션 타이머 시작
+ _timerTickCount = 0;
+ _measurementTimer.Start();
+ }
+ else
+ {
+ // 등록되지 않은 S/N일 경우, UI의 이전 결과 상태는 대기로 리셋하고 팝업 안내
+ txtPrevHousing.Text = "대기";
+ txtPrevHousing.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
+ txtPrevCal.Text = "대기";
+ txtPrevCal.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
+ txtPrevEol.Text = "대기";
+ txtPrevEol.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
+
+ txtSystemStatus.Text = "상태: 미등록 제품";
+ txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(239, 68, 68));
- txtFinalResult.Text = "측 정 중";
- txtFinalResult.Foreground = new SolidColorBrush(Color.FromRgb(59, 130, 246));
- borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(219, 234, 254)); // Light Blue
+ MessageBox.Show("등록되지 않은 S/N입니다.\n데모 모드 시나리오가 순환됩니다. 다시 시도해 주세요.", "조회 실패", MessageBoxButton.OK, MessageBoxImage.Information);
- // 시뮬레이션 타이머 시작
- _timerTickCount = 0;
- _measurementTimer.Start();
+ // 대기 상태로 복구
+ txtSystemStatus.Text = "상태: 대기 중";
+ txtSystemStatus.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
+ }
}
// 타이머 틱 이벤트 (측정값 변화 시뮬레이션)
@@ -237,8 +240,8 @@ namespace marking_gui
double tempVoltage, tempCurrent;
_measurer.GenerateNoiseValues(_limits, out tempVoltage, out tempCurrent);
- txtVoltage.Text = tempVoltage.ToString("F1");
- txtCurrent.Text = tempCurrent.ToString("F1");
+ txtVoltage.Text = tempVoltage.ToString("F2");
+ txtCurrent.Text = tempCurrent.ToString("F2");
}
else // 최종 측정 완료 및 판정
{
@@ -247,8 +250,8 @@ namespace marking_gui
double finalVoltage, finalCurrent;
_measurer.GenerateFinalValues(_limits, out finalVoltage, out finalCurrent);
- txtVoltage.Text = finalVoltage.ToString("F1");
- txtCurrent.Text = finalCurrent.ToString("F1");
+ txtVoltage.Text = finalVoltage.ToString("F2");
+ txtCurrent.Text = finalCurrent.ToString("F2");
// 합/불 판정
bool isVoltageOk = finalVoltage >= _limits.MinVoltage && finalVoltage <= _limits.MaxVoltage;
@@ -278,11 +281,64 @@ namespace marking_gui
borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(254, 226, 226)); // Light Red
}
+ // 데이터베이스에 최종 검사 결과 저장 (소수점 2자리 반올림 포맷 반영)
+ try
+ {
+ string serial = txtSerial.Text.Trim();
+ _database.SaveProductResult(serial, finalVoltage, finalCurrent, isFinalPass ? "PASS" : "FAIL");
+
+ // 합격 판정 시 최종 SUCCESS 신호 전달 시뮬레이션
+ if (isFinalPass)
+ {
+ System.Diagnostics.Debug.WriteLine(string.Format("[설비 통신] S/N: {0} | 최종 SUCCESS 신호를 외부 메모리에 전달했습니다.", serial));
+ }
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine("DB 결과 저장 중 예외 발생: " + ex.Message);
+ }
+
// 컨트롤 원상 복구 (재검사를 위해)
- btnSearchSerial.IsEnabled = true;
txtSerial.IsEnabled = true;
btnStart.IsEnabled = true;
}
}
+
+ // 화면 렌더링 완료 시 최초 로그인 팝업 구동
+ private void Window_ContentRendered(object sender, EventArgs e)
+ {
+ ShowLoginPopup();
+ }
+
+ // 공통 로그인 팝업 처리
+ private void ShowLoginPopup()
+ {
+ var loginWindow = new Housing.Login.StartupLoginWindow();
+ loginWindow.Owner = this; // 메인 윈도우 중앙 위에 표시되도록 Owner 지정
+
+ if (loginWindow.ShowDialog() == true)
+ {
+ _loginInfo = loginWindow.Result;
+ DisplayLoginInfo();
+ ResetUI();
+ }
+ else
+ {
+ // 로그인 창 닫거나 취소 시 프로그램 종료
+ Application.Current.Shutdown();
+ }
+ }
+
+ // 로그아웃 버튼 클릭 핸들러
+ private void btnLogout_Click(object sender, RoutedEventArgs e)
+ {
+ // 로그인 정보 클리어
+ _loginInfo = new Housing.Login.StartupLoginWindowResult { Operator = "---", Model = "---", LineNo = "---" };
+ DisplayLoginInfo();
+ ResetUI();
+
+ // 로그인 화면 다시 팝업
+ ShowLoginPopup();
+ }
}
}
diff --git a/marking_gui/Services/MemoryReaderService.cs b/marking_gui/Services/MemoryReaderService.cs
new file mode 100644
index 0000000..149f570
--- /dev/null
+++ b/marking_gui/Services/MemoryReaderService.cs
@@ -0,0 +1,33 @@
+using System;
+
+namespace marking_gui.Services
+{
+ ///
+ /// 데모 모드용 메모리 읽기 서비스
+ ///
+ public class MemoryReaderService
+ {
+ private static int _callCount = 0;
+
+ ///
+ /// 메모리에서 S/N를 자동으로 읽어옵니다. (데모 모드로 순환 반환)
+ /// 1회차: PASS1234 (이전 공정 모두 PASS)
+ /// 2회차: FAIL5678 (이전 공정 FAIL 존재)
+ /// 3회차: UNKNOWN999 (미등록 S/N)
+ ///
+ public string ReadSerialNumber()
+ {
+ _callCount++;
+
+ switch (_callCount % 3)
+ {
+ case 1:
+ return "PASS1234";
+ case 2:
+ return "FAIL5678";
+ default:
+ return "UNKNOWN999";
+ }
+ }
+ }
+}
diff --git a/marking_gui/Services/MssqlDatabaseService.cs b/marking_gui/Services/MssqlDatabaseService.cs
index 73b2f37..8fa6fdf 100644
--- a/marking_gui/Services/MssqlDatabaseService.cs
+++ b/marking_gui/Services/MssqlDatabaseService.cs
@@ -59,5 +59,41 @@ namespace marking_gui.Services
return null;
}
+
+ ///
+ /// 최종 성능 검출 값을 데이터베이스에 저장합니다.
+ /// 전압과 전류 수치는 3,2 포맷(DECIMAL(3, 2) 등)에 대응하기 위해 소수점 이하 2자리로 반올림하여 처리합니다.
+ ///
+ public bool SaveProductResult(string serial, double voltage, double current, string result)
+ {
+ // 전압과 전류를 소수점 이하 2자리(3,2 포맷 규격)로 반올림 처리
+ decimal roundedVoltage = Math.Round((decimal)voltage, 2);
+ decimal roundedCurrent = Math.Round((decimal)current, 2);
+
+ // TODO: 실제 MSSQL DB 적재를 위해 SQL 명령문 구현 템플릿 준비
+ /*
+ string query = "INSERT INTO ProductResults (SerialNumber, Voltage, Current, FinalResult, TestTime) VALUES (@Serial, @Voltage, @Current, @Result, GETDATE())";
+ using (var conn = new System.Data.SqlClient.SqlConnection(_connectionString))
+ {
+ using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn))
+ {
+ cmd.Parameters.AddWithValue("@Serial", serial);
+ // DECIMAL(3,2) 포맷 매핑 파라미터 (Precision=3, Scale=2)
+ cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Voltage", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedVoltage });
+ cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Current", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedCurrent });
+ cmd.Parameters.AddWithValue("@Result", result);
+
+ conn.Open();
+ cmd.ExecuteNonQuery();
+ }
+ }
+ */
+
+ // 데모 단계 로그 출력 및 성공 반환
+ System.Diagnostics.Debug.WriteLine(string.Format("[DB 저장 로그] S/N: {0} | 전압: {1:F2}V | 전류: {2:F2}A | 결과: {3}",
+ serial, roundedVoltage, roundedCurrent, result));
+
+ return true;
+ }
}
}
diff --git a/marking_gui/bin/Debug/marking_gui.exe b/marking_gui/bin/Debug/marking_gui.exe
index 4e90acc..fad6748 100644
Binary files a/marking_gui/bin/Debug/marking_gui.exe and b/marking_gui/bin/Debug/marking_gui.exe differ
diff --git a/marking_gui/bin/Debug/marking_gui.pdb b/marking_gui/bin/Debug/marking_gui.pdb
index a2e412e..6261756 100644
Binary files a/marking_gui/bin/Debug/marking_gui.pdb and b/marking_gui/bin/Debug/marking_gui.pdb differ
diff --git a/marking_gui/marking_gui.csproj b/marking_gui/marking_gui.csproj
index 484e3f6..769a7f9 100644
--- a/marking_gui/marking_gui.csproj
+++ b/marking_gui/marking_gui.csproj
@@ -88,6 +88,7 @@
+
diff --git a/marking_gui/obj/Debug/App.baml b/marking_gui/obj/Debug/App.baml
index d7747d1..25d3e50 100644
Binary files a/marking_gui/obj/Debug/App.baml and b/marking_gui/obj/Debug/App.baml differ
diff --git a/marking_gui/obj/Debug/App.g.cs b/marking_gui/obj/Debug/App.g.cs
index c2464ae..f5c1aad 100644
--- a/marking_gui/obj/Debug/App.g.cs
+++ b/marking_gui/obj/Debug/App.g.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "A61411B8AB14958BA568EF114F2A2F2B2CD0F100D1BBE3D75A4D0A5950AA97F0"
+#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "7901E81250AFB6085C580D5F91E3114E104640F12456214E674506A1451A61E4"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/App.g.i.cs b/marking_gui/obj/Debug/App.g.i.cs
index c2464ae..f5c1aad 100644
--- a/marking_gui/obj/Debug/App.g.i.cs
+++ b/marking_gui/obj/Debug/App.g.i.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "A61411B8AB14958BA568EF114F2A2F2B2CD0F100D1BBE3D75A4D0A5950AA97F0"
+#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "7901E81250AFB6085C580D5F91E3114E104640F12456214E674506A1451A61E4"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index fbfaf78..59e5ace 100644
Binary files a/marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/marking_gui/obj/Debug/MainWindow.baml b/marking_gui/obj/Debug/MainWindow.baml
index 1443452..40d667b 100644
Binary files a/marking_gui/obj/Debug/MainWindow.baml and b/marking_gui/obj/Debug/MainWindow.baml differ
diff --git a/marking_gui/obj/Debug/MainWindow.g.cs b/marking_gui/obj/Debug/MainWindow.g.cs
index 513fe83..311875f 100644
--- a/marking_gui/obj/Debug/MainWindow.g.cs
+++ b/marking_gui/obj/Debug/MainWindow.g.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "91D3EFB5F855ECB843447939E03D0FB956CA4155D34ABB2AD6ECC0C1038A3CB3"
+#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "4CDD2CF11DE0113F519A2E056CC537A47D29160F4556FDA78FE0307C695D33F2"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
@@ -41,47 +41,55 @@ namespace marking_gui {
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
- #line 105 "..\..\MainWindow.xaml"
+ #line 138 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
- internal System.Windows.Controls.TextBlock txtLoginInfo;
+ internal System.Windows.Controls.TextBlock txtCurrentTime;
#line default
#line hidden
- #line 108 "..\..\MainWindow.xaml"
+ #line 139 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
- internal System.Windows.Controls.TextBlock txtCurrentTime;
+ internal System.Windows.Controls.TextBlock txtSystemStatus;
#line default
#line hidden
- #line 109 "..\..\MainWindow.xaml"
+ #line 142 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
- internal System.Windows.Controls.TextBlock txtSystemStatus;
+ internal System.Windows.Controls.TextBlock txtOperatorInfo;
#line default
#line hidden
- #line 139 "..\..\MainWindow.xaml"
+ #line 143 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
- internal System.Windows.Controls.TextBox txtSerial;
+ internal System.Windows.Controls.TextBlock txtModelLineInfo;
#line default
#line hidden
- #line 141 "..\..\MainWindow.xaml"
+ #line 144 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
- internal System.Windows.Controls.Button btnSearchSerial;
+ internal System.Windows.Controls.Button btnLogout;
+
+ #line default
+ #line hidden
+
+
+ #line 169 "..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBox txtSerial;
#line default
#line hidden
- #line 172 "..\..\MainWindow.xaml"
+ #line 200 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevHousing;
@@ -89,7 +97,7 @@ namespace marking_gui {
#line hidden
- #line 183 "..\..\MainWindow.xaml"
+ #line 211 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevCal;
@@ -97,7 +105,7 @@ namespace marking_gui {
#line hidden
- #line 194 "..\..\MainWindow.xaml"
+ #line 222 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevEol;
@@ -105,7 +113,7 @@ namespace marking_gui {
#line hidden
- #line 228 "..\..\MainWindow.xaml"
+ #line 256 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltage;
@@ -113,7 +121,7 @@ namespace marking_gui {
#line hidden
- #line 232 "..\..\MainWindow.xaml"
+ #line 260 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltageRangeGuide;
@@ -121,7 +129,7 @@ namespace marking_gui {
#line hidden
- #line 247 "..\..\MainWindow.xaml"
+ #line 275 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrent;
@@ -129,7 +137,7 @@ namespace marking_gui {
#line hidden
- #line 251 "..\..\MainWindow.xaml"
+ #line 279 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrentRangeGuide;
@@ -137,7 +145,7 @@ namespace marking_gui {
#line hidden
- #line 257 "..\..\MainWindow.xaml"
+ #line 285 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border borderFinalResult;
@@ -145,7 +153,7 @@ namespace marking_gui {
#line hidden
- #line 266 "..\..\MainWindow.xaml"
+ #line 294 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalResult;
@@ -153,7 +161,7 @@ namespace marking_gui {
#line hidden
- #line 267 "..\..\MainWindow.xaml"
+ #line 295 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalSerial;
@@ -161,7 +169,7 @@ namespace marking_gui {
#line hidden
- #line 277 "..\..\MainWindow.xaml"
+ #line 305 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnStart;
@@ -169,7 +177,7 @@ namespace marking_gui {
#line hidden
- #line 286 "..\..\MainWindow.xaml"
+ #line 314 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnOpenSettings;
@@ -207,7 +215,12 @@ namespace marking_gui {
switch (connectionId)
{
case 1:
- this.txtLoginInfo = ((System.Windows.Controls.TextBlock)(target));
+
+ #line 11 "..\..\MainWindow.xaml"
+ ((marking_gui.MainWindow)(target)).ContentRendered += new System.EventHandler(this.Window_ContentRendered);
+
+ #line default
+ #line hidden
return;
case 2:
this.txtCurrentTime = ((System.Windows.Controls.TextBlock)(target));
@@ -216,72 +229,66 @@ namespace marking_gui {
this.txtSystemStatus = ((System.Windows.Controls.TextBlock)(target));
return;
case 4:
- this.txtSerial = ((System.Windows.Controls.TextBox)(target));
-
- #line 140 "..\..\MainWindow.xaml"
- this.txtSerial.GotFocus += new System.Windows.RoutedEventHandler(this.txtSerial_GotFocus);
-
- #line default
- #line hidden
-
- #line 140 "..\..\MainWindow.xaml"
- this.txtSerial.KeyDown += new System.Windows.Input.KeyEventHandler(this.txtSerial_KeyDown);
-
- #line default
- #line hidden
+ this.txtOperatorInfo = ((System.Windows.Controls.TextBlock)(target));
return;
case 5:
- this.btnSearchSerial = ((System.Windows.Controls.Button)(target));
+ this.txtModelLineInfo = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 6:
+ this.btnLogout = ((System.Windows.Controls.Button)(target));
- #line 141 "..\..\MainWindow.xaml"
- this.btnSearchSerial.Click += new System.Windows.RoutedEventHandler(this.btnSearchSerial_Click);
+ #line 144 "..\..\MainWindow.xaml"
+ this.btnLogout.Click += new System.Windows.RoutedEventHandler(this.btnLogout_Click);
#line default
#line hidden
return;
- case 6:
+ case 7:
+ this.txtSerial = ((System.Windows.Controls.TextBox)(target));
+ return;
+ case 8:
this.txtPrevHousing = ((System.Windows.Controls.TextBlock)(target));
return;
- case 7:
+ case 9:
this.txtPrevCal = ((System.Windows.Controls.TextBlock)(target));
return;
- case 8:
+ case 10:
this.txtPrevEol = ((System.Windows.Controls.TextBlock)(target));
return;
- case 9:
+ case 11:
this.txtVoltage = ((System.Windows.Controls.TextBlock)(target));
return;
- case 10:
+ case 12:
this.txtVoltageRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return;
- case 11:
+ case 13:
this.txtCurrent = ((System.Windows.Controls.TextBlock)(target));
return;
- case 12:
+ case 14:
this.txtCurrentRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return;
- case 13:
+ case 15:
this.borderFinalResult = ((System.Windows.Controls.Border)(target));
return;
- case 14:
+ case 16:
this.txtFinalResult = ((System.Windows.Controls.TextBlock)(target));
return;
- case 15:
+ case 17:
this.txtFinalSerial = ((System.Windows.Controls.TextBlock)(target));
return;
- case 16:
+ case 18:
this.btnStart = ((System.Windows.Controls.Button)(target));
- #line 278 "..\..\MainWindow.xaml"
+ #line 306 "..\..\MainWindow.xaml"
this.btnStart.Click += new System.Windows.RoutedEventHandler(this.btnStart_Click);
#line default
#line hidden
return;
- case 17:
+ case 19:
this.btnOpenSettings = ((System.Windows.Controls.Button)(target));
- #line 287 "..\..\MainWindow.xaml"
+ #line 315 "..\..\MainWindow.xaml"
this.btnOpenSettings.Click += new System.Windows.RoutedEventHandler(this.btnOpenSettings_Click);
#line default
diff --git a/marking_gui/obj/Debug/MainWindow.g.i.cs b/marking_gui/obj/Debug/MainWindow.g.i.cs
index 513fe83..bc9b99f 100644
--- a/marking_gui/obj/Debug/MainWindow.g.i.cs
+++ b/marking_gui/obj/Debug/MainWindow.g.i.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "91D3EFB5F855ECB843447939E03D0FB956CA4155D34ABB2AD6ECC0C1038A3CB3"
+#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "8EE9B0D077C65F0A6ECE7B0CF99EADE8D3584BEB5C5ACE53A6444D7C659E9A91"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
@@ -217,18 +217,6 @@ namespace marking_gui {
return;
case 4:
this.txtSerial = ((System.Windows.Controls.TextBox)(target));
-
- #line 140 "..\..\MainWindow.xaml"
- this.txtSerial.GotFocus += new System.Windows.RoutedEventHandler(this.txtSerial_GotFocus);
-
- #line default
- #line hidden
-
- #line 140 "..\..\MainWindow.xaml"
- this.txtSerial.KeyDown += new System.Windows.Input.KeyEventHandler(this.txtSerial_KeyDown);
-
- #line default
- #line hidden
return;
case 5:
this.btnSearchSerial = ((System.Windows.Controls.Button)(target));
diff --git a/marking_gui/obj/Debug/SettingsWindow.baml b/marking_gui/obj/Debug/SettingsWindow.baml
index 6d3b12b..d2534d0 100644
Binary files a/marking_gui/obj/Debug/SettingsWindow.baml and b/marking_gui/obj/Debug/SettingsWindow.baml differ
diff --git a/marking_gui/obj/Debug/SettingsWindow.g.cs b/marking_gui/obj/Debug/SettingsWindow.g.cs
index dc12520..5bddb21 100644
--- a/marking_gui/obj/Debug/SettingsWindow.g.cs
+++ b/marking_gui/obj/Debug/SettingsWindow.g.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "AC6538A2C0A00B7969947C0D3443BD3193841A2C8C686CCFDFA02EC6FBBC00CD"
+#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "33961FE01569FF3D7FDD670A40AE2AB5450B6E4881EBA8EABD242BBB6EA0F36D"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/SettingsWindow.g.i.cs b/marking_gui/obj/Debug/SettingsWindow.g.i.cs
index dc12520..5bddb21 100644
--- a/marking_gui/obj/Debug/SettingsWindow.g.i.cs
+++ b/marking_gui/obj/Debug/SettingsWindow.g.i.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "AC6538A2C0A00B7969947C0D3443BD3193841A2C8C686CCFDFA02EC6FBBC00CD"
+#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "33961FE01569FF3D7FDD670A40AE2AB5450B6E4881EBA8EABD242BBB6EA0F36D"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/StartupLoginWindow.baml b/marking_gui/obj/Debug/StartupLoginWindow.baml
index 7b8f1b1..88b1254 100644
Binary files a/marking_gui/obj/Debug/StartupLoginWindow.baml and b/marking_gui/obj/Debug/StartupLoginWindow.baml differ
diff --git a/marking_gui/obj/Debug/StartupLoginWindow.g.cs b/marking_gui/obj/Debug/StartupLoginWindow.g.cs
index bfcf5ec..fc10960 100644
--- a/marking_gui/obj/Debug/StartupLoginWindow.g.cs
+++ b/marking_gui/obj/Debug/StartupLoginWindow.g.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\StartupLoginWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "18F783C1E7444D1DAC0CC2289DBE06704F900E72532F317934C31FA36062A944"
+#pragma checksum "..\..\StartupLoginWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "79E8A6E048755DAD2C14DA7C41DFC6A5FC9DE46DE190A1192894F5DCFCB3E54D"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/StartupLoginWindow.g.i.cs b/marking_gui/obj/Debug/StartupLoginWindow.g.i.cs
index bfcf5ec..fc10960 100644
--- a/marking_gui/obj/Debug/StartupLoginWindow.g.i.cs
+++ b/marking_gui/obj/Debug/StartupLoginWindow.g.i.cs
@@ -1,4 +1,4 @@
-#pragma checksum "..\..\StartupLoginWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "18F783C1E7444D1DAC0CC2289DBE06704F900E72532F317934C31FA36062A944"
+#pragma checksum "..\..\StartupLoginWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "79E8A6E048755DAD2C14DA7C41DFC6A5FC9DE46DE190A1192894F5DCFCB3E54D"
//------------------------------------------------------------------------------
//
// 이 코드는 도구를 사용하여 생성되었습니다.
diff --git a/marking_gui/obj/Debug/marking_gui.csproj.AssemblyReference.cache b/marking_gui/obj/Debug/marking_gui.csproj.AssemblyReference.cache
index 9397592..49e6328 100644
Binary files a/marking_gui/obj/Debug/marking_gui.csproj.AssemblyReference.cache and b/marking_gui/obj/Debug/marking_gui.csproj.AssemblyReference.cache differ
diff --git a/marking_gui/obj/Debug/marking_gui.csproj.CoreCompileInputs.cache b/marking_gui/obj/Debug/marking_gui.csproj.CoreCompileInputs.cache
index 29cd659..77af8f7 100644
--- a/marking_gui/obj/Debug/marking_gui.csproj.CoreCompileInputs.cache
+++ b/marking_gui/obj/Debug/marking_gui.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-982128101b0badcfbf7c93653177ef0ec5346dc5c76459cb5549ee27de8385af
+ec6dd6e1649354a88820f29fa99f449377f51e4d5e8d8707b3c7326a682c80e1
diff --git a/marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt b/marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt
index f820b8e..d2e2323 100644
--- a/marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt
+++ b/marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt
@@ -37,3 +37,4 @@ C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\obj\Debug\marking_gui.cs
C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\obj\Debug\marking_gui.exe
C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\obj\Debug\marking_gui.pdb
C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\obj\Debug\App.baml
+C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\App.baml
diff --git a/marking_gui/obj/Debug/marking_gui.csproj.GenerateResource.cache b/marking_gui/obj/Debug/marking_gui.csproj.GenerateResource.cache
index f013139..fa135a5 100644
Binary files a/marking_gui/obj/Debug/marking_gui.csproj.GenerateResource.cache and b/marking_gui/obj/Debug/marking_gui.csproj.GenerateResource.cache differ
diff --git a/marking_gui/obj/Debug/marking_gui.exe b/marking_gui/obj/Debug/marking_gui.exe
index 4e90acc..fad6748 100644
Binary files a/marking_gui/obj/Debug/marking_gui.exe and b/marking_gui/obj/Debug/marking_gui.exe differ
diff --git a/marking_gui/obj/Debug/marking_gui.g.resources b/marking_gui/obj/Debug/marking_gui.g.resources
index ce4029b..069c019 100644
Binary files a/marking_gui/obj/Debug/marking_gui.g.resources and b/marking_gui/obj/Debug/marking_gui.g.resources differ
diff --git a/marking_gui/obj/Debug/marking_gui.pdb b/marking_gui/obj/Debug/marking_gui.pdb
index a2e412e..6261756 100644
Binary files a/marking_gui/obj/Debug/marking_gui.pdb and b/marking_gui/obj/Debug/marking_gui.pdb differ
diff --git a/marking_gui/obj/Debug/marking_gui_MarkupCompile.cache b/marking_gui/obj/Debug/marking_gui_MarkupCompile.cache
index c413098..45ebed5 100644
--- a/marking_gui/obj/Debug/marking_gui_MarkupCompile.cache
+++ b/marking_gui/obj/Debug/marking_gui_MarkupCompile.cache
@@ -4,16 +4,16 @@
winexe
C#
.cs
-C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\obj\Debug\
+C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\
marking_gui
none
false
DEBUG;TRACE
-C:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\App.xaml
-3-1210742192
+C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\App.xaml
+31238780151
-11-2023606741
-14-207034072
+12-1027158311
+141066371409
MainWindow.xaml;SettingsWindow.xaml;StartupLoginWindow.xaml;
False
diff --git a/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.cache b/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.cache
index 4cd004a..f529594 100644
--- a/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.cache
+++ b/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.cache
@@ -12,7 +12,7 @@ DEBUG;TRACE
C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\App.xaml
3-1210742192
-12189271937
+13735417974
14-207034072
MainWindow.xaml;SettingsWindow.xaml;StartupLoginWindow.xaml;
diff --git a/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.lref b/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.lref
index 98f95c1..8b24a01 100644
--- a/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.lref
+++ b/marking_gui/obj/Debug/marking_gui_MarkupCompile.i.lref
@@ -1,4 +1,4 @@
-
+FC:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\App.xaml;;
FC:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\MainWindow.xaml;;
diff --git a/marking_gui/obj/Debug/marking_gui_MarkupCompile.lref b/marking_gui/obj/Debug/marking_gui_MarkupCompile.lref
index 1dff166..8b24a01 100644
--- a/marking_gui/obj/Debug/marking_gui_MarkupCompile.lref
+++ b/marking_gui/obj/Debug/marking_gui_MarkupCompile.lref
@@ -1,4 +1,4 @@
-FC:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\App.xaml;;
-FC:\Users\wjddn\Desktop\amosense\marking_gui\marking_gui\MainWindow.xaml;;
+FC:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\App.xaml;;
+FC:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\MainWindow.xaml;;
diff --git a/program_flow.md b/program_flow.md
index 7dd4db8..9083a90 100644
--- a/program_flow.md
+++ b/program_flow.md
@@ -1,153 +1,95 @@
# 양산형 테스트 기기 모니터링 시스템 사용자 설명서 (User Manual)
-
-
본 문서는 **양산형 테스트 기기 모니터링 시스템**을 사용하는 작업자 및 검사자를 위한 운영 설명서입니다. 프로그램의 시작부터 제품 조회, 성능 검사 수행, 판정 기준 설정까지 내부 프로그램 코드를 몰라도 누구나 쉽게 작동법을 이해할 수 있도록 사용자 화면 관점에서 기술되었습니다.
-
-
---
-
-
## 1. 시스템 개요 (Introduction)
-
-
본 시스템은 제조 라인의 최종 단계에서 제품의 전기적 성능(측정 전압 및 전류)을 검사하고 최종 합격/불합격 여부를 판정하는 모니터링 프로그램입니다.
- **이전 단계 확인:** 제품의 바코드(S/N)를 조회하여 이전 주요 공정(Housing, Calibration, EOL)을 모두 통과했는지 자동으로 검증합니다.
-
- **실시간 계측 및 판정:** 검사를 시작하면 전기적 신호가 측정되며, 설정된 범위 이내인 경우 최종 `PASS`(합격), 범위를 벗어나면 `FAIL`(불합격) 판정을 내립니다.
-
- **파라미터 조율:** 생산 제품 사양에 맞춰 합격 판정 기준 범위(최소/최대 전압 및 전류)를 간편하게 변경할 수 있습니다.
-
-
---
-
-
## 2. 전체 동작 흐름도 (Operational Flow)
-
-
검사자가 프로그램을 구동하여 최종 검사를 완료하기까지의 전체 프로세스는 다음과 같습니다.
-
-
```mermaid
graph TD
- A([1. 프로그램 실행]) --> B[시작 설정 및 로그인 팝업]
- B --> C{로그인 및 설정 완료?}
- C -- 취소/종료 --> D([프로그램 종료])
- C -- 로그인 완료 클릭 --> E[메인 모니터링 화면 기동]
- E --> F[상단바에서 작업자 및 모델 정보 확인]
- F --> G[S/N 입력 칸에 바코드 스캔 또는 직접 입력]
- G --> H[조회 버튼 클릭 또는 엔터 키 입력]
- H --> I{이전 검사 결과 확인}
- I -- 이전 단계 중 불합격 존재 --> J[경고 팝업 창 출력 및 진행 불가 표시]
- J --> K[START 버튼 비활성화 상태 유지 -> 검사 불가]
- K --> G
- I -- 이전 단계 모두 합격 PASS --> L[상태: 검사 가능 표시 및 START 버튼 활성화]
- L --> M[▶ 검사 시작 START 버튼 클릭]
- M --> N[상태: 검사 진행 중 표시 및 수치 측정 시작]
- N --> O[전압/전류 계측값이 2초간 흔들리며 측정 동작 연출]
- O --> P[측정 완료 및 최종값 표시]
- P --> Q{측정 전압/전류가 기준범위 이내인가?}
- Q -- 합격 범위 내 --> R[대형 화면에 PASS 녹색 표시 및 합격 판정]
- Q -- 범위 이탈 --> S[대형 화면에 FAIL 적색 표시 및 불합격 판정]
- R --> T[시스템 원상 복구 및 다음 제품 검사 대기]
- S --> T
- T --> G
+ A([1. 프로그램 실행]) --> B[메인 모니터링 화면 기동]
+ B --> C[화면 중앙에 로그인 팝업 활성화]
+ C --> D{로그인}
+ D -- 취소/닫기 --> E([프로그램 종료])
+ D -- 로그인 성공 --> F[상단바 우측에 작업자/모델/라인 정보 표출 및 메인 활성화]
+ F --> G[▶ 검사 시작 START 버튼 클릭]
+ G --> H[UI 화면 상태 및 측정 수치 -.-- 로 강제 초기화]
+ H --> I[메모리로부터 S/N를 자동으로 읽어서 입력받음]
+ I --> J[데이터베이스에서 이전 검사 결과 조회]
+ J --> K{이전 검사 결과 확인}
+ K -- 이전 단계 중 FAIL 불합격 존재 --> L[경고 팝업 창 출력 및 검사 중단]
+ L --> G
+ K -- 이전 단계 모두 PASS 합격 --> M[자동으로 검사 시작 및 2초간 수치 측정]
+ M --> N[측정 완료 및 최종값 소수점 둘째 자리 표시]
+ N --> O{측정 전압/전류가 기준범위 이내인가?}
+ O -- 합격 범위 내 PASS --> P[대형 화면 PASS 표시 및 최종 합격 판정]
+ O -- 범위 이탈 FAIL --> Q[대형 화면 FAIL 표시 및 최종 불합격 판정]
+ P --> R[데이터베이스에 측정값 3,2 포맷팅 반올림 및 PASS 저장]
+ Q --> S[데이터베이스에 측정값 3,2 포맷팅 반올림 및 FAIL 저장]
+ R --> T[최종 설비에 SUCCESS 신호 전달]
+ S --> U[시스템 대기 상태 복구 및 다음 검사 준비]
+ T --> U
+ U --> G
```
-
-
---
-
-
## 3. 상세 기능별 동작 가이드
-
-
### 3.1. 시스템 시작 설정 및 로그인
-1. **프로그램 기동:** 프로그램을 켜면 메인 화면이 뜨기 전, **[시스템 시작 설정 & 로그인]** 화면이 화면 중앙에 먼저 나타납니다.
-
-2. **설정값 기입:** 제조사, 모델명, 색상 코드, 라인 번호, LOT 번호, 지그 번호를 확인 및 기입하고, 담당 **작업자명**과 **비밀번호**를 입력합니다.
-
-3. **빠른 테스트 실행 (테스트 계정):**
-
- - 검사 편의를 위해 작업자(`test`)와 비밀번호(`test`)가 미리 입력되어 있습니다.
-
- - 별도 수정 없이 곧바로 하단의 **[시스템 시작 및 로그인]** 단추를 누르면 로그인이 완료됩니다.
-
-4. **정보 연동:** 로그인이 완료되면 로그인 창이 닫히고 메인 화면이 자동으로 최대화되어 열립니다. 메인 화면 좌측 상단바 영역에 입력했던 정보가 `[작업자: test | 모델: MOBI-EV-01 | 라인: LINE-3]` 형태로 상시 노출됩니다.
-
-
-
+1. **메인 화면 로드 및 로그인 팝업:** 프로그램을 실행하면 백그라운드에 메인 모니터링 화면이 먼저 켜져서 깔리며, 그 위에 **[시스템 시작 설정 & 로그인]** 화면이 화면 정중앙에 팝업(모달) 형태로 활성화됩니다.
+2. **설정값 기입:** 제조사, 모델명, 색상 코드, 라인 번호, LOT 번호, 지그 번호를 확인 및 기입하고, 담당 **작업자명**과 **비밀번호**를 입력합니다. (빠른 실행을 위해 테스트 계정 `test` / `test`가 미리 기입되어 있습니다.)
+3. **팝업 취소 시 앱 종료:** 최초 로그인 시 창을 그냥 닫거나 취소를 누르면 프로그램 전체가 안전하게 종료됩니다.
+4. **정보 연동 및 로그아웃:** 로그인이 완료되면 로그인 창이 닫히며 메인 화면 상단바 우측 영역에 `[작업자: test] [모델: MOBI-EV-01 | 라인: LINE-3]` 형태로 정돈되어 정보가 표시됩니다. 또한 바로 우측에 빨간색 **[로그아웃]** 버튼이 생성됩니다.
+ - [로그아웃] 버튼을 클릭하면 현재 화면의 수치들이 초기화되고 로그인 팝업창이 다시 정중앙에 호출됩니다.
---
-
-
### 3.2. 제품 조회 및 이전 공정 이력 검증
-1. **S/N(시리얼 번호) 스캔:** 메인 화면 좌측의 **'S/N 입력'** 상자에 제품 바코드를 스캔하거나 입력합니다. (키보드의 엔터 키 또는 **[조회]** 버튼 클릭)
-
-2. **이전 단계 확인:** 시스템이 이전 공정 단계들의 결과를 불러와 화면 좌측 **'이전 시험 단계 결과'** 표에 표시합니다.
-
- - **합격 제품 테스트 (S/N: `PASS1234`):** Housing, Calibration, EOL 단계가 모두 초록색 `PASS`로 채워지며, 하단의 대형 **[▶ 검사 시작 (START)]** 버튼이 초록색으로 활성화되어 성능 검사를 수행할 수 있습니다.
-
- - **불합격 제품 테스트 (S/N: `FAIL5678`):** 이전 단계 중 실패한 항목이 빨간색 `FAIL`로 표시되며, 경고 창이 나타납니다. 하단의 검사 시작 버튼은 비활성화되어 최종 검사 진행이 전면 차단됩니다.
-
-
-
+1. **검사 시작 및 UI 초기화:** [▶ 검사 시작 (START)] 버튼(기본 활성화 상태)을 클릭합니다. 클릭 즉시 이전 제품의 수치와 결과가 오인되는 것을 방지하기 위해 화면의 전압/전류 수치(`-.--`), 최종 판정(`대 기 중`), 이전 공정 단계(`대기`)가 깨끗이 초기화됩니다.
+2. **메모리 자동 읽기:** UI 초기화가 끝나면 시스템은 메모리로부터 바코드(S/N) 정보를 자동으로 읽어와 `S/N 입력` 창에 자동으로 입력합니다. (조회 버튼은 완전히 제거되었으며 수동 입력을 거치지 않습니다.)
+3. **이전 단계 자동 검증:** 조회된 S/N으로 데이터베이스를 즉시 탐색하여 이전 공정 단계 결과를 확인합니다.
+ - **합격 제품 테스트 (S/N: `PASS1234`):** Housing, Calibration, EOL 단계가 모두 초록색 `PASS`로 채워지며, 별도 조작 대기 없이 **최종 성능 검사를 자동으로 바로 가동**합니다.
+ - **불합격 제품 테스트 (S/N: `FAIL5678`):** 이전 단계 중 실패한 항목이 빨간색 `FAIL`로 표시되며, 즉시 경고 팝업 창이 출력되고 검사 시작을 전면 차단합니다.
---
-
-
### 3.3. 최종 성능 검사 및 합불 판정
-1. **검사 시작:** 초록색으로 활성화된 **[▶ 검사 시작 (START)]** 버튼을 클릭합니다.
-
-2. **측정 중 상태 (2초간):**
-
- - 검사가 시작되면 상태창이 파란색 **'측정 중'**으로 변경되고 전압 및 전류 측정 영역의 수치들이 약 2초간 측정됩니다.
-
-
-3. **최종 판정:**
-
- - 2초가 지나면 측정이 끝나고 최종 검출된 전압과 전류 수치가 화면에 고정됩니다.
-
- - **합격 (`PASS`):** 측정된 전압(디폴트 `4.0V ~ 6.0V`)과 전류(디폴트 `8.0A ~ 10.0A`)가 모두 가이드 범위 내에 도달하면 대형 판정 영역이 초록색 배경의 **`PASS`**로 갱신되며 최종 합격 판정이 완료됩니다.
-
- - **불합격 (`FAIL`):** 전압이나 전류 중 하나라도 기준 범위를 벗어나면 해당 측정 텍스트와 대형 판정 영역이 빨간색 배경의 **`FAIL`**로 변하여 경보를 나타냅니다.
-
- - 판정이 종료되면 시스템은 자동으로 대기 상태로 복구되어 다음 제품 검사를 진행할 준비를 마칩니다.
-
-
+1. **자동 계측 시작:** 이전 공정 결과가 모두 합격인 경우, 상태창이 파란색 **'측정 중'**으로 자동 변경되고 전압 및 전류 측정 영역의 수치가 소수점 둘째 자리(`-.--`) 상태에서 약 2초간 흔들리며 측정 동작을 연출합니다.
+2. **측정 완료 및 판정:** 2초가 지나면 측정이 끝나고 최종 검출된 전압과 전류 수치가 소수점 둘째 자리 포맷(`F2`)으로 화면에 표시됩니다.
+ - 측정된 전압(디폴트 `4.00V ~ 6.00V`)과 전류(디폴트 `8.00A ~ 10.00A`)가 모두 가이드 범위 이내이면 대형 판정 영역이 초록색 배경의 **`PASS`**로 표시됩니다. 범위를 벗어날 경우 빨간색 배경의 **`FAIL`** 판정을 내립니다.
+3. **데이터베이스 적재 (3,2 포맷팅):** 최종 판정이 이루어지는 순간, 측정된 전압과 전류 수치를 **소수점 이하 2자리(3,2 포맷에 대응)로 반올림 처리**하여 최종 판정 결과(PASS/FAIL) 및 S/N 정보와 함께 데이터베이스에 안전하게 기록합니다.
+4. **SUCCESS 완료 신호 전달:** 최종 합격(`PASS`) 판정 건에 한하여, 데이터베이스 저장이 끝난 후 외부 설비 제어기(PLC 등) 측 메모리에 **최종 SUCCESS 완료 신호**를 송신하여 제품 이동 및 라인 흐름을 자동 제어하도록 구성했습니다.
+5. **자동 대기 복구:** 모든 저장 및 신호 전달 프로세스가 완료되면 시스템은 자동으로 대기 상태로 복구되어 다음 제품 검사를 진행할 준비를 마칩니다.
---
-
-
### 3.4. 판정 기준 파라미터 설정
1. **설정창 열기:** 최하단 바 좌측에 있는 파란색 **[⚙ 파라미터 설정]** 버튼을 클릭합니다.
-
2. **기준값 수정:** 화면에 팝업창이 나타나며 전압의 최소/최대값 및 전류의 최소/최대 기준 범위를 키보드로 입력하여 수정할 수 있습니다.
-
3. **유효성 체크 및 저장:**
-
- - 입력한 값은 음수여서는 안 되며, 최소값이 최대값보다 작아야 저장할 수 있습니다.
-
- - **[저장]**을 누르면 변경 사항이 적용되며, 메인 화면 전압/전류 카드 하단에 표시되는 가이드 문구(`기준범위: X.XV ~ Y.YV`)가 실시간으로 자동 변경되어 즉시 새로운 판정 기준으로 적용됩니다.
+ - 입력한 값은 음수여서는 안 되며, 최소값이 최대값보다 작아야 저장할 수 있습니다.
+ - **[저장]**을 누르면 변경 사항이 적용되며, 메인 화면 전압/전류 카드 하단에 표시되는 가이드 문구(`기준범위: X.XXV ~ Y.YYV`)가 실시간으로 자동 변경되어 즉시 새로운 판정 기준으로 적용됩니다.
---
+
### 4. GUI
#### 메인 화면
![[Pasted image 20260605142629.png]]