fix: 현장 확정 PLC맵 정합 — bit15=Weld_01 Ready 명칭 정정 + 확정 DeviceMap

- bit15(0x0F): 임시명 MODE_CHANGE → 확정명 WELD_READY_REQ/ACK (Weld_01 Ready, Resume 트리거 겸용)
- 원래 Ready(0x10) → WELD_TRIGGER_REQ/ACK (용접 발진). 주소 불변=동작 동일, 명칭만 정정
- 양극 _P(0x73) 미러 제거(현장 단일블록), 공통 enum 동기화
- 수정: PTOP/공통 PLCController.Address.cs, SeqAutoRunPTOP/ComponentWeld/Prismatic/TestRun/WaitWeldOrChangePage, UCMainAutoRunViewModel
- 현장 확정 PLC DeviceMap CSV 4종 추가, 작업일지 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
노도연 2026-06-21 17:23:41 +09:00
parent 1a92f19364
commit e28f915b44
13 changed files with 483 additions and 82 deletions

View File

@ -0,0 +1,97 @@
Device No , Comment ENG , Comment KOR
M70500,Live Status,Live Status
M70501,Auto Status,Auto Status
M70502,Auto Request,Auto Request
M70503,Manual Request,Manual Request
M70504,Light_ALStatus,Light_ALStatus
M70505,Heavy_ALStatus,Heavy_ALStatus
M70506,Door Interlok,Door Interlok
M70507,EMO Status,EMO Status
M70508,Page_CHGRequest,Page_CHGRequest
M70509,Recipe_CHGRequest,Recipe_CHGRequest
M70510,,
M70511,,
M70512,,
M70513,,
M70514,,
M70515,Weld_01 ReadyREQ,Weld_01 ReadyREQ
M70516,Weld_01 TriggerREQ,Weld_01 TriggerREQ
M70517,Weld_01 Wait,Weld_01 Wait
M70518,Weld_01 Comp_ACK,Weld_01 Comp_ACK
M70519,,
M70520,,
M70521,,
M70522,,
M70523,,
M70524,,
M70525,,
M70526,,
M70527,,
M70528,,
M70529,,
M70530,,
M70531,,
M70532,,
M70533,,
M70534,,
M70535,,
M70536,,
M70537,,
M70538,,
M70539,,
M70540,,
M70541,,
M70542,,
M70543,,
M70544,,
M70545,,
M70546,,
M70547,,
M70548,,
M70549,,
M70550,,
M70551,,
M70552,,
M70553,,
M70554,,
M70555,,
M70556,,
M70557,,
M70558,,
M70559,,
M70560,,
M70561,,
M70562,,
M70563,,
M70564,,
M70565,,
M70566,,
M70567,,
M70568,,
M70569,,
M70570,,
M70571,,
M70572,,
M70573,,
M70574,,
M70575,,
M70576,,
M70577,,
M70578,,
M70579,,
M70580,,
M70581,,
M70582,,
M70583,,
M70584,,
M70585,,
M70586,,
M70587,,
M70588,,
M70589,,
M70590,,
M70591,,
M70592,,
M70593,,
M70594,,
M70595,,
1 Device No Comment ENG Comment KOR
2 M70500 Live Status Live Status
3 M70501 Auto Status Auto Status
4 M70502 Auto Request Auto Request
5 M70503 Manual Request Manual Request
6 M70504 Light_ALStatus Light_ALStatus
7 M70505 Heavy_ALStatus Heavy_ALStatus
8 M70506 Door Interlok Door Interlok
9 M70507 EMO Status EMO Status
10 M70508 Page_CHGRequest Page_CHGRequest
11 M70509 Recipe_CHGRequest Recipe_CHGRequest
12 M70510
13 M70511
14 M70512
15 M70513
16 M70514
17 M70515 Weld_01 ReadyREQ Weld_01 ReadyREQ
18 M70516 Weld_01 TriggerREQ Weld_01 TriggerREQ
19 M70517 Weld_01 Wait Weld_01 Wait
20 M70518 Weld_01 Comp_ACK Weld_01 Comp_ACK
21 M70519
22 M70520
23 M70521
24 M70522
25 M70523
26 M70524
27 M70525
28 M70526
29 M70527
30 M70528
31 M70529
32 M70530
33 M70531
34 M70532
35 M70533
36 M70534
37 M70535
38 M70536
39 M70537
40 M70538
41 M70539
42 M70540
43 M70541
44 M70542
45 M70543
46 M70544
47 M70545
48 M70546
49 M70547
50 M70548
51 M70549
52 M70550
53 M70551
54 M70552
55 M70553
56 M70554
57 M70555
58 M70556
59 M70557
60 M70558
61 M70559
62 M70560
63 M70561
64 M70562
65 M70563
66 M70564
67 M70565
68 M70566
69 M70567
70 M70568
71 M70569
72 M70570
73 M70571
74 M70572
75 M70573
76 M70574
77 M70575
78 M70576
79 M70577
80 M70578
81 M70579
82 M70580
83 M70581
84 M70582
85 M70583
86 M70584
87 M70585
88 M70586
89 M70587
90 M70588
91 M70589
92 M70590
93 M70591
94 M70592
95 M70593
96 M70594
97 M70595

View File

@ -0,0 +1,97 @@
Device No , Comment ENG , Comment KOR
M70000,Live Status,Live Status
M70001,Auto Status,Auto Status
M70002,Auto Complete,Auto Complete
M70003,Manual Complete,Manual Complete
M70004,Light_ALStatus,Light_ALStatus
M70005,Heavy_ALStatus,Heavy_ALStatus
M70006,,
M70007,,
M70008,Page_CHGComplete,Page_CHGComplete
M70009,Recipe_CHGComplete,Recipe_CHGComplete
M70010,,
M70011,,
M70012,,
M70013,,
M70014,,
M70015,Weld_01 ReadyACK,Weld_01 ReadyACK
M70016,Weld_01 TriggerACK,Weld_01 TriggerACK
M70017,Weld_01 Busy,Weld_01 Busy
M70018,Weld_01 Complete,Weld_01 Complete
M70019,,
M70020,,
M70021,,
M70022,,
M70023,,
M70024,,
M70025,,
M70026,,
M70027,,
M70028,,
M70029,,
M70030,,
M70031,,
M70032,,
M70033,,
M70034,,
M70035,,
M70036,,
M70037,,
M70038,,
M70039,,
M70040,,
M70041,,
M70042,,
M70043,,
M70044,,
M70045,,
M70046,,
M70047,,
M70048,,
M70049,,
M70050,,
M70051,,
M70052,,
M70053,,
M70054,,
M70055,,
M70056,,
M70057,,
M70058,,
M70059,,
M70060,,
M70061,,
M70062,,
M70063,,
M70064,,
M70065,,
M70066,,
M70067,,
M70068,,
M70069,,
M70070,,
M70071,,
M70072,,
M70073,,
M70074,,
M70075,,
M70076,,
M70077,,
M70078,,
M70079,,
M70080,,
M70081,,
M70082,,
M70083,,
M70084,,
M70085,,
M70086,,
M70087,,
M70088,,
M70089,,
M70090,,
M70091,,
M70092,,
M70093,,
M70094,,
M70095,,
1 Device No Comment ENG Comment KOR
2 M70000 Live Status Live Status
3 M70001 Auto Status Auto Status
4 M70002 Auto Complete Auto Complete
5 M70003 Manual Complete Manual Complete
6 M70004 Light_ALStatus Light_ALStatus
7 M70005 Heavy_ALStatus Heavy_ALStatus
8 M70006
9 M70007
10 M70008 Page_CHGComplete Page_CHGComplete
11 M70009 Recipe_CHGComplete Recipe_CHGComplete
12 M70010
13 M70011
14 M70012
15 M70013
16 M70014
17 M70015 Weld_01 ReadyACK Weld_01 ReadyACK
18 M70016 Weld_01 TriggerACK Weld_01 TriggerACK
19 M70017 Weld_01 Busy Weld_01 Busy
20 M70018 Weld_01 Complete Weld_01 Complete
21 M70019
22 M70020
23 M70021
24 M70022
25 M70023
26 M70024
27 M70025
28 M70026
29 M70027
30 M70028
31 M70029
32 M70030
33 M70031
34 M70032
35 M70033
36 M70034
37 M70035
38 M70036
39 M70037
40 M70038
41 M70039
42 M70040
43 M70041
44 M70042
45 M70043
46 M70044
47 M70045
48 M70046
49 M70047
50 M70048
51 M70049
52 M70050
53 M70051
54 M70052
55 M70053
56 M70054
57 M70055
58 M70056
59 M70057
60 M70058
61 M70059
62 M70060
63 M70061
64 M70062
65 M70063
66 M70064
67 M70065
68 M70066
69 M70067
70 M70068
71 M70069
72 M70070
73 M70071
74 M70072
75 M70073
76 M70074
77 M70075
78 M70076
79 M70077
80 M70078
81 M70079
82 M70080
83 M70081
84 M70082
85 M70083
86 M70084
87 M70085
88 M70086
89 M70087
90 M70088
91 M70089
92 M70090
93 M70091
94 M70092
95 M70093
96 M70094
97 M70095

View File

@ -0,0 +1,101 @@
Device No , Comment ENG , Comment KOR
D70500,PLCErrorCode,PLCErrorCode
D70501,PLC_PageNo,PLC_PageNo
D70502,PLC_RecpieNo,PLC_RecpieNo
D70503,,
D70504,,
D70505,,
D70506,,
D70507,,
D70508,,
D70509,,
D70510,Head_Theta_Position,Head_Theta_Position
D70511,,
D70512,,
D70513,,
D70514,,
D70515,,
D70516,,
D70517,,
D70518,,
D70519,,
D70520,,
D70521,,
D70522,,
D70523,,
D70524,,
D70525,,
D70526,,
D70527,,
D70528,,
D70529,,
D70530,,
D70531,,
D70532,,
D70533,,
D70534,,
D70535,,
D70536,,
D70537,,
D70538,,
D70539,,
D70540,,
D70541,,
D70542,,
D70543,,
D70544,,
D70545,,
D70546,,
D70547,,
D70548,,
D70549,,
D70550,,
D70551,,
D70552,,
D70553,,
D70554,,
D70555,,
D70556,,
D70557,,
D70558,,
D70559,,
D70560,,
D70561,,
D70562,,
D70563,,
D70564,,
D70565,,
D70566,,
D70567,,
D70568,,
D70569,,
D70570,,
D70571,,
D70572,,
D70573,,
D70574,,
D70575,,
D70576,,
D70577,,
D70578,,
D70579,,
D70580,,
D70581,,
D70582,,
D70583,,
D70584,,
D70581,,
D70582,,
D70583,,
D70584,,
D70581,,
D70582,,
D70583,,
D70581,,
D70582,,
D70583,,
D70584,,
D70581,,
D70582,,
D70581,,
D70582,,
1 Device No Comment ENG Comment KOR
2 D70500 PLCErrorCode PLCErrorCode
3 D70501 PLC_PageNo PLC_PageNo
4 D70502 PLC_RecpieNo PLC_RecpieNo
5 D70503
6 D70504
7 D70505
8 D70506
9 D70507
10 D70508
11 D70509
12 D70510 Head_Theta_Position Head_Theta_Position
13 D70511
14 D70512
15 D70513
16 D70514
17 D70515
18 D70516
19 D70517
20 D70518
21 D70519
22 D70520
23 D70521
24 D70522
25 D70523
26 D70524
27 D70525
28 D70526
29 D70527
30 D70528
31 D70529
32 D70530
33 D70531
34 D70532
35 D70533
36 D70534
37 D70535
38 D70536
39 D70537
40 D70538
41 D70539
42 D70540
43 D70541
44 D70542
45 D70543
46 D70544
47 D70545
48 D70546
49 D70547
50 D70548
51 D70549
52 D70550
53 D70551
54 D70552
55 D70553
56 D70554
57 D70555
58 D70556
59 D70557
60 D70558
61 D70559
62 D70560
63 D70561
64 D70562
65 D70563
66 D70564
67 D70565
68 D70566
69 D70567
70 D70568
71 D70569
72 D70570
73 D70571
74 D70572
75 D70573
76 D70574
77 D70575
78 D70576
79 D70577
80 D70578
81 D70579
82 D70580
83 D70581
84 D70582
85 D70583
86 D70584
87 D70581
88 D70582
89 D70583
90 D70584
91 D70581
92 D70582
93 D70583
94 D70581
95 D70582
96 D70583
97 D70584
98 D70581
99 D70582
100 D70581
101 D70582

View File

@ -0,0 +1,101 @@
Device No , Comment ENG , Comment KOR
D70000,PC_ErrorCode,PC_ErrorCode
D70001,PC_Page No,PC_Page No
D70002,PC_Recipe No,PC_Recipe No
D70003,,
D70004,,
D70005,,
D70006,,
D70007,,
D70008,,
D70009,,
D70010,,
D70011,,
D70012,,
D70013,,
D70014,,
D70015,,
D70016,,
D70017,,
D70018,,
D70019,,
D70020,,
D70021,,
D70022,,
D70023,,
D70024,,
D70025,,
D70026,,
D70027,,
D70028,,
D70029,,
D70030,,
D70031,,
D70032,,
D70033,,
D70034,,
D70035,,
D70036,,
D70037,,
D70038,,
D70039,,
D70040,,
D70041,,
D70042,,
D70043,,
D70044,,
D70045,,
D70046,,
D70047,,
D70048,,
D70049,,
D70050,,
D70051,,
D70052,,
D70053,,
D70054,,
D70055,,
D70056,,
D70057,,
D70058,,
D70059,,
D70060,,
D70061,,
D70062,,
D70063,,
D70064,,
D70065,,
D70066,,
D70067,,
D70068,,
D70069,,
D70070,,
D70071,,
D70072,,
D70073,,
D70074,,
D70075,,
D70076,,
D70077,,
D70078,,
D70079,,
D70080,,
D70081,,
D70082,,
D70083,,
D70084,,
D70085,,
D70086,,
D70087,,
D70088,,
D70089,,
D70090,,
D70091,,
D70092,,
D70093,,
D70094,,
D70095,,
D70096,,
D70097,,
D70098,,
D70099,,
1 Device No Comment ENG Comment KOR
2 D70000 PC_ErrorCode PC_ErrorCode
3 D70001 PC_Page No PC_Page No
4 D70002 PC_Recipe No PC_Recipe No
5 D70003
6 D70004
7 D70005
8 D70006
9 D70007
10 D70008
11 D70009
12 D70010
13 D70011
14 D70012
15 D70013
16 D70014
17 D70015
18 D70016
19 D70017
20 D70018
21 D70019
22 D70020
23 D70021
24 D70022
25 D70023
26 D70024
27 D70025
28 D70026
29 D70027
30 D70028
31 D70029
32 D70030
33 D70031
34 D70032
35 D70033
36 D70034
37 D70035
38 D70036
39 D70037
40 D70038
41 D70039
42 D70040
43 D70041
44 D70042
45 D70043
46 D70044
47 D70045
48 D70046
49 D70047
50 D70048
51 D70049
52 D70050
53 D70051
54 D70052
55 D70053
56 D70054
57 D70055
58 D70056
59 D70057
60 D70058
61 D70059
62 D70060
63 D70061
64 D70062
65 D70063
66 D70064
67 D70065
68 D70066
69 D70067
70 D70068
71 D70069
72 D70070
73 D70071
74 D70072
75 D70073
76 D70074
77 D70075
78 D70076
79 D70077
80 D70078
81 D70079
82 D70080
83 D70081
84 D70082
85 D70083
86 D70084
87 D70085
88 D70086
89 D70087
90 D70088
91 D70089
92 D70090
93 D70091
94 D70092
95 D70093
96 D70094
97 D70095
98 D70096
99 D70097
100 D70098
101 D70099

View File

@ -25,9 +25,9 @@ namespace ILSOS_PrismaticRD_PTOP.Device
// 260618: M70509 Recipe 변경 요청 (구 PLC_RMS_USED, RMS 미사용으로 폐기 후 재정의)
PLC_RECIPE_CHANGE_REQ = 0x09,
// 0x0A ~ 0x0E
// 260621: M70515 bit15 모드전환 요청 (Recipe/Page 확인 팝업 → Auto→Manual 잠시 전환)
PLC_MODE_CHANGE = 0x0F,
PLC_WELD_READY_REQ = 0x10,
// 260621: M70515 확정 = Weld_01 Ready (가변용접 시 PLC ON → Recipe/Page 확인 팝업 + Resume 트리거)
PLC_WELD_READY_REQ = 0x0F,
PLC_WELD_TRIGGER_REQ = 0x10, // M70516 (구 Ready)
PLC_WELD_WAIT = 0x11,
PLC_WELD_COMPLETE_ACK = 0x12,
// 0x13 ~ 0x1D
@ -43,9 +43,7 @@ namespace ILSOS_PrismaticRD_PTOP.Device
PLC_DOOR_INTERLOCK_P = 0x6A,
PLC_EMO_STATUS_P = 0x6B,
// 0x6D
// 0x6F ~ 0x72
// 260621: M70615 bit15 모드전환 요청 (양극, 음극 PLC_MODE_CHANGE 0x0F 미러)
PLC_MODE_CHANGE_P = 0x73,
// 0x6F ~ 0x73
PLC_WELD_P_READY_REQ = 0x74,
PLC_WELD_P_WAIT = 0x75,
PLC_WELD_P_COMP_ACK = 0x76,
@ -65,9 +63,9 @@ namespace ILSOS_PrismaticRD_PTOP.Device
// 260618: M70009 Recipe 변경 완료 응답 (구 PC_EMPTY01, 미사용 → 재정의)
PC_RECIPE_CHANGE_COMPLETE = 0x09,
// 0x0A ~ 0x0E
// 260621: M70015 bit15 모드전환 ACK (PC→PLC, #2 AutoRun 복귀 시 전달)
PC_MODE_CHANGE = 0x0F,
PC_WELD_READY_ACK = 0x10,
// 260621: M70015 확정 = Weld_01 ReadyACK (Resume ACK/run 신호)
PC_WELD_READY_ACK = 0x0F,
PC_WELD_TRIGGER_ACK = 0x10, // M70016 (구 ReadyACK)
PC_WELD_BUSY = 0x11,
PC_WELD_COMPLETE = 0x12,
@ -80,8 +78,6 @@ namespace ILSOS_PrismaticRD_PTOP.Device
PC_LIGHT_ALARM_STATUS_P = 0x68,
PC_HEAVY_ALARM_STATUS_P = 0x69,
// 260621: M70115 bit15 모드전환 ACK (양극, 음극 PC_MODE_CHANGE 0x0F 미러, #2 복귀 시 전달)
PC_MODE_CHANGE_P = 0x73,
PC_WELD_P_READY_REQ = 0x74,
PC_WELD_P_BUSY = 0x75,
PC_WELD_P_COMP_ACK = 0x76,

View File

@ -62,12 +62,12 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
const string SEQ_ENTER = "SEQ_ENTER"; // inputParam 으로 받자.
const string SEQ_CHECK_INIT_CONDITION = "Check Init Condition"; // Check Init Condition
const string SEQ_GET_PLC_WELD_READY_REQ_ON = "Get PLC Weld Ready Request On"; // PLC 용접 준비 요청 수신
const string SEQ_GET_PLC_WELD_TRIGGER_REQ_ON = "Get PLC Weld Ready Request On"; // PLC 용접 준비 요청 수신
const string SEQ_CHECK_CELL_INFO_RECEIVE = "Check Cell Info Receive"; // 셀 정보 수신 확인
const string SEQ_GET_PARAMS_RECEIVE_CELL_INFO_SEQ = "Get Sequence Result (ReceiveCellInfo Seq)";
const string SEQ_DO_ID_RECEIVE_CELL_INFO_SEQ = "Process (ReceiveCellInfo Seq)";
const string SEQ_SET_PARAMS_RECEIVE_CELL_INFO_SEQ = "Set Sequence Param (ReceiveCellInfo Seq)";
const string SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL = "Set PC Weld Ready Ack On With Cell"; // 셀과 함께 PC 용접 준비 확인
const string SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL = "Set PC Weld Ready Ack On With Cell"; // 셀과 함께 PC 용접 준비 확인
const string SEQ_MEASURE_CELL_POSITION = "Measure Cell Position"; // 셀 위치 측정
const string SEQ_SET_MIL_MODEL_FINDER_SEQ = "Set MIL Model Finder Seq"; // MIL 모델 찾기 시퀀스 설정
const string SEQ_DO_ID_MIL_MODEL_FINDER_SEQ = "Process (MIL Model Finder Seq)"; // MIL 모델 찾기 시퀀스 처리
@ -76,8 +76,8 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
const string SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ = "Set Params Upload Welding List Seq"; // 용접 리스트 업로드 파라미터 설정
const string SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ = "Process (Upload Welding List Seq)"; // 용접 리스트 업로드 시퀀스 처리
const string SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ = "Get Result Upload Welding List Seq"; // 용접 리스트 업로드 결과 가져오기
const string SEQ_GET_PLC_WELD_READY_REQ_OFF = "Get PLC Weld Ready Request Off"; // PLC 용접 준비 요청 종료
const string SEQ_SET_PC_WELD_READY_ACK_OFF = "Set PC Weld Ready Ack Off"; // PC 용접 준비 확인 종료
const string SEQ_GET_PLC_WELD_TRIGGER_REQ_OFF = "Get PLC Weld Ready Request Off"; // PLC 용접 준비 요청 종료
const string SEQ_SET_PC_WELD_TRIGGER_ACK_OFF = "Set PC Weld Ready Ack Off"; // PC 용접 준비 확인 종료
const string SEQ_WAIT_WELDING_START = "Wait Welding Start"; // 용접 시작 대기
const string SEQ_EXECUTE_WELDING = "Execute Welding"; // 용접 실행
const string SEQ_CHECK_VISION_COMPENSION_USE = "Check Vision Compensation Use"; // 비전 보상 사용 확인
@ -148,16 +148,16 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
sb.AddAction(SEQ_ENTER, Sequence_Enter);
sb.AddDecision(SEQ_CHECK_INIT_CONDITION, CheckInitCondition); //분기
////// PLC_WELD_READY_REQ ON Check & Cell Load
sb.AddAction(SEQ_GET_PLC_WELD_READY_REQ_ON, GetPlcWeldReadyReqOn);
////// PLC_WELD_TRIGGER_REQ ON Check & Cell Load
sb.AddAction(SEQ_GET_PLC_WELD_TRIGGER_REQ_ON, GetPlcWeldReadyReqOn);
sb.AddDecision(SEQ_CHECK_CELL_INFO_RECEIVE, CheckCellInfoReceive);
sb.AddAction(SEQ_SET_PARAMS_RECEIVE_CELL_INFO_SEQ, SetReceiveCellInfo_SeqParams);
sb.AddSubsequence(SEQ_DO_ID_RECEIVE_CELL_INFO_SEQ, SequenceManager.GetSeqBuilder_SeqReceiveCellInfo());
sb.AddAction(SEQ_GET_PARAMS_RECEIVE_CELL_INFO_SEQ, GetReceiveCellInfo_SeqResult);
////// PC_WELD_READY_ACK ON & PLC_WELD_READY_REQ OFF Check & Use Model Finder
sb.AddAction(SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL, SetPcWeldReadyAckOnWithCell);
sb.AddAction(SEQ_GET_PLC_WELD_READY_REQ_OFF, GetPlcWeldReadyReqOff);
////// PC_WELD_TRIGGER_ACK ON & PLC_WELD_TRIGGER_REQ OFF Check & Use Model Finder
sb.AddAction(SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL, SetPcWeldReadyAckOnWithCell);
sb.AddAction(SEQ_GET_PLC_WELD_TRIGGER_REQ_OFF, GetPlcWeldReadyReqOff);
sb.AddDecision(SEQ_CHECK_VISION_COMPENSION_USE, CheckVisionCompensationUse);
sb.AddAction(SEQ_MEASURE_CELL_POSITION, MeasureCellPosition);
sb.AddAction(SEQ_SET_MIL_MODEL_FINDER_SEQ, SetMilModelFinder_SeqParams);
@ -166,8 +166,8 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
sb.AddAction(SEQ_GET_MIL_MODEL_FINDER_SEQ, GetMilModelFinder_SeqResult);
sb.AddAction(SEQ_GENERATE_WELDING_OBJECT, GenerateWeldingObject);
////// PC_WELD_READY_ACK OFF & Weld Start / Complete
sb.AddAction(SEQ_SET_PC_WELD_READY_ACK_OFF, SetPcWeldReadyAckOff);
////// PC_WELD_TRIGGER_ACK OFF & Weld Start / Complete
sb.AddAction(SEQ_SET_PC_WELD_TRIGGER_ACK_OFF, SetPcWeldReadyAckOff);
sb.AddAction(SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ, SetUploadWeldingList_SeqParams);
sb.AddSubsequence(SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ, CommonSequenceManager.GetSeqBuilder_SeqUploadWeldingList());
sb.AddAction(SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ, GetUploadWeldingList_SeqResult);
@ -189,12 +189,12 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
sb.Flows(sb.Init > sb[SEQ_ENTER] > sb[SEQ_CHECK_INIT_CONDITION]
> sb[SEQ_GET_PLC_WELD_READY_REQ_ON] > sb[SEQ_CHECK_CELL_INFO_RECEIVE]
> sb[SEQ_GET_PLC_WELD_TRIGGER_REQ_ON] > sb[SEQ_CHECK_CELL_INFO_RECEIVE]
> sb[SEQ_SET_PARAMS_RECEIVE_CELL_INFO_SEQ] > sb[SEQ_DO_ID_RECEIVE_CELL_INFO_SEQ] > sb[SEQ_GET_PARAMS_RECEIVE_CELL_INFO_SEQ]
> sb[SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL] > sb[SEQ_GET_PLC_WELD_READY_REQ_OFF]
> sb[SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL] > sb[SEQ_GET_PLC_WELD_TRIGGER_REQ_OFF]
> sb[SEQ_CHECK_VISION_COMPENSION_USE] > sb[SEQ_MEASURE_CELL_POSITION]
> sb[SEQ_SET_MIL_MODEL_FINDER_SEQ] > sb[SEQ_DO_ID_MIL_MODEL_FINDER_SEQ] > sb[SEQ_GET_MIL_MODEL_FINDER_SEQ] > sb[SEQ_GENERATE_WELDING_OBJECT]
> sb[SEQ_SET_PC_WELD_READY_ACK_OFF] > sb[SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ]
> sb[SEQ_SET_PC_WELD_TRIGGER_ACK_OFF] > sb[SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ]
> sb[SEQ_WAIT_WELDING_START] > sb[SEQ_EXECUTE_WELDING]
> sb[SEQ_SET_PC_WELD_COMPLETE_ON] > sb[SEQ_CHECK_PLC_WELDING_COMPLETE]
> sb[SEQ_SET_PC_WELD_COMPLETE_OFF_WITH_END] > sb[SEQ_GET_PLC_WELD_COMPLETE_ACK_OFF] > sb[SEQ_SAVE_RESULT_DATA] > sb[SEQ_COMPLETE]);
@ -203,10 +203,10 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
sb.Flows(sb[SEQ_CHECK_INIT_CONDITION] > sb[SEQ_COMPLETE] > sb.Final);
// SEQ_CHECK_CELL_INFO_RECEIVE
sb.Flows(sb[SEQ_CHECK_CELL_INFO_RECEIVE] > sb[SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL]);
sb.Flows(sb[SEQ_CHECK_CELL_INFO_RECEIVE] > sb[SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL]);
// SEQ_CHECK_VISION_COMPENSION_USE
sb.Flows(sb[SEQ_CHECK_VISION_COMPENSION_USE] > sb[SEQ_SET_PC_WELD_READY_ACK_OFF]);
sb.Flows(sb[SEQ_CHECK_VISION_COMPENSION_USE] > sb[SEQ_SET_PC_WELD_TRIGGER_ACK_OFF]);
// SEQ_CHECK_PLC_WELDING_COMPLETE
sb.Flows(sb[SEQ_CHECK_PLC_WELDING_COMPLETE] > sb[SEQ_SET_PC_WELD_COMPLETE_OFF_WITH_RETRY]
@ -266,7 +266,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
// while context가 적절한지 고민이 됨.
while (!context.Stopped)
{
if (_PLC.ReadBit(eBitInput.PLC_WELD_READY_REQ).data){
if (_PLC.ReadBit(eBitInput.PLC_WELD_TRIGGER_REQ).data){
Log.I(string.Format("PLC Weld Ready Request ON"));
break;
}
@ -284,7 +284,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
else
{
Log.I(string.Format("Pass Cell Info Receive"));
return SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL;
return SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL;
}
}
@ -309,7 +309,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
private SequenceActionResult SetPcWeldReadyAckOnWithCell(SequenceContext context, string id, SequenceActionResult param)
{
_PLC.WriteBit(eBitOutput.PC_WELD_READY_ACK, true);
_PLC.WriteBit(eBitOutput.PC_WELD_TRIGGER_ACK, true);
// Cell ID를 PLC에 적어줄지 고민해볼 것.
Log.I(string.Format("Set PC Weld Ready Ack On With Cell"));
@ -320,7 +320,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
private SequenceActionResult GetPlcWeldReadyReqOff(SequenceContext context, string id, SequenceActionResult param)
{
// Retry에 대해서 어떤 부분이 좋을지 고민됨.. while(!context.Stopped) or RetryUntilSuccess
Func<bool> plcResponse = () => _PLC.ReadBit(eBitInput.PLC_WELD_READY_REQ).data;
Func<bool> plcResponse = () => _PLC.ReadBit(eBitInput.PLC_WELD_TRIGGER_REQ).data;
var res = context.RetryUntilSuccess(plcResponse, timeoutSeconds * 1000);
if (res == E2.TIMEOUT)
@ -343,7 +343,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
else
{
Log.I(string.Format("Unuse Vision Compensation"));
return SEQ_SET_PC_WELD_READY_ACK_OFF;
return SEQ_SET_PC_WELD_TRIGGER_ACK_OFF;
}
}
private SequenceActionResult MeasureCellPosition(SequenceContext context, string id, SequenceActionResult param)
@ -374,7 +374,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
private SequenceActionResult SetPcWeldReadyAckOff(SequenceContext context, string id, SequenceActionResult param)
{
_PLC.WriteBit(eBitOutput.PC_WELD_READY_ACK, false);
_PLC.WriteBit(eBitOutput.PC_WELD_TRIGGER_ACK, false);
Log.I(string.Format("Set PC Weld Ready Ack Off"));
return SequenceAction.Ok();

View File

@ -39,7 +39,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
[CheckPageNo] PLC_PAGE_CHANGE_REQ ON 감지 → CheckPageNoComp 이동
[CheckPageNoComp] 페이지 확정 - PC_PAGE_NO: [1] 에코 완료
[SetUploadWeldingList] Group Count: [2], Total Line Count: [34]
[WeldingStartReadBit] PLC_WELD_READY_REQ ON 감지 → WaitWeldingStart 이동
[WeldingStartReadBit] PLC_WELD_TRIGGER_REQ ON 감지 → WaitWeldingStart 이동
[WaitWeldingStart] READY_ACK/BUSY ON, COMPLETE OFF 완료
[ExecuteWelding] Laser Gate ON (Core+Ring)
[ExecuteWelding] Gate ON Delay 15ms 완료 → ExecuteList 시작
@ -605,7 +605,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
// 260513 추가노드
private SequenceActionResult WeldingStartReadBit(SequenceContext context, string id, SequenceActionResult param)
{
Log.I($"---> [WeldingStartReadBit] PLC_WELD_READY_REQ 신호 대기 중... ");
Log.I($"---> [WeldingStartReadBit] PLC_WELD_TRIGGER_REQ 신호 대기 중... ");
// 1. PLC 용접 요청 대기
var interfaceStartTime = DateTime.Now;
@ -617,26 +617,26 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
return null;
}
if (_PLC.ReadBit(eBitInput.PLC_WELD_READY_REQ).data)
if (_PLC.ReadBit(eBitInput.PLC_WELD_TRIGGER_REQ).data)
{
Log.I($"[WeldingStartReadBit] Check OK -> PLC_WELD_READY_REQ : ON");
Log.I($"[WeldingStartReadBit] Check OK -> PLC_WELD_TRIGGER_REQ : ON");
// 디버그 끝내고 삭제
MessageUtil.ShowToast("PLC_WELD_READY_REQ : ON");
MessageUtil.ShowToast("PLC_WELD_TRIGGER_REQ : ON");
//Thread.Sleep(1000);
break;
}
if (DateTime.Now.Subtract(interfaceStartTime).TotalSeconds > PLC_TIMEOUT)
{
Log.W($"[WeldingStartReadBit] PLC_WELD_READY_REQ -> TIMEOUT...");
Log.W($"[WeldingStartReadBit] PLC_WELD_TRIGGER_REQ -> TIMEOUT...");
interfaceStartTime = DateTime.Now;
}
Thread.Sleep(10);
}
Log.I($"---> [WeldingStartReadBit] PLC_WELD_READY_REQ ON 감지 → WaitWeldingStart 이동");
Log.I($"---> [WeldingStartReadBit] PLC_WELD_TRIGGER_REQ ON 감지 → WaitWeldingStart 이동");
return SequenceAction.Ok();
@ -651,7 +651,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
if (plcPageNo == 1)
{
// 2. 준비 완료(Ack) 및 가동 중(Busy) 비트 ON
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, true);
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, true);
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
Thread.Sleep(200);
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
@ -792,7 +792,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
if (plcPageNo == 1)
{
// 용접끝
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
Log.I("[PLCInterface] PageNo[1] READY_ACK false");
Thread.Sleep(5);
// 용접중 신호로 변경
@ -837,10 +837,9 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
// 260621: Resume 사이클 1회 완료 → 출력 bit15 OFF + ResumeMode 해제 (이후 정상 루프 복귀)
if (ResumeMode)
{
_PLC.WriteBit((int)eBitOutput.PC_MODE_CHANGE, false);
_PLC.WriteBit((int)eBitOutput.PC_MODE_CHANGE_P, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
ResumeMode = false;
Log.I("[CheckCycleStop] Resume 사이클 완료 → PC_MODE_CHANGE OFF, ResumeMode 해제");
Log.I("[CheckCycleStop] Resume 사이클 완료 → PC_WELD_READY_ACK OFF, ResumeMode 해제");
}
Log.I($"[CheckCycleStop] 사이클 계속 진행 → CheckPageNo 이동");
@ -939,7 +938,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
////PLC All BIT OFF
_PLC.WriteBit((int)eCommonBitOutput.PC_PAGE_CHANGE_COMPLETE, false); // 페이지 false
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_READY_ACK, false); // 용접 준비 false
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_TRIGGER_ACK, false); // 용접 준비 false
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_BUSY, false); // 동작 중 false
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_COMPLETE, false); // 용접 완료 false
Log.I(string.Format("[PLCInterface]PC Anod Bit Off"));
@ -1053,8 +1052,8 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
{
Log.I($"[InitAutoRunBit] 노드 Start");
Log.I(string.Format($"[PLCInterface] Start AutoRun PLC Bit Initialize"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_READY_ACK False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_TRIGGER_ACK False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_BUSY False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
@ -1064,7 +1063,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
Log.I(string.Format($"[PLCInterface] Start AutoRun PLC Bit Initialize"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_READY_REQ, false);
Log.I(string.Format($"[PLCInterface]SET (+)PC_WELD_READY_ACK False"));
Log.I(string.Format($"[PLCInterface]SET (+)PC_WELD_TRIGGER_ACK False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_BUSY, false);
Log.I(string.Format($"[PLCInterface]SET (+)PC_WELD_BUSY False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_COMP_ACK, false);
@ -1098,7 +1097,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
Log.I($"[OnSeqActionStop] 시퀀스 강제 중지 - PLC/IO/Scanner 초기화 시작");
// PLC All BIT OFF
_PLC.WriteBit((int)eBitOutput.PC_AUTO_STATUS, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
Log.I("[OnSeqActionStop] PLC ANODE(-) Output All false");

View File

@ -388,7 +388,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
private SequenceActionResult SetPlcPageChangeOrWeldRequest_SeqParams(SequenceContext context, string id, SequenceActionResult param)
{
Log.I(string.Format("PLC Interface(PageChange, WeldReq) Start; (REQ,ACK); ({0},{1});({2},{3})",
(int)eBitInput.PLC_PAGE_CHANGE_REQ, (int)eBitOutput.PC_PAGE_CHANGE_COMPLETE, (int)eBitInput.PLC_WELD_READY_REQ, (int)eBitOutput.PC_WELD_READY_ACK));
(int)eBitInput.PLC_PAGE_CHANGE_REQ, (int)eBitOutput.PC_PAGE_CHANGE_COMPLETE, (int)eBitInput.PLC_WELD_TRIGGER_REQ, (int)eBitOutput.PC_WELD_TRIGGER_ACK));
Status.SetWorkingPosition(eWorkingPosition.LOADING_CELL);
@ -461,12 +461,12 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
#region 3. 용접 요청 인터페이스 (PLC <-> PC)
private SequenceActionResult SetPlcWeldRequest_SeqParams(SequenceContext context, string id, SequenceActionResult param)
{
Log.I(string.Format("Test1; REQ: {0}; ACK: {1}", (int)eBitInput.PLC_WELD_READY_REQ, (int)eBitOutput.PC_WELD_READY_ACK));
Log.I(string.Format("Test1; REQ: {0}; ACK: {1}", (int)eBitInput.PLC_WELD_TRIGGER_REQ, (int)eBitOutput.PC_WELD_TRIGGER_ACK));
// PLC 인터페이스 전까지 테스트
SeqExecutePlcBitInterface_InitParam seqParams = new SeqExecutePlcBitInterface_InitParam() {
GetAddress = eCommonBitInput.PLC_WELD_READY_REQ,
SetAddress = eCommonBitOutput.PC_WELD_READY_ACK,
GetAddress = eCommonBitInput.PLC_WELD_TRIGGER_REQ,
SetAddress = eCommonBitOutput.PC_WELD_TRIGGER_ACK,
TimeoutSec = 60,
FirstTimeoutSec = 6 * 60 * 60, // 2시간동안 대기,
IsSetMode = false
@ -1279,7 +1279,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
// 초기화
_PLC.WriteBit(eBitOutput.PC_PAGE_CHANGE_COMPLETE, false);
_PLC.WriteBit(eBitOutput.PC_WELD_READY_ACK, false);
_PLC.WriteBit(eBitOutput.PC_WELD_TRIGGER_ACK, false);
_PLC.WriteBit(eBitOutput.PC_WELD_BUSY, false);
_PLC.WriteBit(eBitOutput.PC_WELD_COMPLETE, false);

View File

@ -164,11 +164,11 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
while (!context.Stopped)
{
if (_PLC.ReadBit((int)eBitInput.PLC_WELD_READY_REQ).data)
if (_PLC.ReadBit((int)eBitInput.PLC_WELD_TRIGGER_REQ).data)
{
Log.I(string.Format($"[PLCInterface]GET PLC_WELD_READY_REQ True"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, true);
Log.I(string.Format($"[PLCInterface]SET PC_WELD_READY_ACK True"));
Log.I(string.Format($"[PLCInterface]GET PLC_WELD_TRIGGER_REQ True"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, true);
Log.I(string.Format($"[PLCInterface]SET PC_WELD_TRIGGER_ACK True"));
break;
}
@ -176,7 +176,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
_InterfaceSpanTime = DateTime.Now.Subtract(_InterfaceStartTime);
if (_InterfaceSpanTime.TotalMilliseconds > (PLC_TIMEOUT * 1000))
{
Log.E("TIMEOUT_PLC_WELD_READY_REQEUST");
Log.E("TIMEOUT_PLC_WELD_TRIGGER_REQEUST");
_InterfaceStartTime = DateTime.Now;
}
Thread.Sleep(10);
@ -356,7 +356,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
Log.I("[SeqTestRun]GetPLCWeldRequestOn");
WeldReqTime = DateTime.Now;
context.RetryUntilSuccess(() => _PLC.ReadBit(eCommonBitInput.PLC_WELD_READY_REQ).data, _InitParam.TimeoutSec * 1000, interval: 10);
context.RetryUntilSuccess(() => _PLC.ReadBit(eCommonBitInput.PLC_WELD_TRIGGER_REQ).data, _InitParam.TimeoutSec * 1000, interval: 10);
Log.W(string.Format("Get PLC Weld Request On"));
@ -398,7 +398,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
if()
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
Log.I(string.Format($"[PLCInterface]SET PC_WELD_REQEUST_ACK False"));
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
Log.I(string.Format($"[PLCInterface]SET PC_WELD_BUSY False"));
@ -444,7 +444,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
private bool CheckRequest()
{
pageChangeRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_PAGE_CHANGE_REQ).data;
weldRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_WELD_READY_REQ).data;
weldRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_WELD_TRIGGER_REQ).data;
return (pageChangeRequestBit || weldRequestBit);
}

View File

@ -326,7 +326,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
{
WeldReqTime = DateTime.Now;
context.RetryUntilSuccess(() => _PLC.ReadBit(eCommonBitInput.PLC_WELD_READY_REQ).data, _InitParam.TimeoutSec * 1000, interval: 10);
context.RetryUntilSuccess(() => _PLC.ReadBit(eCommonBitInput.PLC_WELD_TRIGGER_REQ).data, _InitParam.TimeoutSec * 1000, interval: 10);
Log.W(string.Format("Get PLC Weld Request On"));
@ -364,7 +364,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
private bool CheckRequest()
{
pageChangeRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_PAGE_CHANGE_REQ).data;
weldRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_WELD_READY_REQ).data;
weldRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_WELD_TRIGGER_REQ).data;
return (pageChangeRequestBit || weldRequestBit);
}

View File

@ -206,8 +206,7 @@ namespace ILSOS_PrismaticRD_PTOP.Views
// 260621: PLC bit15(MODECHANGE) 상승엣지 → Recipe/Page 확인 팝업 → Auto→Manual 잠시 전환
if (_Plc == null || _Plc.IsSimul) return;
// 음극/양극 어느 쪽이 줘도 트리거 (AutoRun이 두 극을 함께 쓰는 구조와 동일)
bool bit15 = _Plc.ReadBit(eBitInput.PLC_MODE_CHANGE).data
|| _Plc.ReadBit(eBitInput.PLC_MODE_CHANGE_P).data;
bool bit15 = _Plc.ReadBit(eBitInput.PLC_WELD_READY_REQ).data;
IsModeChangeActive = bit15; // bit15 살아있을 때만 [AutoRun Resume] 버튼 표시
if (bit15 && !_prevBit15 && !_isPopupOpen)
{
@ -253,15 +252,14 @@ namespace ILSOS_PrismaticRD_PTOP.Views
MessageUtil.ShowWarningToast("Resume 상태가 아닙니다.");
return;
}
// PC→PLC bit15(MODECHANGE) ON — resume run 신호 (한 사이클 완료 후 시퀀스가 OFF/해제)
_Plc.WriteBit(eBitOutput.PC_MODE_CHANGE, true);
_Plc.WriteBit(eBitOutput.PC_MODE_CHANGE_P, true);
// PC→PLC bit15(Weld_01 ReadyACK) ON — resume run 신호 (한 사이클 완료 후 시퀀스가 OFF/해제)
_Plc.WriteBit(eBitOutput.PC_WELD_READY_ACK, true);
// Auto 복귀 (ResumeMode=true → CheckInitCondition에서 핸드셰이크 스킵하고 업로드→용접)
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS, true);
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS_P, true);
Status.GetProcessingWeldingData().AutoRunStartTime = DateTime.Now;
RunSequenceAutoRun();
Log.I("[Bit15] AutoRun Resume → PC_MODE_CHANGE ON + Auto 이어하기(핸드셰이크 스킵)");
Log.I("[Bit15] AutoRun Resume → PC_WELD_READY_ACK ON + Auto 이어하기(핸드셰이크 스킵)");
}
// PLC 비트에 의한 AutoRun 실행의 경우, PLC 인터페이스 이후 AutoRun 필요

View File

@ -230,8 +230,9 @@ namespace WeldingCommon.Devices
PLC_PAGE_CHANGE_REQ = 0x08,
PLC_RMS_USED = 0x09,
// 0x0A ~ 0x0F
PLC_WELD_READY_REQ = 0x10,
// 0x0A ~ 0x0E
PLC_WELD_READY_REQ = 0x0F, // 260621: Weld_01 Ready (PTOP 동기화)
PLC_WELD_TRIGGER_REQ = 0x10,
PLC_WELD_WAIT = 0x11,
PLC_WELD_COMPLETE_ACK = 0x12,
// 0x13 ~ 0x1D
@ -266,8 +267,9 @@ namespace WeldingCommon.Devices
PC_EMO_STATUS = 0x07,
PC_PAGE_CHANGE_COMPLETE = 0x08,
PC_RECIPE_CHANGE_COMPLETE = 0x09, // 260618: PTOP enum과 동기화 (RestoreDeviceStatus가 common enum 사용)
// 0x0A ~ 0x0F
PC_WELD_READY_ACK = 0x10,
// 0x0A ~ 0x0E
PC_WELD_READY_ACK = 0x0F, // 260621: Weld_01 ReadyACK (PTOP 동기화)
PC_WELD_TRIGGER_ACK = 0x10,
PC_WELD_BUSY = 0x11,
PC_WELD_COMPLETE = 0x12,

View File

@ -29,7 +29,7 @@
보완항목 확정: 1=작업지시서, 2=(나)작업자 수동 RunWelding, 3=작업지시서, 4=작업지시서, 5=현행유지.
- **bit 정의**: 입력 `PLC_MODE_CHANGE=0x0F(M70515)`/`_P=0x73(M70615)`, 출력 `PC_MODE_CHANGE=0x0F(M70015)`/`_P=0x73(M70115)`.
- **bit 정의** (※ 현장 확정맵 반영해 명칭 정정 — 아래 6장 참고): bit15(0x0F) = **Weld_01 Ready** (`PLC_WELD_READY_REQ`/`PC_WELD_READY_ACK`, M70515/M70015). 가변용접 시 PLC가 ON → 확인 팝업 + Resume 트리거 겸용. (임시명 `MODE_CHANGE`였음)
- **정지 보존(#1)**: `OnSeqActionStop`에서 `ResumeMode`면 `PC_PAGE_NO/RECIPE_NO=0` 쓰기 스킵(에코 보존).
- **확인 핸들러(#2-나)**: `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 재활성/롤백 안 함. 가변 용접은 작업자가 Manual에서 직접.
- **핸드셰이크 스킵(#3)**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Flow 엣지).
@ -38,14 +38,24 @@
- 버튼 **[AutoRun Resume]** = Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. 확인창 없이 즉시 재개.
- 재용접 중복은 **PLC가 레이저 차단**으로 합의(option2).
## 5. 미확정 / 확인 필요 (다음 액션)
## 6. 현장 확정 PLC DeviceMap 반영 — bit15 명칭/용접비트 정정 (빌드 0오류)
- **현장 실증 전** — 빌드만 통과. bit15 흐름·레시피 전환·실제 Laser 발진은 현장 테스트 필요.
현장 확정 CSV(`Doc/ILSOSConfig/.../External/PLC/PLC_DeviceMap_*_M/D_Device.csv`) 확인 결과, 임시명 `MODE_CHANGE`로 잡았던 bit15가 **Weld_01 Ready로 확정**됨. 또 원래 Ready(0x10)는 **Trigger**로 밀림. 전 파일 일괄 정정.
- 0x0F (M70515/M70015): `MODE_CHANGE` → **`WELD_READY_REQ`/`WELD_READY_ACK`** (Weld_01 Ready, Resume 트리거 겸용)
- 0x10 (M70516/M70016): 기존 `WELD_READY_REQ`/`ACK` → **`WELD_TRIGGER_REQ`/`ACK`** (원래 Ready, 용접 발진 신호)
- **주소(0x0F/0x10) 불변 = 런타임 동작 동일**, 심볼 이름만 정정. 단 양극 `_P`(0x73) 미러는 제거(현장 단일블록).
- 수정 범위: 공통 enum(`WeldingCommon/.../PLCController.Address.cs`) + PTOP enum + 시퀀스 5종(SeqAutoRunPTOP/ComponentWeld/Prismatic/TestRun/WaitWeldOrChangePage) + `UCMainAutoRunViewModel`. 타 머신 영향 없음(심볼 미참조 확인).
- 레시피 번호도 변경됨: **21 전면Pre / 22 후면Pre / 23 전면 / 24 후면** (20 폐지). 코드는 데이터구동이라 영향 없음.
## 7. 미확정 / 확인 필요 (다음 액션)
- **현장 실증 전** — 빌드만 통과. bit15(Weld Ready) 흐름·레시피 전환·실제 Laser 발진은 현장 테스트 필요.
- **PLC 협의**:
- 출력 `PC_MODE_CHANGE`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (PLC 인식 타이밍과 합의 후 확정).
- bit15 주소(M70515/M70615/M70015/M70115) 실맵 대조.
- bit15 발생 정책: 가변 페이지마다 vs 가변 레시피당 1회.
- 출력 `PC_WELD_READY_ACK`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (CSV 노트 "15bit page change 때 init 0"과 정합 — 위치 확정 필요).
- bit15 발생 정책: CSV 노트상 **레시피 21·22(가변) 시 PLC가 ON** → 가변 페이지마다인지 레시피당 1회인지 세부 확인.
- 용접 핸드셰이크 Ready(0x0F)→Trigger(0x10) 2단계 프로토콜 — 기존 용접시작 로직 현장 동작 확인.
- 레시피 시트 "Pre **가변**" 표기가 PRE **가접** 오타인지 확인.
- 20~23 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응).
- 21~24 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응).
- 알람 타이밍: `device.Activate()`가 연결완료까지 동기인지/개시만인지 디바이스별 확인.
- 제품 1개 = Recipe×Page 사이클 예상 시나리오: `docs/분석/2026/06/21/121750_제품1개_recipe_page_사이클_예상시나리오.md`.