2026-06-05 13:44:39 +09:00

687 lines
25 KiB
C#

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,
}
/// <summary>
/// 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
/// </summary>
///
#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
}
}