Browse Source

동시 시험 로직 변경

main
최승민 1 month ago
parent
commit
8897a1ea30
  1. 2
      leak_test_project/Properties/PublishProfiles/FolderProfile.pubxml.user
  2. 11
      leak_test_project/Services/TestProcessService.cs
  3. 2
      ob/05_Implementation_History.md

2
leak_test_project/Properties/PublishProfiles/FolderProfile.pubxml.user

@ -2,7 +2,7 @@
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. --> <!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<History>True|2026-07-01T01:45:31.8793742Z||;True|2026-07-01T10:35:19.6809435+09:00||;True|2026-07-01T10:35:00.9643317+09:00||;True|2026-07-01T10:32:31.0544609+09:00||;True|2026-07-01T10:25:33.3316628+09:00||;True|2026-07-01T10:23:02.2841540+09:00||;True|2026-07-01T10:19:59.2997126+09:00||;False|2026-07-01T10:17:21.1004186+09:00||;False|2026-06-30T10:32:04.0883654+09:00||;True|2026-06-30T10:24:54.7745409+09:00||;True|2026-06-25T14:28:15.0458856+09:00||;True|2026-06-25T13:57:36.3233571+09:00||;True|2026-06-25T12:56:04.8828587+09:00||;</History> <History>True|2026-07-01T02:40:58.7303122Z||;True|2026-07-01T10:52:14.8628105+09:00||;True|2026-07-01T10:45:31.8793742+09:00||;True|2026-07-01T10:35:19.6809435+09:00||;True|2026-07-01T10:35:00.9643317+09:00||;True|2026-07-01T10:32:31.0544609+09:00||;True|2026-07-01T10:25:33.3316628+09:00||;True|2026-07-01T10:23:02.2841540+09:00||;True|2026-07-01T10:19:59.2997126+09:00||;False|2026-07-01T10:17:21.1004186+09:00||;False|2026-06-30T10:32:04.0883654+09:00||;True|2026-06-30T10:24:54.7745409+09:00||;True|2026-06-25T14:28:15.0458856+09:00||;True|2026-06-25T13:57:36.3233571+09:00||;True|2026-06-25T12:56:04.8828587+09:00||;</History>
<LastFailureDetails /> <LastFailureDetails />
</PropertyGroup> </PropertyGroup>
</Project> </Project>

11
leak_test_project/Services/TestProcessService.cs

@ -138,12 +138,13 @@ namespace leak_test_project.Services
/// </summary> /// </summary>
public async System.Threading.Tasks.Task ExecuteSensorTestAsync(int testIndex) public async System.Threading.Tasks.Task ExecuteSensorTestAsync(int testIndex)
{ {
if (_testLock.CurrentCount == 0) bool lockAcquired = _testLock.Wait(0);
if (!lockAcquired)
{ {
ResultClearRequested?.Invoke(this, testIndex); ResultClearRequested?.Invoke(this, testIndex);
NotifyProgress(testIndex, "대기중", "LightYellow"); NotifyProgress(testIndex, "대기중", "LightYellow");
}
await _testLock.WaitAsync(); await _testLock.WaitAsync();
}
try try
{ {
_activeTestIndex = testIndex; _activeTestIndex = testIndex;
@ -227,12 +228,14 @@ namespace leak_test_project.Services
if (!shouldStart) continue; if (!shouldStart) continue;
// 순차 실행을 위한 락 획득 (좌/우 동시 테스트 방지) // 순차 실행을 위한 락 획득 (좌/우 동시 테스트 방지)
if (_testLock.CurrentCount == 0) // 순차 실행을 위한 락 획득 (좌/우 동시 테스트 방지)
bool lockAcquired = _testLock.Wait(0);
if (!lockAcquired)
{ {
ResultClearRequested?.Invoke(this, testIndex); ResultClearRequested?.Invoke(this, testIndex);
NotifyProgress(testIndex, "대기중", "LightYellow"); NotifyProgress(testIndex, "대기중", "LightYellow");
}
_testLock.Wait(); _testLock.Wait();
}
try try
{ {
_activeTestIndex = testIndex; _activeTestIndex = testIndex;

2
ob/05_Implementation_History.md

@ -146,3 +146,5 @@
12. **DB 기반 PCB 바코드 조회 및 검사 제어 연동**: 센서 판독 완료 후 `dbo.Housing_Assembly` 테이블에서 `IC_SN`을 조건 키로 매칭되는 `PCB_Barcode`를 조회(5초 연결 타임아웃)해오는 1.5단계 프로세스를 신설했습니다. 조회 중 예외가 발생하거나 일치하는 바코드가 없는 경우, 강제 물리 NG 신호 출력 및 로그 적재 후 시험 동작을 즉시 중단(Skip)하도록 비즈니스 흐름을 최적화하고 오프라인 미리보기 시에는 `PCB_Barcode`에 상수 문자열인 **`"testPCBbarcode"`** 값을 주입하도록 구현하였습니다. 12. **DB 기반 PCB 바코드 조회 및 검사 제어 연동**: 센서 판독 완료 후 `dbo.Housing_Assembly` 테이블에서 `IC_SN`을 조건 키로 매칭되는 `PCB_Barcode`를 조회(5초 연결 타임아웃)해오는 1.5단계 프로세스를 신설했습니다. 조회 중 예외가 발생하거나 일치하는 바코드가 없는 경우, 강제 물리 NG 신호 출력 및 로그 적재 후 시험 동작을 즉시 중단(Skip)하도록 비즈니스 흐름을 최적화하고 오프라인 미리보기 시에는 `PCB_Barcode`에 상수 문자열인 **`"testPCBbarcode"`** 값을 주입하도록 구현하였습니다.
13. **메인 화면 제품 식별자 2개 행 분리 및 레이아웃 최적화**: 메인 화면인 `HomeView.xaml`의 좌/우 채널 모니터링 카드 내부 제품 ID 라벨에 대해 가로 텍스트 잘림 현상을 근본적으로 해결하기 위해, 기존 단일 `"ID"` 행을 **`"IC_SN"`**과 **`"PCB_Barcode"`**의 **2개 독립된 행(Rows)으로 완전히 분리**하고 각 값을 별개 라인에 실시간 바인딩 처리(`HomeViewModel.cs`)했습니다. 이를 통해 고정 헤더 가로폭을 늘리지 않고 기존의 깔끔한 가로폭 비율인 **`130`**을 유지하여 레이아웃의 완성도와 가독성을 보장했습니다. 또한 영문 `"PCB_Barcode"` 라벨 텍스트의 좌우 여백을 개별 마진 **`Margin="6,0"`**으로 미세 조율하여, 윈도우의 가로 크기를 최소 사양인 **`1150`**으로 줄인 창모드 상태에서도 단 1픽셀의 잘림 없이 모든 텍스트가 명확하게 표현되도록 방어했습니다. 13. **메인 화면 제품 식별자 2개 행 분리 및 레이아웃 최적화**: 메인 화면인 `HomeView.xaml`의 좌/우 채널 모니터링 카드 내부 제품 ID 라벨에 대해 가로 텍스트 잘림 현상을 근본적으로 해결하기 위해, 기존 단일 `"ID"` 행을 **`"IC_SN"`**과 **`"PCB_Barcode"`**의 **2개 독립된 행(Rows)으로 완전히 분리**하고 각 값을 별개 라인에 실시간 바인딩 처리(`HomeViewModel.cs`)했습니다. 이를 통해 고정 헤더 가로폭을 늘리지 않고 기존의 깔끔한 가로폭 비율인 **`130`**을 유지하여 레이아웃의 완성도와 가독성을 보장했습니다. 또한 영문 `"PCB_Barcode"` 라벨 텍스트의 좌우 여백을 개별 마진 **`Margin="6,0"`**으로 미세 조율하여, 윈도우의 가로 크기를 최소 사양인 **`1150`**으로 줄인 창모드 상태에서도 단 1픽셀의 잘림 없이 모든 텍스트가 명확하게 표현되도록 방어했습니다.
14. **배포 설정 파일 통합 및 C드라이브 배포 자동화**: 클릭원스 배포 시 파편화될 수 있는 설정 데이터의 안전한 관리를 위해, `LoginOptions.json``LoginHistory.json` 파일의 생성 및 조회 경로를 `Database.ini` 파일이 위치하는 공용 설정 폴더인 **`C:\ProgramData\LeakTest`**로 전면 일원화 조치(`StartupLoginWindow.xaml.cs`)했습니다. 추가로, 설치 프로그램 배포 패키지가 C드라이브 고정 위치에 생성되도록 `ClickOnceProfile.pubxml``PublishUrl`**`C:\LeakTest\`**로 변경하고, `leak_test_project.csproj` 내에 `PostPublishCopy` MSBuild target을 추가하여 클릭원스 배포 빌드 시 패키지 파일 일체가 `C:\LeakTest`로 자동 생성 및 이동(복사)되도록 빌드 자동화를 완벽 구현하였습니다. 14. **배포 설정 파일 통합 및 C드라이브 배포 자동화**: 클릭원스 배포 시 파편화될 수 있는 설정 데이터의 안전한 관리를 위해, `LoginOptions.json``LoginHistory.json` 파일의 생성 및 조회 경로를 `Database.ini` 파일이 위치하는 공용 설정 폴더인 **`C:\ProgramData\LeakTest`**로 전면 일원화 조치(`StartupLoginWindow.xaml.cs`)했습니다. 추가로, 설치 프로그램 배포 패키지가 C드라이브 고정 위치에 생성되도록 `ClickOnceProfile.pubxml``PublishUrl`**`C:\LeakTest\`**로 변경하고, `leak_test_project.csproj` 내에 `PostPublishCopy` MSBuild target을 추가하여 클릭원스 배포 빌드 시 패키지 파일 일체가 `C:\LeakTest`로 자동 생성 및 이동(복사)되도록 빌드 자동화를 완벽 구현하였습니다.
15. **대기 상태 진입 시 화면 초기화 및 상태 표시 개선**: 좌/우 채널에 신호가 거의 동시에 투입되어 한쪽 채널이 대기 상태에 들어갈 때, 레이스 컨디션으로 인해 이전 검사 결과가 화면에 그대로 남아있고 "대기중" 상태가 표시되지 않는 문제를 해결했습니다. `_testLock.CurrentCount == 0` 조건을 확인하는 대신 `_testLock.Wait(0)`을 이용하여 락 획득 가능 여부를 원자적(Atomic)으로 체크한 뒤, 획득에 실패했을 때만 화면을 비우고(`ResultClearRequested`) "대기중" 상태(`NotifyProgress`)로 전환 후 락을 대기하도록 로직을 개선했습니다.

Loading…
Cancel
Save