using AuroraPLC; using Hermes; using ILSOS_PrismaticGun.Process; using OpenCvSharp.Flann; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ILSOS_PrismaticGun.Device { partial class PLCControllerPrismaticGun { // 70600 PLC -> PC public enum eBitInput : int { PLC_LIVE_STATUS = 0X00, PLC_AUTO_STATUS, PLC_AUTO_REQ, PLC_MANUAL_REQ, PLC_LIGHT_ALARM_STATUS, PLC_HEAVY_ALARM_STATUS, PLC_DOOR_INTERLOCK, PLC_EMO_STATUS, PLC_PAGE_CHANGE_REQ, PLC_RMS_USED, PLC_USE_DISPLACEMENT_SENSOR, DRY_RUN, PLC_STAGE_A_LOAD_ENABLE, PLC_STAGE_A_UNLOAD_ENABLE, PLC_STAGE_B_LOAD_ENABLE, PLC_STAGE_B_UNLOAD_ENABLE, PLC_STAGE_A_LOAD_REQUEST, EMPTY_17, PLC_STAGE_A_UNLOAD_COMPLETE_ACK, PLC_STAGE_B_LOAD_REQUEST, EMPTY_20, PLC_STAGE_B_UNLOAD_COMPLETE_ACK, PLC_STAGE_A_UNLOAD_REQUEST_ACK, PLC_STAGE_B_UNLOAD_REQUEST_ACK, EMPTY_24, EMPTY_25, PLC_STAGE_A_ONLY_USE, PLC_STAGE_B_ONLY_USE, EMPTY_28, EMPTY_29, PLC_ALARM_RESET, EMPTY_31, EMPTY_32, EMPTY_33, EMPTY_34, EMPTY_35, EMPTY_36, PLC_RMS_PARAMETER_READ_REQUEST, EMPTY_38, EMPTY_39, EMPTY_40, EMPTY_41, PLC_STAGE_A_LOAD_COMPLETE_ACK, PLC_STAGE_B_LOAD_COMPLETE_ACK, PLC_STAGE_A_INBUFFER_EXIST_FALLET = 50, EMPTY_51, PLC_STAGE_B_INBUFFER_EXIST_FALLET = 75, EMPTY_76, EMPTY_99 } //70100 PC -> PLC public enum eBitOutput : int { PC_LIVE_STATUS = 0X00, PC_AUTO_STATUS, PC_AUTO_COMPLETE, PC_MANUAL_COMPLETE, PC_LIGHT_ALARM_STATUS, PC_HEAVY_ALARM_STATUS, EMPTY_06, EMPTY_07, PC_PAGE_CHANGE_COMPLETE, EMPTY_09, EMPTY_10, EMPTY_11, PC_STAGE_A_LOAD_ENABLE, PC_STAGE_A_UNLOAD_ENABLE, PC_STAGE_B_LOAD_ENABLE, PC_STAGE_B_UNLOAD_ENABLE, EMPTY_16, PC_STAGE_A_WELDING_BUSY, PC_STAGE_A_UNLOAD_COMPLETE, PC_STAGE_A_WORK_COMPLETE, PC_STAGE_B_WELDING_BUSY, PC_STAGE_B_UNLOAD_COMPLETE, PC_STAGE_B_WORK_COMPLETE, EMPTY_23, EMPTY_24, EMPTY_25, EMPTY_26, EMPTY_27, EMPTY_28, EMPTY_29, EMPTY_30, PC_STAGE_A_UNLOAD_REQUEST, PC_STAGE_B_UNLOAD_REQUEST, EMPTY_33, EMPTY_34, EMPTY_35, EMPTY_36, PC_RMS_PARAMETER_READ_REQUEST_ACK, EMPTY_38, EMPTY_39, EMPTY_40, EMPTY_41, PC_STAGE_A_LOAD_REQUEST_ACK, PC_STAGE_B_LOAD_REQUEST_ACK, PC_STAGE_A_LOAD_COMPLETE, PC_STAGE_B_LOAD_COMPLETE, EMPTY_46, EMPTY_47, EMPTY_48, EMPTY_49, EMPTY_50, EMPTY_51, EMPTY_52, EMPTY_53, EMPTY_54, EMPTY_55, EMPTY_56, EMPTY_57, EMPTY_58, EMPTY_59, EMPTY_60, EMPTY_61, EMPTY_62, EMPTY_63, EMPTY_64, EMPTY_65, EMPTY_66, EMPTY_67, EMPTY_68, EMPTY_69, EMPTY_70, EMPTY_71, EMPTY_72, EMPTY_73, EMPTY_74, EMPTY_75, EMPTY_76, EMPTY_77, EMPTY_78, EMPTY_79, EMPTY_80, EMPTY_81, EMPTY_82, EMPTY_83, EMPTY_84, EMPTY_85, EMPTY_86, EMPTY_87, EMPTY_88, EMPTY_89, EMPTY_90, EMPTY_91, EMPTY_92, EMPTY_93, EMPTY_94, EMPTY_95, EMPTY_96, EMPTY_97, EMPTY_98, EMPTY_99, } //70600 PLC -> PC public enum eWordInput : int { PLC_ERROR_CODE = 0X00, PLC_PAGE_NO, PLC_STEP_NO, EMPTY_03, EMPTY_04, EMPTY_05, EMPTY_06, EMPTY_07, EMPTY_08, EMPTY_09, USED_BITMASKING_EXIST_PALLET_IN_BUFFER, USED_BITMASKING_EXIST_PALLET, USED_BITMASKING_EXIST_PALLET_OUT_BUFFER, EMPTY_13, EMPTY_14, EMPTY_15, EMPTY_16, EMPTY_17, EMPTY_18, EMPTY_19, PLC_CELL_ID_STAGE_A_01, PLC_CELL_ID_STAGE_A_02, PLC_CELL_ID_STAGE_A_03, PLC_CELL_ID_STAGE_A_04, PLC_CELL_ID_STAGE_A_05, PLC_CELL_ID_STAGE_B_01, PLC_CELL_ID_STAGE_B_02, PLC_CELL_ID_STAGE_B_03, PLC_CELL_ID_STAGE_B_04, PLC_CELL_ID_STAGE_B_05, PLC_LOT_ID_01, PLC_LOT_ID_02, PLC_LOT_ID_03, PLC_LOT_ID_04, PLC_LOT_ID_05, PLC_LOT_ID_06, PLC_LOT_ID_07, PLC_LOT_ID_08, EMPTY_38, EMPTY_39, EMPTY_40, EMPTY_41, EMPTY_42, EMPTY_43, EMPTY_44, EMPTY_45, EMPTY_46, EMPTY_47, EMPTY_48, PLC_STAGE_A_CELL_NO, USED_BITMASKING_CELL_EXIST_STAGE_A, USED_BITMASKING_RECV_NG_STAGE_A, USED_REWORK_STAGE_A, // rework : 1(rework) / 0(none) USED_PROCESS_COMPLETE_STAGE_A, // processComplete : 1(용접하지 않고 배출) : 0(용접 후 배출) CELL_DATA_04, CELL_DATA_05, CELL_DATA_06, CELL_DATA_07, CELL_DATA_08, CELL_DATA_09, STAGE_A_MFC_N2, STAGE_A_HEIGHT_REF1, STAGE_A_HEIGHT_REF2, STAGE_A_HEIGHT_REF3, STAGE_A_HEIGHT_REF4, STAGE_A_HEIGHT_REF5, STAGE_A_HEIGHT1, STAGE_A_HEIGHT2, STAGE_A_HEIGHT3, STAGE_A_HEIGHT4, STAGE_A_HEIGHT5, CELL_DATA_21, CELL_DATA_22, CELL_DATA_23, PLC_STAGE_B_CELL_NO, USED_BITMASKING_CELL_EXIST_STAGE_B, USED_BITMASKING_RECV_NG_STAGE_B, USED_REWORK_STAGE_B, // rework : 1(rework) / 0(none) USED_PROCESS_COMPLETE_STAGE_B, // processComplete : 1(용접하지 않고 배출) : 0(용접 후 배출) CELL_DATA_29, CELL_DATA_30, CELL_DATA_31, CELL_DATA_32, CELL_DATA_33, CELL_DATA_34, STAGE_B_MFC_N2, STAGE_B_HEIGHT_REF1, STAGE_B_HEIGHT_REF2, STAGE_B_HEIGHT_REF3, STAGE_B_HEIGHT_REF4, STAGE_B_HEIGHT_REF5, STAGE_B_HEIGHT1, STAGE_B_HEIGHT2, STAGE_B_HEIGHT3, STAGE_B_HEIGHT4, STAGE_B_HEIGHT5, CELL_DATA_46, CELL_DATA_47, CELL_DATA_48, CELL_DATA_49, } //70100 PC -> PLC public enum eWordOutput : int { PC_ERROR_CODE = 0X00, PC_PAGE_NO, EMPTY_02, EMPTY_03, EMPTY_04, EMPTY_05, EMPTY_06, EMPTY_07, PC_WELD_OFFSET_X, EMPTY_09, PC_WELD_OFFSET_Y, EMPTY_11, PC_DISPLACEMENT1_MEASUREMENT, EMPTY_13, PC_DISPLACEMENT2_MEASUREMENT = 0X0E, EMPTY_15, EMPTY_16, EMPTY_17, EMPTY_18, EMPTY_19, PC_CELL_ID_STAGE_A_01, PC_CELL_ID_STAGE_A_02, PC_CELL_ID_STAGE_A_03, PC_CELL_ID_STAGE_A_04, PC_CELL_ID_STAGE_A_05, PC_CELL_ID_STAGE_B_01, PC_CELL_ID_STAGE_B_02, PC_CELL_ID_STAGE_B_03, PC_CELL_ID_STAGE_B_04, PC_CELL_ID_STAGE_B_05, PC_LOT_ID_01, PC_LOT_ID_02, PC_LOT_ID_03, PC_LOT_ID_04, PC_LOT_ID_05, PC_LOT_ID_06, PC_LOT_ID_07, PC_LOT_ID_08, EMPTY_38, EMPTY_39, EMPTY_40, EMPTY_41, EMPTY_42, EMPTY_43, EMPTY_44, EMPTY_45, EMPTY_46, EMPTY_47, EMPTY_48, STAGE_A_CELL_NO, //Stage A 영역 USED_BITMASKING_WORK_COMPLETE_STAGE_A, // WriteLaserWorkComplete USED_BITMASKING_CELL_NG_STAGE_A, // WriteCellJudgeNG CELL_DATA_02, CELL_DATA_03, CELL_DATA_04, CELL_DATA_05, CELL_DATA_06, CELL_DATA_07, CELL_DATA_08, CELL_DATA_09, USED_STAGE_A_N2_FLOWRATE, USED_STAGE_A_DISPLACEMENT_REF1, USED_STAGE_A_DISPLACEMENT_REF2, USED_STAGE_A_DISPLACEMENT_REF3, USED_STAGE_A_DISPLACEMENT_REF4, USED_STAGE_A_DISPLACEMENT_REF5, USED_STAGE_A_DISPLACEMENT_1, USED_STAGE_A_DISPLACEMENT_2, USED_STAGE_A_DISPLACEMENT_3, USED_STAGE_A_DISPLACEMENT_4, USED_STAGE_A_DISPLACEMENT_5, CELL_DATA_21, CELL_DATA_22, CELL_DATA_23, STAGE_B_CELL_NO, //Stage B 영역 USED_BITMASKING_WORK_COMPLETE_STAGE_B, // WriteLaserWorkComplete USED_BITMASKING_CELL_NG_STAGE_B, // WriteCellJudgeNG CELL_DATA_27, CELL_DATA_28, CELL_DATA_29, CELL_DATA_30, CELL_DATA_31, CELL_DATA_32, CELL_DATA_33, CELL_DATA_34, USED_STAGE_B_N2_FLOWRATE, USED_STAGE_B_DISPLACEMENT_REF1, USED_STAGE_B_DISPLACEMENT_REF2, USED_STAGE_B_DISPLACEMENT_REF3, USED_STAGE_B_DISPLACEMENT_REF4, USED_STAGE_B_DISPLACEMENT_REF5, USED_STAGE_B_DISPLACEMENT_1, USED_STAGE_B_DISPLACEMENT_2, USED_STAGE_B_DISPLACEMENT_3, USED_STAGE_B_DISPLACEMENT_4, USED_STAGE_B_DISPLACEMENT_5, CELL_DATA_46, CELL_DATA_47, CELL_DATA_48, CELL_DATA_49, //Stage A 영역 USED_STAGE_A_WELDING_N2_PURGE_FLOW = 100, USED_STAGE_A_WELDING_RECIPE_NO = 101, USED_STAGE_A_ZAXIS_FOCUS_DISTANCE_2W = 102, USED_STAGE_A_LINE_SPEED_2W = 104, USED_STAGE_A_CORNER_SPEED_2W = 106, USED_STAGE_A_LINE_POWER_CORE_2W = 108, USED_STAGE_A_LINE_POWER_RING_2W = 110, USED_STAGE_A_CORNER_POWER_CORE_2W = 112, USED_STAGE_A_CORNER_POWER_RING_2W = 114, USED_STAGE_A_RAMPING_POWER_START = 116, USED_STAGE_A_RAMPING_LENGTH_START_2W = 118, USED_STAGE_A_RAMPING_POWER_OVERPATH = 120, USED_STAGE_A_RAMPING_LENGTH_OVERPATH_2W = 122, //FDC USED_STAGE_A_FDC_LASER_POWER = 130, USED_STAGE_A_FDC_X_VELOCITY = 131, USED_STAGE_A_FDC_Y_VELOCITY = 132, USED_STAGE_A_FDC_X_LOADFACTOR = 133, USED_STAGE_A_FDC_Y_LOADFACTOR = 134, //Stage B 영역 USED_STAGE_B_WELDING_N2_PURGE_FLOW = 150, USED_STAGE_B_WELDING_RECIPE_NO = 151, USED_STAGE_B_ZAXIS_FOCUS_DISTANCE_2W = 152, USED_STAGE_B_LINE_SPEED_2W = 154, USED_STAGE_B_CORNER_SPEED_2W = 156, USED_STAGE_B_LINE_POWER_CORE_2W = 158, USED_STAGE_B_LINE_POWER_RING_2W = 160, USED_STAGE_B_CORNER_POWER_CORE_2W = 162, USED_STAGE_B_CORNER_POWER_RING_2W = 164, USED_STAGE_B_RAMPING_POWER_START = 166, USED_STAGE_B_RAMPING_LENGTH_START_2W = 168, USED_STAGE_B_RAMPING_POWER_OVERPATH = 170, USED_STAGE_B_RAMPING_LENGTH_OVERPATH_2W = 172, //FDC USED_STAGE_B_FDC_LASER_POWER = 180, USED_STAGE_B_FDC_X_VELOCITY = 181, USED_STAGE_B_FDC_Y_VELOCITY = 182, USED_STAGE_B_FDC_X_LOADFACTOR = 183, USED_STAGE_B_FDC_Y_LOADFACTOR = 184, } /// /// D70650.0 Cell [A] Exist -> 1: 용접 가능 (공운전 모드 1이어도 출사 x) /// D70675.0 Cell [B] Exist -> 1: 용접 가능(공운전 모드 1이어도 출사 x) /// /// ### 250604 추가 /// D70605.0 I_Lift_ZPallet Exist /// D70605.1 InBufferPallet Exist /// D70605.2 Loader Pallet Exist /// D70605.3 CapPressPallet Exist /// D70606.0 Pre_WeldPallet Exist /// D70606.1 Buffer_1Pallet Exist /// D70606.2 M_In_SHTPallet Exist /// D70606.3 /// D70607.0 M_OutSHTPallet Exist /// D70607.1 3D_InpsXPallet Exist /// D70607.2 3D_InpsYPallet Exist /// D70607.3 Hi_inspcPallet Exist /// D70608.0 X-ray_1 Pallet Exist /// D70608.1 X-ray_2 Pallet Exist /// D70608.2 Buffer_2Pallet Exist /// D70608.3 O_Lift_ZPallet Exist /// D70609.0 /// D70609.1 /// D70609.2 /// D70609.3 /// D70610.0 InGrip_APallet Exist /// D70610.1 InGrip_BPallet Exist /// D70610.2 InBuff_APallet Exist /// D70610.3 InBuff_BPallet Exist /// D70611.0 MainWd_APallet Exist /// D70611.1 MainWd_BPallet Exist /// D70611.2 OTGrip_APallet Exist /// D70611.3 OTGrip_BPallet Exist /// D70612.0 OTBuff_APallet Exist /// D70612.1 OTBuff_BPallet Exist /// /// D70156.2 Cell [A] Laser Work Complete(패스시에는On) 1: Comp 0: 미완료 /// D70163.0 Cell [A] Laser NG (OK, 패스시에는 OFF) 1: NG 0: OK /// D70163.3 Cell [B] Laser Work Complete(패스시에는 상시 On) 1: Comp 0: 미완료 /// D70178.1 Cell [B] Laser NG (OK, 패스시에는 OFF) 1: NG 0: OK /// /// #region Read Info From PLC public int CellJudgeNG(eStage stage) { if (stage is eStage.A) return ReadWord(eWordInput.USED_BITMASKING_RECV_NG_STAGE_A).data; // 651 else return ReadWord(eWordInput.USED_BITMASKING_RECV_NG_STAGE_B).data; // 676 } public bool ExistCell(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_BITMASKING_CELL_EXIST_STAGE_A, 0)); // 650 else return ReadWordToBit((eWordInput.USED_BITMASKING_CELL_EXIST_STAGE_B, 0)); // 675 } public bool ReworkCell(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_REWORK_STAGE_A, 0)); // 652 else return ReadWordToBit((eWordInput.USED_REWORK_STAGE_B, 0)); // 677 } public bool AlreadyWeldingCell(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_PROCESS_COMPLETE_STAGE_A, 0)); // 653 else return ReadWordToBit((eWordInput.USED_PROCESS_COMPLETE_STAGE_B, 0)); // 678 } public bool ExistPallet(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET, 0)); else return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET, 1)); } public bool ExistPalletInBuffer(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET_IN_BUFFER, 2)); else return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET_IN_BUFFER, 3)); } public bool ExistRealPalletInBuffer(eStage stage) { if (stage is eStage.A) return ReadBit(eBitInput.PLC_STAGE_A_INBUFFER_EXIST_FALLET).data; else return ReadBit(eBitInput.PLC_STAGE_B_INBUFFER_EXIST_FALLET).data; } public bool ExistPalletOutBuffer(eStage stage) { if (stage is eStage.A) return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET_OUT_BUFFER, 0)); else return ReadWordToBit((eWordInput.USED_BITMASKING_EXIST_PALLET_OUT_BUFFER, 1)); } #endregion #region Write Cell Info To PLC // 작업을 완료했다는 의미로 사용하는 데이터 public bool WriteLaserWorkComplete(eStage stage, bool complete) { if (stage is eStage.A) return WriteWordToBit((eWordOutput.USED_BITMASKING_WORK_COMPLETE_STAGE_A, 0), complete) == E1.OK; // 156.2 >> 150.0 else return WriteWordToBit((eWordOutput.USED_BITMASKING_WORK_COMPLETE_STAGE_B, 0), complete) == E1.OK; // 163.3 >> 175.0 } public bool WriteCellJudgeNG(eStage stage, int judge) { if (stage is eStage.A) return WriteWord(eWordOutput.USED_BITMASKING_CELL_NG_STAGE_A, (short)judge) == E1.OK; //163.0 >> 151.0 NG=1 else return WriteWord(eWordOutput.USED_BITMASKING_CELL_NG_STAGE_B, (short)judge) == E1.OK; //178.1 >> 176.0 NG=1 } //internal void WriteWeldingN2PurgeFlow(eStage stage, double weldingN2PurgeFlow) //{ // if (stage is eStage.A) WriteWord(eWordOutput.USED_STAGE_B_WELDING_N2_PURGE_FLOW, (short)(weldingN2PurgeFlow * Math.Pow(10, 2))); // else WriteWord(eWordOutput.USED_STAGE_B_WELDING_N2_PURGE_FLOW, (short)(weldingN2PurgeFlow * Math.Pow(10, 2))); //} //internal void WriteZAxisFocusDistance(eStage stage, double zAxisFocusDistance) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_ZAXIS_FOCUS_DISTANCE_2W, (int)(zAxisFocusDistance * Math.Pow(10, 3))); // else WriteDWord(eWordOutput.USED_STAGE_A_ZAXIS_FOCUS_DISTANCE_2W, (int)(zAxisFocusDistance * Math.Pow(10, 3))); //} //internal void WriteLineSpeed(eStage stage, double lineSpeed) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_LINE_SPEED_2W, (int)(lineSpeed * Math.Pow(10, 1))); // else WriteDWord(eWordOutput.USED_STAGE_B_LINE_SPEED_2W, (int)(lineSpeed * Math.Pow(10, 1))); //} //internal void WriteCornerSpeed(eStage stage, double cornerSpeed) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_CORNER_SPEED_2W, (int)(cornerSpeed * Math.Pow(10, 1))); // else WriteDWord(eWordOutput.USED_STAGE_B_CORNER_SPEED_2W, (int)(cornerSpeed * Math.Pow(10, 1))); //} //internal void WriteLinePowerCore(eStage stage, double linePowerCore) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_LINE_POWER_CORE_2W, (int)(linePowerCore * Math.Pow(10, 2))); // else WriteDWord(eWordOutput.USED_STAGE_B_LINE_POWER_CORE_2W, (int)(linePowerCore * Math.Pow(10, 2))); //} //internal void WriteLinePowerRing(eStage stage, double linePowerRing) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_LINE_POWER_RING_2W, (int)(linePowerRing * Math.Pow(10, 2))); // else WriteDWord(eWordOutput.USED_STAGE_B_LINE_POWER_RING_2W, (int)(linePowerRing * Math.Pow(10, 2))); //} //internal void WriteCornerPowerCore(eStage stage, double cornerPowerCore) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_CORNER_POWER_CORE_2W, (int)(cornerPowerCore * Math.Pow(10, 2))); // else WriteDWord(eWordOutput.USED_STAGE_B_CORNER_POWER_CORE_2W, (int)(cornerPowerCore * Math.Pow(10, 2))); //} //internal void WriteCornerPowerRing(eStage stage, double cornerPowerRing) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_CORNER_POWER_RING_2W, (int)(cornerPowerRing * Math.Pow(10, 2))); // else WriteDWord(eWordOutput.USED_STAGE_B_CORNER_POWER_RING_2W, (int)(cornerPowerRing * Math.Pow(10, 2))); //} //internal void WriteRampingPowerStart(eStage stage, int rampingPowerStart) //{ // if (stage is eStage.A) WriteWord(eWordOutput.USED_STAGE_B_RAMPING_POWER_START, (short)(rampingPowerStart)); // else WriteWord(eWordOutput.USED_STAGE_B_RAMPING_POWER_START, (short)(rampingPowerStart)); //} //internal void WriteRampingLengthStart(eStage stage, double rampingLengthStart) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_RAMPING_LENGTH_START_2W, (int)(rampingLengthStart * Math.Pow(10, 3))); // else WriteDWord(eWordOutput.USED_STAGE_B_RAMPING_LENGTH_START_2W, (int)(rampingLengthStart * Math.Pow(10, 3))); //} //internal void WriteRampingPowerOverPath(eStage stage, int rampingPowerOverPath) //{ // if (stage is eStage.A) WriteWord(eWordOutput.USED_STAGE_A_RAMPING_POWER_OVERPATH, (short)(rampingPowerOverPath)); // else WriteWord(eWordOutput.USED_STAGE_B_RAMPING_POWER_OVERPATH, (short)(rampingPowerOverPath)); //} //internal void WriteRampingLengthOverPath(eStage stage, double rampingLengthOverPath) //{ // if (stage is eStage.A) WriteDWord(eWordOutput.USED_STAGE_A_RAMPING_LENGTH_OVERPATH_2W, (int)(rampingLengthOverPath * Math.Pow(10, 3))); // else WriteDWord(eWordOutput.USED_STAGE_B_RAMPING_LENGTH_OVERPATH_2W, (int)(rampingLengthOverPath * Math.Pow(10, 3))); //} internal int CellNo(eStage stage) { if (stage is eStage.A) return ReadWord(eWordInput.PLC_STAGE_A_CELL_NO).data; else return ReadWord(eWordInput.PLC_STAGE_B_CELL_NO).data; } internal void WriteCellNo(eStage stage, int CellNo) { if (stage is eStage.A) WriteWord(eWordOutput.STAGE_A_CELL_NO, (short)CellNo); else WriteWord(eWordOutput.STAGE_B_CELL_NO, (short)CellNo); } internal string CellId(eStage stage) { StringBuilder sb = new StringBuilder(); if (stage is eStage.A){ var item = ReadWords(eWordInput.PLC_CELL_ID_STAGE_A_01, eWordInput.PLC_CELL_ID_STAGE_A_05); foreach(var word in item.datas) sb.Append(Conv_ReadData(PLCBase.eDataType.Type_Ascii, word, 0, false, false)); } else{ var item = ReadWords(eWordInput.PLC_CELL_ID_STAGE_B_01, eWordInput.PLC_CELL_ID_STAGE_B_05); foreach (var word in item.datas) sb.Append(Conv_ReadData(PLCBase.eDataType.Type_Ascii, word, 0, false, false)); } return sb.ToString(); } internal void WriteCellId(eStage stage, string cellId) { // PC_CELL_ID_STAGE_A_01~10 : 10 words = 20 chars (1 word = 2 ASCII chars) // 문자열이 짧으면 WriteWordBlockForAscii 내부에서 \0으로 자동 패딩됨 var strData = new[] { cellId }; if (stage is eStage.A) base.WriteWordBlockForAscii( (int)eWordOutput.PC_CELL_ID_STAGE_A_01, eWordOutput.PC_CELL_ID_STAGE_A_05 - eWordOutput.PC_CELL_ID_STAGE_A_01 + 1, ref strData, ePLCDevice.D); else base.WriteWordBlockForAscii( (int)eWordOutput.PC_CELL_ID_STAGE_B_01, eWordOutput.PC_CELL_ID_STAGE_B_05 - eWordOutput.PC_CELL_ID_STAGE_B_01 + 1, ref strData, ePLCDevice.D); } internal string LotId() { StringBuilder sb = new StringBuilder(); var item = ReadWords(eWordInput.PLC_LOT_ID_01, eWordInput.PLC_LOT_ID_08); foreach (var word in item.datas) sb.Append(Conv_ReadData(PLCBase.eDataType.Type_Ascii, word, 0, false, false)); return sb.ToString(); } internal void WriteLotId(string LotId) { // PC_CELL_ID_STAGE_A_01~10 : 10 words = 20 chars (1 word = 2 ASCII chars) // 문자열이 짧으면 WriteWordBlockForAscii 내부에서 \0으로 자동 패딩됨 var strData = new[] { LotId }; base.WriteWordBlockForAscii( (int)eWordOutput.PC_LOT_ID_01, eWordOutput.PC_LOT_ID_08 - eWordOutput.PC_LOT_ID_01 + 1, ref strData, ePLCDevice.D); } #endregion } }