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:
parent
1a92f19364
commit
e28f915b44
97
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Input_M_Device.csv
vendored
Normal file
97
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Input_M_Device.csv
vendored
Normal 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,,
|
||||
|
97
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Output_M_Device.csv
vendored
Normal file
97
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Output_M_Device.csv
vendored
Normal 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,,
|
||||
|
101
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Input_D_Device.csv
vendored
Normal file
101
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Input_D_Device.csv
vendored
Normal 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,,
|
||||
|
101
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Output_D_Device.csv
vendored
Normal file
101
Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Output_D_Device.csv
vendored
Normal 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,,
|
||||
|
@ -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,
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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 필요
|
||||
|
||||
@ -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,
|
||||
|
||||
|
||||
@ -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`.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user