Browse Source

저항 측정 UI 추가

master
seuuung 1 month ago
parent
commit
64edc4d64d
  1. 11
      .agents/AGENTS.md
  2. 83
      .gitignore
  3. BIN
      .vs/marking_gui.slnx/FileContentIndex/0eaf846b-d4b9-4caf-a370-de061ce0320c.vsidx
  4. BIN
      .vs/marking_gui.slnx/FileContentIndex/39788850-5095-4727-824a-b7633641276a.vsidx
  5. BIN
      .vs/marking_gui.slnx/FileContentIndex/69f01546-7ea2-4b97-b377-8aef86bfa5e6.vsidx
  6. BIN
      .vs/marking_gui.slnx/FileContentIndex/b5393d54-c101-4f5a-80aa-1b6a40dcea0c.vsidx
  7. BIN
      .vs/marking_gui.slnx/v18/.suo
  8. 6
      .vs/marking_gui.slnx/v18/DocumentLayout.backup.json
  9. 6
      .vs/marking_gui.slnx/v18/DocumentLayout.json
  10. BIN
      build_err.txt
  11. 124
      docs/database_setup.sql
  12. 105
      docs/knowledge_base.md
  13. 26
      marking_gui/MainWindow.xaml
  14. 34
      marking_gui/MainWindow.xaml.cs
  15. 14
      marking_gui/Models/MeasurementLimits.cs
  16. 84
      marking_gui/Services/LoginServicesStub.cs
  17. 25
      marking_gui/Services/MockMeasurer.cs
  18. 102
      marking_gui/Services/MssqlDatabaseService.cs
  19. 18
      marking_gui/SettingsWindow.xaml
  20. 12
      marking_gui/SettingsWindow.xaml.cs
  21. BIN
      marking_gui/bin/Debug/marking_gui.exe
  22. BIN
      marking_gui/bin/Debug/marking_gui.pdb
  23. 3
      marking_gui/marking_gui.csproj
  24. BIN
      marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  25. BIN
      marking_gui/obj/Debug/MainWindow.baml
  26. 54
      marking_gui/obj/Debug/MainWindow.g.cs
  27. 142
      marking_gui/obj/Debug/MainWindow.g.i.cs
  28. BIN
      marking_gui/obj/Debug/SettingsWindow.baml
  29. 42
      marking_gui/obj/Debug/SettingsWindow.g.cs
  30. 42
      marking_gui/obj/Debug/SettingsWindow.g.i.cs
  31. 1
      marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt
  32. BIN
      marking_gui/obj/Debug/marking_gui.exe
  33. BIN
      marking_gui/obj/Debug/marking_gui.g.resources
  34. BIN
      marking_gui/obj/Debug/marking_gui.pdb
  35. 2
      marking_gui/obj/Debug/marking_gui_MarkupCompile.i.cache
  36. 2
      marking_gui/obj/Debug/marking_gui_MarkupCompile.i.lref

11
.agents/AGENTS.md

@ -0,0 +1,11 @@
# Project Agent Rules
이 워크스페이스에서 작업을 수행할 때 반드시 다음 프로젝트 규칙을 준수하십시오.
## 1. 지식베이스 참조 규칙
- 성능 검사 모니터링 시스템과 관련된 모든 작업(수정, 디버깅, 신규 기능 추가 등)을 시작하기 전에 반드시 [docs/knowledge_base.md](file:///c:/Users/COMPUTER1/Desktop/mobi/marking_gui/docs/knowledge_base.md) 파일을 먼저 확인하고 지침을 숙지하십시오.
- 시스템 구성 방식, 빌드 엔진 사용 지침 및 데모 모드 작동 방식은 지식베이스에 정의된 정책을 따릅니다.
## 2. 데모 모드 관련 규칙
- 상용/실서버 배포 릴리즈 목적의 빌드를 진행할 때는 [docs/knowledge_base.md#3.1.-데모용-시뮬레이션-격리-코드-제거-방법-(중요)](file:///c:/Users/COMPUTER1/Desktop/mobi/marking_gui/docs/knowledge_base.md#31-데모용-시뮬레이션-격리-코드-제거-방법-중요) 가이드에 명시된 대로 데모 격리 영역 주석 배너 안의 코드를 삭제해야 합니다.
- 임의로 데모 검증 성공 로직을 다른 방식으로 배포본에 포함하지 마십시오.

83
.gitignore

@ -0,0 +1,83 @@
# ========================
# .NET Framework / WPF
# ========================
# 빌드 출력 디렉터리
[Bb]in/
[Oo]bj/
# Visual Studio 캐시 및 설정 파일
.vs/
*.user
*.suo
*.userosscache
*.sln.docstates
# 빌드 로그
*.log
build_err.txt
build_log.txt
build_summary.txt
msbuild.log
# NuGet 패키지
packages/
*.nupkg
*.nuspec
# MSTest 결과
TestResults/
*.trx
# 리소스 파일 (자동 생성)
*.g.cs
*.g.i.cs
# 퍼블리시 결과물
publish/
[Pp]ublish/
PublishScripts/
# ========================
# 데이터베이스 / 설정 파일 (민감 정보 보호)
# ========================
# Database.ini 는 서버 주소, 비밀번호 등 민감 정보를 담고 있으므로
# 원본 파일 대신 예시 파일(Database.ini.example)만 저장소에 포함합니다.
marking_gui/Database.ini
# ========================
# OS 생성 파일
# ========================
# Windows
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
# macOS
.DS_Store
.AppleDouble
.LSOverride
# ========================
# IDE 관련
# ========================
# JetBrains Rider
.idea/
*.sln.iml
# Visual Studio Code
.vscode/
# ========================
# 기타
# ========================
# 압축 파일
*.zip
*.7z
*.rar

BIN
.vs/marking_gui.slnx/FileContentIndex/0eaf846b-d4b9-4caf-a370-de061ce0320c.vsidx

Binary file not shown.

BIN
.vs/marking_gui.slnx/FileContentIndex/39788850-5095-4727-824a-b7633641276a.vsidx

Binary file not shown.

BIN
.vs/marking_gui.slnx/FileContentIndex/69f01546-7ea2-4b97-b377-8aef86bfa5e6.vsidx

Binary file not shown.

BIN
.vs/marking_gui.slnx/FileContentIndex/b5393d54-c101-4f5a-80aa-1b6a40dcea0c.vsidx

Binary file not shown.

BIN
.vs/marking_gui.slnx/v18/.suo

Binary file not shown.

6
.vs/marking_gui.slnx/v18/DocumentLayout.backup.json

@ -14,8 +14,12 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 0, "SelectedChildIndex": 1,
"Children": [ "Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 0,

6
.vs/marking_gui.slnx/v18/DocumentLayout.json

@ -14,8 +14,12 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 0, "SelectedChildIndex": 1,
"Children": [ "Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 0,

BIN
build_err.txt

Binary file not shown.

124
docs/database_setup.sql

@ -0,0 +1,124 @@
-- ==========================================================
-- 양산형 테스트 기기 모니터링 시스템 MSSQL 2012 DB 구성 스크립트
-- 작성일: 2026-06-22
-- 호환 버전: Microsoft SQL Server 2012 이상
-- ==========================================================
USE [master];
GO
-- 데이터베이스 생성 (존재하지 않을 경우에만 생성)
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'MarkingDb')
BEGIN
CREATE DATABASE [MarkingDb];
END
GO
USE [MarkingDb];
GO
-- ==========================================
-- 1. [Users] 테이블 생성 (작업자 정보 및 비밀번호 관리)
-- ==========================================
IF OBJECT_ID(N'[dbo].[Users]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Users] (
[Id] INT IDENTITY(1,1) NOT NULL,
[OperatorId] VARCHAR(50) NOT NULL,
[Password] VARCHAR(50) NOT NULL,
[Name] NVARCHAR(50) NULL,
[IsActive] BIT DEFAULT 1 NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [UQ_Users_OperatorId] UNIQUE ([OperatorId])
);
END
GO
-- 기본 테스트 계정 데이터 적재
IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'test')
BEGIN
INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive])
VALUES ('test', 'test', '테스트작업자', 1);
END
GO
IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'admin')
BEGIN
INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive])
VALUES ('admin', 'admin', '시스템관리자', 1);
END
GO
IF NOT EXISTS (SELECT 1 FROM [dbo].[Users] WHERE [OperatorId] = 'su')
BEGIN
INSERT INTO [dbo].[Users] ([OperatorId], [Password], [Name], [IsActive])
VALUES ('su', 'su', '최고권한자', 1);
END
GO
-- ==========================================
-- 2. [Marking] 테이블 생성 (성능 측정 결과 적재)
-- ==========================================
IF OBJECT_ID(N'[dbo].[Marking]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Marking] (
[IC_SN] VARCHAR(50) NOT NULL,
[Marking_QR] NVARCHAR(100) NOT NULL,
[Maker] NVARCHAR(10) NOT NULL,
[Model] NVARCHAR(10) NOT NULL,
[Variant_1] NVARCHAR(10) NOT NULL,
[Variant_2] NVARCHAR(10) NOT NULL,
[Operator] NVARCHAR(10) NOT NULL,
[Production_Date] DATETIME2(0) NOT NULL,
[Line] NVARCHAR(5) NOT NULL,
[Lot_No] NVARCHAR(8) NOT NULL,
[Jig_No] NVARCHAR(10) NOT NULL,
[PT_Vol_1] DECIMAL(3, 2) NOT NULL,
[PT_Vol_2] DECIMAL(3, 2) NOT NULL,
[PT_Vol_3] DECIMAL(3, 2) NOT NULL,
[PT_Current_1] DECIMAL(3, 2) NOT NULL,
[PT_Current_2] DECIMAL(3, 2) NOT NULL,
[PT_Current_3] DECIMAL(3, 2) NOT NULL,
[PT_Resistance_1] DECIMAL(3, 2) NOT NULL,
[PT_Resistance_2] DECIMAL(3, 2) NOT NULL,
[PT_Resistance_3] DECIMAL(3, 2) NOT NULL,
[Result] NVARCHAR(5) NOT NULL,
[Spare_1] NVARCHAR(30) NULL,
[Spare_2] NVARCHAR(30) NULL,
[Spare_3] NVARCHAR(30) NULL,
[Spare_4] NVARCHAR(30) NULL,
CONSTRAINT [PK_Marking] PRIMARY KEY CLUSTERED ([IC_SN] ASC),
CONSTRAINT [UQ_Marking_Marking_QR] UNIQUE ([Marking_QR])
);
-- 시리얼 번호(IC_SN) 조회용 인덱스는 클러스터드 기본키로 지정되었으므로 생략 또는 추가 필요 시 생성
END
GO
-- ==========================================
-- 3. [CheckOperator] 로그인 검증용 저장 프로시저 생성
-- ==========================================
IF OBJECT_ID(N'[dbo].[CheckOperator]', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[CheckOperator];
END
GO
CREATE PROCEDURE [dbo].[CheckOperator]
@Operator VARCHAR(50),
@Password VARCHAR(50),
@ProcessName VARCHAR(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 대소문자 구분 없이 입력 ID와 비밀번호 매칭 여부를 카운트(0 또는 1)로 리턴
SELECT COUNT(*)
FROM [dbo].[Users]
WHERE UPPER([OperatorId]) = UPPER(@Operator)
AND [Password] = @Password
AND [IsActive] = 1;
END;
GO

105
docs/knowledge_base.md

@ -0,0 +1,105 @@
# 성능 검사 모니터링 시스템 기술 지식베이스 (Knowledge Base)
본 문서는 **양산형 테스트 기기 모니터링 시스템**의 소프트웨어 아키텍처, 주요 기능 변경 사항(저항 테스트 및 로그인 프로시저 연동), 그리고 유지보수 및 릴리즈를 위한 가이드를 정리한 지식베이스 문서입니다.
---
## 1. 시스템 개요 및 구성 (System Overview)
본 시스템은 제조 라인 최종 단계에서 제품(전기차 부품 등)의 전기적 성능 계측 데이터(전압, 전류, 저항)를 실시간으로 모니터링하고 최종 합격/불합격(PASS/FAIL) 판정을 내린 후 결과를 데이터베이스에 기록하고 설비 제어 완료 신호를 전달하는 WPF 기반 윈도우 애플리케이션입니다.
### 1.1. 디렉터리 및 주요 파일 구조
- **[Models/](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Models)**
- `Product.cs`: 제품 정보 및 이전 공정(Housing, Calibration, EOL) 이력 정보 관리 모델
- `MeasurementLimits.cs`: 전압, 전류, 저항의 판정 기준 최소/최대 임계치를 저장하고 유효성을 검증하는 모델
- **[Services/](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Services)**
- `MockMeasurer.cs`: 2초 계측 효과 시뮬레이션용 요동치는 노이즈 생성 및 합격/불합격 최종 결정값 반환 모사 서비스
- `MssqlDatabaseService.cs`: 소수점 이하 2자리 반올림 및 최종 판정 값을 MSSQL DB에 적재하기 위한 데이터 액세스 서비스 (로그 출력)
- `MemoryReaderService.cs`: 메모리(바코드 스캐너 연동 등)로부터 제품의 Serial Number를 자동으로 읽어오는 서비스
- `LoginServicesStub.cs`: `Database.ini` 파일로부터 로그인 프로시저 설정을 읽고 DB 저장 프로시저(`StoredProcedure`) 호출 검증을 수행하는 서비스
- **[UI Windows]**
- `App.xaml` / `App.xaml.cs`: 애플리케이션 리소스 및 OnStartup 구동 진입점 정의
- `MainWindow.xaml` / `MainWindow.xaml.cs`: 메인 실시간 모니터링 모듈 (계측 전압/전류/저항 카드, 판정 화면, 이전 이력 그리드 표출)
- `SettingsWindow.xaml` / `SettingsWindow.xaml.cs`: 검사 판정 기준(전압, 전류, 저항 최소/최대값)을 실시간 수정할 수 있는 환경 설정 팝업 창
- `StartupLoginWindow.xaml` / `StartupLoginWindow.xaml.cs`: 작업자 인증 및 모델 configuration 세팅 시작 모달 화면
---
## 2. 세부 개발 및 구현 이력 (Development History)
### 2.1. 저항(Resistance) 테스트 검사 추가
전압과 전류에 국한되었던 기존 시스템에 저항 검사 프로세스를 추가하여 3대 전기 파라미터를 완성했습니다.
- **물리적 개연성 반영:** V = I * R 연계를 고려하여, 전압(4~6V) 및 전류(8~10A) 조건에서 저항 기본 범위를 **0.4Ω ~ 0.8Ω**으로 세팅했습니다.
- **UI 및 환경설정 연동:** 메인 화면에 세 번째 Column으로 `측정 저항 (Resistance)` 카드를 시각적으로 추가하고 설정 창(SettingsWindow)의 세로 크기를 늘려 저항 판정 임계치 입력란을 통합했습니다.
- **판정 결합:** `isFinalPass = isVoltageOk && isCurrentOk && isResistanceOk` 조건을 통해 세 항목 중 하나라도 이탈 시 자동으로 빨간색 텍스트 및 대형 FAIL 판정이 출력되도록 비즈니스 로직을 보강했습니다.
### 2.2. 로그인 저장 프로시저 호출 연동
인라인 SQL 질의 구조를 탈피하여 외부 설정에 명시된 SQL Server 저장 프로시저를 직접 호출하도록 구현했습니다.
- **외부 설정 로딩:** [Database.ini](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Database.ini) 파일을 통해 런타임에 호출할 프로시저명과 오프라인 모드 여부를 읽어옵니다.
```ini
[Login]
Procedure=dbo.CheckOperator
ProcessName=Marking
OfflinePreview=false
```
- **ADO.NET StoredProcedure 연동:** `SqlCommand.CommandType = CommandType.StoredProcedure` 설정을 사용하여 `@Operator`, `@Password`, 그리고 선택적으로 `@ProcessName` 파라미터를 매핑하여 계정 검증 프로시저를 안전하게 가동합니다.
---
## 3. 유지보수 및 릴리즈 가이드 (Release & Maintenance)
### 3.1. 데모용 시뮬레이션 격리 코드 제거 방법 (중요)
로컬 데모 실행을 위해 실제 DB 서버 접속이 실패하더라도 프로시저 성공 여부를 모사하여 로그인을 즉시 통과시키는 임시 시뮬레이션 코드가 구현되어 있습니다.
실제 상용(Production) 배포 시에는 보안 및 실 데이터 검증을 위해 아래의 지침을 따라 **데모 코드를 반드시 삭제**해야 합니다.
1. **[LoginServicesStub.cs](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Services/LoginServicesStub.cs)** 파일을 엽니다.
2. `ExistsAsync` 메서드 내 `catch (Exception ex)` 블록 내부로 이동합니다.
3. 아래의 **DEMO MODE 주석 배너**로 둘러싸인 영역을 완전히 삭제하거나 주석 처리합니다.
```csharp
// ==================== [DEMO MODE START] ====================
// 데모 시뮬레이션용 프로시저 성공 연출 코드
// 상용 릴리즈 시 이 블록은 완전히 제거(삭제)할 수 있습니다.
if (!string.IsNullOrWhiteSpace(_loginSettings.Procedure))
{
System.Diagnostics.Debug.WriteLine(string.Format("[데모 시뮬레이션] 프로시저 '{0}' 호출 모사 (ID: {1}, PW: {2}, Process: {3})",
_loginSettings.Procedure, operatorId, password, _loginSettings.ProcessName));
return IsDefaultAccount(operatorId, password);
}
// ==================== [DEMO MODE END] ====================
```
4. 삭제 후 빌드를 다시 수행하면, DB 통신 실패 시 로그인이 우회되지 않고 정상적으로 "로그인 DB 확인 실패" 경고가 발생하게 됩니다.
### 3.2. 빌드 실행 방법
본 프로젝트는 레거시 .NET Framework 4.7.2 타깃의 WPF 애플리케이션으로, XAML 마크업 빌드가 정상 동작하기 위해서는 Visual Studio 환경의 MSBuild 엔진이 필요합니다.
- **MSBuild 권장 경로:** `C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\MSBuild.exe` (설치 버전에 따라 Insiders, Community, Professional 등으로 달라질 수 있음)
- **빌드 명령어 (터미널):**
```powershell
& "C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\MSBuild.exe" /t:rebuild
```
- **출력 경로:** 빌드 완수 후 `marking_gui\bin\Debug\` 또는 `Release\` 폴더에 실행 바이너리 및 `Database.ini` 파일이 함께 생성됩니다.
---
## 4. 데이터베이스 구성 가이드 (Database Configuration)
본 시스템은 **Microsoft SQL Server 2012** 이상의 버전에 완전히 호환되도록 구성되었습니다. 데이터베이스 구성 시 [docs/database_setup.sql](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/docs/database_setup.sql) 스크립트를 활용할 수 있습니다.
### 4.1. 데이터베이스 및 스키마 구조
- **데이터베이스명:** `MarkingDb`
- **[Users] (작업자 및 비밀번호 관리 테이블):**
- 작업자의 고유 ID(`OperatorId`), 패스워드(`Password`), 이름(`Name`) 및 계정 상태(`IsActive`)를 관리합니다.
- 로그인 조회 속도를 향상시키기 위해 `OperatorId` 컬럼에 UNIQUE 제약 조건을 할당했습니다.
- **[dbo].[Marking] (공정 메타데이터 및 성능 계측값 저장 테이블):**
- 바코드 S/N(`IC_SN`, 기본키)을 키로 하며, 고유 식별을 위해 메타데이터와 날짜 조합의 고유 키 `Marking_QR` (Unique Key)이 생성됩니다.
- 공정 정보(`Maker`, `Model`, `Variant_1`, `Variant_2`, `Operator`, `Production_Date`, `Line`, `Lot_No`, `Jig_No`) 및 최종 판정(`Result`)이 통합 적재됩니다.
- 3단계에 걸친 전압/전류/저항 컬럼(`PT_Vol_1~3`, `PT_Current_1~3`, `PT_Resistance_1~3`)이 존재하며, 현재는 1번 컬럼들에 최종 계측 수치(소수점 2자리 반올림)를 저장하고 2, 3번 컬럼은 `0.00`으로 기본값을 보정하여 저장합니다.
- DB 필드 크기 한계를 초과하여 적재 에러가 나지 않도록, `Line` 컬럼은 최대 5자, `Lot_No` 컬럼은 최대 8자 등으로 자르는(Truncate) 방어적 코드 처리가 수행됩니다.
### 4.2. 로그인 검증 저장 프로시저 ([CheckOperator])
- **프로시저 기능:** 입력된 ID와 패스워드가 활성 상태인 작업자 테이블에 매칭되는지 대소문자 구분 없이 카운팅합니다.
- **매개변수 정보:**
- `@Operator` (VARCHAR(50)): 작업자 ID
- `@Password` (VARCHAR(50)): 비밀번호
- `@ProcessName` (VARCHAR(50)): 호출 프로세스명 (선택사항, 기본값 NULL)
- **리턴:** 매칭되는 활성 사용자가 존재할 시 `1`, 존재하지 않을 시 `0`을 스칼라 결과로 반환합니다.

26
marking_gui/MainWindow.xaml

@ -267,15 +267,16 @@
<RowDefinition Height="3*"/> <RowDefinition Height="3*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 전압/전류 측정값 표시 카드 --> <!-- 전압/전류/저항 측정값 표시 카드 -->
<Grid Grid.Row="0"> <Grid Grid.Row="0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- 전압 --> <!-- 전압 -->
<Border Grid.Column="0" Style="{StaticResource CardBorderStyle}" MinWidth="220" MinHeight="160" Padding="20,10"> <Border Grid.Column="0" Style="{StaticResource CardBorderStyle}" MinWidth="150" MinHeight="160" Padding="15,10">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
@ -294,7 +295,7 @@
</Border> </Border>
<!-- 전류 --> <!-- 전류 -->
<Border Grid.Column="1" Style="{StaticResource CardBorderStyle}" MinWidth="220" MinHeight="160" Padding="20,10"> <Border Grid.Column="1" Style="{StaticResource CardBorderStyle}" MinWidth="150" MinHeight="160" Padding="15,10">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
@ -311,6 +312,25 @@
<TextBlock x:Name="txtCurrentRangeGuide" Grid.Row="2" Text="기준범위: 8.0A ~ 10.0A" FontSize="12" Foreground="#9CA3AF" HorizontalAlignment="Center"/> <TextBlock x:Name="txtCurrentRangeGuide" Grid.Row="2" Text="기준범위: 8.0A ~ 10.0A" FontSize="12" Foreground="#9CA3AF" HorizontalAlignment="Center"/>
</Grid> </Grid>
</Border> </Border>
<!-- 저항 -->
<Border Grid.Column="2" Style="{StaticResource CardBorderStyle}" MinWidth="150" MinHeight="160" Padding="15,10">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="측정 저항 (Resistance)" FontSize="14" Foreground="#6B7280" HorizontalAlignment="Center"/>
<Viewbox Grid.Row="1" Stretch="Uniform" Margin="0,5">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock x:Name="txtResistance" Text="-.--" FontSize="54" FontWeight="Bold" Foreground="#1F2937"/>
<TextBlock Text=" Ω" FontSize="20" FontWeight="Bold" Foreground="#9CA3AF" VerticalAlignment="Bottom" Margin="5,0,0,8"/>
</StackPanel>
</Viewbox>
<TextBlock x:Name="txtResistanceRangeGuide" Grid.Row="2" Text="기준범위: 0.4Ω ~ 0.8Ω" FontSize="12" Foreground="#9CA3AF" HorizontalAlignment="Center"/>
</Grid>
</Border>
</Grid> </Grid>
<!-- 최종 합/불 판정 영역 카드 --> <!-- 최종 합/불 판정 영역 카드 -->

34
marking_gui/MainWindow.xaml.cs

@ -79,6 +79,7 @@ namespace marking_gui
{ {
txtVoltageRangeGuide.Text = string.Format("기준범위: {0:F1}V ~ {1:F1}V", _limits.MinVoltage, _limits.MaxVoltage); txtVoltageRangeGuide.Text = string.Format("기준범위: {0:F1}V ~ {1:F1}V", _limits.MinVoltage, _limits.MaxVoltage);
txtCurrentRangeGuide.Text = string.Format("기준범위: {0:F1}A ~ {1:F1}A", _limits.MinCurrent, _limits.MaxCurrent); txtCurrentRangeGuide.Text = string.Format("기준범위: {0:F1}A ~ {1:F1}A", _limits.MinCurrent, _limits.MaxCurrent);
txtResistanceRangeGuide.Text = string.Format("기준범위: {0:F1}Ω ~ {1:F1}Ω", _limits.MinResistance, _limits.MaxResistance);
} }
private void btnOpenSettings_Click(object sender, RoutedEventArgs e) private void btnOpenSettings_Click(object sender, RoutedEventArgs e)
@ -111,6 +112,8 @@ namespace marking_gui
txtVoltage.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55)); txtVoltage.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55));
txtCurrent.Text = "-.--"; txtCurrent.Text = "-.--";
txtCurrent.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55)); txtCurrent.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55));
txtResistance.Text = "-.--";
txtResistance.Foreground = new SolidColorBrush(Color.FromRgb(31, 41, 55));
txtFinalResult.Text = "대 기 중"; txtFinalResult.Text = "대 기 중";
txtFinalResult.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175)); txtFinalResult.Foreground = new SolidColorBrush(Color.FromRgb(156, 163, 175));
@ -240,30 +243,34 @@ namespace marking_gui
if (_timerTickCount < 10) // 약 2초 동안 측정값 흔들림 효과 연출 if (_timerTickCount < 10) // 약 2초 동안 측정값 흔들림 효과 연출
{ {
double tempVoltage, tempCurrent; double tempVoltage, tempCurrent, tempResistance;
_measurer.GenerateNoiseValues(_limits, out tempVoltage, out tempCurrent); _measurer.GenerateNoiseValues(_limits, out tempVoltage, out tempCurrent, out tempResistance);
txtVoltage.Text = tempVoltage.ToString("F2"); txtVoltage.Text = tempVoltage.ToString("F2");
txtCurrent.Text = tempCurrent.ToString("F2"); txtCurrent.Text = tempCurrent.ToString("F2");
txtResistance.Text = tempResistance.ToString("F2");
} }
else // 최종 측정 완료 및 판정 else // 최종 측정 완료 및 판정
{ {
_measurementTimer.Stop(); _measurementTimer.Stop();
double finalVoltage, finalCurrent; double finalVoltage, finalCurrent, finalResistance;
_measurer.GenerateFinalValues(_limits, out finalVoltage, out finalCurrent); _measurer.GenerateFinalValues(_limits, out finalVoltage, out finalCurrent, out finalResistance);
txtVoltage.Text = finalVoltage.ToString("F2"); txtVoltage.Text = finalVoltage.ToString("F2");
txtCurrent.Text = finalCurrent.ToString("F2"); txtCurrent.Text = finalCurrent.ToString("F2");
txtResistance.Text = finalResistance.ToString("F2");
// 합/불 판정 // 합/불 판정
bool isVoltageOk = finalVoltage >= _limits.MinVoltage && finalVoltage <= _limits.MaxVoltage; bool isVoltageOk = finalVoltage >= _limits.MinVoltage && finalVoltage <= _limits.MaxVoltage;
bool isCurrentOk = finalCurrent >= _limits.MinCurrent && finalCurrent <= _limits.MaxCurrent; bool isCurrentOk = finalCurrent >= _limits.MinCurrent && finalCurrent <= _limits.MaxCurrent;
bool isFinalPass = isVoltageOk && isCurrentOk; bool isResistanceOk = finalResistance >= _limits.MinResistance && finalResistance <= _limits.MaxResistance;
bool isFinalPass = isVoltageOk && isCurrentOk && isResistanceOk;
// 측정값 색상 표시 (통과 시 검은색, 실패 시 빨간색) // 측정값 색상 표시 (통과 시 검은색, 실패 시 빨간색)
txtVoltage.Foreground = isVoltageOk ? new SolidColorBrush(Color.FromRgb(31, 41, 55)) : new SolidColorBrush(Color.FromRgb(239, 68, 68)); txtVoltage.Foreground = isVoltageOk ? new SolidColorBrush(Color.FromRgb(31, 41, 55)) : new SolidColorBrush(Color.FromRgb(239, 68, 68));
txtCurrent.Foreground = isCurrentOk ? new SolidColorBrush(Color.FromRgb(31, 41, 55)) : new SolidColorBrush(Color.FromRgb(239, 68, 68)); txtCurrent.Foreground = isCurrentOk ? new SolidColorBrush(Color.FromRgb(31, 41, 55)) : new SolidColorBrush(Color.FromRgb(239, 68, 68));
txtResistance.Foreground = isResistanceOk ? new SolidColorBrush(Color.FromRgb(31, 41, 55)) : new SolidColorBrush(Color.FromRgb(239, 68, 68));
if (isFinalPass) if (isFinalPass)
{ {
@ -284,11 +291,24 @@ namespace marking_gui
borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(254, 226, 226)); // Light Red borderFinalResult.Background = new SolidColorBrush(Color.FromRgb(254, 226, 226)); // Light Red
} }
// 데이터베이스에 최종 검사 결과 저장 (소수점 2자리 반올림 포맷 반영) // 데이터베이스에 최종 검사 결과 저장 (소수점 2자리 반올림 포맷 반영 및 공정 정보 전달)
try try
{ {
string serial = txtSerial.Text.Trim(); string serial = txtSerial.Text.Trim();
_database.SaveProductResult(serial, finalVoltage, finalCurrent, isFinalPass ? "PASS" : "FAIL"); _database.SaveProductResult(
serial,
_loginInfo.Maker,
_loginInfo.Model,
_loginInfo.Variant1,
_loginInfo.Variant2,
_loginInfo.Operator,
_loginInfo.LineNo,
_loginInfo.LotNo,
_loginInfo.JigNo,
finalVoltage,
finalCurrent,
finalResistance,
isFinalPass ? "PASS" : "FAIL");
// 합격 판정 시 최종 SUCCESS 신호 전달 시뮬레이션 // 합격 판정 시 최종 SUCCESS 신호 전달 시뮬레이션
if (isFinalPass) if (isFinalPass)

14
marking_gui/Models/MeasurementLimits.cs

@ -8,20 +8,24 @@ namespace marking_gui.Models
public double MaxVoltage { get; set; } public double MaxVoltage { get; set; }
public double MinCurrent { get; set; } public double MinCurrent { get; set; }
public double MaxCurrent { get; set; } public double MaxCurrent { get; set; }
public double MinResistance { get; set; }
public double MaxResistance { get; set; }
public MeasurementLimits(double minVoltage = 4.0, double maxVoltage = 6.0, double minCurrent = 8.0, double maxCurrent = 10.0) public MeasurementLimits(double minVoltage = 4.0, double maxVoltage = 6.0, double minCurrent = 8.0, double maxCurrent = 10.0, double minResistance = 0.4, double maxResistance = 0.8)
{ {
MinVoltage = minVoltage; MinVoltage = minVoltage;
MaxVoltage = maxVoltage; MaxVoltage = maxVoltage;
MinCurrent = minCurrent; MinCurrent = minCurrent;
MaxCurrent = maxCurrent; MaxCurrent = maxCurrent;
MinResistance = minResistance;
MaxResistance = maxResistance;
} }
public bool Validate(out string errorMessage) public bool Validate(out string errorMessage)
{ {
errorMessage = string.Empty; errorMessage = string.Empty;
if (MinVoltage < 0 || MaxVoltage < 0 || MinCurrent < 0 || MaxCurrent < 0) if (MinVoltage < 0 || MaxVoltage < 0 || MinCurrent < 0 || MaxCurrent < 0 || MinResistance < 0 || MaxResistance < 0)
{ {
errorMessage = "기준 범위 설정 값은 0 이상의 값이어야 합니다."; errorMessage = "기준 범위 설정 값은 0 이상의 값이어야 합니다.";
return false; return false;
@ -39,6 +43,12 @@ namespace marking_gui.Models
return false; return false;
} }
if (MinResistance >= MaxResistance)
{
errorMessage = "저항 최소값은 최대값보다 작아야 합니다.";
return false;
}
return true; return true;
} }
} }

84
marking_gui/Services/LoginServicesStub.cs

@ -45,6 +45,8 @@ namespace Housing.Services
public class LoginSettings public class LoginSettings
{ {
public bool OfflinePreview { get; set; } = true; // 기본값은 오프라인 테스트 편의를 위해 true public bool OfflinePreview { get; set; } = true; // 기본값은 오프라인 테스트 편의를 위해 true
public string Procedure { get; set; } = string.Empty;
public string ProcessName { get; set; } = string.Empty;
public static LoginSettings Load(string path) public static LoginSettings Load(string path)
{ {
@ -72,6 +74,22 @@ namespace Housing.Services
} }
} }
} }
else if (trimmed.StartsWith("Procedure", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.Procedure = parts[1].Trim();
}
}
else if (trimmed.StartsWith("ProcessName", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.ProcessName = parts[1].Trim();
}
}
} }
} }
} }
@ -251,22 +269,66 @@ namespace Housing.Services
{ {
await conn.OpenAsync(); await conn.OpenAsync();
// 우선 Users 또는 Accounts와 같이 로그인 테이블명이 뭔지 모를 수 있으므로 if (!string.IsNullOrWhiteSpace(_loginSettings.Procedure))
// 쿼리 실패 시 default 계정 검증으로 fallback 하도록 구성
const string query = "SELECT COUNT(*) FROM [Users] WHERE [OperatorId] = @Id AND [Password] = @Pw";
using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Id", operatorId); using (var cmd = new System.Data.SqlClient.SqlCommand(_loginSettings.Procedure, conn))
cmd.Parameters.AddWithValue("@Pw", password); {
cmd.CommandType = System.Data.CommandType.StoredProcedure;
var count = (int)await cmd.ExecuteScalarAsync(); cmd.Parameters.AddWithValue("@Operator", operatorId);
return count > 0; cmd.Parameters.AddWithValue("@Password", password);
if (!string.IsNullOrWhiteSpace(_loginSettings.ProcessName))
{
cmd.Parameters.AddWithValue("@ProcessName", _loginSettings.ProcessName);
}
var resultObj = await cmd.ExecuteScalarAsync();
if (resultObj != null)
{
if (int.TryParse(resultObj.ToString(), out var count))
{
return count > 0;
}
if (bool.TryParse(resultObj.ToString(), out var boolVal))
{
return boolVal;
}
return true;
}
return false;
}
}
else
{
// 우선 Users 또는 Accounts와 같이 로그인 테이블명이 뭔지 모를 수 있으므로
// 쿼리 실패 시 default 계정 검증으로 fallback 하도록 구성
const string query = "SELECT COUNT(*) FROM [Users] WHERE [OperatorId] = @Id AND [Password] = @Pw";
using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@Id", operatorId);
cmd.Parameters.AddWithValue("@Pw", password);
var count = (int)await cmd.ExecuteScalarAsync();
return count > 0;
}
} }
} }
} }
catch catch (Exception ex)
{ {
// DB 연결이나 쿼리 오류 발생 시, 테스트 편의를 위해 test/test 혹은 admin/admin 등 디폴트 계정을 제공 // DB 연결이나 쿼리 오류 발생 시 로그 출력 후 디폴트 계정 검증으로 fallback
System.Diagnostics.Debug.WriteLine($"로그인 검증 중 에러 발생: {ex.Message}");
// ==================== [DEMO MODE START] ====================
// DB가 없고 데모 환경일 때도 프로시저를 호출하려는 동작 및 로그 연출을 수행한 후 강제로 성공 처리
// 상용 릴리즈 시 이 블록은 완전히 제거(삭제)할 수 있습니다.
if (!string.IsNullOrWhiteSpace(_loginSettings.Procedure))
{
System.Diagnostics.Debug.WriteLine(string.Format("[데모 시뮬레이션] 프로시저 '{0}' 호출 모사 (ID: {1}, PW: {2}, Process: {3})",
_loginSettings.Procedure, operatorId, password, _loginSettings.ProcessName));
return IsDefaultAccount(operatorId, password);
}
// ==================== [DEMO MODE END] ====================
return IsDefaultAccount(operatorId, password); return IsDefaultAccount(operatorId, password);
} }
} }

25
marking_gui/Services/MockMeasurer.cs

@ -8,49 +8,66 @@ namespace marking_gui.Services
private readonly Random _random = new Random(); private readonly Random _random = new Random();
// 2초 동안 측정 중 요동칠 가상 데이터 생성 // 2초 동안 측정 중 요동칠 가상 데이터 생성
public void GenerateNoiseValues(MeasurementLimits limits, out double voltage, out double current) public void GenerateNoiseValues(MeasurementLimits limits, out double voltage, out double current, out double resistance)
{ {
double midVoltage = (limits.MinVoltage + limits.MaxVoltage) / 2.0; double midVoltage = (limits.MinVoltage + limits.MaxVoltage) / 2.0;
double midCurrent = (limits.MinCurrent + limits.MaxCurrent) / 2.0; double midCurrent = (limits.MinCurrent + limits.MaxCurrent) / 2.0;
double midResistance = (limits.MinResistance + limits.MaxResistance) / 2.0;
// 설정 범위 폭에 맞추어 ±50% 범위의 노이즈 생성 // 설정 범위 폭에 맞추어 ±50% 범위의 노이즈 생성
double voltageSpan = limits.MaxVoltage - limits.MinVoltage; double voltageSpan = limits.MaxVoltage - limits.MinVoltage;
double currentSpan = limits.MaxCurrent - limits.MinCurrent; double currentSpan = limits.MaxCurrent - limits.MinCurrent;
double resistanceSpan = limits.MaxResistance - limits.MinResistance;
voltage = midVoltage + (_random.NextDouble() * voltageSpan - (voltageSpan / 2.0)); voltage = midVoltage + (_random.NextDouble() * voltageSpan - (voltageSpan / 2.0));
current = midCurrent + (_random.NextDouble() * currentSpan - (currentSpan / 2.0)); current = midCurrent + (_random.NextDouble() * currentSpan - (currentSpan / 2.0));
resistance = midResistance + (_random.NextDouble() * resistanceSpan - (resistanceSpan / 2.0));
} }
// 최종 합/불 판정 측정값 결정 (80% 확률로 합격 범위, 20% 확률로 불합격 범위 값 생성) // 최종 합/불 판정 측정값 결정 (80% 확률로 합격 범위, 20% 확률로 불합격 범위 값 생성)
public void GenerateFinalValues(MeasurementLimits limits, out double voltage, out double current) public void GenerateFinalValues(MeasurementLimits limits, out double voltage, out double current, out double resistance)
{ {
double voltageSpan = limits.MaxVoltage - limits.MinVoltage; double voltageSpan = limits.MaxVoltage - limits.MinVoltage;
double currentSpan = limits.MaxCurrent - limits.MinCurrent; double currentSpan = limits.MaxCurrent - limits.MinCurrent;
double resistanceSpan = limits.MaxResistance - limits.MinResistance;
if (_random.Next(0, 10) < 8) if (_random.Next(0, 10) < 8)
{ {
// 합격 범위 내의 가상 측정값 생성 // 합격 범위 내의 가상 측정값 생성
voltage = limits.MinVoltage + (_random.NextDouble() * voltageSpan); voltage = limits.MinVoltage + (_random.NextDouble() * voltageSpan);
current = limits.MinCurrent + (_random.NextDouble() * currentSpan); current = limits.MinCurrent + (_random.NextDouble() * currentSpan);
resistance = limits.MinResistance + (_random.NextDouble() * resistanceSpan);
} }
else else
{ {
// 불합격 범위 유도 // 불합격 범위 유도
if (_random.Next(0, 2) == 0) int errorType = _random.Next(0, 3);
if (errorType == 0)
{ {
// 전압 에러 유도 (범위 폭의 50% 정도 벗어나도록 가/감산하여 음수 방지) // 전압 에러 유도 (범위 폭의 50% 정도 벗어나도록 가/감산하여 음수 방지)
voltage = _random.Next(0, 2) == 0 voltage = _random.Next(0, 2) == 0
? (limits.MinVoltage - (voltageSpan * 0.5)) ? (limits.MinVoltage - (voltageSpan * 0.5))
: (limits.MaxVoltage + (voltageSpan * 0.5)); : (limits.MaxVoltage + (voltageSpan * 0.5));
current = limits.MinCurrent + (_random.NextDouble() * currentSpan); current = limits.MinCurrent + (_random.NextDouble() * currentSpan);
resistance = limits.MinResistance + (_random.NextDouble() * resistanceSpan);
} }
else else if (errorType == 1)
{ {
// 전류 에러 유도 // 전류 에러 유도
voltage = limits.MinVoltage + (_random.NextDouble() * voltageSpan); voltage = limits.MinVoltage + (_random.NextDouble() * voltageSpan);
current = _random.Next(0, 2) == 0 current = _random.Next(0, 2) == 0
? (limits.MinCurrent - (currentSpan * 0.5)) ? (limits.MinCurrent - (currentSpan * 0.5))
: (limits.MaxCurrent + (currentSpan * 0.5)); : (limits.MaxCurrent + (currentSpan * 0.5));
resistance = limits.MinResistance + (_random.NextDouble() * resistanceSpan);
}
else
{
// 저항 에러 유도
voltage = limits.MinVoltage + (_random.NextDouble() * voltageSpan);
current = limits.MinCurrent + (_random.NextDouble() * currentSpan);
resistance = _random.Next(0, 2) == 0
? (limits.MinResistance - (resistanceSpan * 0.5))
: (limits.MaxResistance + (resistanceSpan * 0.5));
} }
} }
} }

102
marking_gui/Services/MssqlDatabaseService.cs

@ -12,15 +12,38 @@ namespace marking_gui.Services
{ {
try try
{ {
// App.config 에서 연결 문자열을 로드하여 준비해둡니다. // AppDomain.CurrentDomain.BaseDirectory 에서 Database.ini 로드 시도
var connSettings = ConfigurationManager.ConnectionStrings["MssqlConnection"]; string iniPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Database.ini");
if (connSettings != null) if (System.IO.File.Exists(iniPath))
{ {
_connectionString = connSettings.ConnectionString; var lines = System.IO.File.ReadAllLines(iniPath);
foreach (var line in lines)
{
var trimmed = line.Trim();
if (trimmed.StartsWith("ConnectionString", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
_connectionString = parts[1].Trim();
break;
}
}
}
} }
else
// Database.ini 에 없을 경우 App.config 백업 사용
if (string.IsNullOrEmpty(_connectionString))
{ {
_connectionString = "Server=localhost;Database=MarkingDb;Trusted_Connection=True;"; var connSettings = ConfigurationManager.ConnectionStrings["MssqlConnection"];
if (connSettings != null)
{
_connectionString = connSettings.ConnectionString;
}
else
{
_connectionString = "Server=localhost;Database=MarkingDb;Trusted_Connection=True;";
}
} }
} }
catch (Exception ex) catch (Exception ex)
@ -64,23 +87,73 @@ namespace marking_gui.Services
/// 최종 성능 검출 값을 데이터베이스에 저장합니다. /// 최종 성능 검출 값을 데이터베이스에 저장합니다.
/// 전압과 전류 수치는 3,2 포맷(DECIMAL(3, 2) 등)에 대응하기 위해 소수점 이하 2자리로 반올림하여 처리합니다. /// 전압과 전류 수치는 3,2 포맷(DECIMAL(3, 2) 등)에 대응하기 위해 소수점 이하 2자리로 반올림하여 처리합니다.
/// </summary> /// </summary>
public bool SaveProductResult(string serial, double voltage, double current, string result) public bool SaveProductResult(
string serial,
string maker,
string model,
string variant1,
string variant2,
string operatorId,
string line,
string lotNo,
string jigNo,
double voltage,
double current,
double resistance,
string result)
{ {
// 전압과 전류를 소수점 이하 2자리(3,2 포맷 규격)로 반올림 처리 // 전압과 전류, 저항을 소수점 이하 2자리(3,2 포맷 규격)로 반올림 처리
decimal roundedVoltage = Math.Round((decimal)voltage, 2); decimal roundedVoltage = Math.Round((decimal)voltage, 2);
decimal roundedCurrent = Math.Round((decimal)current, 2); decimal roundedCurrent = Math.Round((decimal)current, 2);
decimal roundedResistance = Math.Round((decimal)resistance, 2);
// DB 컬럼 길이 한계에 맞춰서 문자열 안전하게 자르기 (Truncate)
string safeMaker = string.IsNullOrEmpty(maker) ? "" : (maker.Length > 10 ? maker.Substring(0, 10) : maker);
string safeModel = string.IsNullOrEmpty(model) ? "" : (model.Length > 10 ? model.Substring(0, 10) : model);
string safeVariant1 = string.IsNullOrEmpty(variant1) ? "" : (variant1.Length > 10 ? variant1.Substring(0, 10) : variant1);
string safeVariant2 = string.IsNullOrEmpty(variant2) ? "" : (variant2.Length > 10 ? variant2.Substring(0, 10) : variant2);
string safeOperator = string.IsNullOrEmpty(operatorId) ? "" : (operatorId.Length > 10 ? operatorId.Substring(0, 10) : operatorId);
string safeLine = string.IsNullOrEmpty(line) ? "" : (line.Length > 5 ? line.Substring(0, 5) : line);
string safeLotNo = string.IsNullOrEmpty(lotNo) ? "" : (lotNo.Length > 8 ? lotNo.Substring(0, 8) : lotNo);
string safeJigNo = string.IsNullOrEmpty(jigNo) ? "" : (jigNo.Length > 10 ? jigNo.Substring(0, 10) : jigNo);
DateTime prodDate = DateTime.Now;
// QR Code 조합 포맷 생성 (Maker;Model;Variant_1;Variant_2;Operator;Production_Date)
string markingQr = string.Format("{0};{1};{2};{3};{4};{5}",
safeMaker, safeModel, safeVariant1, safeVariant2, safeOperator, prodDate.ToString("yyyyMMddHHmmss"));
if (markingQr.Length > 100)
{
markingQr = markingQr.Substring(0, 100);
}
// TODO: 실제 MSSQL DB 적재를 위해 SQL 명령문 구현 템플릿 준비 // TODO: 실제 MSSQL DB 적재를 위해 SQL 명령문 구현 템플릿 준비
/* /*
string query = "INSERT INTO ProductResults (SerialNumber, Voltage, Current, FinalResult, TestTime) VALUES (@Serial, @Voltage, @Current, @Result, GETDATE())"; string query = @"INSERT INTO [dbo].[Marking]
([IC_SN], [Marking_QR], [Maker], [Model], [Variant_1], [Variant_2], [Operator], [Production_Date], [Line], [Lot_No], [Jig_No],
[PT_Vol_1], [PT_Vol_2], [PT_Vol_3], [PT_Current_1], [PT_Current_2], [PT_Current_3], [PT_Resistance_1], [PT_Resistance_2], [PT_Resistance_3], [Result])
VALUES
(@Serial, @Qr, @Maker, @Model, @Var1, @Var2, @Operator, @ProdDate, @Line, @LotNo, @JigNo,
@Vol1, 0.00, 0.00, @Cur1, 0.00, 0.00, @Res1, 0.00, 0.00, @Result)";
using (var conn = new System.Data.SqlClient.SqlConnection(_connectionString)) using (var conn = new System.Data.SqlClient.SqlConnection(_connectionString))
{ {
using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn)) using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Serial", serial); cmd.Parameters.AddWithValue("@Serial", serial);
// DECIMAL(3,2) 포맷 매핑 파라미터 (Precision=3, Scale=2) cmd.Parameters.AddWithValue("@Qr", markingQr);
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Voltage", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedVoltage }); cmd.Parameters.AddWithValue("@Maker", safeMaker);
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Current", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedCurrent }); cmd.Parameters.AddWithValue("@Model", safeModel);
cmd.Parameters.AddWithValue("@Var1", safeVariant1);
cmd.Parameters.AddWithValue("@Var2", safeVariant2);
cmd.Parameters.AddWithValue("@Operator", safeOperator);
cmd.Parameters.AddWithValue("@ProdDate", prodDate);
cmd.Parameters.AddWithValue("@Line", safeLine);
cmd.Parameters.AddWithValue("@LotNo", safeLotNo);
cmd.Parameters.AddWithValue("@JigNo", safeJigNo);
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Vol1", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedVoltage });
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Cur1", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedCurrent });
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Res1", System.Data.SqlDbType.Decimal) { Precision = 3, Scale = 2, Value = roundedResistance });
cmd.Parameters.AddWithValue("@Result", result); cmd.Parameters.AddWithValue("@Result", result);
conn.Open(); conn.Open();
@ -90,8 +163,9 @@ namespace marking_gui.Services
*/ */
// 데모 단계 로그 출력 및 성공 반환 // 데모 단계 로그 출력 및 성공 반환
System.Diagnostics.Debug.WriteLine(string.Format("[DB 저장 로그] S/N: {0} | 전압: {1:F2}V | 전류: {2:F2}A | 결과: {3}", System.Diagnostics.Debug.WriteLine(string.Format(
serial, roundedVoltage, roundedCurrent, result)); "[DB 저장 로그] S/N: {0} | QR: {1} | Maker: {2} | Model: {3} | Line: {4} | LotNo: {5} | Vol_1: {6:F2}V | Cur_1: {7:F2}A | Res_1: {8:F2}Ω | 결과: {9}",
serial, markingQr, safeMaker, safeModel, safeLine, safeLotNo, roundedVoltage, roundedCurrent, roundedResistance, result));
return true; return true;
} }

18
marking_gui/SettingsWindow.xaml

@ -1,7 +1,7 @@
<Window x:Class="marking_gui.SettingsWindow" <Window x:Class="marking_gui.SettingsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="기준 범위 설정" Height="250" Width="350" Title="기준 범위 설정" Height="290" Width="350"
WindowStartupLocation="CenterOwner" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" ResizeMode="NoResize"
Background="#F3F4F6" ShowInTaskbar="False"> Background="#F3F4F6" ShowInTaskbar="False">
<Window.Resources> <Window.Resources>
@ -44,14 +44,16 @@
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Text="🔧 검사 판정 기준 범위 변경" FontSize="16" FontWeight="Bold" Foreground="#1F2937" Margin="0,0,0,15"/> <TextBlock Text="🔧 검사 판정 기준 범위 변경" FontSize="16" FontWeight="Bold" Foreground="#1F2937" Margin="0,0,0,15"/>
<Grid Grid.Row="1"> <Grid Grid.Row="1">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="10"/> <RowDefinition Height="10"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="10"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/> <ColumnDefinition Width="80"/>
@ -59,18 +61,24 @@
<ColumnDefinition Width="20"/> <ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- 전압 설정 --> <!-- 전압 설정 -->
<TextBlock Grid.Row="0" Grid.Column="0" Text="전압 (V):" FontSize="14" VerticalAlignment="Center" Foreground="#4B5563" FontWeight="SemiBold"/> <TextBlock Grid.Row="0" Grid.Column="0" Text="전압 (V):" FontSize="14" VerticalAlignment="Center" Foreground="#4B5563" FontWeight="SemiBold"/>
<TextBox x:Name="txtMinVoltage" Grid.Row="0" Grid.Column="1" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/> <TextBox x:Name="txtMinVoltage" Grid.Row="0" Grid.Column="1" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
<TextBlock Grid.Row="0" Grid.Column="2" Text="~" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Grid.Row="0" Grid.Column="2" Text="~" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="txtMaxVoltage" Grid.Row="0" Grid.Column="3" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/> <TextBox x:Name="txtMaxVoltage" Grid.Row="0" Grid.Column="3" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
<!-- 전류 설정 --> <!-- 전류 설정 -->
<TextBlock Grid.Row="2" Grid.Column="0" Text="전류 (A):" FontSize="14" VerticalAlignment="Center" Foreground="#4B5563" FontWeight="SemiBold"/> <TextBlock Grid.Row="2" Grid.Column="0" Text="전류 (A):" FontSize="14" VerticalAlignment="Center" Foreground="#4B5563" FontWeight="SemiBold"/>
<TextBox x:Name="txtMinCurrent" Grid.Row="2" Grid.Column="1" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/> <TextBox x:Name="txtMinCurrent" Grid.Row="2" Grid.Column="1" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="~" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/> <TextBlock Grid.Row="2" Grid.Column="2" Text="~" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="txtMaxCurrent" Grid.Row="2" Grid.Column="3" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/> <TextBox x:Name="txtMaxCurrent" Grid.Row="2" Grid.Column="3" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
<!-- 저항 설정 -->
<TextBlock Grid.Row="4" Grid.Column="0" Text="저항 (Ω):" FontSize="14" VerticalAlignment="Center" Foreground="#4B5563" FontWeight="SemiBold"/>
<TextBox x:Name="txtMinResistance" Grid.Row="4" Grid.Column="1" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
<TextBlock Grid.Row="4" Grid.Column="2" Text="~" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="txtMaxResistance" Grid.Row="4" Grid.Column="3" FontSize="14" Padding="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="#D1D5DB" BorderThickness="1"/>
</Grid> </Grid>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,15,0,0"> <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,15,0,0">

12
marking_gui/SettingsWindow.xaml.cs

@ -16,28 +16,32 @@ namespace marking_gui
InitializeComponent(); InitializeComponent();
// 원본의 데이터 무결성을 유지하기 위해 임시 복제하여 사용 // 원본의 데이터 무결성을 유지하기 위해 임시 복제하여 사용
Limits = new MeasurementLimits(limits.MinVoltage, limits.MaxVoltage, limits.MinCurrent, limits.MaxCurrent); Limits = new MeasurementLimits(limits.MinVoltage, limits.MaxVoltage, limits.MinCurrent, limits.MaxCurrent, limits.MinResistance, limits.MaxResistance);
txtMinVoltage.Text = Limits.MinVoltage.ToString("F1"); txtMinVoltage.Text = Limits.MinVoltage.ToString("F1");
txtMaxVoltage.Text = Limits.MaxVoltage.ToString("F1"); txtMaxVoltage.Text = Limits.MaxVoltage.ToString("F1");
txtMinCurrent.Text = Limits.MinCurrent.ToString("F1"); txtMinCurrent.Text = Limits.MinCurrent.ToString("F1");
txtMaxCurrent.Text = Limits.MaxCurrent.ToString("F1"); txtMaxCurrent.Text = Limits.MaxCurrent.ToString("F1");
txtMinResistance.Text = Limits.MinResistance.ToString("F1");
txtMaxResistance.Text = Limits.MaxResistance.ToString("F1");
} }
private void btnSave_Click(object sender, RoutedEventArgs e) private void btnSave_Click(object sender, RoutedEventArgs e)
{ {
double minV, maxV, minC, maxC; double minV, maxV, minC, maxC, minR, maxR;
if (!double.TryParse(txtMinVoltage.Text, out minV) || if (!double.TryParse(txtMinVoltage.Text, out minV) ||
!double.TryParse(txtMaxVoltage.Text, out maxV) || !double.TryParse(txtMaxVoltage.Text, out maxV) ||
!double.TryParse(txtMinCurrent.Text, out minC) || !double.TryParse(txtMinCurrent.Text, out minC) ||
!double.TryParse(txtMaxCurrent.Text, out maxC)) !double.TryParse(txtMaxCurrent.Text, out maxC) ||
!double.TryParse(txtMinResistance.Text, out minR) ||
!double.TryParse(txtMaxResistance.Text, out maxR))
{ {
MessageBox.Show("기준 범위 설정 값은 올바른 숫자 형식이어야 합니다.", "설정 오류", MessageBoxButton.OK, MessageBoxImage.Warning); MessageBox.Show("기준 범위 설정 값은 올바른 숫자 형식이어야 합니다.", "설정 오류", MessageBoxButton.OK, MessageBoxImage.Warning);
return; return;
} }
MeasurementLimits tempLimits = new MeasurementLimits(minV, maxV, minC, maxC); MeasurementLimits tempLimits = new MeasurementLimits(minV, maxV, minC, maxC, minR, maxR);
string errorMessage; string errorMessage;
if (!tempLimits.Validate(out errorMessage)) if (!tempLimits.Validate(out errorMessage))
{ {

BIN
marking_gui/bin/Debug/marking_gui.exe

Binary file not shown.

BIN
marking_gui/bin/Debug/marking_gui.pdb

Binary file not shown.

3
marking_gui/marking_gui.csproj

@ -117,6 +117,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
<None Include="Database.ini">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

BIN
marking_gui/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache

Binary file not shown.

BIN
marking_gui/obj/Debug/MainWindow.baml

Binary file not shown.

54
marking_gui/obj/Debug/MainWindow.g.cs

@ -1,4 +1,4 @@
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "78353F577CF95121F4374AAAC541156B6A45BBD586BC828F32989335C29F1F19" #pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "AD4A4C06745EFEC612E5A40E8825C3B16CE481532342C19F0C009E1B56E7E5F4"
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다. // 이 코드는 도구를 사용하여 생성되었습니다.
@ -137,7 +137,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 288 "..\..\MainWindow.xaml" #line 289 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltage; internal System.Windows.Controls.TextBlock txtVoltage;
@ -145,7 +145,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 292 "..\..\MainWindow.xaml" #line 293 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltageRangeGuide; internal System.Windows.Controls.TextBlock txtVoltageRangeGuide;
@ -153,7 +153,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 307 "..\..\MainWindow.xaml" #line 308 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrent; internal System.Windows.Controls.TextBlock txtCurrent;
@ -161,7 +161,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 311 "..\..\MainWindow.xaml" #line 312 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrentRangeGuide; internal System.Windows.Controls.TextBlock txtCurrentRangeGuide;
@ -169,7 +169,23 @@ namespace marking_gui {
#line hidden #line hidden
#line 317 "..\..\MainWindow.xaml" #line 327 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtResistance;
#line default
#line hidden
#line 331 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtResistanceRangeGuide;
#line default
#line hidden
#line 337 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border borderFinalResult; internal System.Windows.Controls.Border borderFinalResult;
@ -177,7 +193,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 326 "..\..\MainWindow.xaml" #line 346 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalResult; internal System.Windows.Controls.TextBlock txtFinalResult;
@ -185,7 +201,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 327 "..\..\MainWindow.xaml" #line 347 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalSerial; internal System.Windows.Controls.TextBlock txtFinalSerial;
@ -193,7 +209,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 337 "..\..\MainWindow.xaml" #line 357 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnStart; internal System.Windows.Controls.Button btnStart;
@ -201,7 +217,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 346 "..\..\MainWindow.xaml" #line 366 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnOpenSettings; internal System.Windows.Controls.Button btnOpenSettings;
@ -331,27 +347,33 @@ namespace marking_gui {
this.txtCurrentRangeGuide = ((System.Windows.Controls.TextBlock)(target)); this.txtCurrentRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 21: case 21:
this.borderFinalResult = ((System.Windows.Controls.Border)(target)); this.txtResistance = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 22: case 22:
this.txtFinalResult = ((System.Windows.Controls.TextBlock)(target)); this.txtResistanceRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 23: case 23:
this.txtFinalSerial = ((System.Windows.Controls.TextBlock)(target)); this.borderFinalResult = ((System.Windows.Controls.Border)(target));
return; return;
case 24: case 24:
this.txtFinalResult = ((System.Windows.Controls.TextBlock)(target));
return;
case 25:
this.txtFinalSerial = ((System.Windows.Controls.TextBlock)(target));
return;
case 26:
this.btnStart = ((System.Windows.Controls.Button)(target)); this.btnStart = ((System.Windows.Controls.Button)(target));
#line 338 "..\..\MainWindow.xaml" #line 358 "..\..\MainWindow.xaml"
this.btnStart.Click += new System.Windows.RoutedEventHandler(this.btnStart_Click); this.btnStart.Click += new System.Windows.RoutedEventHandler(this.btnStart_Click);
#line default #line default
#line hidden #line hidden
return; return;
case 25: case 27:
this.btnOpenSettings = ((System.Windows.Controls.Button)(target)); this.btnOpenSettings = ((System.Windows.Controls.Button)(target));
#line 347 "..\..\MainWindow.xaml" #line 367 "..\..\MainWindow.xaml"
this.btnOpenSettings.Click += new System.Windows.RoutedEventHandler(this.btnOpenSettings_Click); this.btnOpenSettings.Click += new System.Windows.RoutedEventHandler(this.btnOpenSettings_Click);
#line default #line default

142
marking_gui/obj/Debug/MainWindow.g.i.cs

@ -1,4 +1,4 @@
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "60B18A2C8EC6850BAA7CCDBE87ACA2C0E97BE83EC5737A82EA9755C4685A0C2C" #pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "AD4A4C06745EFEC612E5A40E8825C3B16CE481532342C19F0C009E1B56E7E5F4"
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다. // 이 코드는 도구를 사용하여 생성되었습니다.
@ -89,7 +89,23 @@ namespace marking_gui {
#line hidden #line hidden
#line 188 "..\..\MainWindow.xaml" #line 170 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnMaximize;
#line default
#line hidden
#line 171 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtMaximizeIcon;
#line default
#line hidden
#line 201 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtSerial; internal System.Windows.Controls.TextBox txtSerial;
@ -97,7 +113,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 219 "..\..\MainWindow.xaml" #line 232 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevHousing; internal System.Windows.Controls.TextBlock txtPrevHousing;
@ -105,7 +121,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 230 "..\..\MainWindow.xaml" #line 243 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevCal; internal System.Windows.Controls.TextBlock txtPrevCal;
@ -113,7 +129,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 241 "..\..\MainWindow.xaml" #line 254 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtPrevEol; internal System.Windows.Controls.TextBlock txtPrevEol;
@ -121,7 +137,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 275 "..\..\MainWindow.xaml" #line 289 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltage; internal System.Windows.Controls.TextBlock txtVoltage;
@ -129,7 +145,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 279 "..\..\MainWindow.xaml" #line 293 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtVoltageRangeGuide; internal System.Windows.Controls.TextBlock txtVoltageRangeGuide;
@ -137,7 +153,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 294 "..\..\MainWindow.xaml" #line 308 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrent; internal System.Windows.Controls.TextBlock txtCurrent;
@ -145,7 +161,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 298 "..\..\MainWindow.xaml" #line 312 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtCurrentRangeGuide; internal System.Windows.Controls.TextBlock txtCurrentRangeGuide;
@ -153,7 +169,23 @@ namespace marking_gui {
#line hidden #line hidden
#line 304 "..\..\MainWindow.xaml" #line 327 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtResistance;
#line default
#line hidden
#line 331 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtResistanceRangeGuide;
#line default
#line hidden
#line 337 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border borderFinalResult; internal System.Windows.Controls.Border borderFinalResult;
@ -161,7 +193,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 313 "..\..\MainWindow.xaml" #line 346 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalResult; internal System.Windows.Controls.TextBlock txtFinalResult;
@ -169,7 +201,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 314 "..\..\MainWindow.xaml" #line 347 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock txtFinalSerial; internal System.Windows.Controls.TextBlock txtFinalSerial;
@ -177,7 +209,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 324 "..\..\MainWindow.xaml" #line 357 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnStart; internal System.Windows.Controls.Button btnStart;
@ -185,7 +217,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 333 "..\..\MainWindow.xaml" #line 366 "..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnOpenSettings; internal System.Windows.Controls.Button btnOpenSettings;
@ -231,21 +263,29 @@ namespace marking_gui {
#line hidden #line hidden
return; return;
case 2: case 2:
this.txtCurrentTime = ((System.Windows.Controls.TextBlock)(target));
#line 129 "..\..\MainWindow.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.TopBar_MouseLeftButtonDown);
#line default
#line hidden
return; return;
case 3: case 3:
this.txtSystemStatus = ((System.Windows.Controls.TextBlock)(target)); this.txtCurrentTime = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 4: case 4:
this.txtOperatorInfo = ((System.Windows.Controls.TextBlock)(target)); this.txtSystemStatus = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 5: case 5:
this.txtModelInfo = ((System.Windows.Controls.TextBlock)(target)); this.txtOperatorInfo = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 6: case 6:
this.txtLineInfo = ((System.Windows.Controls.TextBlock)(target)); this.txtModelInfo = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 7: case 7:
this.txtLineInfo = ((System.Windows.Controls.TextBlock)(target));
return;
case 8:
this.btnLogout = ((System.Windows.Controls.Button)(target)); this.btnLogout = ((System.Windows.Controls.Button)(target));
#line 163 "..\..\MainWindow.xaml" #line 163 "..\..\MainWindow.xaml"
@ -254,52 +294,86 @@ namespace marking_gui {
#line default #line default
#line hidden #line hidden
return; return;
case 8: case 9:
#line 167 "..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.BtnMinimize_Click);
#line default
#line hidden
return;
case 10:
this.btnMaximize = ((System.Windows.Controls.Button)(target));
#line 170 "..\..\MainWindow.xaml"
this.btnMaximize.Click += new System.Windows.RoutedEventHandler(this.BtnMaximize_Click);
#line default
#line hidden
return;
case 11:
this.txtMaximizeIcon = ((System.Windows.Controls.TextBlock)(target));
return;
case 12:
#line 173 "..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.BtnClose_Click);
#line default
#line hidden
return;
case 13:
this.txtSerial = ((System.Windows.Controls.TextBox)(target)); this.txtSerial = ((System.Windows.Controls.TextBox)(target));
return; return;
case 9: case 14:
this.txtPrevHousing = ((System.Windows.Controls.TextBlock)(target)); this.txtPrevHousing = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 10: case 15:
this.txtPrevCal = ((System.Windows.Controls.TextBlock)(target)); this.txtPrevCal = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 11: case 16:
this.txtPrevEol = ((System.Windows.Controls.TextBlock)(target)); this.txtPrevEol = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 12: case 17:
this.txtVoltage = ((System.Windows.Controls.TextBlock)(target)); this.txtVoltage = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 13: case 18:
this.txtVoltageRangeGuide = ((System.Windows.Controls.TextBlock)(target)); this.txtVoltageRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 14: case 19:
this.txtCurrent = ((System.Windows.Controls.TextBlock)(target)); this.txtCurrent = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 15: case 20:
this.txtCurrentRangeGuide = ((System.Windows.Controls.TextBlock)(target)); this.txtCurrentRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 16: case 21:
this.txtResistance = ((System.Windows.Controls.TextBlock)(target));
return;
case 22:
this.txtResistanceRangeGuide = ((System.Windows.Controls.TextBlock)(target));
return;
case 23:
this.borderFinalResult = ((System.Windows.Controls.Border)(target)); this.borderFinalResult = ((System.Windows.Controls.Border)(target));
return; return;
case 17: case 24:
this.txtFinalResult = ((System.Windows.Controls.TextBlock)(target)); this.txtFinalResult = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 18: case 25:
this.txtFinalSerial = ((System.Windows.Controls.TextBlock)(target)); this.txtFinalSerial = ((System.Windows.Controls.TextBlock)(target));
return; return;
case 19: case 26:
this.btnStart = ((System.Windows.Controls.Button)(target)); this.btnStart = ((System.Windows.Controls.Button)(target));
#line 325 "..\..\MainWindow.xaml" #line 358 "..\..\MainWindow.xaml"
this.btnStart.Click += new System.Windows.RoutedEventHandler(this.btnStart_Click); this.btnStart.Click += new System.Windows.RoutedEventHandler(this.btnStart_Click);
#line default #line default
#line hidden #line hidden
return; return;
case 20: case 27:
this.btnOpenSettings = ((System.Windows.Controls.Button)(target)); this.btnOpenSettings = ((System.Windows.Controls.Button)(target));
#line 334 "..\..\MainWindow.xaml" #line 367 "..\..\MainWindow.xaml"
this.btnOpenSettings.Click += new System.Windows.RoutedEventHandler(this.btnOpenSettings_Click); this.btnOpenSettings.Click += new System.Windows.RoutedEventHandler(this.btnOpenSettings_Click);
#line default #line default

BIN
marking_gui/obj/Debug/SettingsWindow.baml

Binary file not shown.

42
marking_gui/obj/Debug/SettingsWindow.g.cs

@ -1,4 +1,4 @@
#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "33961FE01569FF3D7FDD670A40AE2AB5450B6E4881EBA8EABD242BBB6EA0F36D" #pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "3B54A611CD6FF472DF4AA312133DE53F7310470DDD5247B79B8465A5C8B8AF60"
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다. // 이 코드는 도구를 사용하여 생성되었습니다.
@ -40,7 +40,7 @@ namespace marking_gui {
public partial class SettingsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector { public partial class SettingsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
#line 65 "..\..\SettingsWindow.xaml" #line 67 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinVoltage; internal System.Windows.Controls.TextBox txtMinVoltage;
@ -48,7 +48,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 67 "..\..\SettingsWindow.xaml" #line 69 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxVoltage; internal System.Windows.Controls.TextBox txtMaxVoltage;
@ -56,7 +56,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 71 "..\..\SettingsWindow.xaml" #line 73 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinCurrent; internal System.Windows.Controls.TextBox txtMinCurrent;
@ -64,7 +64,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 73 "..\..\SettingsWindow.xaml" #line 75 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxCurrent; internal System.Windows.Controls.TextBox txtMaxCurrent;
@ -72,7 +72,23 @@ namespace marking_gui {
#line hidden #line hidden
#line 77 "..\..\SettingsWindow.xaml" #line 79 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinResistance;
#line default
#line hidden
#line 81 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxResistance;
#line default
#line hidden
#line 85 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnSave; internal System.Windows.Controls.Button btnSave;
@ -80,7 +96,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 78 "..\..\SettingsWindow.xaml" #line 86 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnCancel; internal System.Windows.Controls.Button btnCancel;
@ -130,18 +146,24 @@ namespace marking_gui {
this.txtMaxCurrent = ((System.Windows.Controls.TextBox)(target)); this.txtMaxCurrent = ((System.Windows.Controls.TextBox)(target));
return; return;
case 5: case 5:
this.txtMinResistance = ((System.Windows.Controls.TextBox)(target));
return;
case 6:
this.txtMaxResistance = ((System.Windows.Controls.TextBox)(target));
return;
case 7:
this.btnSave = ((System.Windows.Controls.Button)(target)); this.btnSave = ((System.Windows.Controls.Button)(target));
#line 77 "..\..\SettingsWindow.xaml" #line 85 "..\..\SettingsWindow.xaml"
this.btnSave.Click += new System.Windows.RoutedEventHandler(this.btnSave_Click); this.btnSave.Click += new System.Windows.RoutedEventHandler(this.btnSave_Click);
#line default #line default
#line hidden #line hidden
return; return;
case 6: case 8:
this.btnCancel = ((System.Windows.Controls.Button)(target)); this.btnCancel = ((System.Windows.Controls.Button)(target));
#line 78 "..\..\SettingsWindow.xaml" #line 86 "..\..\SettingsWindow.xaml"
this.btnCancel.Click += new System.Windows.RoutedEventHandler(this.btnCancel_Click); this.btnCancel.Click += new System.Windows.RoutedEventHandler(this.btnCancel_Click);
#line default #line default

42
marking_gui/obj/Debug/SettingsWindow.g.i.cs

@ -1,4 +1,4 @@
#pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "33961FE01569FF3D7FDD670A40AE2AB5450B6E4881EBA8EABD242BBB6EA0F36D" #pragma checksum "..\..\SettingsWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "3B54A611CD6FF472DF4AA312133DE53F7310470DDD5247B79B8465A5C8B8AF60"
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다. // 이 코드는 도구를 사용하여 생성되었습니다.
@ -40,7 +40,7 @@ namespace marking_gui {
public partial class SettingsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector { public partial class SettingsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
#line 65 "..\..\SettingsWindow.xaml" #line 67 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinVoltage; internal System.Windows.Controls.TextBox txtMinVoltage;
@ -48,7 +48,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 67 "..\..\SettingsWindow.xaml" #line 69 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxVoltage; internal System.Windows.Controls.TextBox txtMaxVoltage;
@ -56,7 +56,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 71 "..\..\SettingsWindow.xaml" #line 73 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinCurrent; internal System.Windows.Controls.TextBox txtMinCurrent;
@ -64,7 +64,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 73 "..\..\SettingsWindow.xaml" #line 75 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxCurrent; internal System.Windows.Controls.TextBox txtMaxCurrent;
@ -72,7 +72,23 @@ namespace marking_gui {
#line hidden #line hidden
#line 77 "..\..\SettingsWindow.xaml" #line 79 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMinResistance;
#line default
#line hidden
#line 81 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox txtMaxResistance;
#line default
#line hidden
#line 85 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnSave; internal System.Windows.Controls.Button btnSave;
@ -80,7 +96,7 @@ namespace marking_gui {
#line hidden #line hidden
#line 78 "..\..\SettingsWindow.xaml" #line 86 "..\..\SettingsWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button btnCancel; internal System.Windows.Controls.Button btnCancel;
@ -130,18 +146,24 @@ namespace marking_gui {
this.txtMaxCurrent = ((System.Windows.Controls.TextBox)(target)); this.txtMaxCurrent = ((System.Windows.Controls.TextBox)(target));
return; return;
case 5: case 5:
this.txtMinResistance = ((System.Windows.Controls.TextBox)(target));
return;
case 6:
this.txtMaxResistance = ((System.Windows.Controls.TextBox)(target));
return;
case 7:
this.btnSave = ((System.Windows.Controls.Button)(target)); this.btnSave = ((System.Windows.Controls.Button)(target));
#line 77 "..\..\SettingsWindow.xaml" #line 85 "..\..\SettingsWindow.xaml"
this.btnSave.Click += new System.Windows.RoutedEventHandler(this.btnSave_Click); this.btnSave.Click += new System.Windows.RoutedEventHandler(this.btnSave_Click);
#line default #line default
#line hidden #line hidden
return; return;
case 6: case 8:
this.btnCancel = ((System.Windows.Controls.Button)(target)); this.btnCancel = ((System.Windows.Controls.Button)(target));
#line 78 "..\..\SettingsWindow.xaml" #line 86 "..\..\SettingsWindow.xaml"
this.btnCancel.Click += new System.Windows.RoutedEventHandler(this.btnCancel_Click); this.btnCancel.Click += new System.Windows.RoutedEventHandler(this.btnCancel_Click);
#line default #line default

1
marking_gui/obj/Debug/marking_gui.csproj.FileListAbsolute.txt

@ -38,3 +38,4 @@ C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\MainWindow.bam
C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.g.resources C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.g.resources
C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.exe C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.exe
C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.pdb C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\obj\Debug\marking_gui.pdb
C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\bin\Debug\Database.ini

BIN
marking_gui/obj/Debug/marking_gui.exe

Binary file not shown.

BIN
marking_gui/obj/Debug/marking_gui.g.resources

Binary file not shown.

BIN
marking_gui/obj/Debug/marking_gui.pdb

Binary file not shown.

2
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 C:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\App.xaml
3-1210742192 3-1210742192
13735417974 141215079075
14-207034072 14-207034072
MainWindow.xaml;SettingsWindow.xaml;StartupLoginWindow.xaml; MainWindow.xaml;SettingsWindow.xaml;StartupLoginWindow.xaml;

2
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;; FC:\Users\COMPUTER1\Desktop\mobi\marking_gui\marking_gui\MainWindow.xaml;;

Loading…
Cancel
Save