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 미사용으로 폐기 후 재정의)
|
// 260618: M70509 Recipe 변경 요청 (구 PLC_RMS_USED, RMS 미사용으로 폐기 후 재정의)
|
||||||
PLC_RECIPE_CHANGE_REQ = 0x09,
|
PLC_RECIPE_CHANGE_REQ = 0x09,
|
||||||
// 0x0A ~ 0x0E
|
// 0x0A ~ 0x0E
|
||||||
// 260621: M70515 bit15 모드전환 요청 (Recipe/Page 확인 팝업 → Auto→Manual 잠시 전환)
|
// 260621: M70515 확정 = Weld_01 Ready (가변용접 시 PLC ON → Recipe/Page 확인 팝업 + Resume 트리거)
|
||||||
PLC_MODE_CHANGE = 0x0F,
|
PLC_WELD_READY_REQ = 0x0F,
|
||||||
PLC_WELD_READY_REQ = 0x10,
|
PLC_WELD_TRIGGER_REQ = 0x10, // M70516 (구 Ready)
|
||||||
PLC_WELD_WAIT = 0x11,
|
PLC_WELD_WAIT = 0x11,
|
||||||
PLC_WELD_COMPLETE_ACK = 0x12,
|
PLC_WELD_COMPLETE_ACK = 0x12,
|
||||||
// 0x13 ~ 0x1D
|
// 0x13 ~ 0x1D
|
||||||
@ -43,9 +43,7 @@ namespace ILSOS_PrismaticRD_PTOP.Device
|
|||||||
PLC_DOOR_INTERLOCK_P = 0x6A,
|
PLC_DOOR_INTERLOCK_P = 0x6A,
|
||||||
PLC_EMO_STATUS_P = 0x6B,
|
PLC_EMO_STATUS_P = 0x6B,
|
||||||
// 0x6D
|
// 0x6D
|
||||||
// 0x6F ~ 0x72
|
// 0x6F ~ 0x73
|
||||||
// 260621: M70615 bit15 모드전환 요청 (양극, 음극 PLC_MODE_CHANGE 0x0F 미러)
|
|
||||||
PLC_MODE_CHANGE_P = 0x73,
|
|
||||||
PLC_WELD_P_READY_REQ = 0x74,
|
PLC_WELD_P_READY_REQ = 0x74,
|
||||||
PLC_WELD_P_WAIT = 0x75,
|
PLC_WELD_P_WAIT = 0x75,
|
||||||
PLC_WELD_P_COMP_ACK = 0x76,
|
PLC_WELD_P_COMP_ACK = 0x76,
|
||||||
@ -65,9 +63,9 @@ namespace ILSOS_PrismaticRD_PTOP.Device
|
|||||||
// 260618: M70009 Recipe 변경 완료 응답 (구 PC_EMPTY01, 미사용 → 재정의)
|
// 260618: M70009 Recipe 변경 완료 응답 (구 PC_EMPTY01, 미사용 → 재정의)
|
||||||
PC_RECIPE_CHANGE_COMPLETE = 0x09,
|
PC_RECIPE_CHANGE_COMPLETE = 0x09,
|
||||||
// 0x0A ~ 0x0E
|
// 0x0A ~ 0x0E
|
||||||
// 260621: M70015 bit15 모드전환 ACK (PC→PLC, #2 AutoRun 복귀 시 전달)
|
// 260621: M70015 확정 = Weld_01 ReadyACK (Resume ACK/run 신호)
|
||||||
PC_MODE_CHANGE = 0x0F,
|
PC_WELD_READY_ACK = 0x0F,
|
||||||
PC_WELD_READY_ACK = 0x10,
|
PC_WELD_TRIGGER_ACK = 0x10, // M70016 (구 ReadyACK)
|
||||||
PC_WELD_BUSY = 0x11,
|
PC_WELD_BUSY = 0x11,
|
||||||
PC_WELD_COMPLETE = 0x12,
|
PC_WELD_COMPLETE = 0x12,
|
||||||
|
|
||||||
@ -80,8 +78,6 @@ namespace ILSOS_PrismaticRD_PTOP.Device
|
|||||||
PC_LIGHT_ALARM_STATUS_P = 0x68,
|
PC_LIGHT_ALARM_STATUS_P = 0x68,
|
||||||
PC_HEAVY_ALARM_STATUS_P = 0x69,
|
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_READY_REQ = 0x74,
|
||||||
PC_WELD_P_BUSY = 0x75,
|
PC_WELD_P_BUSY = 0x75,
|
||||||
PC_WELD_P_COMP_ACK = 0x76,
|
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_ENTER = "SEQ_ENTER"; // inputParam 으로 받자.
|
||||||
const string SEQ_CHECK_INIT_CONDITION = "Check Init Condition"; // Check Init Condition
|
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_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_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_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_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_MEASURE_CELL_POSITION = "Measure Cell Position"; // 셀 위치 측정
|
||||||
const string SEQ_SET_MIL_MODEL_FINDER_SEQ = "Set MIL Model Finder Seq"; // MIL 모델 찾기 시퀀스 설정
|
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 모델 찾기 시퀀스 처리
|
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_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_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_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_GET_PLC_WELD_TRIGGER_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_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_WAIT_WELDING_START = "Wait Welding Start"; // 용접 시작 대기
|
||||||
const string SEQ_EXECUTE_WELDING = "Execute Welding"; // 용접 실행
|
const string SEQ_EXECUTE_WELDING = "Execute Welding"; // 용접 실행
|
||||||
const string SEQ_CHECK_VISION_COMPENSION_USE = "Check Vision Compensation Use"; // 비전 보상 사용 확인
|
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.AddAction(SEQ_ENTER, Sequence_Enter);
|
||||||
sb.AddDecision(SEQ_CHECK_INIT_CONDITION, CheckInitCondition); //분기
|
sb.AddDecision(SEQ_CHECK_INIT_CONDITION, CheckInitCondition); //분기
|
||||||
|
|
||||||
////// PLC_WELD_READY_REQ ON Check & Cell Load
|
////// PLC_WELD_TRIGGER_REQ ON Check & Cell Load
|
||||||
sb.AddAction(SEQ_GET_PLC_WELD_READY_REQ_ON, GetPlcWeldReadyReqOn);
|
sb.AddAction(SEQ_GET_PLC_WELD_TRIGGER_REQ_ON, GetPlcWeldReadyReqOn);
|
||||||
sb.AddDecision(SEQ_CHECK_CELL_INFO_RECEIVE, CheckCellInfoReceive);
|
sb.AddDecision(SEQ_CHECK_CELL_INFO_RECEIVE, CheckCellInfoReceive);
|
||||||
sb.AddAction(SEQ_SET_PARAMS_RECEIVE_CELL_INFO_SEQ, SetReceiveCellInfo_SeqParams);
|
sb.AddAction(SEQ_SET_PARAMS_RECEIVE_CELL_INFO_SEQ, SetReceiveCellInfo_SeqParams);
|
||||||
sb.AddSubsequence(SEQ_DO_ID_RECEIVE_CELL_INFO_SEQ, SequenceManager.GetSeqBuilder_SeqReceiveCellInfo());
|
sb.AddSubsequence(SEQ_DO_ID_RECEIVE_CELL_INFO_SEQ, SequenceManager.GetSeqBuilder_SeqReceiveCellInfo());
|
||||||
sb.AddAction(SEQ_GET_PARAMS_RECEIVE_CELL_INFO_SEQ, GetReceiveCellInfo_SeqResult);
|
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
|
////// PC_WELD_TRIGGER_ACK ON & PLC_WELD_TRIGGER_REQ OFF Check & Use Model Finder
|
||||||
sb.AddAction(SEQ_SET_PC_WELD_READY_ACK_ON_WITH_CELL, SetPcWeldReadyAckOnWithCell);
|
sb.AddAction(SEQ_SET_PC_WELD_TRIGGER_ACK_ON_WITH_CELL, SetPcWeldReadyAckOnWithCell);
|
||||||
sb.AddAction(SEQ_GET_PLC_WELD_READY_REQ_OFF, GetPlcWeldReadyReqOff);
|
sb.AddAction(SEQ_GET_PLC_WELD_TRIGGER_REQ_OFF, GetPlcWeldReadyReqOff);
|
||||||
sb.AddDecision(SEQ_CHECK_VISION_COMPENSION_USE, CheckVisionCompensationUse);
|
sb.AddDecision(SEQ_CHECK_VISION_COMPENSION_USE, CheckVisionCompensationUse);
|
||||||
sb.AddAction(SEQ_MEASURE_CELL_POSITION, MeasureCellPosition);
|
sb.AddAction(SEQ_MEASURE_CELL_POSITION, MeasureCellPosition);
|
||||||
sb.AddAction(SEQ_SET_MIL_MODEL_FINDER_SEQ, SetMilModelFinder_SeqParams);
|
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_GET_MIL_MODEL_FINDER_SEQ, GetMilModelFinder_SeqResult);
|
||||||
sb.AddAction(SEQ_GENERATE_WELDING_OBJECT, GenerateWeldingObject);
|
sb.AddAction(SEQ_GENERATE_WELDING_OBJECT, GenerateWeldingObject);
|
||||||
|
|
||||||
////// PC_WELD_READY_ACK OFF & Weld Start / Complete
|
////// PC_WELD_TRIGGER_ACK OFF & Weld Start / Complete
|
||||||
sb.AddAction(SEQ_SET_PC_WELD_READY_ACK_OFF, SetPcWeldReadyAckOff);
|
sb.AddAction(SEQ_SET_PC_WELD_TRIGGER_ACK_OFF, SetPcWeldReadyAckOff);
|
||||||
sb.AddAction(SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ, SetUploadWeldingList_SeqParams);
|
sb.AddAction(SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ, SetUploadWeldingList_SeqParams);
|
||||||
sb.AddSubsequence(SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ, CommonSequenceManager.GetSeqBuilder_SeqUploadWeldingList());
|
sb.AddSubsequence(SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ, CommonSequenceManager.GetSeqBuilder_SeqUploadWeldingList());
|
||||||
sb.AddAction(SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ, GetUploadWeldingList_SeqResult);
|
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.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_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_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_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_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_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]);
|
> 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);
|
sb.Flows(sb[SEQ_CHECK_INIT_CONDITION] > sb[SEQ_COMPLETE] > sb.Final);
|
||||||
|
|
||||||
// SEQ_CHECK_CELL_INFO_RECEIVE
|
// 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
|
// 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
|
// SEQ_CHECK_PLC_WELDING_COMPLETE
|
||||||
sb.Flows(sb[SEQ_CHECK_PLC_WELDING_COMPLETE] > sb[SEQ_SET_PC_WELD_COMPLETE_OFF_WITH_RETRY]
|
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가 적절한지 고민이 됨.
|
||||||
while (!context.Stopped)
|
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"));
|
Log.I(string.Format("PLC Weld Ready Request ON"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -284,7 +284,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.I(string.Format("Pass Cell Info Receive"));
|
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)
|
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에 적어줄지 고민해볼 것.
|
// Cell ID를 PLC에 적어줄지 고민해볼 것.
|
||||||
|
|
||||||
Log.I(string.Format("Set PC Weld Ready Ack On With Cell"));
|
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)
|
private SequenceActionResult GetPlcWeldReadyReqOff(SequenceContext context, string id, SequenceActionResult param)
|
||||||
{
|
{
|
||||||
// Retry에 대해서 어떤 부분이 좋을지 고민됨.. while(!context.Stopped) or RetryUntilSuccess
|
// 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);
|
var res = context.RetryUntilSuccess(plcResponse, timeoutSeconds * 1000);
|
||||||
if (res == E2.TIMEOUT)
|
if (res == E2.TIMEOUT)
|
||||||
@ -343,7 +343,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.I(string.Format("Unuse Vision Compensation"));
|
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)
|
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)
|
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"));
|
Log.I(string.Format("Set PC Weld Ready Ack Off"));
|
||||||
|
|
||||||
return SequenceAction.Ok();
|
return SequenceAction.Ok();
|
||||||
|
|||||||
@ -39,7 +39,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
[CheckPageNo] PLC_PAGE_CHANGE_REQ ON 감지 → CheckPageNoComp 이동
|
[CheckPageNo] PLC_PAGE_CHANGE_REQ ON 감지 → CheckPageNoComp 이동
|
||||||
[CheckPageNoComp] 페이지 확정 - PC_PAGE_NO: [1] 에코 완료
|
[CheckPageNoComp] 페이지 확정 - PC_PAGE_NO: [1] 에코 완료
|
||||||
[SetUploadWeldingList] Group Count: [2], Total Line Count: [34]
|
[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 완료
|
[WaitWeldingStart] READY_ACK/BUSY ON, COMPLETE OFF 완료
|
||||||
[ExecuteWelding] Laser Gate ON (Core+Ring)
|
[ExecuteWelding] Laser Gate ON (Core+Ring)
|
||||||
[ExecuteWelding] Gate ON Delay 15ms 완료 → ExecuteList 시작
|
[ExecuteWelding] Gate ON Delay 15ms 완료 → ExecuteList 시작
|
||||||
@ -605,7 +605,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
// 260513 추가노드
|
// 260513 추가노드
|
||||||
private SequenceActionResult WeldingStartReadBit(SequenceContext context, string id, SequenceActionResult param)
|
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 용접 요청 대기
|
// 1. PLC 용접 요청 대기
|
||||||
|
|
||||||
var interfaceStartTime = DateTime.Now;
|
var interfaceStartTime = DateTime.Now;
|
||||||
@ -617,26 +617,26 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
return null;
|
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);
|
//Thread.Sleep(1000);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (DateTime.Now.Subtract(interfaceStartTime).TotalSeconds > PLC_TIMEOUT)
|
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;
|
interfaceStartTime = DateTime.Now;
|
||||||
}
|
}
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Log.I($"---> [WeldingStartReadBit] PLC_WELD_READY_REQ ON 감지 → WaitWeldingStart 이동");
|
Log.I($"---> [WeldingStartReadBit] PLC_WELD_TRIGGER_REQ ON 감지 → WaitWeldingStart 이동");
|
||||||
|
|
||||||
|
|
||||||
return SequenceAction.Ok();
|
return SequenceAction.Ok();
|
||||||
@ -651,7 +651,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
if (plcPageNo == 1)
|
if (plcPageNo == 1)
|
||||||
{
|
{
|
||||||
// 2. 준비 완료(Ack) 및 가동 중(Busy) 비트 ON
|
// 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);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
|
||||||
Thread.Sleep(200);
|
Thread.Sleep(200);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
||||||
@ -792,7 +792,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
if (plcPageNo == 1)
|
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");
|
Log.I("[PLCInterface] PageNo[1] READY_ACK false");
|
||||||
Thread.Sleep(5);
|
Thread.Sleep(5);
|
||||||
// 용접중 신호로 변경
|
// 용접중 신호로 변경
|
||||||
@ -837,10 +837,9 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
// 260621: Resume 사이클 1회 완료 → 출력 bit15 OFF + ResumeMode 해제 (이후 정상 루프 복귀)
|
// 260621: Resume 사이클 1회 완료 → 출력 bit15 OFF + ResumeMode 해제 (이후 정상 루프 복귀)
|
||||||
if (ResumeMode)
|
if (ResumeMode)
|
||||||
{
|
{
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_MODE_CHANGE, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, false);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_MODE_CHANGE_P, false);
|
|
||||||
ResumeMode = 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 이동");
|
Log.I($"[CheckCycleStop] 사이클 계속 진행 → CheckPageNo 이동");
|
||||||
@ -939,7 +938,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
////PLC All BIT OFF
|
////PLC All BIT OFF
|
||||||
_PLC.WriteBit((int)eCommonBitOutput.PC_PAGE_CHANGE_COMPLETE, false); // 페이지 false
|
_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_BUSY, false); // 동작 중 false
|
||||||
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_COMPLETE, false); // 용접 완료 false
|
_PLC.WriteBit((int)eCommonBitOutput.PC_WELD_COMPLETE, false); // 용접 완료 false
|
||||||
Log.I(string.Format("[PLCInterface]PC Anod Bit Off"));
|
Log.I(string.Format("[PLCInterface]PC Anod Bit Off"));
|
||||||
@ -1053,8 +1052,8 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
{
|
{
|
||||||
Log.I($"[InitAutoRunBit] 노드 Start");
|
Log.I($"[InitAutoRunBit] 노드 Start");
|
||||||
Log.I(string.Format($"[PLCInterface] Start AutoRun PLC Bit Initialize"));
|
Log.I(string.Format($"[PLCInterface] Start AutoRun PLC Bit Initialize"));
|
||||||
_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_READY_ACK False"));
|
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_TRIGGER_ACK False"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
|
||||||
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_BUSY False"));
|
Log.I(string.Format($"[PLCInterface]SET (-)PC_WELD_BUSY False"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, 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"));
|
Log.I(string.Format($"[PLCInterface] Start AutoRun PLC Bit Initialize"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_READY_REQ, false);
|
_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);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_BUSY, false);
|
||||||
Log.I(string.Format($"[PLCInterface]SET (+)PC_WELD_BUSY False"));
|
Log.I(string.Format($"[PLCInterface]SET (+)PC_WELD_BUSY False"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_P_COMP_ACK, 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 초기화 시작");
|
Log.I($"[OnSeqActionStop] 시퀀스 강제 중지 - PLC/IO/Scanner 초기화 시작");
|
||||||
// PLC All BIT OFF
|
// PLC All BIT OFF
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_AUTO_STATUS, false);
|
_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_BUSY, false);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
||||||
Log.I("[OnSeqActionStop] PLC ANODE(-) Output All 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)
|
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})",
|
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);
|
Status.SetWorkingPosition(eWorkingPosition.LOADING_CELL);
|
||||||
|
|
||||||
@ -461,12 +461,12 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
#region 3. 용접 요청 인터페이스 (PLC <-> PC)
|
#region 3. 용접 요청 인터페이스 (PLC <-> PC)
|
||||||
private SequenceActionResult SetPlcWeldRequest_SeqParams(SequenceContext context, string id, SequenceActionResult param)
|
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 인터페이스 전까지 테스트
|
// PLC 인터페이스 전까지 테스트
|
||||||
SeqExecutePlcBitInterface_InitParam seqParams = new SeqExecutePlcBitInterface_InitParam() {
|
SeqExecutePlcBitInterface_InitParam seqParams = new SeqExecutePlcBitInterface_InitParam() {
|
||||||
GetAddress = eCommonBitInput.PLC_WELD_READY_REQ,
|
GetAddress = eCommonBitInput.PLC_WELD_TRIGGER_REQ,
|
||||||
SetAddress = eCommonBitOutput.PC_WELD_READY_ACK,
|
SetAddress = eCommonBitOutput.PC_WELD_TRIGGER_ACK,
|
||||||
TimeoutSec = 60,
|
TimeoutSec = 60,
|
||||||
FirstTimeoutSec = 6 * 60 * 60, // 2시간동안 대기,
|
FirstTimeoutSec = 6 * 60 * 60, // 2시간동안 대기,
|
||||||
IsSetMode = false
|
IsSetMode = false
|
||||||
@ -1279,7 +1279,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
// 초기화
|
// 초기화
|
||||||
_PLC.WriteBit(eBitOutput.PC_PAGE_CHANGE_COMPLETE, false);
|
_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_BUSY, false);
|
||||||
_PLC.WriteBit(eBitOutput.PC_WELD_COMPLETE, false);
|
_PLC.WriteBit(eBitOutput.PC_WELD_COMPLETE, false);
|
||||||
|
|
||||||
|
|||||||
@ -164,11 +164,11 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
|
|||||||
|
|
||||||
while (!context.Stopped)
|
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"));
|
Log.I(string.Format($"[PLCInterface]GET PLC_WELD_TRIGGER_REQ True"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_READY_ACK, true);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, true);
|
||||||
Log.I(string.Format($"[PLCInterface]SET PC_WELD_READY_ACK True"));
|
Log.I(string.Format($"[PLCInterface]SET PC_WELD_TRIGGER_ACK True"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -176,7 +176,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
|
|||||||
_InterfaceSpanTime = DateTime.Now.Subtract(_InterfaceStartTime);
|
_InterfaceSpanTime = DateTime.Now.Subtract(_InterfaceStartTime);
|
||||||
if (_InterfaceSpanTime.TotalMilliseconds > (PLC_TIMEOUT * 1000))
|
if (_InterfaceSpanTime.TotalMilliseconds > (PLC_TIMEOUT * 1000))
|
||||||
{
|
{
|
||||||
Log.E("TIMEOUT_PLC_WELD_READY_REQEUST");
|
Log.E("TIMEOUT_PLC_WELD_TRIGGER_REQEUST");
|
||||||
_InterfaceStartTime = DateTime.Now;
|
_InterfaceStartTime = DateTime.Now;
|
||||||
}
|
}
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
@ -356,7 +356,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
|
|||||||
Log.I("[SeqTestRun]GetPLCWeldRequestOn");
|
Log.I("[SeqTestRun]GetPLCWeldRequestOn");
|
||||||
WeldReqTime = DateTime.Now;
|
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"));
|
Log.W(string.Format("Get PLC Weld Request On"));
|
||||||
|
|
||||||
@ -398,7 +398,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
|
|||||||
|
|
||||||
if()
|
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"));
|
Log.I(string.Format($"[PLCInterface]SET PC_WELD_REQEUST_ACK False"));
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
|
||||||
Log.I(string.Format($"[PLCInterface]SET PC_WELD_BUSY False"));
|
Log.I(string.Format($"[PLCInterface]SET PC_WELD_BUSY False"));
|
||||||
@ -444,7 +444,7 @@ namespace ILSOS_PrismaticRD_TDC.Sequences
|
|||||||
private bool CheckRequest()
|
private bool CheckRequest()
|
||||||
{
|
{
|
||||||
pageChangeRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_PAGE_CHANGE_REQ).data;
|
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);
|
return (pageChangeRequestBit || weldRequestBit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -326,7 +326,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
{
|
{
|
||||||
WeldReqTime = DateTime.Now;
|
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"));
|
Log.W(string.Format("Get PLC Weld Request On"));
|
||||||
|
|
||||||
@ -364,7 +364,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
private bool CheckRequest()
|
private bool CheckRequest()
|
||||||
{
|
{
|
||||||
pageChangeRequestBit = _PLC.ReadBit(eCommonBitInput.PLC_PAGE_CHANGE_REQ).data;
|
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);
|
return (pageChangeRequestBit || weldRequestBit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -206,8 +206,7 @@ namespace ILSOS_PrismaticRD_PTOP.Views
|
|||||||
// 260621: PLC bit15(MODECHANGE) 상승엣지 → Recipe/Page 확인 팝업 → Auto→Manual 잠시 전환
|
// 260621: PLC bit15(MODECHANGE) 상승엣지 → Recipe/Page 확인 팝업 → Auto→Manual 잠시 전환
|
||||||
if (_Plc == null || _Plc.IsSimul) return;
|
if (_Plc == null || _Plc.IsSimul) return;
|
||||||
// 음극/양극 어느 쪽이 줘도 트리거 (AutoRun이 두 극을 함께 쓰는 구조와 동일)
|
// 음극/양극 어느 쪽이 줘도 트리거 (AutoRun이 두 극을 함께 쓰는 구조와 동일)
|
||||||
bool bit15 = _Plc.ReadBit(eBitInput.PLC_MODE_CHANGE).data
|
bool bit15 = _Plc.ReadBit(eBitInput.PLC_WELD_READY_REQ).data;
|
||||||
|| _Plc.ReadBit(eBitInput.PLC_MODE_CHANGE_P).data;
|
|
||||||
IsModeChangeActive = bit15; // bit15 살아있을 때만 [AutoRun Resume] 버튼 표시
|
IsModeChangeActive = bit15; // bit15 살아있을 때만 [AutoRun Resume] 버튼 표시
|
||||||
if (bit15 && !_prevBit15 && !_isPopupOpen)
|
if (bit15 && !_prevBit15 && !_isPopupOpen)
|
||||||
{
|
{
|
||||||
@ -253,15 +252,14 @@ namespace ILSOS_PrismaticRD_PTOP.Views
|
|||||||
MessageUtil.ShowWarningToast("Resume 상태가 아닙니다.");
|
MessageUtil.ShowWarningToast("Resume 상태가 아닙니다.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// PC→PLC bit15(MODECHANGE) ON — resume run 신호 (한 사이클 완료 후 시퀀스가 OFF/해제)
|
// PC→PLC bit15(Weld_01 ReadyACK) ON — resume run 신호 (한 사이클 완료 후 시퀀스가 OFF/해제)
|
||||||
_Plc.WriteBit(eBitOutput.PC_MODE_CHANGE, true);
|
_Plc.WriteBit(eBitOutput.PC_WELD_READY_ACK, true);
|
||||||
_Plc.WriteBit(eBitOutput.PC_MODE_CHANGE_P, true);
|
|
||||||
// Auto 복귀 (ResumeMode=true → CheckInitCondition에서 핸드셰이크 스킵하고 업로드→용접)
|
// Auto 복귀 (ResumeMode=true → CheckInitCondition에서 핸드셰이크 스킵하고 업로드→용접)
|
||||||
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS, true);
|
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS, true);
|
||||||
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS_P, true);
|
_Plc.WriteBit(eBitOutput.PC_AUTO_STATUS_P, true);
|
||||||
Status.GetProcessingWeldingData().AutoRunStartTime = DateTime.Now;
|
Status.GetProcessingWeldingData().AutoRunStartTime = DateTime.Now;
|
||||||
RunSequenceAutoRun();
|
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 필요
|
// PLC 비트에 의한 AutoRun 실행의 경우, PLC 인터페이스 이후 AutoRun 필요
|
||||||
|
|||||||
@ -230,8 +230,9 @@ namespace WeldingCommon.Devices
|
|||||||
PLC_PAGE_CHANGE_REQ = 0x08,
|
PLC_PAGE_CHANGE_REQ = 0x08,
|
||||||
|
|
||||||
PLC_RMS_USED = 0x09,
|
PLC_RMS_USED = 0x09,
|
||||||
// 0x0A ~ 0x0F
|
// 0x0A ~ 0x0E
|
||||||
PLC_WELD_READY_REQ = 0x10,
|
PLC_WELD_READY_REQ = 0x0F, // 260621: Weld_01 Ready (PTOP 동기화)
|
||||||
|
PLC_WELD_TRIGGER_REQ = 0x10,
|
||||||
PLC_WELD_WAIT = 0x11,
|
PLC_WELD_WAIT = 0x11,
|
||||||
PLC_WELD_COMPLETE_ACK = 0x12,
|
PLC_WELD_COMPLETE_ACK = 0x12,
|
||||||
// 0x13 ~ 0x1D
|
// 0x13 ~ 0x1D
|
||||||
@ -266,8 +267,9 @@ namespace WeldingCommon.Devices
|
|||||||
PC_EMO_STATUS = 0x07,
|
PC_EMO_STATUS = 0x07,
|
||||||
PC_PAGE_CHANGE_COMPLETE = 0x08,
|
PC_PAGE_CHANGE_COMPLETE = 0x08,
|
||||||
PC_RECIPE_CHANGE_COMPLETE = 0x09, // 260618: PTOP enum과 동기화 (RestoreDeviceStatus가 common enum 사용)
|
PC_RECIPE_CHANGE_COMPLETE = 0x09, // 260618: PTOP enum과 동기화 (RestoreDeviceStatus가 common enum 사용)
|
||||||
// 0x0A ~ 0x0F
|
// 0x0A ~ 0x0E
|
||||||
PC_WELD_READY_ACK = 0x10,
|
PC_WELD_READY_ACK = 0x0F, // 260621: Weld_01 ReadyACK (PTOP 동기화)
|
||||||
|
PC_WELD_TRIGGER_ACK = 0x10,
|
||||||
PC_WELD_BUSY = 0x11,
|
PC_WELD_BUSY = 0x11,
|
||||||
PC_WELD_COMPLETE = 0x12,
|
PC_WELD_COMPLETE = 0x12,
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
보완항목 확정: 1=작업지시서, 2=(나)작업자 수동 RunWelding, 3=작업지시서, 4=작업지시서, 5=현행유지.
|
보완항목 확정: 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` 쓰기 스킵(에코 보존).
|
- **정지 보존(#1)**: `OnSeqActionStop`에서 `ResumeMode`면 `PC_PAGE_NO/RECIPE_NO=0` 쓰기 스킵(에코 보존).
|
||||||
- **확인 핸들러(#2-나)**: `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 재활성/롤백 안 함. 가변 용접은 작업자가 Manual에서 직접.
|
- **확인 핸들러(#2-나)**: `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 재활성/롤백 안 함. 가변 용접은 작업자가 Manual에서 직접.
|
||||||
- **핸드셰이크 스킵(#3)**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Flow 엣지).
|
- **핸드셰이크 스킵(#3)**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Flow 엣지).
|
||||||
@ -38,14 +38,24 @@
|
|||||||
- 버튼 **[AutoRun Resume]** = Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. 확인창 없이 즉시 재개.
|
- 버튼 **[AutoRun Resume]** = Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. 확인창 없이 즉시 재개.
|
||||||
- 재용접 중복은 **PLC가 레이저 차단**으로 합의(option2).
|
- 재용접 중복은 **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 협의**:
|
- **PLC 협의**:
|
||||||
- 출력 `PC_MODE_CHANGE`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (PLC 인식 타이밍과 합의 후 확정).
|
- 출력 `PC_WELD_READY_ACK`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (CSV 노트 "15bit page change 때 init 0"과 정합 — 위치 확정 필요).
|
||||||
- bit15 주소(M70515/M70615/M70015/M70115) 실맵 대조.
|
- bit15 발생 정책: CSV 노트상 **레시피 21·22(가변) 시 PLC가 ON** → 가변 페이지마다인지 레시피당 1회인지 세부 확인.
|
||||||
- bit15 발생 정책: 가변 페이지마다 vs 가변 레시피당 1회.
|
- 용접 핸드셰이크 Ready(0x0F)→Trigger(0x10) 2단계 프로토콜 — 기존 용접시작 로직 현장 동작 확인.
|
||||||
- 레시피 시트 "Pre **가변**" 표기가 PRE **가접** 오타인지 확인.
|
- 레시피 시트 "Pre **가변**" 표기가 PRE **가접** 오타인지 확인.
|
||||||
- 20~23 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응).
|
- 21~24 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응).
|
||||||
- 알람 타이밍: `device.Activate()`가 연결완료까지 동기인지/개시만인지 디바이스별 확인.
|
- 알람 타이밍: `device.Activate()`가 연결완료까지 동기인지/개시만인지 디바이스별 확인.
|
||||||
- 제품 1개 = Recipe×Page 사이클 예상 시나리오: `docs/분석/2026/06/21/121750_제품1개_recipe_page_사이클_예상시나리오.md`.
|
- 제품 1개 = Recipe×Page 사이클 예상 시나리오: `docs/분석/2026/06/21/121750_제품1개_recipe_page_사이클_예상시나리오.md`.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user