diff --git a/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Input_M_Device.csv b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Input_M_Device.csv new file mode 100644 index 0000000..fffea2c --- /dev/null +++ b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Input_M_Device.csv @@ -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,, diff --git a/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Output_M_Device.csv b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Output_M_Device.csv new file mode 100644 index 0000000..70a573b --- /dev/null +++ b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Bit_Output_M_Device.csv @@ -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,, diff --git a/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Input_D_Device.csv b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Input_D_Device.csv new file mode 100644 index 0000000..3dc9b06 --- /dev/null +++ b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Input_D_Device.csv @@ -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,, diff --git a/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Output_D_Device.csv b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Output_D_Device.csv new file mode 100644 index 0000000..39b6a2d --- /dev/null +++ b/Doc/ILSOSConfig/ILSOS_PrismaticRD_PTOP/External/PLC/PLC_DeviceMap_Word_Output_D_Device.csv @@ -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,, diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Device/PLC/PLCController.Address.cs b/Machines/ILSOS_PrismaticRD_PTOP/Device/PLC/PLCController.Address.cs index f4f51a8..55958fe 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Device/PLC/PLCController.Address.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Device/PLC/PLCController.Address.cs @@ -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, diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunComponentWeld.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunComponentWeld.cs index 598636e..4efbc72 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunComponentWeld.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunComponentWeld.cs @@ -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 plcResponse = () => _PLC.ReadBit(eBitInput.PLC_WELD_READY_REQ).data; + Func 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(); diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs index a0ba7c3..554dc58 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs @@ -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"); diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPrismatic.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPrismatic.cs index ce8d584..f9bf7ae 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPrismatic.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPrismatic.cs @@ -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); diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqTestRun.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqTestRun.cs index 6bdf2b7..25f8bb4 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqTestRun.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqTestRun.cs @@ -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); } diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqWaitWeldOrChangePage.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqWaitWeldOrChangePage.cs index e211437..ffdb24f 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqWaitWeldOrChangePage.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqWaitWeldOrChangePage.cs @@ -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); } diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Views/Main/UCMainAutoRunViewModel.cs b/Machines/ILSOS_PrismaticRD_PTOP/Views/Main/UCMainAutoRunViewModel.cs index c84a52c..9aebcf6 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Views/Main/UCMainAutoRunViewModel.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Views/Main/UCMainAutoRunViewModel.cs @@ -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 필요 diff --git a/WeldingComponents/WeldingCommon/Devices/PLC/PLCController.Address.cs b/WeldingComponents/WeldingCommon/Devices/PLC/PLCController.Address.cs index 90fac33..1d22fdb 100644 --- a/WeldingComponents/WeldingCommon/Devices/PLC/PLCController.Address.cs +++ b/WeldingComponents/WeldingCommon/Devices/PLC/PLCController.Address.cs @@ -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, diff --git a/docs/작업일지/2026_06_21.md b/docs/작업일지/2026_06_21.md index 53da338..1de5707 100644 --- a/docs/작업일지/2026_06_21.md +++ b/docs/작업일지/2026_06_21.md @@ -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`.